1   /**
2    * Copyright (c) 2000-2007 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portlet.documentlibrary.util;
24  
25  import com.liferay.portal.kernel.language.LanguageUtil;
26  import com.liferay.portal.kernel.portlet.LiferayWindowState;
27  import com.liferay.portal.kernel.util.ParamUtil;
28  import com.liferay.portal.kernel.util.StringMaker;
29  import com.liferay.portal.kernel.util.StringPool;
30  import com.liferay.portal.kernel.util.Validator;
31  import com.liferay.portal.util.PropsUtil;
32  import com.liferay.portlet.documentlibrary.model.DLFileEntry;
33  import com.liferay.portlet.documentlibrary.model.DLFolder;
34  import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
35  import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
36  import com.liferay.util.CollectionFactory;
37  
38  import java.util.Set;
39  
40  import javax.portlet.PortletURL;
41  import javax.portlet.RenderRequest;
42  import javax.portlet.RenderResponse;
43  import javax.portlet.WindowState;
44  
45  import javax.servlet.jsp.PageContext;
46  
47  /**
48   * <a href="DLUtil.java.html"><b><i>View Source</i></b></a>
49   *
50   * @author Brian Wing Shun Chan
51   *
52   */
53  public class DLUtil {
54  
55      public static String getBreadcrumbs(
56              long folderId, String name, PageContext pageContext,
57              RenderRequest req, RenderResponse res)
58          throws Exception {
59  
60          if ((folderId > 0) && Validator.isNotNull(name)) {
61              DLFileEntry fileEntry = DLFileEntryLocalServiceUtil.getFileEntry(
62                  folderId, name);
63  
64              return getBreadcrumbs(
65                  fileEntry.getFolder(), fileEntry, pageContext, req, res);
66          }
67          else {
68              DLFolder folder = null;
69  
70              try {
71                  folder = DLFolderLocalServiceUtil.getFolder(folderId);
72              }
73              catch (Exception e) {
74              }
75  
76              return getBreadcrumbs(folder, null, pageContext, req, res);
77          }
78      }
79  
80      public static String getBreadcrumbs(
81              DLFolder folder, DLFileEntry fileEntry, PageContext pageContext,
82              RenderRequest req, RenderResponse res)
83          throws Exception {
84  
85          long groupId = ParamUtil.getLong(req, "groupId");
86  
87          if ((fileEntry != null) && (folder == null)) {
88              folder = fileEntry.getFolder();
89          }
90  
91          PortletURL foldersURL = res.createRenderURL();
92  
93          WindowState windowState = req.getWindowState();
94  
95          if (windowState.equals(LiferayWindowState.POP_UP)) {
96              foldersURL.setWindowState(LiferayWindowState.POP_UP);
97  
98              String strutsAction = ParamUtil.getString(req, "struts_action");
99  
100             foldersURL.setParameter("struts_action", strutsAction);
101             foldersURL.setParameter("groupId", String.valueOf(groupId));
102         }
103         else {
104             //foldersURL.setWindowState(WindowState.MAXIMIZED);
105 
106             foldersURL.setParameter("struts_action", "/document_library/view");
107         }
108 
109         String foldersLink =
110             "<a href=\"" + foldersURL.toString() + "\">" +
111                 LanguageUtil.get(pageContext, "folders") + "</a>";
112 
113         if (folder == null) {
114             return foldersLink;
115         }
116 
117         String breadcrumbs = StringPool.BLANK;
118 
119         if (folder != null) {
120             for (int i = 0;; i++) {
121                 PortletURL portletURL = res.createRenderURL();
122 
123                 if (windowState.equals(LiferayWindowState.POP_UP)) {
124                     portletURL.setWindowState(LiferayWindowState.POP_UP);
125 
126                     String strutsAction = ParamUtil.getString(
127                         req, "struts_action");
128 
129                     portletURL.setParameter("struts_action", strutsAction);
130                     portletURL.setParameter("groupId", String.valueOf(groupId));
131                     portletURL.setParameter(
132                         "folderId", String.valueOf(folder.getFolderId()));
133                 }
134                 else {
135                     portletURL.setWindowState(WindowState.MAXIMIZED);
136 
137                     portletURL.setParameter(
138                         "struts_action", "/document_library/view");
139                     portletURL.setParameter(
140                         "folderId", String.valueOf(folder.getFolderId()));
141                 }
142 
143                 String folderLink =
144                     "<a href=\"" + portletURL.toString() + "\">" +
145                         folder.getName() + "</a>";
146 
147                 if (i == 0) {
148                     breadcrumbs = folderLink;
149                 }
150                 else {
151                     breadcrumbs = folderLink + " &raquo; " + breadcrumbs;
152                 }
153 
154                 if (folder.isRoot()) {
155                     break;
156                 }
157 
158                 folder = DLFolderLocalServiceUtil.getFolder(
159                     folder.getParentFolderId());
160             }
161         }
162 
163         breadcrumbs = foldersLink + " &raquo; " + breadcrumbs;
164 
165         if (fileEntry != null) {
166             PortletURL fileEntryURL = res.createRenderURL();
167 
168             fileEntryURL.setWindowState(WindowState.MAXIMIZED);
169 
170             fileEntryURL.setParameter(
171                 "struts_action", "/document_library/edit_file_entry");
172             fileEntryURL.setParameter(
173                 "folderId", String.valueOf(fileEntry.getFolderId()));
174             fileEntryURL.setParameter("name", fileEntry.getName());
175 
176             String fileEntryLink =
177                 "<a href=\"" + fileEntryURL.toString() + "\">" +
178                     fileEntry.getName() + "</a>";
179 
180             breadcrumbs = breadcrumbs + " &raquo; " + fileEntryLink;
181         }
182 
183         return breadcrumbs;
184     }
185 
186     public static String getFileExtension(String name) {
187         return _instance._getFileExtension(name);
188     }
189 
190     public static String getLockId(long folderId, String name) {
191         StringMaker sm = new StringMaker();
192 
193         sm.append(folderId);
194         sm.append(StringPool.POUND);
195         sm.append(name);
196 
197         return sm.toString();
198     }
199 
200     private DLUtil() {
201         _fileExtensions = CollectionFactory.getHashSet();
202 
203         String[] fileExtensions =
204             PropsUtil.getArray(PropsUtil.DL_FILE_EXTENSIONS);
205 
206         for (int i = 0; i < fileExtensions.length; i++) {
207 
208             // Only process non wildcard extensions
209 
210             if (!StringPool.STAR.equals(fileExtensions[i])) {
211 
212                 // Strip starting period
213 
214                 String extension = fileExtensions[i];
215                 extension = extension.substring(1, extension.length());
216 
217                 _fileExtensions.add(extension);
218             }
219         }
220     }
221 
222     private String _getFileExtension(String name) {
223         String extension = StringPool.BLANK;
224 
225         int pos = name.lastIndexOf(StringPool.PERIOD);
226 
227         if (pos != -1) {
228             extension = name.substring(pos + 1, name.length()).toLowerCase();
229         }
230 
231         if (!_fileExtensions.contains(extension)) {
232             extension = _DEFAULT_FILE_EXTENSION;
233         }
234 
235         return extension;
236     }
237 
238     private static final String _DEFAULT_FILE_EXTENSION = "page";
239 
240     private static DLUtil _instance = new DLUtil();
241 
242     private Set _fileExtensions;
243 
244 }