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