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