1
22
23 package com.liferay.portlet.imagegallery.service.impl;
24
25 import com.liferay.counter.service.CounterLocalServiceUtil;
26 import com.liferay.portal.PortalException;
27 import com.liferay.portal.SystemException;
28 import com.liferay.portal.kernel.util.Validator;
29 import com.liferay.portal.model.User;
30 import com.liferay.portal.model.impl.ResourceImpl;
31 import com.liferay.portal.service.ResourceLocalServiceUtil;
32 import com.liferay.portal.service.persistence.UserUtil;
33 import com.liferay.portal.util.PortalUtil;
34 import com.liferay.portlet.imagegallery.FolderNameException;
35 import com.liferay.portlet.imagegallery.model.IGFolder;
36 import com.liferay.portlet.imagegallery.model.IGImage;
37 import com.liferay.portlet.imagegallery.model.impl.IGFolderImpl;
38 import com.liferay.portlet.imagegallery.service.IGImageLocalServiceUtil;
39 import com.liferay.portlet.imagegallery.service.base.IGFolderLocalServiceBaseImpl;
40 import com.liferay.portlet.imagegallery.service.persistence.IGFolderUtil;
41 import com.liferay.portlet.imagegallery.service.persistence.IGImageUtil;
42
43 import java.util.ArrayList;
44 import java.util.Date;
45 import java.util.Iterator;
46 import java.util.List;
47
48
54 public class IGFolderLocalServiceImpl extends IGFolderLocalServiceBaseImpl {
55
56 public IGFolder addFolder(
57 long userId, long plid, long parentFolderId, String name,
58 String description, boolean addCommunityPermissions,
59 boolean addGuestPermissions)
60 throws PortalException, SystemException {
61
62 return addFolder(
63 userId, plid, parentFolderId, name, description,
64 Boolean.valueOf(addCommunityPermissions),
65 Boolean.valueOf(addGuestPermissions), null, null);
66 }
67
68 public IGFolder addFolder(
69 long userId, long plid, long parentFolderId, String name,
70 String description, String[] communityPermissions,
71 String[] guestPermissions)
72 throws PortalException, SystemException {
73
74 return addFolder(
75 userId, plid, parentFolderId, name, description, null, null,
76 communityPermissions, guestPermissions);
77 }
78
79 public IGFolder addFolder(
80 long userId, long plid, long parentFolderId, String name,
81 String description, Boolean addCommunityPermissions,
82 Boolean addGuestPermissions, String[] communityPermissions,
83 String[] guestPermissions)
84 throws PortalException, SystemException {
85
86 long groupId = PortalUtil.getPortletGroupId(plid);
87
88 return addFolderToGroup(
89 userId, groupId, parentFolderId, name, description,
90 addCommunityPermissions, addGuestPermissions, communityPermissions,
91 guestPermissions);
92 }
93
94 public IGFolder addFolderToGroup(
95 long userId, long groupId, long parentFolderId, String name,
96 String description, Boolean addCommunityPermissions,
97 Boolean addGuestPermissions, String[] communityPermissions,
98 String[] guestPermissions)
99 throws PortalException, SystemException {
100
101
103 User user = UserUtil.findByPrimaryKey(userId);
104 parentFolderId = getParentFolderId(groupId, parentFolderId);
105 Date now = new Date();
106
107 validate(name);
108
109 long folderId = CounterLocalServiceUtil.increment();
110
111 IGFolder folder = IGFolderUtil.create(folderId);
112
113 folder.setGroupId(groupId);
114 folder.setCompanyId(user.getCompanyId());
115 folder.setUserId(user.getUserId());
116 folder.setCreateDate(now);
117 folder.setModifiedDate(now);
118 folder.setParentFolderId(parentFolderId);
119 folder.setName(name);
120 folder.setDescription(description);
121
122 IGFolderUtil.update(folder);
123
124
126 if ((addCommunityPermissions != null) &&
127 (addGuestPermissions != null)) {
128
129 addFolderResources(
130 folder, addCommunityPermissions.booleanValue(),
131 addGuestPermissions.booleanValue());
132 }
133 else {
134 addFolderResources(folder, communityPermissions, guestPermissions);
135 }
136
137 return folder;
138 }
139
140 public void addFolderResources(
141 long folderId, boolean addCommunityPermissions,
142 boolean addGuestPermissions)
143 throws PortalException, SystemException {
144
145 IGFolder folder = IGFolderUtil.findByPrimaryKey(folderId);
146
147 addFolderResources(
148 folder, addCommunityPermissions, addGuestPermissions);
149 }
150
151 public void addFolderResources(
152 IGFolder folder, boolean addCommunityPermissions,
153 boolean addGuestPermissions)
154 throws PortalException, SystemException {
155
156 ResourceLocalServiceUtil.addResources(
157 folder.getCompanyId(), folder.getGroupId(), folder.getUserId(),
158 IGFolder.class.getName(), folder.getFolderId(), false,
159 addCommunityPermissions, addGuestPermissions);
160 }
161
162 public void addFolderResources(
163 long folderId, String[] communityPermissions,
164 String[] guestPermissions)
165 throws PortalException, SystemException {
166
167 IGFolder folder = IGFolderUtil.findByPrimaryKey(folderId);
168
169 addFolderResources(folder, communityPermissions, guestPermissions);
170 }
171
172 public void addFolderResources(
173 IGFolder folder, String[] communityPermissions,
174 String[] guestPermissions)
175 throws PortalException, SystemException {
176
177 ResourceLocalServiceUtil.addModelResources(
178 folder.getCompanyId(), folder.getGroupId(), folder.getUserId(),
179 IGFolder.class.getName(), folder.getFolderId(),
180 communityPermissions, guestPermissions);
181 }
182
183 public void deleteFolder(long folderId)
184 throws PortalException, SystemException {
185
186 IGFolder folder = IGFolderUtil.findByPrimaryKey(folderId);
187
188 deleteFolder(folder);
189 }
190
191 public void deleteFolder(IGFolder folder)
192 throws PortalException, SystemException {
193
194
196 Iterator itr = IGFolderUtil.findByG_P(
197 folder.getGroupId(), folder.getFolderId()).iterator();
198
199 while (itr.hasNext()) {
200 IGFolder curFolder = (IGFolder)itr.next();
201
202 deleteFolder(curFolder);
203 }
204
205
207 IGImageLocalServiceUtil.deleteImages(folder.getFolderId());
208
209
211 ResourceLocalServiceUtil.deleteResource(
212 folder.getCompanyId(), IGFolder.class.getName(),
213 ResourceImpl.SCOPE_INDIVIDUAL, folder.getFolderId());
214
215
217 IGFolderUtil.remove(folder.getFolderId());
218 }
219
220 public void deleteFolders(long groupId)
221 throws PortalException, SystemException {
222
223 Iterator itr = IGFolderUtil.findByG_P(
224 groupId, IGFolderImpl.DEFAULT_PARENT_FOLDER_ID).iterator();
225
226 while (itr.hasNext()) {
227 IGFolder folder = (IGFolder)itr.next();
228
229 deleteFolder(folder);
230 }
231 }
232
233 public IGFolder getFolder(long folderId)
234 throws PortalException, SystemException {
235
236 return IGFolderUtil.findByPrimaryKey(folderId);
237 }
238
239 public List getFolders(long groupId) throws SystemException {
240 return IGFolderUtil.findByGroupId(groupId);
241 }
242
243 public List getFolders(long groupId, long parentFolderId)
244 throws SystemException {
245
246 return IGFolderUtil.findByG_P(groupId, parentFolderId);
247 }
248
249 public List getFolders(
250 long groupId, long parentFolderId, int begin, int end)
251 throws SystemException {
252
253 return IGFolderUtil.findByG_P(groupId, parentFolderId, begin, end);
254 }
255
256 public int getFoldersCount(long groupId, long parentFolderId)
257 throws SystemException {
258
259 return IGFolderUtil.countByG_P(groupId, parentFolderId);
260 }
261
262 public void getSubfolderIds(
263 List folderIds, long groupId, long folderId)
264 throws SystemException {
265
266 Iterator itr = IGFolderUtil.findByG_P(groupId, folderId).iterator();
267
268 while (itr.hasNext()) {
269 IGFolder folder = (IGFolder)itr.next();
270
271 folderIds.add(new Long(folder.getFolderId()));
272
273 getSubfolderIds(
274 folderIds, folder.getGroupId(), folder.getFolderId());
275 }
276 }
277
278 public IGFolder updateFolder(
279 long folderId, long parentFolderId, String name, String description,
280 boolean mergeWithParentFolder)
281 throws PortalException, SystemException {
282
283
285 IGFolder folder = IGFolderUtil.findByPrimaryKey(folderId);
286
287 parentFolderId = getParentFolderId(folder, parentFolderId);
288
289 validate(name);
290
291 folder.setModifiedDate(new Date());
292 folder.setParentFolderId(parentFolderId);
293 folder.setName(name);
294 folder.setDescription(description);
295
296 IGFolderUtil.update(folder);
297
298
300 if (mergeWithParentFolder && (folderId != parentFolderId) &&
301 (parentFolderId != IGFolderImpl.DEFAULT_PARENT_FOLDER_ID)) {
302
303 mergeFolders(folder, parentFolderId);
304 }
305
306 return folder;
307 }
308
309 protected long getParentFolderId(long groupId, long parentFolderId)
310 throws SystemException {
311
312 if (parentFolderId != IGFolderImpl.DEFAULT_PARENT_FOLDER_ID) {
313 IGFolder parentFolder =
314 IGFolderUtil.fetchByPrimaryKey(parentFolderId);
315
316 if ((parentFolder == null) ||
317 (groupId != parentFolder.getGroupId())) {
318
319 parentFolderId = IGFolderImpl.DEFAULT_PARENT_FOLDER_ID;
320 }
321 }
322
323 return parentFolderId;
324 }
325
326 protected long getParentFolderId(IGFolder folder, long parentFolderId)
327 throws SystemException {
328
329 if (parentFolderId == IGFolderImpl.DEFAULT_PARENT_FOLDER_ID) {
330 return parentFolderId;
331 }
332
333 if (folder.getFolderId() == parentFolderId) {
334 return folder.getParentFolderId();
335 }
336 else {
337 IGFolder parentFolder =
338 IGFolderUtil.fetchByPrimaryKey(parentFolderId);
339
340 if ((parentFolder == null) ||
341 (folder.getGroupId() != parentFolder.getGroupId())) {
342
343 return folder.getParentFolderId();
344 }
345
346 List subfolderIds = new ArrayList();
347
348 getSubfolderIds(
349 subfolderIds, folder.getGroupId(), folder.getFolderId());
350
351 if (subfolderIds.contains(new Long(parentFolderId))) {
352 return folder.getParentFolderId();
353 }
354
355 return parentFolderId;
356 }
357 }
358
359 protected void mergeFolders(IGFolder fromFolder, long toFolderId)
360 throws PortalException, SystemException {
361
362 Iterator itr = IGFolderUtil.findByG_P(
363 fromFolder.getGroupId(), fromFolder.getFolderId()).iterator();
364
365 while (itr.hasNext()) {
366 IGFolder folder = (IGFolder)itr.next();
367
368 mergeFolders(folder, toFolderId);
369 }
370
371 itr = IGImageUtil.findByFolderId(fromFolder.getFolderId()).iterator();
372
373 while (itr.hasNext()) {
374
375
377 IGImage image = (IGImage)itr.next();
378
379 image.setFolderId(toFolderId);
380
381 IGImageUtil.update(image);
382 }
383
384 IGFolderUtil.remove(fromFolder.getFolderId());
385 }
386
387 protected void validate(String name) throws PortalException {
388 if ((Validator.isNull(name)) || (name.indexOf("\\\\") != -1) ||
389 (name.indexOf("//") != -1)) {
390
391 throw new FolderNameException();
392 }
393 }
394
395 }