001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.InvalidRepositoryException;
018 import com.liferay.portal.NoSuchRepositoryException;
019 import com.liferay.portal.kernel.bean.BeanReference;
020 import com.liferay.portal.kernel.exception.PortalException;
021 import com.liferay.portal.kernel.log.Log;
022 import com.liferay.portal.kernel.log.LogFactoryUtil;
023 import com.liferay.portal.kernel.repository.InvalidRepositoryIdException;
024 import com.liferay.portal.kernel.repository.LocalRepository;
025 import com.liferay.portal.kernel.repository.RepositoryFactoryUtil;
026 import com.liferay.portal.kernel.repository.RepositoryProvider;
027 import com.liferay.portal.kernel.repository.capabilities.RepositoryEventTriggerCapability;
028 import com.liferay.portal.kernel.repository.event.RepositoryEventType;
029 import com.liferay.portal.kernel.systemevent.SystemEvent;
030 import com.liferay.portal.kernel.util.UnicodeProperties;
031 import com.liferay.portal.kernel.util.Validator;
032 import com.liferay.portal.model.Group;
033 import com.liferay.portal.model.Repository;
034 import com.liferay.portal.model.RepositoryEntry;
035 import com.liferay.portal.model.SystemEventConstants;
036 import com.liferay.portal.model.User;
037 import com.liferay.portal.service.ServiceContext;
038 import com.liferay.portal.service.base.RepositoryLocalServiceBaseImpl;
039 import com.liferay.portal.util.RepositoryUtil;
040 import com.liferay.portlet.documentlibrary.RepositoryNameException;
041 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
042 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
043 import com.liferay.portlet.documentlibrary.model.DLFileVersion;
044 import com.liferay.portlet.documentlibrary.model.DLFolder;
045
046 import java.util.List;
047
048
051 public class RepositoryLocalServiceImpl extends RepositoryLocalServiceBaseImpl {
052
053 @Override
054 public Repository addRepository(
055 long userId, long groupId, long classNameId, long parentFolderId,
056 String name, String description, String portletId,
057 UnicodeProperties typeSettingsProperties, boolean hidden,
058 ServiceContext serviceContext)
059 throws PortalException {
060
061 User user = userPersistence.findByPrimaryKey(userId);
062
063 long repositoryId = counterLocalService.increment();
064
065 Repository repository = repositoryPersistence.create(repositoryId);
066
067 repository.setUuid(serviceContext.getUuid());
068 repository.setGroupId(groupId);
069 repository.setCompanyId(user.getCompanyId());
070 repository.setUserId(user.getUserId());
071 repository.setUserName(user.getFullName());
072 repository.setClassNameId(classNameId);
073 repository.setName(name);
074 repository.setDescription(description);
075 repository.setPortletId(portletId);
076 repository.setTypeSettingsProperties(typeSettingsProperties);
077 repository.setDlFolderId(
078 getDLFolderId(
079 user, groupId, repositoryId, parentFolderId, name, description,
080 hidden, serviceContext));
081
082 repositoryPersistence.update(repository);
083
084 try {
085 RepositoryFactoryUtil.createRepository(repositoryId);
086 }
087 catch (Exception e) {
088 if (_log.isWarnEnabled()) {
089 _log.warn(e, e);
090 }
091
092 throw new InvalidRepositoryException(e);
093 }
094
095 return repository;
096 }
097
098
103 @Deprecated
104 @Override
105 public Repository addRepository(
106 long userId, long groupId, long classNameId, long parentFolderId,
107 String name, String description, String portletId,
108 UnicodeProperties typeSettingsProperties,
109 ServiceContext serviceContext)
110 throws PortalException {
111
112 return addRepository(
113 userId, groupId, classNameId, parentFolderId, name, description,
114 portletId, typeSettingsProperties, false, serviceContext);
115 }
116
117 @Override
118 public void checkRepository(long repositoryId) {
119 Group group = groupPersistence.fetchByPrimaryKey(repositoryId);
120
121 if (group != null) {
122 return;
123 }
124
125 try {
126 repositoryPersistence.findByPrimaryKey(repositoryId);
127 }
128 catch (NoSuchRepositoryException nsre) {
129 throw new InvalidRepositoryIdException(nsre.getMessage());
130 }
131 }
132
133 @Override
134 public void deleteRepositories(long groupId) throws PortalException {
135 List<Repository> repositories = repositoryPersistence.findByGroupId(
136 groupId);
137
138 for (Repository repository : repositories) {
139 deleteRepository(repository.getRepositoryId());
140 }
141 }
142
143 @Override
144 public Repository deleteRepository(long repositoryId)
145 throws PortalException {
146
147 Repository repository = repositoryPersistence.fetchByPrimaryKey(
148 repositoryId);
149
150 if (repository == null) {
151 return null;
152 }
153
154 LocalRepository localRepository = repositoryProvider.getLocalRepository(
155 repositoryId);
156
157 if (localRepository.isCapabilityProvided(
158 RepositoryEventTriggerCapability.class)) {
159
160 RepositoryEventTriggerCapability repositoryEventTriggerCapability =
161 localRepository.getCapability(
162 RepositoryEventTriggerCapability.class);
163
164 repositoryEventTriggerCapability.trigger(
165 RepositoryEventType.Delete.class, LocalRepository.class,
166 localRepository);
167 }
168
169 return repositoryLocalService.deleteRepository(repository);
170 }
171
172 @Override
173 @SystemEvent(
174 action = SystemEventConstants.ACTION_SKIP,
175 type = SystemEventConstants.TYPE_DELETE
176 )
177 public Repository deleteRepository(Repository repository) {
178 expandoValueLocalService.deleteValues(
179 Repository.class.getName(), repository.getRepositoryId());
180
181 DLFolder dlFolder = dlFolderLocalService.fetchDLFolder(
182 repository.getDlFolderId());
183
184 if (dlFolder != null) {
185 dlFolderLocalService.deleteDLFolder(dlFolder);
186 }
187
188 repositoryPersistence.remove(repository);
189
190 repositoryEntryPersistence.removeByRepositoryId(
191 repository.getRepositoryId());
192
193 return repository;
194 }
195
196 @Override
197 public Repository fetchRepository(long groupId, String portletId) {
198 return fetchRepository(groupId, portletId, portletId);
199 }
200
201 @Override
202 public Repository fetchRepository(
203 long groupId, String name, String portletId) {
204
205 return repositoryPersistence.fetchByG_N_P(groupId, name, portletId);
206 }
207
208 @Override
209 public List<Repository> getGroupRepositories(long groupId) {
210 return repositoryPersistence.findByGroupId(groupId);
211 }
212
213 @Override
214 public Repository getRepository(long groupId, String portletId)
215 throws PortalException {
216
217 return getRepository(groupId, portletId, portletId);
218 }
219
220 @Override
221 public Repository getRepository(long groupId, String name, String portletId)
222 throws PortalException {
223
224 return repositoryPersistence.findByG_N_P(groupId, name, portletId);
225 }
226
227 @Override
228 public UnicodeProperties getTypeSettingsProperties(long repositoryId)
229 throws PortalException {
230
231 Repository repository = repositoryPersistence.findByPrimaryKey(
232 repositoryId);
233
234 return repository.getTypeSettingsProperties();
235 }
236
237 @Override
238 public void updateRepository(
239 long repositoryId, String name, String description)
240 throws PortalException {
241
242 Repository repository = repositoryPersistence.findByPrimaryKey(
243 repositoryId);
244
245 repository.setName(name);
246 repository.setDescription(description);
247
248 repositoryPersistence.update(repository);
249
250 DLFolder dlFolder = dlFolderPersistence.findByPrimaryKey(
251 repository.getDlFolderId());
252
253 dlFolder.setName(name);
254 dlFolder.setDescription(description);
255
256 dlFolderPersistence.update(dlFolder);
257 }
258
259 @Override
260 public void updateRepository(
261 long repositoryId, UnicodeProperties typeSettingsProperties)
262 throws PortalException {
263
264 Repository repository = repositoryPersistence.findByPrimaryKey(
265 repositoryId);
266
267 repository.setTypeSettingsProperties(typeSettingsProperties);
268
269 repositoryPersistence.update(repository);
270 }
271
272 protected long getDLFolderId(
273 User user, long groupId, long repositoryId, long parentFolderId,
274 String name, String description, boolean hidden,
275 ServiceContext serviceContext)
276 throws PortalException {
277
278 if (Validator.isNull(name)) {
279 throw new RepositoryNameException();
280 }
281
282 DLFolder dlFolder = dlFolderLocalService.addFolder(
283 user.getUserId(), groupId, repositoryId, true, parentFolderId, name,
284 description, hidden, serviceContext);
285
286 return dlFolder.getFolderId();
287 }
288
289 protected long getExternalRepositoryId(
290 long folderId, long fileEntryId, long fileVersionId) {
291
292 long repositoryEntryId = RepositoryUtil.getRepositoryEntryId(
293 folderId, fileEntryId, fileVersionId);
294
295 RepositoryEntry repositoryEntry =
296 repositoryEntryLocalService.fetchRepositoryEntry(repositoryEntryId);
297
298 if (repositoryEntry == null) {
299 return 0;
300 }
301
302 return repositoryEntry.getRepositoryId();
303 }
304
305 protected long getInternalRepositoryId(
306 long folderId, long fileEntryId, long fileVersionId,
307 long fileShortcutId) {
308
309 long repositoryId = 0;
310
311 if (folderId != 0) {
312 DLFolder dlFolder = dlFolderLocalService.fetchDLFolder(folderId);
313
314 if (dlFolder != null) {
315 if (dlFolder.isMountPoint()) {
316 repositoryId = dlFolder.getGroupId();
317 }
318 else {
319 repositoryId = dlFolder.getRepositoryId();
320 }
321 }
322 }
323 else if (fileEntryId != 0) {
324 DLFileEntry dlFileEntry = dlFileEntryLocalService.fetchDLFileEntry(
325 fileEntryId);
326
327 if (dlFileEntry != null) {
328 repositoryId = dlFileEntry.getRepositoryId();
329 }
330 }
331 else if (fileVersionId != 0) {
332 DLFileVersion dlFileVersion =
333 dlFileVersionLocalService.fetchDLFileVersion(fileVersionId);
334
335 if (dlFileVersion != null) {
336 repositoryId = dlFileVersion.getRepositoryId();
337 }
338 }
339 else if (fileShortcutId != 0) {
340 DLFileShortcut dlFileShortcut =
341 dlFileShortcutLocalService.fetchDLFileShortcut(fileShortcutId);
342
343 if (dlFileShortcut != null) {
344 repositoryId = dlFileShortcut.getRepositoryId();
345 }
346 }
347 else {
348 throw new InvalidRepositoryIdException(
349 "Missing a valid ID for folder, file entry, or file " +
350 "version");
351 }
352
353 return repositoryId;
354 }
355
356 protected long getRepositoryId(
357 long folderId, long fileEntryId, long fileVersionId,
358 long fileShortcutId) {
359
360 long repositoryId = getInternalRepositoryId(
361 folderId, fileEntryId, fileVersionId, fileShortcutId);
362
363 if (repositoryId != 0) {
364 return repositoryId;
365 }
366
367 if (fileShortcutId != 0) {
368 throw new IllegalArgumentException();
369 }
370
371 repositoryId = getExternalRepositoryId(
372 folderId, fileEntryId, fileVersionId);
373
374 if (repositoryId == 0) {
375 throw new InvalidRepositoryIdException(
376 String.format(
377 "No folder or repository entry found with folder ID %s",
378 folderId));
379 }
380
381 return repositoryId;
382 }
383
384 @BeanReference(type = RepositoryProvider.class)
385 protected RepositoryProvider repositoryProvider;
386
387 private static final Log _log = LogFactoryUtil.getLog(
388 RepositoryLocalServiceImpl.class);
389
390 }