001
014
015 package com.liferay.portal.editor.fckeditor.receiver.impl;
016
017 import com.liferay.portal.editor.fckeditor.command.CommandArgument;
018 import com.liferay.portal.editor.fckeditor.exception.FCKException;
019 import com.liferay.portal.kernel.dao.orm.QueryUtil;
020 import com.liferay.portal.kernel.log.Log;
021 import com.liferay.portal.kernel.log.LogFactoryUtil;
022 import com.liferay.portal.kernel.repository.model.FileEntry;
023 import com.liferay.portal.kernel.repository.model.Folder;
024 import com.liferay.portal.kernel.util.OrderByComparator;
025 import com.liferay.portal.kernel.util.StringPool;
026 import com.liferay.portal.kernel.util.Validator;
027 import com.liferay.portal.model.Group;
028 import com.liferay.portal.repository.liferayrepository.model.LiferayFolder;
029 import com.liferay.portal.security.auth.PrincipalException;
030 import com.liferay.portal.service.ServiceContext;
031 import com.liferay.portal.util.PortletKeys;
032 import com.liferay.portlet.documentlibrary.model.DLFolder;
033 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
034 import com.liferay.portlet.documentlibrary.model.impl.DLFolderImpl;
035 import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil;
036 import com.liferay.portlet.documentlibrary.util.DLUtil;
037 import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelModifiedDateComparator;
038 import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelNameComparator;
039 import com.liferay.portlet.documentlibrary.util.comparator.RepositoryModelSizeComparator;
040
041 import java.io.InputStream;
042
043 import java.util.ArrayList;
044 import java.util.Collections;
045 import java.util.List;
046 import java.util.StringTokenizer;
047
048 import org.w3c.dom.Document;
049 import org.w3c.dom.Element;
050 import org.w3c.dom.Node;
051
052
055 public class DocumentCommandReceiver extends BaseCommandReceiver {
056
057 @Override
058 protected String createFolder(CommandArgument commandArgument) {
059 try {
060 Group group = commandArgument.getCurrentGroup();
061
062 Folder folder = _getFolder(
063 group.getGroupId(),
064 StringPool.SLASH + commandArgument.getCurrentFolder());
065
066 long repositoryId = folder.getRepositoryId();
067 long parentFolderId = folder.getFolderId();
068 String name = commandArgument.getNewFolder();
069 String description = StringPool.BLANK;
070
071 ServiceContext serviceContext = new ServiceContext();
072
073 serviceContext.setAddGroupPermissions(true);
074 serviceContext.setAddGuestPermissions(true);
075
076 DLAppServiceUtil.addFolder(
077 repositoryId, parentFolderId, name, description,
078 serviceContext);
079 }
080 catch (Exception e) {
081 throw new FCKException(e);
082 }
083
084 return "0";
085 }
086
087 @Override
088 protected String fileUpload(
089 CommandArgument commandArgument, String fileName,
090 InputStream inputStream, String contentType, long size) {
091
092 try {
093 Group group = commandArgument.getCurrentGroup();
094
095 Folder folder = _getFolder(
096 group.getGroupId(), commandArgument.getCurrentFolder());
097
098 long repositoryId = folder.getRepositoryId();
099 long folderId = folder.getFolderId();
100 String title = fileName;
101 String description = StringPool.BLANK;
102 String changeLog = StringPool.BLANK;
103
104 ServiceContext serviceContext = new ServiceContext();
105
106 serviceContext.setAddGroupPermissions(true);
107 serviceContext.setAddGuestPermissions(true);
108
109 DLAppServiceUtil.addFileEntry(
110 repositoryId, folderId, title, contentType, title, description,
111 changeLog, inputStream, size, serviceContext);
112 }
113 catch (Exception e) {
114 throw new FCKException(e);
115 }
116
117 return "0";
118 }
119
120 protected Element getFileElement(
121 CommandArgument commandArgument, Element fileElement,
122 FileEntry fileEntry)
123 throws Exception {
124
125 String name = fileEntry.getTitle();
126
127 String extension = fileEntry.getExtension();
128
129 if (Validator.isNotNull(extension)) {
130 String periodAndExtension = StringPool.PERIOD.concat(extension);
131
132 if (!name.endsWith(periodAndExtension)) {
133 name = name.concat(periodAndExtension);
134 }
135 }
136
137 fileElement.setAttribute("name", name);
138
139 String description = fileEntry.getDescription();
140
141 fileElement.setAttribute(
142 "desc", Validator.isNotNull(description) ? description : name);
143
144 fileElement.setAttribute("size", getSize(fileEntry.getSize()));
145
146 String url = DLUtil.getPreviewURL(
147 fileEntry, fileEntry.getFileVersion(),
148 commandArgument.getThemeDisplay(), StringPool.BLANK, false, false);
149
150 fileElement.setAttribute("url", url);
151
152 return fileElement;
153 }
154
155 protected List<Element> getFileElements(
156 CommandArgument commandArgument, Document document, Folder folder)
157 throws Exception {
158
159 List<FileEntry> fileEntries = Collections.<FileEntry>emptyList();
160
161 String sortType = commandArgument.getSortType();
162
163 if (Validator.isNotNull(sortType)) {
164 boolean ascending = commandArgument.getAscending();
165
166 OrderByComparator obc = null;
167
168 if (sortType.equals("Modified Date")) {
169 obc = new RepositoryModelModifiedDateComparator(ascending);
170 }
171 else if (sortType.equals("Size")) {
172 obc = new RepositoryModelSizeComparator(ascending);
173 }
174 else if (sortType.equals("Title")) {
175 obc = new RepositoryModelNameComparator(ascending);
176 }
177
178 fileEntries = DLAppServiceUtil.getFileEntries(
179 folder.getRepositoryId(), folder.getFolderId(),
180 QueryUtil.ALL_POS, QueryUtil.ALL_POS, obc);
181 }
182 else {
183 fileEntries = DLAppServiceUtil.getFileEntries(
184 folder.getRepositoryId(), folder.getFolderId());
185 }
186
187 List<Element> fileElements = new ArrayList<Element>(fileEntries.size());
188
189 for (FileEntry fileEntry : fileEntries) {
190 Element fileElement = document.createElement("File");
191
192 fileElement = getFileElement(
193 commandArgument, fileElement, fileEntry);
194
195 fileElements.add(fileElement);
196 }
197
198 return fileElements;
199 }
200
201 @Override
202 protected void getFolders(
203 CommandArgument commandArgument, Document document, Node rootNode) {
204
205 try {
206 _getFolders(commandArgument, document, rootNode);
207 }
208 catch (Exception e) {
209 throw new FCKException(e);
210 }
211 }
212
213 @Override
214 protected void getFoldersAndFiles(
215 CommandArgument commandArgument, Document document, Node rootNode) {
216
217 try {
218 _getFolders(commandArgument, document, rootNode);
219 _getFiles(commandArgument, document, rootNode);
220 }
221 catch (PrincipalException pe) {
222 if (_log.isWarnEnabled()) {
223 _log.warn(pe, pe);
224 }
225 }
226 catch (Exception e) {
227 throw new FCKException(e);
228 }
229 }
230
231 @Override
232 protected boolean isStagedData(Group group) {
233 return group.isStagedPortlet(PortletKeys.DOCUMENT_LIBRARY);
234 }
235
236 private void _getFiles(
237 CommandArgument commandArgument, Document document, Node rootNode)
238 throws Exception {
239
240 Element filesElement = document.createElement("Files");
241
242 rootNode.appendChild(filesElement);
243
244 if (Validator.isNull(commandArgument.getCurrentGroupName())) {
245 return;
246 }
247
248 Group group = commandArgument.getCurrentGroup();
249
250 Folder folder = _getFolder(
251 group.getGroupId(), commandArgument.getCurrentFolder());
252
253 List<Element> fileElements = getFileElements(
254 commandArgument, document, folder);
255
256 for (Element fileElement : fileElements) {
257 filesElement.appendChild(fileElement);
258 }
259 }
260
261 private Folder _getFolder(long groupId, String folderName)
262 throws Exception {
263
264 DLFolder dlFolder = new DLFolderImpl();
265
266 dlFolder.setFolderId(DLFolderConstants.DEFAULT_PARENT_FOLDER_ID);
267 dlFolder.setGroupId(groupId);
268 dlFolder.setRepositoryId(groupId);
269
270 Folder folder = new LiferayFolder(dlFolder);
271
272 if (folderName.equals(StringPool.SLASH)) {
273 return folder;
274 }
275
276 StringTokenizer st = new StringTokenizer(folderName, StringPool.SLASH);
277
278 while (st.hasMoreTokens()) {
279 String curFolderName = st.nextToken();
280
281 List<Folder> folders = DLAppServiceUtil.getFolders(
282 folder.getRepositoryId(), folder.getFolderId());
283
284 for (Folder curFolder : folders) {
285 if (curFolder.getName().equals(curFolderName)) {
286 folder = curFolder;
287
288 break;
289 }
290 }
291 }
292
293 return folder;
294 }
295
296 private void _getFolders(
297 CommandArgument commandArgument, Document document, Node rootNode)
298 throws Exception {
299
300 Element foldersElement = document.createElement("Folders");
301
302 rootNode.appendChild(foldersElement);
303
304 if (commandArgument.getCurrentFolder().equals(StringPool.SLASH)) {
305 getRootFolders(commandArgument, document, foldersElement);
306 }
307 else {
308 Group group = commandArgument.getCurrentGroup();
309
310 Folder folder = _getFolder(
311 group.getGroupId(), commandArgument.getCurrentFolder());
312
313 List<Folder> folders = DLAppServiceUtil.getFolders(
314 folder.getRepositoryId(), folder.getFolderId());
315
316 for (Folder curFolder : folders) {
317 Element folderElement = document.createElement("Folder");
318
319 foldersElement.appendChild(folderElement);
320
321 folderElement.setAttribute("name", curFolder.getName());
322 }
323 }
324 }
325
326 private static Log _log = LogFactoryUtil.getLog(
327 DocumentCommandReceiver.class);
328
329 }