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.portal.editor.fckeditor.receiver.impl;
21  
22  import com.liferay.portal.editor.fckeditor.command.CommandArgument;
23  import com.liferay.portal.editor.fckeditor.exception.FCKException;
24  import com.liferay.portal.kernel.servlet.ImageServletTokenUtil;
25  import com.liferay.portal.kernel.util.StringPool;
26  import com.liferay.portal.kernel.util.Validator;
27  import com.liferay.portal.model.Group;
28  import com.liferay.portal.model.Image;
29  import com.liferay.portal.service.ImageLocalServiceUtil;
30  import com.liferay.portal.theme.ThemeDisplay;
31  import com.liferay.portlet.imagegallery.model.IGFolder;
32  import com.liferay.portlet.imagegallery.model.IGImage;
33  import com.liferay.portlet.imagegallery.model.impl.IGFolderImpl;
34  import com.liferay.portlet.imagegallery.service.IGFolderServiceUtil;
35  import com.liferay.portlet.imagegallery.service.IGImageServiceUtil;
36  
37  import java.io.File;
38  
39  import java.util.List;
40  import java.util.StringTokenizer;
41  
42  import org.w3c.dom.Document;
43  import org.w3c.dom.Element;
44  import org.w3c.dom.Node;
45  
46  /**
47   * <a href="ImageCommandReceiver.java.html"><b><i>View Source</i></b></a>
48   *
49   * @author Ivica Cardic
50   *
51   */
52  public class ImageCommandReceiver extends BaseCommandReceiver {
53  
54      protected String createFolder(CommandArgument arg) {
55          try {
56              Group group = arg.getCurrentGroup();
57  
58              IGFolder folder = _getFolder(
59                  group.getGroupId(), StringPool.SLASH + arg.getCurrentFolder());
60  
61              long plid = arg.getPlid();
62              long parentFolderId = folder.getFolderId();
63              String name = arg.getNewFolder();
64              String description = StringPool.BLANK;
65              boolean addCommunityPermissions = true;
66              boolean addGuestPermissions = true;
67  
68              IGFolderServiceUtil.addFolder(
69                  plid, parentFolderId, name, description,
70                  addCommunityPermissions, addGuestPermissions);
71          }
72          catch (Exception e) {
73              throw new FCKException(e);
74          }
75  
76          return "0";
77      }
78  
79      protected String fileUpload(
80          CommandArgument arg, String fileName, File file, String extension) {
81  
82          try {
83              Group group = arg.getCurrentGroup();
84  
85              IGFolder folder = _getFolder(
86                  group.getGroupId(), arg.getCurrentFolder());
87  
88              long folderId = folder.getFolderId();
89              String name = fileName;
90              String description = StringPool.BLANK;
91              String contentType = extension.toLowerCase();
92              String[] tagsEntries = null;
93              boolean addCommunityPermissions = true;
94              boolean addGuestPermissions = true;
95  
96              IGImageServiceUtil.addImage(
97                  folderId, name, description, file, contentType, tagsEntries,
98                  addCommunityPermissions, addGuestPermissions);
99          }
100         catch (Exception e) {
101             throw new FCKException(e);
102         }
103 
104         return "0";
105     }
106 
107     protected void getFolders(CommandArgument arg, Document doc, Node root) {
108         try {
109             _getFolders(arg, doc, root);
110         }
111         catch (Exception e) {
112             throw new FCKException(e);
113         }
114     }
115 
116     protected void getFoldersAndFiles(
117         CommandArgument arg, Document doc, Node root) {
118 
119         try {
120             _getFolders(arg, doc, root);
121             _getFiles(arg, doc, root);
122         }
123         catch (Exception e) {
124             throw new FCKException(e);
125         }
126     }
127 
128     private void _getFiles(CommandArgument arg, Document doc, Node root)
129         throws Exception {
130 
131         Element filesEl = doc.createElement("Files");
132 
133         root.appendChild(filesEl);
134 
135         if (Validator.isNull(arg.getCurrentGroupName())) {
136             return;
137         }
138 
139         Group group = arg.getCurrentGroup();
140 
141         IGFolder folder = _getFolder(
142             group.getGroupId(), arg.getCurrentFolder());
143 
144         List<IGImage> images = IGImageServiceUtil.getImages(
145             folder.getFolderId());
146 
147         for (IGImage image : images) {
148             long largeImageId = image.getLargeImageId();
149 
150             Image portalImage = ImageLocalServiceUtil.getImageOrDefault(
151                 largeImageId);
152 
153             Element fileEl = doc.createElement("File");
154 
155             filesEl.appendChild(fileEl);
156 
157             fileEl.setAttribute("name", image.getNameWithExtension());
158             fileEl.setAttribute("desc", image.getNameWithExtension());
159             fileEl.setAttribute("size", getSize(portalImage.getSize()));
160 
161             StringBuilder url = new StringBuilder();
162 
163             ThemeDisplay themeDisplay = arg.getThemeDisplay();
164 
165             url.append(themeDisplay.getPathImage());
166             url.append("/image_gallery?uuid=");
167             url.append(image.getUuid());
168             url.append("&groupId=");
169             url.append(folder.getGroupId());
170             url.append("&t=");
171             url.append(ImageServletTokenUtil.getToken(largeImageId));
172 
173             fileEl.setAttribute("url", url.toString());
174         }
175     }
176 
177     private IGFolder _getFolder(long groupId, String folderName)
178         throws Exception {
179 
180         IGFolder folder = new IGFolderImpl();
181 
182         folder.setFolderId(IGFolderImpl.DEFAULT_PARENT_FOLDER_ID);
183 
184         if (folderName.equals(StringPool.SLASH)) {
185             return folder;
186         }
187 
188         StringTokenizer st = new StringTokenizer(folderName, StringPool.SLASH);
189 
190         while (st.hasMoreTokens()) {
191             String curFolderName = st.nextToken();
192 
193             List<IGFolder> folders = IGFolderServiceUtil.getFolders(
194                 groupId, folder.getFolderId());
195 
196             for (IGFolder curFolder : folders) {
197                 if (curFolder.getName().equals(curFolderName)) {
198                     folder = curFolder;
199 
200                     break;
201                 }
202             }
203         }
204 
205         return folder;
206     }
207 
208     private void _getFolders(CommandArgument arg, Document doc, Node root)
209         throws Exception {
210 
211         Element foldersEl = doc.createElement("Folders");
212 
213         root.appendChild(foldersEl);
214 
215         if (arg.getCurrentFolder().equals(StringPool.SLASH)) {
216             getRootFolders(arg, doc, foldersEl);
217         }
218         else {
219             Group group = arg.getCurrentGroup();
220 
221             IGFolder folder = _getFolder(
222                 group.getGroupId(), arg.getCurrentFolder());
223 
224             List<IGFolder> folders = IGFolderServiceUtil.getFolders(
225                 group.getGroupId(), folder.getFolderId());
226 
227             for (IGFolder curFolder : folders) {
228                 Element folderEl = doc.createElement("Folder");
229 
230                 foldersEl.appendChild(folderEl);
231 
232                 folderEl.setAttribute("name", curFolder.getName());
233             }
234         }
235     }
236 
237 }