1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
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  /**
38   * <a href="IGFolderServiceImpl.java.html"><b><i>View Source</i></b></a>
39   *
40   * @author Brian Wing Shun Chan
41   * @author Jorge Ferrer
42   */
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 }