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