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