001
014
015 package com.liferay.portlet.imagegallery.service.impl;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.log.Log;
020 import com.liferay.portal.kernel.log.LogFactoryUtil;
021 import com.liferay.portal.kernel.util.FileUtil;
022 import com.liferay.portal.kernel.util.ListUtil;
023 import com.liferay.portal.kernel.util.MimeTypesUtil;
024 import com.liferay.portal.model.Image;
025 import com.liferay.portal.security.permission.ActionKeys;
026 import com.liferay.portal.service.ServiceContext;
027 import com.liferay.portlet.imagegallery.model.IGFolder;
028 import com.liferay.portlet.imagegallery.model.IGImage;
029 import com.liferay.portlet.imagegallery.service.base.IGFolderServiceBaseImpl;
030 import com.liferay.portlet.imagegallery.service.permission.IGFolderPermission;
031
032 import java.io.File;
033
034 import java.util.Iterator;
035 import java.util.List;
036
037
042 public class IGFolderServiceImpl extends IGFolderServiceBaseImpl {
043
044 public IGFolder addFolder(
045 long parentFolderId, String name, String description,
046 ServiceContext serviceContext)
047 throws PortalException, SystemException {
048
049 IGFolderPermission.check(
050 getPermissionChecker(), serviceContext.getScopeGroupId(),
051 parentFolderId, ActionKeys.ADD_FOLDER);
052
053 return igFolderLocalService.addFolder(
054 getUserId(), parentFolderId, name, description, serviceContext);
055 }
056
057 public IGFolder copyFolder(
058 long sourceFolderId, long parentFolderId, String name,
059 String description, ServiceContext serviceContext)
060 throws PortalException, SystemException {
061
062 IGFolder srcFolder = getFolder(sourceFolderId);
063
064 IGFolder destFolder = addFolder(
065 parentFolderId, name, description, serviceContext);
066
067 copyFolder(srcFolder, destFolder, serviceContext);
068
069 return destFolder;
070 }
071
072 public void deleteFolder(long folderId)
073 throws PortalException, SystemException {
074
075 IGFolder folder = igFolderLocalService.getFolder(folderId);
076
077 IGFolderPermission.check(
078 getPermissionChecker(), folder, ActionKeys.DELETE);
079
080 igFolderLocalService.deleteFolder(folderId);
081 }
082
083 public IGFolder getFolder(long folderId)
084 throws PortalException, SystemException {
085
086 IGFolder folder = igFolderLocalService.getFolder(folderId);
087
088 IGFolderPermission.check(
089 getPermissionChecker(), folder, ActionKeys.VIEW);
090
091 return folder;
092 }
093
094 public IGFolder getFolder(long groupId, long parentFolderId, String name)
095 throws PortalException, SystemException {
096
097 IGFolder folder = igFolderLocalService.getFolder(
098 groupId, parentFolderId, name);
099
100 IGFolderPermission.check(
101 getPermissionChecker(), folder, ActionKeys.VIEW);
102
103 return folder;
104 }
105
106 public List<IGFolder> getFolders(long groupId, long parentFolderId)
107 throws PortalException, SystemException {
108
109 List<IGFolder> folders = igFolderLocalService.getFolders(
110 groupId, parentFolderId);
111
112 folders = ListUtil.copy(folders);
113
114 Iterator<IGFolder> itr = folders.iterator();
115
116 while (itr.hasNext()) {
117 IGFolder folder = itr.next();
118
119 if (!IGFolderPermission.contains(
120 getPermissionChecker(), folder, ActionKeys.VIEW)) {
121
122 itr.remove();
123 }
124 }
125
126 return folders;
127 }
128
129 public IGFolder updateFolder(
130 long folderId, long parentFolderId, String name, String description,
131 boolean mergeWithParentFolder, ServiceContext serviceContext)
132 throws PortalException, SystemException {
133
134 IGFolder folder = igFolderLocalService.getFolder(folderId);
135
136 IGFolderPermission.check(
137 getPermissionChecker(), folder, ActionKeys.UPDATE);
138
139 return igFolderLocalService.updateFolder(
140 folderId, parentFolderId, name, description, mergeWithParentFolder,
141 serviceContext);
142 }
143
144 protected void copyFolder(
145 IGFolder srcFolder, IGFolder destFolder,
146 ServiceContext serviceContext)
147 throws PortalException, SystemException {
148
149 List<IGImage> srcImages = igImageService.getImages(
150 srcFolder.getGroupId(), srcFolder.getFolderId());
151
152 for (IGImage srcImage : srcImages) {
153 String name = srcImage.getName();
154 String description = srcImage.getDescription();
155
156 File file = null;
157
158 try {
159 file = FileUtil.createTempFile(srcImage.getImageType());
160
161 Image image = imageLocalService.getImage(
162 srcImage.getLargeImageId());
163
164 byte[] bytes = image.getTextObj();
165
166 FileUtil.write(file, bytes);
167 }
168 catch (Exception e) {
169 _log.error(e, e);
170
171 continue;
172 }
173
174 String contentType = MimeTypesUtil.getContentType(
175 srcImage.getImageType());
176
177 igImageService.addImage(
178 destFolder.getGroupId(), destFolder.getFolderId(), name,
179 description, file, contentType, serviceContext);
180
181 file.delete();
182 }
183
184 List<IGFolder> srcSubfolders = getFolders(
185 srcFolder.getGroupId(), srcFolder.getFolderId());
186
187 for (IGFolder srcSubfolder : srcSubfolders) {
188 String name = srcSubfolder.getName();
189 String description = srcSubfolder.getDescription();
190
191 serviceContext.setScopeGroupId(srcFolder.getGroupId());
192
193 IGFolder destSubfolder = addFolder(
194 destFolder.getFolderId(), name, description, serviceContext);
195
196 copyFolder(srcSubfolder, destSubfolder, serviceContext);
197 }
198 }
199
200 private static Log _log = LogFactoryUtil.getLog(IGFolderServiceImpl.class);
201
202 }