1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    *
5    *
6    *
7    * The contents of this file are subject to the terms of the Liferay Enterprise
8    * Subscription License ("License"). You may not use this file except in
9    * compliance with the License. You can obtain a copy of the License by
10   * contacting Liferay, Inc. See the License for the specific language governing
11   * permissions and limitations under the License, including but not limited to
12   * distribution rights 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.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  /**
51   * <a href="DLUtil.java.html"><b><i>View Source</i></b></a>
52   *
53   * @author Brian Wing Shun Chan
54   * @author Julio Camarero
55   */
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             //foldersURL.setWindowState(WindowState.MAXIMIZED);
114 
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                     //portletURL.setWindowState(WindowState.MAXIMIZED);
144 
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 + " &raquo; " + 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 + " &raquo; </span>" +
179                 breadcrumbs;
180 
181         if (fileEntry != null) {
182             fileEntry = fileEntry.toEscapedModel();
183 
184             PortletURL fileEntryURL = renderResponse.createRenderURL();
185 
186             //fileEntryURL.setWindowState(WindowState.MAXIMIZED);
187 
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 + " &raquo; " + 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             // Only process non wildcard extensions
236 
237             if (!StringPool.STAR.equals(fileExtensions[i])) {
238 
239                 // Strip starting period
240 
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 }