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