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.theme.ThemeDisplay;
030 import com.liferay.portal.util.PortletKeys;
031 import com.liferay.portlet.documentlibrary.model.DLFolder;
032 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
033 import com.liferay.portlet.documentlibrary.model.impl.DLFolderImpl;
034 import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil;
035 import com.liferay.portlet.documentlibrary.util.DLUtil;
036
037 import java.io.InputStream;
038
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 @Override
115 protected void getFolders(
116 CommandArgument commandArgument, Document document, Node rootNode) {
117
118 try {
119 _getFolders(commandArgument, document, rootNode);
120 }
121 catch (Exception e) {
122 throw new FCKException(e);
123 }
124 }
125
126 @Override
127 protected void getFoldersAndFiles(
128 CommandArgument commandArgument, Document document, Node rootNode) {
129
130 try {
131 _getFolders(commandArgument, document, rootNode);
132 _getFiles(commandArgument, document, rootNode);
133 }
134 catch (PrincipalException pe) {
135 if (_log.isWarnEnabled()) {
136 _log.warn(pe, pe);
137 }
138 }
139 catch (Exception e) {
140 throw new FCKException(e);
141 }
142 }
143
144 @Override
145 protected boolean isStagedData(Group group) {
146 return group.isStagedPortlet(PortletKeys.DOCUMENT_LIBRARY);
147 }
148
149 private void _getFiles(
150 CommandArgument commandArgument, Document document, Node rootNode)
151 throws Exception {
152
153 Element filesElement = document.createElement("Files");
154
155 rootNode.appendChild(filesElement);
156
157 if (Validator.isNull(commandArgument.getCurrentGroupName())) {
158 return;
159 }
160
161 Group group = commandArgument.getCurrentGroup();
162
163 Folder folder = _getFolder(
164 group.getGroupId(), commandArgument.getCurrentFolder());
165
166 List<FileEntry> fileEntries = DLAppServiceUtil.getFileEntries(
167 folder.getRepositoryId(), folder.getFolderId());
168
169 for (FileEntry fileEntry : fileEntries) {
170 Element fileElement = document.createElement("File");
171
172 filesElement.appendChild(fileElement);
173
174 String name = fileEntry.getTitle();
175
176 String extension = fileEntry.getExtension();
177
178 if (Validator.isNotNull(extension)) {
179 String periodAndExtension = StringPool.PERIOD.concat(extension);
180
181 if (!name.endsWith(periodAndExtension)) {
182 name = name.concat(periodAndExtension);
183 }
184 }
185
186 fileElement.setAttribute("name", name);
187 fileElement.setAttribute("desc", name);
188
189 fileElement.setAttribute("size", getSize(fileEntry.getSize()));
190
191 ThemeDisplay themeDisplay = commandArgument.getThemeDisplay();
192
193 String url = DLUtil.getPreviewURL(
194 fileEntry, fileEntry.getFileVersion(), themeDisplay,
195 StringPool.BLANK, false, false);
196
197 fileElement.setAttribute("url", url);
198 }
199 }
200
201 private Folder _getFolder(long groupId, String folderName)
202 throws Exception {
203
204 DLFolder dlFolder = new DLFolderImpl();
205
206 dlFolder.setFolderId(DLFolderConstants.DEFAULT_PARENT_FOLDER_ID);
207 dlFolder.setGroupId(groupId);
208 dlFolder.setRepositoryId(groupId);
209
210 Folder folder = new LiferayFolder(dlFolder);
211
212 if (folderName.equals(StringPool.SLASH)) {
213 return folder;
214 }
215
216 StringTokenizer st = new StringTokenizer(folderName, StringPool.SLASH);
217
218 while (st.hasMoreTokens()) {
219 String curFolderName = st.nextToken();
220
221 List<Folder> folders = DLAppServiceUtil.getFolders(
222 folder.getRepositoryId(), folder.getFolderId());
223
224 for (Folder curFolder : folders) {
225 if (curFolder.getName().equals(curFolderName)) {
226 folder = curFolder;
227
228 break;
229 }
230 }
231 }
232
233 return folder;
234 }
235
236 private void _getFolders(
237 CommandArgument commandArgument, Document document, Node rootNode)
238 throws Exception {
239
240 Element foldersElement = document.createElement("Folders");
241
242 rootNode.appendChild(foldersElement);
243
244 if (commandArgument.getCurrentFolder().equals(StringPool.SLASH)) {
245 getRootFolders(commandArgument, document, foldersElement);
246 }
247 else {
248 Group group = commandArgument.getCurrentGroup();
249
250 Folder folder = _getFolder(
251 group.getGroupId(), commandArgument.getCurrentFolder());
252
253 List<Folder> folders = DLAppServiceUtil.getFolders(
254 folder.getRepositoryId(), folder.getFolderId());
255
256 for (Folder curFolder : folders) {
257 Element folderElement = document.createElement("Folder");
258
259 foldersElement.appendChild(folderElement);
260
261 folderElement.setAttribute("name", curFolder.getName());
262 }
263 }
264 }
265
266 private static Log _log = LogFactoryUtil.getLog(
267 DocumentCommandReceiver.class);
268
269 }