1
22
23 package com.liferay.portlet.documentlibrary.util;
24
25 import com.liferay.portal.SystemException;
26 import com.liferay.portal.kernel.language.LanguageUtil;
27 import com.liferay.portal.kernel.log.Log;
28 import com.liferay.portal.kernel.log.LogFactoryUtil;
29 import com.liferay.portal.kernel.portlet.LiferayWindowState;
30 import com.liferay.portal.kernel.util.ParamUtil;
31 import com.liferay.portal.kernel.util.StringPool;
32 import com.liferay.portal.kernel.util.Validator;
33 import com.liferay.portal.util.PrefsPropsUtil;
34 import com.liferay.portal.util.PropsKeys;
35 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
36 import com.liferay.portlet.documentlibrary.model.DLFolder;
37 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
38 import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
39
40 import java.util.HashSet;
41 import java.util.Set;
42
43 import javax.portlet.PortletURL;
44 import javax.portlet.RenderRequest;
45 import javax.portlet.RenderResponse;
46 import javax.portlet.WindowState;
47
48 import javax.servlet.jsp.PageContext;
49
50
56 public class DLUtil {
57
58 public static String getBreadcrumbs(
59 long folderId, String name, long rootFolderId,
60 PageContext pageContext, RenderRequest renderRequest,
61 RenderResponse renderResponse)
62 throws Exception {
63
64 if ((folderId > 0) && Validator.isNotNull(name)) {
65 DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.getFileEntry(
66 folderId, name);
67
68 return getBreadcrumbs(
69 fileEntry.getFolder(), fileEntry, rootFolderId, pageContext,
70 renderRequest, renderResponse);
71 }
72 else {
73 DLFolder folder = null;
74
75 try {
76 folder = DLFolderLocalServiceUtil.getFolder(folderId);
77 }
78 catch (Exception e) {
79 }
80
81 return getBreadcrumbs(
82 folder, null, rootFolderId, pageContext, renderRequest,
83 renderResponse);
84 }
85 }
86
87 public static String getBreadcrumbs(
88 DLFolder folder, DLFileEntry fileEntry, long rootFolderId,
89 PageContext pageContext, RenderRequest renderRequest,
90 RenderResponse renderResponse)
91 throws Exception {
92
93 String strutsAction = ParamUtil.getString(
94 renderRequest, "struts_action");
95
96 long groupId = ParamUtil.getLong(renderRequest, "groupId");
97
98 if ((fileEntry != null) && (folder == null)) {
99 folder = fileEntry.getFolder();
100 }
101
102 PortletURL foldersURL = renderResponse.createRenderURL();
103
104 WindowState windowState = renderRequest.getWindowState();
105
106 if (windowState.equals(LiferayWindowState.POP_UP)) {
107 foldersURL.setWindowState(LiferayWindowState.POP_UP);
108
109 foldersURL.setParameter("struts_action", strutsAction);
110 foldersURL.setParameter("groupId", String.valueOf(groupId));
111 }
112 else {
113
115 foldersURL.setParameter("struts_action", "/document_library/view");
116 }
117
118 String foldersLink =
119 "<a href=\"" + foldersURL.toString() + "\">" +
120 LanguageUtil.get(pageContext, "folders") + "</a>";
121
122 if (folder == null) {
123 return "<span class=\"first last\">" + foldersLink + "</span>";
124 }
125
126 String breadcrumbs = StringPool.BLANK;
127
128 if (folder != null) {
129 for (int i = 0;; i++) {
130 folder = folder.toEscapedModel();
131
132 PortletURL portletURL = renderResponse.createRenderURL();
133
134 if (windowState.equals(LiferayWindowState.POP_UP)) {
135 portletURL.setWindowState(LiferayWindowState.POP_UP);
136
137 portletURL.setParameter("struts_action", strutsAction);
138 portletURL.setParameter("groupId", String.valueOf(groupId));
139 portletURL.setParameter(
140 "folderId", String.valueOf(folder.getFolderId()));
141 }
142 else {
143
145 portletURL.setParameter(
146 "struts_action", "/document_library/view");
147 portletURL.setParameter(
148 "folderId", String.valueOf(folder.getFolderId()));
149 }
150
151 String folderLink =
152 "<a href=\"" + portletURL.toString() + "\">" +
153 folder.getName() + "</a>";
154
155 if (i == 0) {
156 if (fileEntry != null) {
157 breadcrumbs += folderLink;
158 }
159 else {
160 breadcrumbs =
161 "<span class=\"last\">" + folderLink + "</span>";
162 }
163 }
164 else {
165 breadcrumbs = folderLink + " » " + breadcrumbs;
166 }
167
168 if (folder.isRoot() || (folder.getFolderId() == rootFolderId)) {
169 break;
170 }
171
172 folder = DLFolderLocalServiceUtil.getFolder(
173 folder.getParentFolderId());
174 }
175 }
176
177 breadcrumbs =
178 "<span class=\"first\">" + foldersLink + " » </span>" +
179 breadcrumbs;
180
181 if (fileEntry != null) {
182 fileEntry = fileEntry.toEscapedModel();
183
184 PortletURL fileEntryURL = renderResponse.createRenderURL();
185
186
188 fileEntryURL.setParameter(
189 "struts_action", "/document_library/edit_file_entry");
190 fileEntryURL.setParameter(
191 "folderId", String.valueOf(fileEntry.getFolderId()));
192 fileEntryURL.setParameter("name", fileEntry.getName());
193
194 String fileEntryLink =
195 "<span class=\"last\"><a href=\"" + fileEntryURL.toString() +
196 "\">" + fileEntry.getName() + "</a></span>";
197
198 breadcrumbs = breadcrumbs + " » " + fileEntryLink;
199 }
200
201 return breadcrumbs;
202 }
203
204 public static String getFileExtension(String name) {
205 return _instance._getFileExtension(name);
206 }
207
208 public static String getLockId(long folderId, String name) {
209 StringBuilder sb = new StringBuilder();
210
211 sb.append(folderId);
212 sb.append(StringPool.POUND);
213 sb.append(name);
214
215 return sb.toString();
216 }
217
218 private DLUtil() {
219 _fileExtensions = new HashSet<String>();
220
221 String[] fileExtensions = null;
222
223 try {
224 fileExtensions = PrefsPropsUtil.getStringArray(
225 PropsKeys.DL_FILE_EXTENSIONS, StringPool.COMMA);
226 }
227 catch (SystemException se) {
228 _log.error(se, se);
229
230 fileExtensions = new String[] {StringPool.BLANK};
231 }
232
233 for (int i = 0; i < fileExtensions.length; i++) {
234
235
237 if (!StringPool.STAR.equals(fileExtensions[i])) {
238
239
241 String extension = fileExtensions[i];
242 extension = extension.substring(1, extension.length());
243
244 _fileExtensions.add(extension);
245 }
246 }
247 }
248
249 private String _getFileExtension(String name) {
250 String extension = StringPool.BLANK;
251
252 int pos = name.lastIndexOf(StringPool.PERIOD);
253
254 if (pos != -1) {
255 extension = name.substring(pos + 1, name.length()).toLowerCase();
256 }
257
258 if (!_fileExtensions.contains(extension)) {
259 extension = _DEFAULT_FILE_EXTENSION;
260 }
261
262 return extension;
263 }
264
265 private static final String _DEFAULT_FILE_EXTENSION = "page";
266
267 private static Log _log = LogFactoryUtil.getLog(DLUtil.class);
268
269 private static DLUtil _instance = new DLUtil();
270
271 private Set<String> _fileExtensions;
272
273 }