1
14
15 package com.liferay.portlet.imagegallery.service.impl;
16
17 import com.liferay.portal.kernel.exception.PortalException;
18 import com.liferay.portal.kernel.exception.SystemException;
19 import com.liferay.portal.kernel.search.Indexer;
20 import com.liferay.portal.kernel.search.IndexerRegistryUtil;
21 import com.liferay.portal.kernel.util.FileUtil;
22 import com.liferay.portal.kernel.util.StringPool;
23 import com.liferay.portal.model.ResourceConstants;
24 import com.liferay.portal.model.User;
25 import com.liferay.portal.service.ServiceContext;
26 import com.liferay.portlet.asset.util.AssetUtil;
27 import com.liferay.portlet.imagegallery.DuplicateFolderNameException;
28 import com.liferay.portlet.imagegallery.FolderNameException;
29 import com.liferay.portlet.imagegallery.model.IGFolder;
30 import com.liferay.portlet.imagegallery.model.IGFolderConstants;
31 import com.liferay.portlet.imagegallery.model.IGImage;
32 import com.liferay.portlet.imagegallery.service.base.IGFolderLocalServiceBaseImpl;
33
34 import java.util.ArrayList;
35 import java.util.Date;
36 import java.util.List;
37
38
44 public class IGFolderLocalServiceImpl extends IGFolderLocalServiceBaseImpl {
45
46 public IGFolder addFolder(
47 String uuid, long userId, long parentFolderId, String name,
48 String description, ServiceContext serviceContext)
49 throws PortalException, SystemException {
50
51 User user = userPersistence.findByPrimaryKey(userId);
52 long groupId = serviceContext.getScopeGroupId();
53 parentFolderId = getParentFolderId(groupId, parentFolderId);
54 Date now = new Date();
55
56 validate(groupId, parentFolderId, name);
57
58 long folderId = counterLocalService.increment();
59
60 IGFolder folder = igFolderPersistence.create(folderId);
61
62 folder.setUuid(uuid);
63 folder.setGroupId(groupId);
64 folder.setCompanyId(user.getCompanyId());
65 folder.setUserId(user.getUserId());
66 folder.setCreateDate(now);
67 folder.setModifiedDate(now);
68 folder.setParentFolderId(parentFolderId);
69 folder.setName(name);
70 folder.setDescription(description);
71 folder.setExpandoBridgeAttributes(serviceContext);
72
73 igFolderPersistence.update(folder, false);
74
75
77 if (serviceContext.getAddCommunityPermissions() ||
78 serviceContext.getAddGuestPermissions()) {
79
80 addFolderResources(
81 folder, serviceContext.getAddCommunityPermissions(),
82 serviceContext.getAddGuestPermissions());
83 }
84 else {
85 addFolderResources(
86 folder, serviceContext.getCommunityPermissions(),
87 serviceContext.getGuestPermissions());
88 }
89
90 return folder;
91 }
92
93 public void addFolderResources(
94 IGFolder folder, boolean addCommunityPermissions,
95 boolean addGuestPermissions)
96 throws PortalException, SystemException {
97
98 resourceLocalService.addResources(
99 folder.getCompanyId(), folder.getGroupId(), folder.getUserId(),
100 IGFolder.class.getName(), folder.getFolderId(), false,
101 addCommunityPermissions, addGuestPermissions);
102 }
103
104 public void addFolderResources(
105 IGFolder folder, String[] communityPermissions,
106 String[] guestPermissions)
107 throws PortalException, SystemException {
108
109 resourceLocalService.addModelResources(
110 folder.getCompanyId(), folder.getGroupId(), folder.getUserId(),
111 IGFolder.class.getName(), folder.getFolderId(),
112 communityPermissions, guestPermissions);
113 }
114
115 public void addFolderResources(
116 long folderId, boolean addCommunityPermissions,
117 boolean addGuestPermissions)
118 throws PortalException, SystemException {
119
120 IGFolder folder = igFolderPersistence.findByPrimaryKey(folderId);
121
122 addFolderResources(
123 folder, addCommunityPermissions, addGuestPermissions);
124 }
125
126 public void addFolderResources(
127 long folderId, String[] communityPermissions,
128 String[] guestPermissions)
129 throws PortalException, SystemException {
130
131 IGFolder folder = igFolderPersistence.findByPrimaryKey(folderId);
132
133 addFolderResources(folder, communityPermissions, guestPermissions);
134 }
135
136 public void deleteFolder(IGFolder folder)
137 throws PortalException, SystemException {
138
139
141 igFolderPersistence.remove(folder);
142
143
145 resourceLocalService.deleteResource(
146 folder.getCompanyId(), IGFolder.class.getName(),
147 ResourceConstants.SCOPE_INDIVIDUAL, folder.getFolderId());
148
149
151 List<IGFolder> folders = igFolderPersistence.findByG_P(
152 folder.getGroupId(), folder.getFolderId());
153
154 for (IGFolder curFolder : folders) {
155 deleteFolder(curFolder);
156 }
157
158
160 igImageLocalService.deleteImages(
161 folder.getGroupId(), folder.getFolderId());
162
163
165 expandoValueLocalService.deleteValues(
166 IGFolder.class.getName(), folder.getFolderId());
167 }
168
169 public void deleteFolder(long folderId)
170 throws PortalException, SystemException {
171
172 IGFolder folder = igFolderPersistence.findByPrimaryKey(folderId);
173
174 deleteFolder(folder);
175 }
176
177 public void deleteFolders(long groupId)
178 throws PortalException, SystemException {
179
180 List<IGFolder> folders = igFolderPersistence.findByG_P(
181 groupId, IGFolderConstants.DEFAULT_PARENT_FOLDER_ID);
182
183 for (IGFolder folder : folders) {
184 deleteFolder(folder);
185 }
186 }
187
188 public List<IGFolder> getCompanyFolders(long companyId, int start, int end)
189 throws SystemException {
190
191 return igFolderPersistence.findByCompanyId(companyId, start, end);
192 }
193
194 public int getCompanyFoldersCount(long companyId) throws SystemException {
195 return igFolderPersistence.countByCompanyId(companyId);
196 }
197
198 public IGFolder getFolder(long folderId)
199 throws PortalException, SystemException {
200
201 return igFolderPersistence.findByPrimaryKey(folderId);
202 }
203
204 public IGFolder getFolder(long groupId, long parentFolderId, String name)
205 throws PortalException, SystemException {
206
207 return igFolderPersistence.findByG_P_N(groupId, parentFolderId, name);
208 }
209
210 public List<IGFolder> getFolders(long groupId) throws SystemException {
211 return igFolderPersistence.findByGroupId(groupId);
212 }
213
214 public List<IGFolder> getFolders(long groupId, long parentFolderId)
215 throws SystemException {
216
217 return igFolderPersistence.findByG_P(groupId, parentFolderId);
218 }
219
220 public List<IGFolder> getFolders(
221 long groupId, long parentFolderId, int start, int end)
222 throws SystemException {
223
224 return igFolderPersistence.findByG_P(
225 groupId, parentFolderId, start, end);
226 }
227
228 public int getFoldersCount(long groupId, long parentFolderId)
229 throws SystemException {
230
231 return igFolderPersistence.countByG_P(groupId, parentFolderId);
232 }
233
234 public void getSubfolderIds(
235 List<Long> folderIds, long groupId, long folderId)
236 throws SystemException {
237
238 List<IGFolder> folders = igFolderPersistence.findByG_P(
239 groupId, folderId);
240
241 for (IGFolder folder : folders) {
242 folderIds.add(folder.getFolderId());
243
244 getSubfolderIds(
245 folderIds, folder.getGroupId(), folder.getFolderId());
246 }
247 }
248
249 public IGFolder updateFolder(
250 long folderId, long parentFolderId, String name, String description,
251 boolean mergeWithParentFolder, ServiceContext serviceContext)
252 throws PortalException, SystemException {
253
254
256 IGFolder folder = igFolderPersistence.findByPrimaryKey(folderId);
257
258 parentFolderId = getParentFolderId(folder, parentFolderId);
259
260 if (mergeWithParentFolder && (folderId != parentFolderId)) {
261 mergeFolders(folder, parentFolderId);
262
263 return folder;
264 }
265
266
268 validate(
269 folder.getFolderId(), folder.getGroupId(), parentFolderId, name);
270
271 folder.setModifiedDate(new Date());
272 folder.setParentFolderId(parentFolderId);
273 folder.setName(name);
274 folder.setDescription(description);
275 folder.setExpandoBridgeAttributes(serviceContext);
276
277 igFolderPersistence.update(folder, false);
278
279 return folder;
280 }
281
282 protected long getParentFolderId(IGFolder folder, long parentFolderId)
283 throws SystemException {
284
285 if (parentFolderId == IGFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
286 return parentFolderId;
287 }
288
289 if (folder.getFolderId() == parentFolderId) {
290 return folder.getParentFolderId();
291 }
292 else {
293 IGFolder parentFolder = igFolderPersistence.fetchByPrimaryKey(
294 parentFolderId);
295
296 if ((parentFolder == null) ||
297 (folder.getGroupId() != parentFolder.getGroupId())) {
298
299 return folder.getParentFolderId();
300 }
301
302 List<Long> subfolderIds = new ArrayList<Long>();
303
304 getSubfolderIds(
305 subfolderIds, folder.getGroupId(), folder.getFolderId());
306
307 if (subfolderIds.contains(parentFolderId)) {
308 return folder.getParentFolderId();
309 }
310
311 return parentFolderId;
312 }
313 }
314
315 protected long getParentFolderId(long groupId, long parentFolderId)
316 throws SystemException {
317
318 if (parentFolderId != IGFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
319 IGFolder parentFolder = igFolderPersistence.fetchByPrimaryKey(
320 parentFolderId);
321
322 if ((parentFolder == null) ||
323 (groupId != parentFolder.getGroupId())) {
324
325 parentFolderId = IGFolderConstants.DEFAULT_PARENT_FOLDER_ID;
326 }
327 }
328
329 return parentFolderId;
330 }
331
332 protected void mergeFolders(IGFolder fromFolder, long toFolderId)
333 throws PortalException, SystemException {
334
335 List<IGFolder> folders = igFolderPersistence.findByG_P(
336 fromFolder.getGroupId(), fromFolder.getFolderId());
337
338 for (IGFolder folder : folders) {
339 mergeFolders(folder, toFolderId);
340 }
341
342 List<IGImage> images = igImagePersistence.findByG_F(
343 fromFolder.getGroupId(), fromFolder.getFolderId());
344
345 for (IGImage image : images) {
346 image.setFolderId(toFolderId);
347
348 igImagePersistence.update(image, false);
349
350 Indexer indexer = IndexerRegistryUtil.getIndexer(IGImage.class);
351
352 indexer.reindex(image);
353 }
354
355 deleteFolder(fromFolder);
356 }
357
358 protected void validate(
359 long folderId, long groupId, long parentFolderId, String name)
360 throws PortalException, SystemException {
361
362 if (!AssetUtil.isValidWord(name)) {
363 throw new FolderNameException();
364 }
365
366 IGFolder folder = igFolderPersistence.fetchByG_P_N(
367 groupId, parentFolderId, name);
368
369 if ((folder != null) && (folder.getFolderId() != folderId)) {
370 throw new DuplicateFolderNameException();
371 }
372
373 if (name.indexOf(StringPool.PERIOD) != -1) {
374 String nameWithExtension = name;
375
376 name = FileUtil.stripExtension(nameWithExtension);
377
378 List<IGImage> images = igImagePersistence.findByG_F_N(
379 groupId, parentFolderId, name);
380
381 for (IGImage image : images) {
382 if (nameWithExtension.equals(image.getNameWithExtension())) {
383 throw new DuplicateFolderNameException();
384 }
385 }
386 }
387 }
388
389 protected void validate(long groupId, long parentFolderId, String name)
390 throws PortalException, SystemException {
391
392 long folderId = 0;
393
394 validate(folderId, groupId, parentFolderId, name);
395 }
396
397 }