1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
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  /**
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   * @author Alexander Chow
43   */
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 }