1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portal.editor.fckeditor.receiver.impl;
24  
25  import com.liferay.portal.editor.fckeditor.command.CommandArgument;
26  import com.liferay.portal.editor.fckeditor.exception.FCKException;
27  import com.liferay.portal.kernel.servlet.ImageServletTokenUtil;
28  import com.liferay.portal.kernel.util.StringPool;
29  import com.liferay.portal.kernel.util.Validator;
30  import com.liferay.portal.model.Group;
31  import com.liferay.portal.model.Image;
32  import com.liferay.portal.service.ImageLocalServiceUtil;
33  import com.liferay.portal.theme.ThemeDisplay;
34  import com.liferay.portlet.imagegallery.model.IGFolder;
35  import com.liferay.portlet.imagegallery.model.IGImage;
36  import com.liferay.portlet.imagegallery.model.impl.IGFolderImpl;
37  import com.liferay.portlet.imagegallery.service.IGFolderServiceUtil;
38  import com.liferay.portlet.imagegallery.service.IGImageServiceUtil;
39  
40  import java.io.File;
41  
42  import java.util.List;
43  import java.util.StringTokenizer;
44  
45  import org.w3c.dom.Document;
46  import org.w3c.dom.Element;
47  import org.w3c.dom.Node;
48  
49  /**
50   * <a href="ImageCommandReceiver.java.html"><b><i>View Source</i></b></a>
51   *
52   * @author Ivica Cardic
53   *
54   */
55  public class ImageCommandReceiver extends BaseCommandReceiver {
56  
57      protected String createFolder(CommandArgument arg) {
58          try {
59              Group group = arg.getCurrentGroup();
60  
61              IGFolder folder = _getFolder(
62                  group.getGroupId(), StringPool.SLASH + arg.getCurrentFolder());
63  
64              long plid = arg.getPlid();
65              long parentFolderId = folder.getFolderId();
66              String name = arg.getNewFolder();
67              String description = StringPool.BLANK;
68              boolean addCommunityPermissions = true;
69              boolean addGuestPermissions = true;
70  
71              IGFolderServiceUtil.addFolder(
72                  plid, parentFolderId, name, description,
73                  addCommunityPermissions, addGuestPermissions);
74          }
75          catch (Exception e) {
76              throw new FCKException(e);
77          }
78  
79          return "0";
80      }
81  
82      protected String fileUpload(
83          CommandArgument arg, String fileName, File file, String extension) {
84  
85          try {
86              Group group = arg.getCurrentGroup();
87  
88              IGFolder folder = _getFolder(
89                  group.getGroupId(), arg.getCurrentFolder());
90  
91              long folderId = folder.getFolderId();
92              String name = fileName;
93              String description = StringPool.BLANK;
94              String contentType = extension.toLowerCase();
95              String[] tagsEntries = null;
96              boolean addCommunityPermissions = true;
97              boolean addGuestPermissions = true;
98  
99              IGImageServiceUtil.addImage(
100                 folderId, name, description, file, contentType, tagsEntries,
101                 addCommunityPermissions, addGuestPermissions);
102         }
103         catch (Exception e) {
104             throw new FCKException(e);
105         }
106 
107         return "0";
108     }
109 
110     protected void getFolders(CommandArgument arg, Document doc, Node root) {
111         try {
112             _getFolders(arg, doc, root);
113         }
114         catch (Exception e) {
115             throw new FCKException(e);
116         }
117     }
118 
119     protected void getFoldersAndFiles(
120         CommandArgument arg, Document doc, Node root) {
121 
122         try {
123             _getFolders(arg, doc, root);
124             _getFiles(arg, doc, root);
125         }
126         catch (Exception e) {
127             throw new FCKException(e);
128         }
129     }
130 
131     private void _getFiles(CommandArgument arg, Document doc, Node root)
132         throws Exception {
133 
134         Element filesEl = doc.createElement("Files");
135 
136         root.appendChild(filesEl);
137 
138         if (Validator.isNull(arg.getCurrentGroupName())) {
139             return;
140         }
141 
142         Group group = arg.getCurrentGroup();
143 
144         IGFolder folder = _getFolder(
145             group.getGroupId(), arg.getCurrentFolder());
146 
147         List<IGImage> images = IGImageServiceUtil.getImages(
148             folder.getFolderId());
149 
150         for (IGImage image : images) {
151             long largeImageId = image.getLargeImageId();
152 
153             Image portalImage = ImageLocalServiceUtil.getImageOrDefault(
154                 largeImageId);
155 
156             Element fileEl = doc.createElement("File");
157 
158             filesEl.appendChild(fileEl);
159 
160             fileEl.setAttribute("name", image.getNameWithExtension());
161             fileEl.setAttribute("desc", image.getNameWithExtension());
162             fileEl.setAttribute("size", getSize(portalImage.getSize()));
163 
164             StringBuilder url = new StringBuilder();
165 
166             ThemeDisplay themeDisplay = arg.getThemeDisplay();
167 
168             url.append(themeDisplay.getPathImage());
169             url.append("/image_gallery?uuid=");
170             url.append(image.getUuid());
171             url.append("&groupId=");
172             url.append(folder.getGroupId());
173             url.append("&t=");
174             url.append(ImageServletTokenUtil.getToken(largeImageId));
175 
176             fileEl.setAttribute("url", url.toString());
177         }
178     }
179 
180     private IGFolder _getFolder(long groupId, String folderName)
181         throws Exception {
182 
183         IGFolder folder = new IGFolderImpl();
184 
185         folder.setFolderId(IGFolderImpl.DEFAULT_PARENT_FOLDER_ID);
186 
187         if (folderName.equals(StringPool.SLASH)) {
188             return folder;
189         }
190 
191         StringTokenizer st = new StringTokenizer(folderName, StringPool.SLASH);
192 
193         while (st.hasMoreTokens()) {
194             String curFolderName = st.nextToken();
195 
196             List<IGFolder> folders = IGFolderServiceUtil.getFolders(
197                 groupId, folder.getFolderId());
198 
199             for (IGFolder curFolder : folders) {
200                 if (curFolder.getName().equals(curFolderName)) {
201                     folder = curFolder;
202 
203                     break;
204                 }
205             }
206         }
207 
208         return folder;
209     }
210 
211     private void _getFolders(CommandArgument arg, Document doc, Node root)
212         throws Exception {
213 
214         Element foldersEl = doc.createElement("Folders");
215 
216         root.appendChild(foldersEl);
217 
218         if (arg.getCurrentFolder().equals(StringPool.SLASH)) {
219             getRootFolders(arg, doc, foldersEl);
220         }
221         else {
222             Group group = arg.getCurrentGroup();
223 
224             IGFolder folder = _getFolder(
225                 group.getGroupId(), arg.getCurrentFolder());
226 
227             List<IGFolder> folders = IGFolderServiceUtil.getFolders(
228                 group.getGroupId(), folder.getFolderId());
229 
230             for (IGFolder curFolder : folders) {
231                 Element folderEl = doc.createElement("Folder");
232 
233                 foldersEl.appendChild(folderEl);
234 
235                 folderEl.setAttribute("name", curFolder.getName());
236             }
237         }
238     }
239 
240 }