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