1   /**
2    * Copyright (c) 2000-2008 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.PropsValues;
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  
37  import java.util.HashSet;
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                 folder = folder.toEscapedModel();
122 
123                 PortletURL portletURL = res.createRenderURL();
124 
125                 if (windowState.equals(LiferayWindowState.POP_UP)) {
126                     portletURL.setWindowState(LiferayWindowState.POP_UP);
127 
128                     String strutsAction = ParamUtil.getString(
129                         req, "struts_action");
130 
131                     portletURL.setParameter("struts_action", strutsAction);
132                     portletURL.setParameter("groupId", String.valueOf(groupId));
133                     portletURL.setParameter(
134                         "folderId", String.valueOf(folder.getFolderId()));
135                 }
136                 else {
137                     portletURL.setWindowState(WindowState.MAXIMIZED);
138 
139                     portletURL.setParameter(
140                         "struts_action", "/document_library/view");
141                     portletURL.setParameter(
142                         "folderId", String.valueOf(folder.getFolderId()));
143                 }
144 
145                 String folderLink =
146                     "<a href=\"" + portletURL.toString() + "\">" +
147                         folder.getName() + "</a>";
148 
149                 if (i == 0) {
150                     breadcrumbs = folderLink;
151                 }
152                 else {
153                     breadcrumbs = folderLink + " &raquo; " + breadcrumbs;
154                 }
155 
156                 if (folder.isRoot()) {
157                     break;
158                 }
159 
160                 folder = DLFolderLocalServiceUtil.getFolder(
161                     folder.getParentFolderId());
162             }
163         }
164 
165         breadcrumbs = foldersLink + " &raquo; " + breadcrumbs;
166 
167         if (fileEntry != null) {
168             fileEntry = fileEntry.toEscapedModel();
169 
170             PortletURL fileEntryURL = res.createRenderURL();
171 
172             fileEntryURL.setWindowState(WindowState.MAXIMIZED);
173 
174             fileEntryURL.setParameter(
175                 "struts_action", "/document_library/edit_file_entry");
176             fileEntryURL.setParameter(
177                 "folderId", String.valueOf(fileEntry.getFolderId()));
178             fileEntryURL.setParameter("name", fileEntry.getName());
179 
180             String fileEntryLink =
181                 "<a href=\"" + fileEntryURL.toString() + "\">" +
182                     fileEntry.getName() + "</a>";
183 
184             breadcrumbs = breadcrumbs + " &raquo; " + fileEntryLink;
185         }
186 
187         return breadcrumbs;
188     }
189 
190     public static String getFileExtension(String name) {
191         return _instance._getFileExtension(name);
192     }
193 
194     public static String getLockId(long folderId, String name) {
195         StringMaker sm = new StringMaker();
196 
197         sm.append(folderId);
198         sm.append(StringPool.POUND);
199         sm.append(name);
200 
201         return sm.toString();
202     }
203 
204     private DLUtil() {
205         _fileExtensions = new HashSet<String>();
206 
207         String[] fileExtensions = PropsValues.DL_FILE_EXTENSIONS;
208 
209         for (int i = 0; i < fileExtensions.length; i++) {
210 
211             // Only process non wildcard extensions
212 
213             if (!StringPool.STAR.equals(fileExtensions[i])) {
214 
215                 // Strip starting period
216 
217                 String extension = fileExtensions[i];
218                 extension = extension.substring(1, extension.length());
219 
220                 _fileExtensions.add(extension);
221             }
222         }
223     }
224 
225     private String _getFileExtension(String name) {
226         String extension = StringPool.BLANK;
227 
228         int pos = name.lastIndexOf(StringPool.PERIOD);
229 
230         if (pos != -1) {
231             extension = name.substring(pos + 1, name.length()).toLowerCase();
232         }
233 
234         if (!_fileExtensions.contains(extension)) {
235             extension = _DEFAULT_FILE_EXTENSION;
236         }
237 
238         return extension;
239     }
240 
241     private static final String _DEFAULT_FILE_EXTENSION = "page";
242 
243     private static DLUtil _instance = new DLUtil();
244 
245     private Set<String> _fileExtensions;
246 
247 }