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.cache.CacheRegistryItem;
020 import com.liferay.portal.kernel.cache.CacheRegistryUtil;
021 import com.liferay.portal.kernel.exception.PortalException;
022 import com.liferay.portal.kernel.log.Log;
023 import com.liferay.portal.kernel.log.LogFactoryUtil;
024 import com.liferay.portal.kernel.repository.InvalidRepositoryIdException;
025 import com.liferay.portal.kernel.repository.LocalRepository;
026 import com.liferay.portal.kernel.repository.RepositoryException;
027 import com.liferay.portal.kernel.repository.RepositoryFactoryUtil;
028 import com.liferay.portal.kernel.systemevent.SystemEvent;
029 import com.liferay.portal.kernel.util.UnicodeProperties;
030 import com.liferay.portal.kernel.util.Validator;
031 import com.liferay.portal.model.Group;
032 import com.liferay.portal.model.Repository;
033 import com.liferay.portal.model.RepositoryEntry;
034 import com.liferay.portal.model.SystemEventConstants;
035 import com.liferay.portal.model.User;
036 import com.liferay.portal.service.ServiceContext;
037 import com.liferay.portal.service.base.RepositoryLocalServiceBaseImpl;
038 import com.liferay.portal.util.RepositoryUtil;
039 import com.liferay.portlet.documentlibrary.RepositoryNameException;
040 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
041 import com.liferay.portlet.documentlibrary.model.DLFileVersion;
042 import com.liferay.portlet.documentlibrary.model.DLFolder;
043
044 import java.util.ArrayList;
045 import java.util.Date;
046 import java.util.List;
047 import java.util.Map;
048 import java.util.concurrent.ConcurrentHashMap;
049
050
053 public class RepositoryLocalServiceImpl
054 extends RepositoryLocalServiceBaseImpl implements CacheRegistryItem {
055
056 @Override
057 public Repository addRepository(
058 long userId, long groupId, long classNameId, long parentFolderId,
059 String name, String description, String portletId,
060 UnicodeProperties typeSettingsProperties, boolean hidden,
061 ServiceContext serviceContext)
062 throws PortalException {
063
064 User user = userPersistence.findByPrimaryKey(userId);
065 Date now = new Date();
066
067 long repositoryId = counterLocalService.increment();
068
069 Repository repository = repositoryPersistence.create(repositoryId);
070
071 repository.setUuid(serviceContext.getUuid());
072 repository.setGroupId(groupId);
073 repository.setCompanyId(user.getCompanyId());
074 repository.setUserId(user.getUserId());
075 repository.setUserName(user.getFullName());
076 repository.setCreateDate(now);
077 repository.setModifiedDate(now);
078 repository.setClassNameId(classNameId);
079 repository.setName(name);
080 repository.setDescription(description);
081 repository.setPortletId(portletId);
082 repository.setTypeSettingsProperties(typeSettingsProperties);
083 repository.setDlFolderId(
084 getDLFolderId(
085 user, groupId, repositoryId, parentFolderId, name, description,
086 hidden, serviceContext));
087
088 repositoryPersistence.update(repository);
089
090 try {
091 RepositoryFactoryUtil.createRepository(repositoryId);
092 }
093 catch (Exception e) {
094 if (_log.isWarnEnabled()) {
095 _log.warn(e, e);
096 }
097
098 throw new InvalidRepositoryException(e);
099 }
100
101 return repository;
102 }
103
104
109 @Deprecated
110 @Override
111 public Repository addRepository(
112 long userId, long groupId, long classNameId, long parentFolderId,
113 String name, String description, String portletId,
114 UnicodeProperties typeSettingsProperties,
115 ServiceContext serviceContext)
116 throws PortalException {
117
118 return addRepository(
119 userId, groupId, classNameId, parentFolderId, name, description,
120 portletId, typeSettingsProperties, false, serviceContext);
121 }
122
123 @Override
124 public void afterPropertiesSet() {
125 super.afterPropertiesSet();
126
127 CacheRegistryUtil.register(this);
128 }
129
130 @Override
131 public void checkRepository(long repositoryId) {
132 Group group = groupPersistence.fetchByPrimaryKey(repositoryId);
133
134 if (group != null) {
135 return;
136 }
137
138 try {
139 repositoryPersistence.findByPrimaryKey(repositoryId);
140 }
141 catch (NoSuchRepositoryException nsre) {
142 throw new RepositoryException(nsre.getMessage());
143 }
144 }
145
146 @Override
147 public void deleteRepositories(long groupId) {
148 List<Repository> repositories = repositoryPersistence.findByGroupId(
149 groupId);
150
151 for (Repository repository : repositories) {
152 deleteRepository(repository.getRepositoryId());
153 }
154 }
155
156 @Override
157 public Repository deleteRepository(long repositoryId) {
158 Repository repository = repositoryPersistence.fetchByPrimaryKey(
159 repositoryId);
160
161 if (repository != null) {
162 repositoryLocalService.deleteRepository(repository);
163 }
164
165 _localRepositoriesByRepositoryId.remove(repositoryId);
166
167 _repositoriesByRepositoryId.remove(repositoryId);
168
169 return repository;
170 }
171
172 @Override
173 @SystemEvent(
174 action = SystemEventConstants.ACTION_SKIP,
175 type = SystemEventConstants.TYPE_DELETE)
176 public Repository deleteRepository(Repository repository) {
177 expandoValueLocalService.deleteValues(
178 Repository.class.getName(), repository.getRepositoryId());
179
180 DLFolder dlFolder = dlFolderLocalService.fetchDLFolder(
181 repository.getDlFolderId());
182
183 if (dlFolder != null) {
184 dlFolderLocalService.deleteDLFolder(dlFolder);
185 }
186
187 repositoryPersistence.remove(repository);
188
189 repositoryEntryPersistence.removeByRepositoryId(
190 repository.getRepositoryId());
191
192 return repository;
193 }
194
195 @Override
196 public Repository fetchRepository(long groupId, String portletId) {
197 return fetchRepository(groupId, portletId, portletId);
198 }
199
200 @Override
201 public Repository fetchRepository(
202 long groupId, String name, String portletId) {
203
204 return repositoryPersistence.fetchByG_N_P(groupId, name, portletId);
205 }
206
207 @Override
208 public List<LocalRepository> getGroupLocalRepositoryImpl(long groupId)
209 throws PortalException {
210
211 List<Repository> repositories = repositoryPersistence.findByGroupId(
212 groupId);
213
214 List<LocalRepository> localRepositories =
215 new ArrayList<LocalRepository>(repositories.size() + 1);
216
217 for (Repository repository : repositories) {
218 localRepositories.add(
219 getLocalRepositoryImpl(repository.getRepositoryId()));
220 }
221
222 localRepositories.add(getLocalRepositoryImpl(groupId));
223
224 return localRepositories;
225 }
226
227 @Override
228 public LocalRepository getLocalRepositoryImpl(long repositoryId)
229 throws PortalException {
230
231 LocalRepository localRepositoryImpl =
232 _localRepositoriesByRepositoryId.get(repositoryId);
233
234 if (localRepositoryImpl != null) {
235 return localRepositoryImpl;
236 }
237
238 localRepositoryImpl = RepositoryFactoryUtil.createLocalRepository(
239 repositoryId);
240
241 checkRepository(repositoryId);
242
243 _localRepositoriesByRepositoryId.put(repositoryId, localRepositoryImpl);
244
245 return localRepositoryImpl;
246 }
247
248 @Override
249 public LocalRepository getLocalRepositoryImpl(
250 long folderId, long fileEntryId, long fileVersionId)
251 throws PortalException {
252
253 long repositoryId = getRepositoryId(
254 folderId, fileEntryId, fileVersionId);
255
256 return getLocalRepositoryImpl(repositoryId);
257 }
258
259 @Override
260 public String getRegistryName() {
261 return RepositoryLocalServiceImpl.class.getName();
262 }
263
264 @Override
265 public Repository getRepository(long groupId, String portletId)
266 throws PortalException {
267
268 return getRepository(groupId, portletId, portletId);
269 }
270
271 @Override
272 public Repository getRepository(long groupId, String name, String portletId)
273 throws PortalException {
274
275 return repositoryPersistence.findByG_N_P(groupId, name, portletId);
276 }
277
278 @Override
279 public com.liferay.portal.kernel.repository.Repository getRepositoryImpl(
280 long repositoryId)
281 throws PortalException {
282
283 com.liferay.portal.kernel.repository.Repository repositoryImpl =
284 _repositoriesByRepositoryId.get(repositoryId);
285
286 if (repositoryImpl != null) {
287 return repositoryImpl;
288 }
289
290 repositoryImpl = RepositoryFactoryUtil.createRepository(repositoryId);
291
292 checkRepository(repositoryId);
293
294 _repositoriesByRepositoryId.put(repositoryId, repositoryImpl);
295
296 return repositoryImpl;
297 }
298
299 @Override
300 public com.liferay.portal.kernel.repository.Repository getRepositoryImpl(
301 long folderId, long fileEntryId, long fileVersionId)
302 throws PortalException {
303
304 long repositoryId = getRepositoryId(
305 folderId, fileEntryId, fileVersionId);
306
307 return getRepositoryImpl(repositoryId);
308 }
309
310 @Override
311 public UnicodeProperties getTypeSettingsProperties(long repositoryId)
312 throws PortalException {
313
314 Repository repository = repositoryPersistence.findByPrimaryKey(
315 repositoryId);
316
317 return repository.getTypeSettingsProperties();
318 }
319
320 @Override
321 public void invalidate() {
322 _localRepositoriesByRepositoryId.clear();
323 _repositoriesByRepositoryId.clear();
324 }
325
326 @Override
327 public void updateRepository(
328 long repositoryId, String name, String description)
329 throws PortalException {
330
331 Date now = new Date();
332
333 Repository repository = repositoryPersistence.findByPrimaryKey(
334 repositoryId);
335
336 repository.setModifiedDate(now);
337 repository.setName(name);
338 repository.setDescription(description);
339
340 repositoryPersistence.update(repository);
341
342 DLFolder dlFolder = dlFolderPersistence.findByPrimaryKey(
343 repository.getDlFolderId());
344
345 dlFolder.setModifiedDate(now);
346 dlFolder.setName(name);
347 dlFolder.setDescription(description);
348
349 dlFolderPersistence.update(dlFolder);
350 }
351
352 protected long getDLFolderId(
353 User user, long groupId, long repositoryId, long parentFolderId,
354 String name, String description, boolean hidden,
355 ServiceContext serviceContext)
356 throws PortalException {
357
358 if (Validator.isNull(name)) {
359 throw new RepositoryNameException();
360 }
361
362 DLFolder dlFolder = dlFolderLocalService.addFolder(
363 user.getUserId(), groupId, repositoryId, true, parentFolderId, name,
364 description, hidden, serviceContext);
365
366 return dlFolder.getFolderId();
367 }
368
369 protected long getExternalRepositoryId(
370 long folderId, long fileEntryId, long fileVersionId) {
371
372 long repositoryEntryId = RepositoryUtil.getRepositoryEntryId(
373 folderId, fileEntryId, fileVersionId);
374
375 RepositoryEntry repositoryEntry =
376 repositoryEntryLocalService.fetchRepositoryEntry(repositoryEntryId);
377
378 if (repositoryEntry == null) {
379 return 0;
380 }
381
382 return repositoryEntry.getRepositoryId();
383 }
384
385 protected long getInternalRepositoryId(
386 long folderId, long fileEntryId, long fileVersionId) {
387
388 long repositoryId = 0;
389
390 if (folderId != 0) {
391 DLFolder dlFolder = dlFolderLocalService.fetchDLFolder(folderId);
392
393 if (dlFolder != null) {
394 if (dlFolder.isMountPoint()) {
395 repositoryId = dlFolder.getGroupId();
396 }
397 else {
398 repositoryId = dlFolder.getRepositoryId();
399 }
400 }
401 }
402 else if (fileEntryId != 0) {
403 DLFileEntry dlFileEntry = dlFileEntryLocalService.fetchDLFileEntry(
404 fileEntryId);
405
406 if (dlFileEntry != null) {
407 repositoryId = dlFileEntry.getRepositoryId();
408 }
409 }
410 else if (fileVersionId != 0) {
411 DLFileVersion dlFileVersion =
412 dlFileVersionLocalService.fetchDLFileVersion(fileVersionId);
413
414 if (dlFileVersion != null) {
415 repositoryId = dlFileVersion.getRepositoryId();
416 }
417 }
418 else {
419 throw new InvalidRepositoryIdException(
420 "Missing a valid ID for folder, file entry, or file " +
421 "version");
422 }
423
424 return repositoryId;
425 }
426
427 protected long getRepositoryId(
428 long folderId, long fileEntryId, long fileVersionId) {
429
430 long repositoryId = getInternalRepositoryId(
431 folderId, fileEntryId, fileVersionId);
432
433 if (repositoryId != 0) {
434 return repositoryId;
435 }
436
437 repositoryId = getExternalRepositoryId(
438 folderId, fileEntryId, fileVersionId);
439
440 if (repositoryId == 0) {
441 throw new InvalidRepositoryIdException(
442 String.format(
443 "No folder or repository entry found with folder ID %s",
444 folderId));
445 }
446
447 return repositoryId;
448 }
449
450 private static final Log _log = LogFactoryUtil.getLog(
451 RepositoryLocalServiceImpl.class);
452
453 private final Map<Long, LocalRepository> _localRepositoriesByRepositoryId =
454 new ConcurrentHashMap<Long, LocalRepository>();
455 private final Map<Long, com.liferay.portal.kernel.repository.Repository>
456 _repositoriesByRepositoryId = new ConcurrentHashMap
457 <Long, com.liferay.portal.kernel.repository.Repository>();
458
459 }