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 fileElement.setAttribute("name", fileEntry.getTitle());
175 fileElement.setAttribute("desc", fileEntry.getTitle());
176 fileElement.setAttribute("size", getSize(fileEntry.getSize()));
177
178 ThemeDisplay themeDisplay = commandArgument.getThemeDisplay();
179
180 String url = DLUtil.getPreviewURL(
181 fileEntry, fileEntry.getFileVersion(), themeDisplay,
182 StringPool.BLANK, false, false);
183
184 fileElement.setAttribute("url", url);
185 }
186 }
187
188 private Folder _getFolder(long groupId, String folderName)
189 throws Exception {
190
191 DLFolder dlFolder = new DLFolderImpl();
192
193 dlFolder.setFolderId(DLFolderConstants.DEFAULT_PARENT_FOLDER_ID);
194 dlFolder.setGroupId(groupId);
195 dlFolder.setRepositoryId(groupId);
196
197 Folder folder = new LiferayFolder(dlFolder);
198
199 if (folderName.equals(StringPool.SLASH)) {
200 return folder;
201 }
202
203 StringTokenizer st = new StringTokenizer(folderName, StringPool.SLASH);
204
205 while (st.hasMoreTokens()) {
206 String curFolderName = st.nextToken();
207
208 List<Folder> folders = DLAppServiceUtil.getFolders(
209 folder.getRepositoryId(), folder.getFolderId());
210
211 for (Folder curFolder : folders) {
212 if (curFolder.getName().equals(curFolderName)) {
213 folder = curFolder;
214
215 break;
216 }
217 }
218 }
219
220 return folder;
221 }
222
223 private void _getFolders(
224 CommandArgument commandArgument, Document document, Node rootNode)
225 throws Exception {
226
227 Element foldersElement = document.createElement("Folders");
228
229 rootNode.appendChild(foldersElement);
230
231 if (commandArgument.getCurrentFolder().equals(StringPool.SLASH)) {
232 getRootFolders(commandArgument, document, foldersElement);
233 }
234 else {
235 Group group = commandArgument.getCurrentGroup();
236
237 Folder folder = _getFolder(
238 group.getGroupId(), commandArgument.getCurrentFolder());
239
240 List<Folder> folders = DLAppServiceUtil.getFolders(
241 folder.getRepositoryId(), folder.getFolderId());
242
243 for (Folder curFolder : folders) {
244 Element folderElement = document.createElement("Folder");
245
246 foldersElement.appendChild(folderElement);
247
248 folderElement.setAttribute("name", curFolder.getName());
249 }
250 }
251 }
252
253 private static Log _log = LogFactoryUtil.getLog(
254 DocumentCommandReceiver.class);
255
256 }