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