1   /**
2    * Copyright (c) 2000-2009 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   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17   * SOFTWARE.
18   */
19  
20  package com.liferay.portlet.imagegallery.service.impl;
21  
22  import com.liferay.portal.PortalException;
23  import com.liferay.portal.SystemException;
24  import com.liferay.portal.kernel.log.Log;
25  import com.liferay.portal.kernel.log.LogFactoryUtil;
26  import com.liferay.portal.kernel.util.FileUtil;
27  import com.liferay.portal.kernel.util.ListUtil;
28  import com.liferay.portal.model.Image;
29  import com.liferay.portal.security.permission.ActionKeys;
30  import com.liferay.portal.util.ContentTypeUtil;
31  import com.liferay.portlet.imagegallery.model.IGFolder;
32  import com.liferay.portlet.imagegallery.model.IGImage;
33  import com.liferay.portlet.imagegallery.service.base.IGFolderServiceBaseImpl;
34  import com.liferay.portlet.imagegallery.service.permission.IGFolderPermission;
35  
36  import java.io.File;
37  
38  import java.rmi.RemoteException;
39  
40  import java.util.Iterator;
41  import java.util.List;
42  
43  /**
44   * <a href="IGFolderServiceImpl.java.html"><b><i>View Source</i></b></a>
45   *
46   * @author Brian Wing Shun Chan
47   *
48   */
49  public class IGFolderServiceImpl extends IGFolderServiceBaseImpl {
50  
51      public IGFolder addFolder(
52              long plid, long parentFolderId, String name, String description,
53              boolean addCommunityPermissions, boolean addGuestPermissions)
54          throws PortalException, SystemException {
55  
56          IGFolderPermission.check(
57              getPermissionChecker(), plid, parentFolderId,
58              ActionKeys.ADD_FOLDER);
59  
60          return igFolderLocalService.addFolder(
61              getUserId(), plid, parentFolderId, name, description,
62              addCommunityPermissions, addGuestPermissions);
63      }
64  
65      public IGFolder addFolder(
66              long plid, long parentFolderId, String name, String description,
67              String[] communityPermissions, String[] guestPermissions)
68          throws PortalException, SystemException {
69  
70          IGFolderPermission.check(
71              getPermissionChecker(), plid, parentFolderId,
72              ActionKeys.ADD_FOLDER);
73  
74          return igFolderLocalService.addFolder(
75              getUserId(), plid, parentFolderId, name, description,
76              communityPermissions, guestPermissions);
77      }
78  
79      public IGFolder copyFolder(
80              long plid, long sourceFolderId, long parentFolderId, String name,
81              String description, boolean addCommunityPermissions,
82              boolean addGuestPermissions)
83          throws PortalException, RemoteException, SystemException {
84  
85          IGFolder srcFolder = getFolder(sourceFolderId);
86  
87          IGFolder destFolder = addFolder(
88              plid, parentFolderId, name, description, addCommunityPermissions,
89              addGuestPermissions);
90  
91          copyFolder(
92              srcFolder, destFolder, addCommunityPermissions,
93              addGuestPermissions);
94  
95          return destFolder;
96      }
97  
98      public void deleteFolder(long folderId)
99          throws PortalException, SystemException {
100 
101         IGFolderPermission.check(
102             getPermissionChecker(), folderId, ActionKeys.DELETE);
103 
104         igFolderLocalService.deleteFolder(folderId);
105     }
106 
107     public IGFolder getFolder(long folderId)
108         throws PortalException, SystemException {
109 
110         IGFolderPermission.check(
111             getPermissionChecker(), folderId, ActionKeys.VIEW);
112 
113         return igFolderLocalService.getFolder(folderId);
114     }
115 
116     public IGFolder getFolder(long groupId, long parentFolderId, String name)
117         throws PortalException, SystemException {
118 
119         IGFolder folder = igFolderLocalService.getFolder(
120             groupId, parentFolderId, name);
121 
122         IGFolderPermission.check(
123             getPermissionChecker(), folder.getFolderId(), ActionKeys.VIEW);
124 
125         return folder;
126     }
127 
128     public List<IGFolder> getFolders(long groupId, long parentFolderId)
129         throws PortalException, SystemException {
130 
131         List<IGFolder> folders = igFolderLocalService.getFolders(
132             groupId, parentFolderId);
133 
134         folders = ListUtil.copy(folders);
135 
136         Iterator<IGFolder> itr = folders.iterator();
137 
138         while (itr.hasNext()) {
139             IGFolder folder = itr.next();
140 
141             if (!IGFolderPermission.contains(
142                     getPermissionChecker(), folder.getFolderId(),
143                     ActionKeys.VIEW)) {
144 
145                 itr.remove();
146             }
147         }
148 
149         return folders;
150     }
151 
152     public IGFolder updateFolder(
153             long folderId, long parentFolderId, String name, String description,
154             boolean mergeWithParentFolder)
155         throws PortalException, SystemException {
156 
157         IGFolderPermission.check(
158             getPermissionChecker(), folderId, ActionKeys.UPDATE);
159 
160         return igFolderLocalService.updateFolder(
161             folderId, parentFolderId, name, description, mergeWithParentFolder);
162     }
163 
164     protected void copyFolder(
165             IGFolder srcFolder, IGFolder destFolder,
166             boolean addCommunityPermissions, boolean addGuestPermissions)
167         throws PortalException, RemoteException, SystemException {
168 
169         List<IGImage> srcImages = igImageService.getImages(
170             srcFolder.getFolderId());
171 
172         for (IGImage srcImage : srcImages) {
173             String name = srcImage.getName();
174             String description = srcImage.getDescription();
175 
176             File file = null;
177 
178             try {
179                 file = FileUtil.createTempFile(srcImage.getImageType());
180 
181                 Image image = imageLocalService.getImage(
182                     srcImage.getLargeImageId());
183 
184                 byte[] bytes = image.getTextObj();
185 
186                 FileUtil.write(file, bytes);
187             }
188             catch (Exception e) {
189                 _log.error(e, e);
190 
191                 continue;
192             }
193 
194             String contentType = ContentTypeUtil.getContentType(
195                 srcImage.getImageType());
196             String[] tagsEntries = null;
197 
198             igImageService.addImage(
199                 destFolder.getFolderId(), name, description, file, contentType,
200                 tagsEntries, addCommunityPermissions, addGuestPermissions);
201 
202             file.delete();
203         }
204 
205         long destPlid = layoutLocalService.getDefaultPlid(
206             destFolder.getGroupId());
207 
208         List<IGFolder> srcSubfolders = getFolders(
209             srcFolder.getGroupId(), srcFolder.getFolderId());
210 
211         for (IGFolder srcSubfolder : srcSubfolders) {
212             String name = srcSubfolder.getName();
213             String description = srcSubfolder.getDescription();
214 
215             IGFolder destSubfolder = addFolder(
216                 destPlid, destFolder.getFolderId(), name, description,
217                 addCommunityPermissions, addGuestPermissions);
218 
219             copyFolder(
220                 srcSubfolder, destSubfolder, addCommunityPermissions,
221                 addGuestPermissions);
222         }
223     }
224 
225     private static Log _log = LogFactoryUtil.getLog(IGFolderServiceImpl.class);
226 
227 }