1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portlet.documentlibrary.util;
16  
17  import com.liferay.portal.SystemException;
18  import com.liferay.portal.kernel.language.LanguageUtil;
19  import com.liferay.portal.kernel.log.Log;
20  import com.liferay.portal.kernel.log.LogFactoryUtil;
21  import com.liferay.portal.kernel.portlet.LiferayWindowState;
22  import com.liferay.portal.kernel.util.ParamUtil;
23  import com.liferay.portal.kernel.util.PropsKeys;
24  import com.liferay.portal.kernel.util.StringBundler;
25  import com.liferay.portal.kernel.util.StringPool;
26  import com.liferay.portal.kernel.util.Validator;
27  import com.liferay.portal.util.PrefsPropsUtil;
28  import com.liferay.portlet.documentlibrary.model.DLFileEntry;
29  import com.liferay.portlet.documentlibrary.model.DLFolder;
30  import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
31  import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
32  
33  import java.util.HashSet;
34  import java.util.Set;
35  
36  import javax.portlet.PortletURL;
37  import javax.portlet.RenderRequest;
38  import javax.portlet.RenderResponse;
39  import javax.portlet.WindowState;
40  
41  import javax.servlet.jsp.PageContext;
42  
43  /**
44   * <a href="DLUtil.java.html"><b><i>View Source</i></b></a>
45   *
46   * @author Brian Wing Shun Chan
47   * @author Julio Camarero
48   */
49  public class DLUtil {
50  
51      public static String getBreadcrumbs(
52              long folderId, String name, long rootFolderId,
53              PageContext pageContext, RenderRequest renderRequest,
54              RenderResponse renderResponse)
55          throws Exception {
56  
57          if ((folderId > 0) && Validator.isNotNull(name)) {
58              DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.getFileEntry(
59                  folderId, name);
60  
61              return getBreadcrumbs(
62                  fileEntry.getFolder(), fileEntry, rootFolderId, pageContext,
63                  renderRequest, renderResponse);
64          }
65          else {
66              DLFolder folder = null;
67  
68              try {
69                  folder = DLFolderLocalServiceUtil.getFolder(folderId);
70              }
71              catch (Exception e) {
72              }
73  
74              return getBreadcrumbs(
75                  folder, null, rootFolderId, pageContext, renderRequest,
76                  renderResponse);
77          }
78      }
79  
80      public static String getBreadcrumbs(
81              DLFolder folder, DLFileEntry fileEntry, long rootFolderId,
82              PageContext pageContext, RenderRequest renderRequest,
83              RenderResponse renderResponse)
84          throws Exception {
85  
86          String strutsAction = ParamUtil.getString(
87              renderRequest, "struts_action");
88  
89          long groupId = ParamUtil.getLong(renderRequest, "groupId");
90  
91          if ((fileEntry != null) && (folder == null)) {
92              folder = fileEntry.getFolder();
93          }
94  
95          PortletURL foldersURL = renderResponse.createRenderURL();
96  
97          WindowState windowState = renderRequest.getWindowState();
98  
99          if (windowState.equals(LiferayWindowState.POP_UP)) {
100             foldersURL.setWindowState(LiferayWindowState.POP_UP);
101 
102             foldersURL.setParameter("struts_action", strutsAction);
103             foldersURL.setParameter("groupId", String.valueOf(groupId));
104         }
105         else {
106             //foldersURL.setWindowState(WindowState.MAXIMIZED);
107 
108             foldersURL.setParameter("struts_action", "/document_library/view");
109         }
110 
111         String foldersLink =
112             "<a href=\"" + foldersURL.toString() + "\">" +
113                 LanguageUtil.get(pageContext, "folders") + "</a>";
114 
115         if (folder == null) {
116             return "<span class=\"first last\">" + foldersLink + "</span>";
117         }
118 
119         String breadcrumbs = StringPool.BLANK;
120 
121         if (folder != null) {
122             for (int i = 0;; i++) {
123                 folder = folder.toEscapedModel();
124 
125                 PortletURL portletURL = renderResponse.createRenderURL();
126 
127                 if (windowState.equals(LiferayWindowState.POP_UP)) {
128                     portletURL.setWindowState(LiferayWindowState.POP_UP);
129 
130                     portletURL.setParameter("struts_action", strutsAction);
131                     portletURL.setParameter("groupId", String.valueOf(groupId));
132                     portletURL.setParameter(
133                         "folderId", String.valueOf(folder.getFolderId()));
134                 }
135                 else {
136                     //portletURL.setWindowState(WindowState.MAXIMIZED);
137 
138                     portletURL.setParameter(
139                         "struts_action", "/document_library/view");
140                     portletURL.setParameter(
141                         "folderId", String.valueOf(folder.getFolderId()));
142                 }
143 
144                 String folderLink =
145                     "<a href=\"" + portletURL.toString() + "\">" +
146                         folder.getName() + "</a>";
147 
148                 if (i == 0) {
149                     if (fileEntry != null) {
150                         breadcrumbs += folderLink;
151                     }
152                     else {
153                         breadcrumbs =
154                             "<span class=\"last\">" + folderLink + "</span>";
155                     }
156                 }
157                 else {
158                     breadcrumbs = folderLink + " &raquo; " + breadcrumbs;
159                 }
160 
161                 if (folder.isRoot() || (folder.getFolderId() == rootFolderId)) {
162                     break;
163                 }
164 
165                 folder = DLFolderLocalServiceUtil.getFolder(
166                     folder.getParentFolderId());
167             }
168         }
169 
170         breadcrumbs =
171             "<span class=\"first\">" + foldersLink + " &raquo; </span>" +
172                 breadcrumbs;
173 
174         if (fileEntry != null) {
175             fileEntry = fileEntry.toEscapedModel();
176 
177             PortletURL fileEntryURL = renderResponse.createRenderURL();
178 
179             //fileEntryURL.setWindowState(WindowState.MAXIMIZED);
180 
181             fileEntryURL.setParameter(
182                 "struts_action", "/document_library/edit_file_entry");
183             fileEntryURL.setParameter(
184                 "folderId", String.valueOf(fileEntry.getFolderId()));
185             fileEntryURL.setParameter("name", fileEntry.getName());
186 
187             String fileEntryLink =
188                 "<span class=\"last\"><a href=\"" + fileEntryURL.toString() +
189                     "\">" + fileEntry.getName() + "</a></span>";
190 
191             breadcrumbs = breadcrumbs + " &raquo; " + fileEntryLink;
192         }
193 
194         return breadcrumbs;
195     }
196 
197     public static String getFileExtension(String name) {
198         return _instance._getFileExtension(name);
199     }
200 
201     public static String getLockId(long folderId, String name) {
202         StringBundler sb = new StringBundler(5);
203 
204         sb.append(folderId);
205         sb.append(StringPool.POUND);
206         sb.append(name);
207 
208         return sb.toString();
209     }
210 
211     private DLUtil() {
212         _fileExtensions = new HashSet<String>();
213 
214         String[] fileExtensions = null;
215 
216         try {
217             fileExtensions = PrefsPropsUtil.getStringArray(
218                 PropsKeys.DL_FILE_EXTENSIONS, StringPool.COMMA);
219         }
220         catch (SystemException se) {
221             _log.error(se, se);
222 
223             fileExtensions = new String[] {StringPool.BLANK};
224         }
225 
226         for (int i = 0; i < fileExtensions.length; i++) {
227 
228             // Only process non wildcard extensions
229 
230             if (!StringPool.STAR.equals(fileExtensions[i])) {
231 
232                 // Strip starting period
233 
234                 String extension = fileExtensions[i];
235                 extension = extension.substring(1, extension.length());
236 
237                 _fileExtensions.add(extension);
238             }
239         }
240     }
241 
242     private String _getFileExtension(String name) {
243         String extension = StringPool.BLANK;
244 
245         int pos = name.lastIndexOf(StringPool.PERIOD);
246 
247         if (pos != -1) {
248             extension = name.substring(pos + 1, name.length()).toLowerCase();
249         }
250 
251         if (!_fileExtensions.contains(extension)) {
252             extension = _DEFAULT_FILE_EXTENSION;
253         }
254 
255         return extension;
256     }
257 
258     private static final String _DEFAULT_FILE_EXTENSION = "page";
259 
260     private static Log _log = LogFactoryUtil.getLog(DLUtil.class);
261 
262     private static DLUtil _instance = new DLUtil();
263 
264     private Set<String> _fileExtensions;
265 
266 }