1   /**
2    * Copyright (c) 2000-2007 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.StringMaker;
29  import com.liferay.portal.kernel.util.StringPool;
30  import com.liferay.portal.model.Group;
31  import com.liferay.portal.model.Image;
32  import com.liferay.portal.service.GroupLocalServiceUtil;
33  import com.liferay.portal.service.GroupServiceUtil;
34  import com.liferay.portal.service.impl.ImageLocalUtil;
35  import com.liferay.portal.theme.ThemeDisplay;
36  import com.liferay.portlet.imagegallery.model.IGFolder;
37  import com.liferay.portlet.imagegallery.model.IGImage;
38  import com.liferay.portlet.imagegallery.model.impl.IGFolderImpl;
39  import com.liferay.portlet.imagegallery.service.IGFolderLocalServiceUtil;
40  import com.liferay.portlet.imagegallery.service.IGFolderServiceUtil;
41  import com.liferay.portlet.imagegallery.service.IGImageLocalServiceUtil;
42  import com.liferay.portlet.imagegallery.service.IGImageServiceUtil;
43  import com.liferay.util.dao.hibernate.QueryUtil;
44  
45  import java.io.File;
46  
47  import java.util.LinkedHashMap;
48  import java.util.List;
49  import java.util.StringTokenizer;
50  
51  import org.w3c.dom.Document;
52  import org.w3c.dom.Element;
53  import org.w3c.dom.Node;
54  
55  /**
56   * <a href="ImageCommandReceiver.java.html"><b><i>View Source</i></b></a>
57   *
58   * @author Ivica Cardic
59   *
60   */
61  public class ImageCommandReceiver extends BaseCommandReceiver {
62  
63      protected String createFolder(CommandArgument arg) {
64          try {
65              Group group = GroupServiceUtil.getGroup(
66                  arg.getCompanyId(), arg.getCurrentGroupName());
67  
68              IGFolder folder = _getFolder(
69                  group.getGroupId(), "/" + arg.getCurrentFolder());
70  
71              IGFolderServiceUtil.addFolder(
72                  arg.getPlid(), folder.getFolderId(), arg.getNewFolder(),
73                  StringPool.BLANK, true, true);
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 = GroupServiceUtil.getGroup(
87                  arg.getCompanyId(), arg.getCurrentGroupName());
88  
89              IGFolder folder = _getFolder(
90                  group.getGroupId(), arg.getCurrentFolder());
91  
92              IGImageServiceUtil.addImage(
93                  folder.getFolderId(), fileName, file, extension, new String[0],
94                  true, true);
95          }
96          catch (Exception e) {
97              throw new FCKException(e);
98          }
99  
100         return "0";
101     }
102 
103     protected void getFolders(CommandArgument arg, Node root, Document doc) {
104         try {
105             _getFolders(arg, root, doc);
106         }
107         catch (Exception e) {
108             throw new FCKException(e);
109         }
110     }
111 
112     protected void getFoldersAndFiles(
113         CommandArgument arg, Node root, Document doc) {
114 
115         try {
116             _getFolders(arg, root, doc);
117             _getFiles(arg, root, doc);
118         }
119         catch (Exception e) {
120             throw new FCKException(e);
121         }
122     }
123 
124     private void _getFiles(CommandArgument arg, Node root, Document doc)
125         throws Exception {
126 
127         Element filesEl = doc.createElement("Files");
128 
129         root.appendChild(filesEl);
130 
131         if (!arg.getCurrentGroupName().equals("")) {
132             Group group = GroupServiceUtil.getGroup(
133                 arg.getCompanyId(), arg.getCurrentGroupName());
134 
135             IGFolder folder = _getFolder(
136                 group.getGroupId(), arg.getCurrentFolder());
137 
138             List images = IGImageLocalServiceUtil.getImages(
139                 folder.getFolderId());
140 
141             for (int i = 0; i < images.size(); i++) {
142                 IGImage image = (IGImage)images.get(i);
143 
144                 long largeImageId = image.getLargeImageId();
145 
146                 Image portalImage = ImageLocalUtil.getImageOrDefault(
147                     largeImageId);
148 
149                 Element fileEl = doc.createElement("File");
150 
151                 filesEl.appendChild(fileEl);
152 
153                 fileEl.setAttribute("name", String.valueOf(image.getImageId()));
154                 fileEl.setAttribute("desc", image.getDescription());
155                 fileEl.setAttribute("size", getSize(portalImage.getSize()));
156 
157                 StringMaker url = new StringMaker();
158 
159                 ThemeDisplay themeDisplay = arg.getThemeDisplay();
160 
161                 url.append(themeDisplay.getPathContext());
162                 url.append("/image/image_gallery?img_id=");
163                 url.append(largeImageId);
164                 url.append("&t=");
165                 url.append(ImageServletTokenUtil.getToken(largeImageId));
166 
167                 fileEl.setAttribute("url", url.toString());
168             }
169         }
170     }
171 
172     private IGFolder _getFolder(long groupId, String folderName)
173         throws Exception {
174 
175         IGFolder folder = new IGFolderImpl();
176 
177         folder.setFolderId(IGFolderImpl.DEFAULT_PARENT_FOLDER_ID);
178 
179         if (!folderName.equals("/")) {
180             StringTokenizer st = new StringTokenizer(folderName, "/");
181 
182             while (st.hasMoreTokens()) {
183                 String curFolderName = (String)st.nextToken();
184 
185                 List folders = IGFolderLocalServiceUtil.getFolders(
186                     groupId, folder.getFolderId());
187 
188                 for (int i = 0; i < folders.size(); i++) {
189                     IGFolder curFolder = (IGFolder)folders.get(i);
190 
191                     if (curFolder.getName().equals(curFolderName)) {
192                         folder = curFolder;
193 
194                         break;
195                     }
196                 }
197             }
198         }
199 
200         return folder;
201     }
202 
203     private void _getFolders(CommandArgument arg, Node root, Document doc)
204         throws Exception {
205 
206         Element foldersEl = doc.createElement("Folders");
207 
208         root.appendChild(foldersEl);
209 
210         if (arg.getCurrentFolder().equals("/")) {
211             LinkedHashMap groupParams = new LinkedHashMap();
212 
213             groupParams.put("usersGroups", new Long(arg.getUserId()));
214 
215             List groups = GroupLocalServiceUtil.search(
216                 arg.getCompanyId(), null, null, groupParams, QueryUtil.ALL_POS,
217                 QueryUtil.ALL_POS);
218 
219             for (int i = 0; i < groups.size(); ++i) {
220                 Group group = (Group)groups.get(i);
221 
222                 Element folderEl = doc.createElement("Folder");
223 
224                 foldersEl.appendChild(folderEl);
225 
226                 folderEl.setAttribute("name", group.getName());
227             }
228         }
229         else {
230             Group group = GroupServiceUtil.getGroup(
231                 arg.getCompanyId(), arg.getCurrentGroupName());
232 
233             IGFolder folder = _getFolder(
234                 group.getGroupId(), arg.getCurrentFolder());
235 
236             List folders = IGFolderLocalServiceUtil.getFolders(
237                 group.getGroupId(), folder.getFolderId());
238 
239             for (int i = 0; i < folders.size(); i++) {
240                 folder = (IGFolder) folders.get(i);
241 
242                 Element folderEl = doc.createElement("Folder");
243 
244                 foldersEl.appendChild(folderEl);
245 
246                 folderEl.setAttribute("name", folder.getName());
247             }
248         }
249     }
250 
251 }