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