1
22
23 package com.liferay.portlet.imagegallery.service.impl;
24
25 import com.liferay.portal.PortalException;
26 import com.liferay.portal.SystemException;
27 import com.liferay.portal.kernel.log.Log;
28 import com.liferay.portal.kernel.log.LogFactoryUtil;
29 import com.liferay.portal.kernel.util.FileUtil;
30 import com.liferay.portal.kernel.util.ListUtil;
31 import com.liferay.portal.model.Image;
32 import com.liferay.portal.security.permission.ActionKeys;
33 import com.liferay.portal.util.ContentTypeUtil;
34 import com.liferay.portlet.imagegallery.model.IGFolder;
35 import com.liferay.portlet.imagegallery.model.IGImage;
36 import com.liferay.portlet.imagegallery.service.base.IGFolderServiceBaseImpl;
37 import com.liferay.portlet.imagegallery.service.permission.IGFolderPermission;
38
39 import java.io.File;
40
41 import java.rmi.RemoteException;
42
43 import java.util.Iterator;
44 import java.util.List;
45
46
51 public class IGFolderServiceImpl extends IGFolderServiceBaseImpl {
52
53 public IGFolder addFolder(
54 long plid, long parentFolderId, String name, String description,
55 boolean addCommunityPermissions, boolean addGuestPermissions)
56 throws PortalException, SystemException {
57
58 IGFolderPermission.check(
59 getPermissionChecker(), plid, parentFolderId,
60 ActionKeys.ADD_FOLDER);
61
62 return igFolderLocalService.addFolder(
63 getUserId(), plid, parentFolderId, name, description,
64 addCommunityPermissions, addGuestPermissions);
65 }
66
67 public IGFolder addFolder(
68 long plid, long parentFolderId, String name, String description,
69 String[] communityPermissions, String[] guestPermissions)
70 throws PortalException, SystemException {
71
72 IGFolderPermission.check(
73 getPermissionChecker(), plid, parentFolderId,
74 ActionKeys.ADD_FOLDER);
75
76 return igFolderLocalService.addFolder(
77 getUserId(), plid, parentFolderId, name, description,
78 communityPermissions, guestPermissions);
79 }
80
81 public IGFolder copyFolder(
82 long plid, long sourceFolderId, long parentFolderId, String name,
83 String description, boolean addCommunityPermissions,
84 boolean addGuestPermissions)
85 throws PortalException, RemoteException, SystemException {
86
87 IGFolder srcFolder = getFolder(sourceFolderId);
88
89 IGFolder destFolder = addFolder(
90 plid, parentFolderId, name, description, addCommunityPermissions,
91 addGuestPermissions);
92
93 copyFolder(
94 srcFolder, destFolder, addCommunityPermissions,
95 addGuestPermissions);
96
97 return destFolder;
98 }
99
100 public void deleteFolder(long folderId)
101 throws PortalException, SystemException {
102
103 IGFolderPermission.check(
104 getPermissionChecker(), folderId, ActionKeys.DELETE);
105
106 igFolderLocalService.deleteFolder(folderId);
107 }
108
109 public IGFolder getFolder(long folderId)
110 throws PortalException, SystemException {
111
112 IGFolderPermission.check(
113 getPermissionChecker(), folderId, ActionKeys.VIEW);
114
115 return igFolderLocalService.getFolder(folderId);
116 }
117
118 public IGFolder getFolder(long groupId, long parentFolderId, String name)
119 throws PortalException, SystemException {
120
121 IGFolder folder = igFolderLocalService.getFolder(
122 groupId, parentFolderId, name);
123
124 IGFolderPermission.check(
125 getPermissionChecker(), folder.getFolderId(), ActionKeys.VIEW);
126
127 return folder;
128 }
129
130 public List<IGFolder> getFolders(long groupId, long parentFolderId)
131 throws PortalException, SystemException {
132
133 List<IGFolder> folders = igFolderLocalService.getFolders(
134 groupId, parentFolderId);
135
136 folders = ListUtil.copy(folders);
137
138 Iterator<IGFolder> itr = folders.iterator();
139
140 while (itr.hasNext()) {
141 IGFolder folder = itr.next();
142
143 if (!IGFolderPermission.contains(
144 getPermissionChecker(), folder.getFolderId(),
145 ActionKeys.VIEW)) {
146
147 itr.remove();
148 }
149 }
150
151 return folders;
152 }
153
154 public IGFolder updateFolder(
155 long folderId, long parentFolderId, String name, String description,
156 boolean mergeWithParentFolder)
157 throws PortalException, SystemException {
158
159 IGFolderPermission.check(
160 getPermissionChecker(), folderId, ActionKeys.UPDATE);
161
162 return igFolderLocalService.updateFolder(
163 folderId, parentFolderId, name, description, mergeWithParentFolder);
164 }
165
166 protected void copyFolder(
167 IGFolder srcFolder, IGFolder destFolder,
168 boolean addCommunityPermissions, boolean addGuestPermissions)
169 throws PortalException, RemoteException, SystemException {
170
171 List<IGImage> srcImages = igImageService.getImages(
172 srcFolder.getFolderId());
173
174 for (IGImage srcImage : srcImages) {
175 String name = srcImage.getName();
176 String description = srcImage.getDescription();
177
178 File file = null;
179
180 try {
181 file = FileUtil.createTempFile(srcImage.getImageType());
182
183 Image image = imageLocalService.getImage(
184 srcImage.getLargeImageId());
185
186 byte[] bytes = image.getTextObj();
187
188 FileUtil.write(file, bytes);
189 }
190 catch (Exception e) {
191 _log.error(e, e);
192
193 continue;
194 }
195
196 String contentType = ContentTypeUtil.getContentType(
197 srcImage.getImageType());
198 String[] tagsEntries = null;
199
200 igImageService.addImage(
201 destFolder.getFolderId(), name, description, file, contentType,
202 tagsEntries, addCommunityPermissions, addGuestPermissions);
203
204 file.delete();
205 }
206
207 long destPlid = layoutLocalService.getDefaultPlid(
208 destFolder.getGroupId());
209
210 List<IGFolder> srcSubfolders = getFolders(
211 srcFolder.getGroupId(), srcFolder.getFolderId());
212
213 for (IGFolder srcSubfolder : srcSubfolders) {
214 String name = srcSubfolder.getName();
215 String description = srcSubfolder.getDescription();
216
217 IGFolder destSubfolder = addFolder(
218 destPlid, destFolder.getFolderId(), name, description,
219 addCommunityPermissions, addGuestPermissions);
220
221 copyFolder(
222 srcSubfolder, destSubfolder, addCommunityPermissions,
223 addGuestPermissions);
224 }
225 }
226
227 private static Log _log = LogFactoryUtil.getLog(IGFolderServiceImpl.class);
228
229 }