001
014
015 package com.liferay.portlet.documentlibrary.util;
016
017 import com.liferay.portal.kernel.configuration.Filter;
018 import com.liferay.portal.kernel.log.Log;
019 import com.liferay.portal.kernel.log.LogFactoryUtil;
020 import com.liferay.portal.kernel.portlet.LiferayWindowState;
021 import com.liferay.portal.kernel.util.GetterUtil;
022 import com.liferay.portal.kernel.util.ParamUtil;
023 import com.liferay.portal.kernel.util.PrefsPropsUtil;
024 import com.liferay.portal.kernel.util.PropsKeys;
025 import com.liferay.portal.kernel.util.PropsUtil;
026 import com.liferay.portal.kernel.util.StringBundler;
027 import com.liferay.portal.kernel.util.StringPool;
028 import com.liferay.portal.kernel.util.StringUtil;
029 import com.liferay.portal.kernel.util.WebKeys;
030 import com.liferay.portal.theme.ThemeDisplay;
031 import com.liferay.portal.util.PortalUtil;
032 import com.liferay.portlet.PortletPreferencesFactoryUtil;
033 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
034 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
035 import com.liferay.portlet.documentlibrary.model.DLFolder;
036 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
037 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
038 import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
039
040 import java.util.Collections;
041 import java.util.HashMap;
042 import java.util.HashSet;
043 import java.util.List;
044 import java.util.Map;
045 import java.util.Set;
046
047 import javax.portlet.PortletPreferences;
048 import javax.portlet.PortletURL;
049 import javax.portlet.RenderResponse;
050
051 import javax.servlet.http.HttpServletRequest;
052
053
057 public class DLUtil {
058
059 public static void addPortletBreadcrumbEntries(
060 DLFileEntry fileEntry, HttpServletRequest request,
061 RenderResponse renderResponse)
062 throws Exception {
063
064 DLFolder folder = fileEntry.getFolder();
065
066 if (folder.getFolderId() !=
067 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
068
069 addPortletBreadcrumbEntries(folder, request, renderResponse);
070 }
071
072 PortletURL portletURL = renderResponse.createRenderURL();
073
074 portletURL.setParameter(
075 "struts_action", "/document_library/view_file_entry");
076 portletURL.setParameter(
077 "folderId", String.valueOf(fileEntry.getFolderId()));
078 portletURL.setParameter("name", fileEntry.getName());
079
080 PortalUtil.addPortletBreadcrumbEntry(
081 request, fileEntry.getTitle(), portletURL.toString());
082 }
083
084 public static void addPortletBreadcrumbEntries(
085 DLFileShortcut fileShortcut, HttpServletRequest request,
086 RenderResponse renderResponse)
087 throws Exception {
088
089 DLFolder folder = fileShortcut.getFolder();
090
091 if (folder.getFolderId() !=
092 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
093
094 addPortletBreadcrumbEntries(folder, request, renderResponse);
095 }
096
097 PortletURL portletURL = renderResponse.createRenderURL();
098
099 portletURL.setParameter(
100 "struts_action", "/document_library/view_file_shortcut");
101 portletURL.setParameter(
102 "fileShortcutId", String.valueOf(fileShortcut.getFileShortcutId()));
103
104 PortalUtil.addPortletBreadcrumbEntry(
105 request, fileShortcut.getToTitle(), portletURL.toString());
106 }
107
108 public static void addPortletBreadcrumbEntries(
109 long folderId, HttpServletRequest request,
110 RenderResponse renderResponse)
111 throws Exception {
112
113 if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
114 DLFolder folder = DLFolderLocalServiceUtil.getFolder(folderId);
115
116 if (folder.getFolderId() !=
117 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
118
119 addPortletBreadcrumbEntries(folder, request, renderResponse);
120 }
121 }
122 }
123
124 public static void addPortletBreadcrumbEntries(
125 DLFolder folder, HttpServletRequest request,
126 RenderResponse renderResponse)
127 throws Exception {
128
129 String strutsAction = ParamUtil.getString(
130 request, "struts_action");
131
132 long groupId = ParamUtil.getLong(request, "groupId");
133
134 PortletURL portletURL = renderResponse.createRenderURL();
135
136 if (strutsAction.equals("/journal/select_document_library") ||
137 strutsAction.equals("/document_library/select_file_entry") ||
138 strutsAction.equals("/document_library/select_folder") ||
139 strutsAction.equals("/document_library_display/select_folder")) {
140
141 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
142 WebKeys.THEME_DISPLAY);
143
144 portletURL.setWindowState(LiferayWindowState.POP_UP);
145
146 portletURL.setParameter("struts_action", strutsAction);
147 portletURL.setParameter("groupId", String.valueOf(groupId));
148
149 PortalUtil.addPortletBreadcrumbEntry(
150 request, themeDisplay.translate("documents-home"),
151 portletURL.toString());
152 }
153 else {
154 portletURL.setParameter("struts_action", "/document_library/view");
155 }
156
157 PortletPreferences preferences =
158 PortletPreferencesFactoryUtil.getPortletPreferences(
159 request, PortalUtil.getPortletId(request));
160
161 long defaultFolderId = GetterUtil.getLong(
162 preferences.getValue(
163 "rootFolderId",
164 String.valueOf(DLFolderConstants.DEFAULT_PARENT_FOLDER_ID)));
165
166 List<DLFolder> ancestorFolders = Collections.emptyList();
167
168 if (folder.getFolderId() != defaultFolderId) {
169 ancestorFolders = folder.getAncestors();
170
171 int indexOfRootFolder = -1;
172
173 for (int i = 0; i < ancestorFolders.size(); i++) {
174 DLFolder ancestorFolder = ancestorFolders.get(i);
175
176 if (defaultFolderId == ancestorFolder.getFolderId()) {
177 indexOfRootFolder = i;
178 }
179 }
180
181 if (indexOfRootFolder > -1) {
182 ancestorFolders = ancestorFolders.subList(0, indexOfRootFolder);
183 }
184 }
185
186 Collections.reverse(ancestorFolders);
187
188 for (DLFolder ancestorFolder : ancestorFolders) {
189 portletURL.setParameter(
190 "folderId", String.valueOf(ancestorFolder.getFolderId()));
191
192 PortalUtil.addPortletBreadcrumbEntry(
193 request, ancestorFolder.getName(), portletURL.toString());
194 }
195
196 portletURL.setParameter(
197 "folderId", String.valueOf(folder.getFolderId()));
198
199 if ((folder.getFolderId() !=
200 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) &&
201 (folder.getFolderId() != defaultFolderId)) {
202
203 PortalUtil.addPortletBreadcrumbEntry(
204 request, folder.getName(), portletURL.toString());
205 }
206 }
207
208 public static int compareVersions(String version1, String version2) {
209 int[] splitVersion1 = StringUtil.split(version1, StringPool.PERIOD, 0);
210 int[] splitVersion2 = StringUtil.split(version2, StringPool.PERIOD, 0);
211
212 if ((splitVersion1.length != 2) && (splitVersion2.length != 2)) {
213 return 0;
214 }
215 else if ((splitVersion1.length != 2)) {
216 return -1;
217 }
218 else if ((splitVersion2.length != 2)) {
219 return 1;
220 }
221
222 if (splitVersion1[0] > splitVersion2[0]) {
223 return 1;
224 }
225 else if (splitVersion1[0] < splitVersion2[0]) {
226 return -1;
227 }
228 else if (splitVersion1[1] > splitVersion2[1]) {
229 return 1;
230 }
231 else if (splitVersion1[1] < splitVersion2[1]) {
232 return -1;
233 }
234
235 return 0;
236 }
237
238 public static String getFileIcon(String extension) {
239 return _instance._getFileIcon(extension);
240 }
241
242 public static String getGenericName(String extension) {
243 return _instance._getGenericName(extension);
244 }
245
246 public static String getLockId(long groupId, long folderId, String name) {
247 try {
248 DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.getFileEntry(
249 groupId, folderId, name);
250
251 return String.valueOf(fileEntry.getFileEntryId());
252 }
253 catch (Exception e) {
254 StringBundler sb = new StringBundler(5);
255
256 sb.append(groupId);
257 sb.append(StringPool.POUND);
258 sb.append(folderId);
259 sb.append(StringPool.POUND);
260 sb.append(name);
261
262 return sb.toString();
263 }
264 }
265
266 private DLUtil() {
267 String[] fileIcons = null;
268
269 try {
270 fileIcons = PrefsPropsUtil.getStringArray(
271 PropsKeys.DL_FILE_ICONS, StringPool.COMMA);
272 }
273 catch (Exception e) {
274 _log.error(e, e);
275
276 fileIcons = new String[] {StringPool.BLANK};
277 }
278
279 for (int i = 0; i < fileIcons.length; i++) {
280
281
282
283 if (!StringPool.STAR.equals(fileIcons[i])) {
284
285
286
287 String extension = fileIcons[i];
288 extension = extension.substring(1, extension.length());
289
290 _fileIcons.add(extension);
291 }
292 }
293
294 String[] genericNames = PropsUtil.getArray(
295 PropsKeys.DL_FILE_GENERIC_NAMES);
296
297 for (String genericName : genericNames) {
298 _populateGenericNamesMap(genericName);
299 }
300 }
301
302 private String _getFileIcon(String extension) {
303 if (!_fileIcons.contains(extension)) {
304 extension = _DEFAULT_FILE_ICON;
305 }
306
307 return extension;
308 }
309
310 private String _getGenericName(String extension) {
311 String genericName = _genericNames.get(extension);
312
313 if (genericName == null) {
314 genericName = _DEFAULT_GENERIC_NAME;
315 }
316
317 return genericName;
318 }
319
320 private void _populateGenericNamesMap(String genericName) {
321 String[] extensions = PropsUtil.getArray(
322 PropsKeys.DL_FILE_GENERIC_EXTENSIONS, new Filter(genericName));
323
324 for (String extension : extensions) {
325 _genericNames.put(extension, genericName);
326 }
327 }
328
329 private static final String _DEFAULT_GENERIC_NAME = "default";
330
331 private static final String _DEFAULT_FILE_ICON = "page";
332
333 private static Log _log = LogFactoryUtil.getLog(DLUtil.class);
334
335 private static DLUtil _instance = new DLUtil();
336
337 private Map<String, String> _genericNames = new HashMap<String, String>();
338 private Set<String> _fileIcons = new HashSet<String>();
339
340 }