001
014
015 package com.liferay.portal.editor.fckeditor.receiver.impl;
016
017 import com.liferay.portal.NoSuchLayoutException;
018 import com.liferay.portal.editor.fckeditor.command.CommandArgument;
019 import com.liferay.portal.editor.fckeditor.exception.FCKException;
020 import com.liferay.portal.kernel.exception.PortalException;
021 import com.liferay.portal.kernel.exception.SystemException;
022 import com.liferay.portal.kernel.util.StringPool;
023 import com.liferay.portal.model.Group;
024 import com.liferay.portal.model.Layout;
025 import com.liferay.portal.model.LayoutConstants;
026 import com.liferay.portal.service.LayoutLocalServiceUtil;
027 import com.liferay.portal.service.LayoutServiceUtil;
028 import com.liferay.portal.theme.ThemeDisplay;
029 import com.liferay.portal.util.PortalUtil;
030
031 import java.io.InputStream;
032
033 import java.util.ArrayList;
034 import java.util.List;
035
036 import org.w3c.dom.Document;
037 import org.w3c.dom.Element;
038 import org.w3c.dom.Node;
039
040
043 public class PageCommandReceiver extends BaseCommandReceiver {
044
045 @Override
046 protected String createFolder(CommandArgument commandArgument) {
047 return "0";
048 }
049
050 @Override
051 protected String fileUpload(
052 CommandArgument commandArgument, String fileName,
053 InputStream inputStream, String extension, long size) {
054
055 return "0";
056 }
057
058 @Override
059 protected void getFolders(
060 CommandArgument commandArgument, Document document, Node rootNode) {
061
062 try {
063 _getFolders(commandArgument, document, rootNode);
064 }
065 catch (Exception e) {
066 throw new FCKException(e);
067 }
068 }
069
070 @Override
071 protected void getFoldersAndFiles(
072 CommandArgument commandArgument, Document document, Node rootNode) {
073
074 try {
075 _getFolders(commandArgument, document, rootNode);
076 _getFiles(commandArgument, document, rootNode);
077 }
078 catch (Exception e) {
079 throw new FCKException(e);
080 }
081 }
082
083 private void _getFiles(
084 CommandArgument commandArgument, Document document, Node rootNode)
085 throws Exception {
086
087 if (commandArgument.getCurrentFolder().equals(StringPool.SLASH)) {
088 return;
089 }
090
091 Element filesElement = document.createElement("Files");
092
093 rootNode.appendChild(filesElement);
094
095 Group group = commandArgument.getCurrentGroup();
096
097 List<Layout> layouts = new ArrayList<Layout>();
098
099 layouts.addAll(
100 LayoutServiceUtil.getLayouts(
101 group.getGroupId(), false,
102 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID));
103
104 layouts.addAll(
105 LayoutServiceUtil.getLayouts(
106 group.getGroupId(), true,
107 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID));
108
109 if (("/" + commandArgument.getCurrentGroupName() + "/").equals(
110 commandArgument.getCurrentFolder())) {
111
112 for (Layout layout : layouts) {
113 Element fileElement = document.createElement("File");
114
115 filesElement.appendChild(fileElement);
116
117 fileElement.setAttribute("name", _getLayoutName(layout));
118 fileElement.setAttribute("desc", _getLayoutName(layout));
119 fileElement.setAttribute("size", StringPool.BLANK);
120 fileElement.setAttribute(
121 "url",
122 _getRelativeURL(layout, commandArgument.getThemeDisplay()));
123 }
124 }
125 else {
126 String layoutName = _getLayoutName(
127 commandArgument.getCurrentFolder());
128
129 Layout layout = _getLayout(group.getGroupId(), layoutName);
130
131 if (layout == null) {
132 return;
133 }
134
135 List<Layout> layoutChildren = layout.getChildren();
136
137 for (int i = 0; i < layoutChildren.size(); i++) {
138 layout = layoutChildren.get(i);
139
140 Element fileElement = document.createElement("File");
141
142 filesElement.appendChild(fileElement);
143
144 fileElement.setAttribute("name", _getLayoutName(layout));
145 fileElement.setAttribute("desc", _getLayoutName(layout));
146 fileElement.setAttribute("size", getSize());
147 fileElement.setAttribute(
148 "url",
149 _getRelativeURL(layout, commandArgument.getThemeDisplay()));
150 }
151 }
152 }
153
154 private void _getFolders(
155 CommandArgument commandArgument, Document document, Node rootNode)
156 throws Exception {
157
158 Element foldersElement = document.createElement("Folders");
159
160 rootNode.appendChild(foldersElement);
161
162 if (commandArgument.getCurrentFolder().equals(StringPool.SLASH)) {
163 getRootFolders(commandArgument, document, foldersElement);
164 }
165 else {
166 Group group = commandArgument.getCurrentGroup();
167
168 List<Layout> layouts = new ArrayList<Layout>();
169
170 layouts.addAll(
171 LayoutServiceUtil.getLayouts(
172 group.getGroupId(), false,
173 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID));
174
175 layouts.addAll(
176 LayoutServiceUtil.getLayouts(
177 group.getGroupId(), true,
178 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID));
179
180 if (("/" + commandArgument.getCurrentGroupName() + "/").equals(
181 commandArgument.getCurrentFolder())) {
182
183 for (Layout layout : layouts) {
184 Element folderElement = document.createElement("Folder");
185
186 foldersElement.appendChild(folderElement);
187
188 folderElement.setAttribute(
189 "name", "~" + _getLayoutName(layout).replace('/', '>'));
190 }
191 }
192 else {
193 String layoutName = _getLayoutName(
194 commandArgument.getCurrentFolder());
195
196 Layout layout = _getLayout(group.getGroupId(), layoutName);
197
198 if (layout != null) {
199 List<Layout> layoutChildren = layout.getChildren();
200
201 for (int i = 0; i < layoutChildren.size(); i++) {
202 layout = layoutChildren.get(i);
203
204 Element folderElement = document.createElement(
205 "Folder");
206
207 foldersElement.appendChild(folderElement);
208
209 folderElement.setAttribute(
210 "name",
211 "~" + _getLayoutName(layout).replace('/', '>'));
212 }
213 }
214 }
215 }
216 }
217
218 private Layout _getLayout(long groupId, String layoutName)
219 throws Exception {
220
221 Layout layout = null;
222
223 try {
224 layout = LayoutLocalServiceUtil.getFriendlyURLLayout(
225 groupId, false, layoutName);
226
227 return layout;
228 }
229 catch (NoSuchLayoutException nsle) {
230 }
231
232 try {
233 layout = LayoutLocalServiceUtil.getFriendlyURLLayout(
234 groupId, true, layoutName);
235
236 return layout;
237 }
238 catch (NoSuchLayoutException nsle) {
239 }
240
241 return null;
242 }
243
244 private String _getLayoutName(Layout layout) {
245 return layout.getFriendlyURL();
246 }
247
248 private String _getLayoutName(String folderName) {
249 String layoutName = folderName.substring(
250 folderName.lastIndexOf('~') + 1, folderName.length() - 1);
251
252 layoutName = layoutName.replace('>', '/');
253
254 return layoutName;
255 }
256
257 private String _getRelativeURL(Layout layout, ThemeDisplay themeDisplay)
258 throws PortalException, SystemException {
259
260 String layoutFullURL = PortalUtil.getLayoutFullURL(
261 layout, themeDisplay, false);
262
263 String canonicalURL = PortalUtil.getCanonicalURL(
264 layoutFullURL, themeDisplay, layout, true);
265
266 String portalURL = themeDisplay.getPortalURL();
267
268 if (canonicalURL.startsWith(portalURL)) {
269 return canonicalURL.substring(portalURL.length());
270 }
271
272 return canonicalURL;
273 }
274
275 }