/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.item.selector.taglib.internal.util; import com.liferay.document.library.kernel.model.DLFolderConstants; import com.liferay.document.library.kernel.service.DLAppServiceUtil; import com.liferay.document.library.kernel.util.DLUtil; import com.liferay.item.selector.ItemSelectorReturnType; import com.liferay.item.selector.ItemSelectorReturnTypeResolver; import com.liferay.item.selector.taglib.ItemSelectorRepositoryEntryBrowserReturnTypeUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.json.JSONArray; import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.json.JSONObject; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.portlet.LiferayPortletResponse; import com.liferay.portal.kernel.portlet.PortletURLUtil; import com.liferay.portal.kernel.repository.model.FileEntry; import com.liferay.portal.kernel.repository.model.FileVersion; import com.liferay.portal.kernel.repository.model.Folder; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.ClassUtil; import com.liferay.portal.kernel.util.HtmlUtil; import com.liferay.portal.kernel.util.PortalUtil; import com.liferay.portal.kernel.util.TextFormatter; import com.liferay.portal.kernel.workflow.WorkflowConstants; import com.liferay.portal.util.WebKeys; import java.util.Collections; import java.util.List; import java.util.Locale; import javax.portlet.PortletException; import javax.portlet.PortletURL; import javax.servlet.http.HttpServletRequest; /** * @author Ambrin Chaudhary * @author Roberto Díaz */ public class ItemSelectorRepositoryEntryBrowserUtil { public static void addPortletBreadcrumbEntries( long folderId, String displayStyle, HttpServletRequest request, LiferayPortletResponse liferayPortletResponse, PortletURL portletURL) throws Exception { addGroupSelectorBreadcrumbEntry( request, liferayPortletResponse, portletURL); portletURL.setParameter("displayStyle", displayStyle); ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute( WebKeys.THEME_DISPLAY); Group scopeGroup = themeDisplay.getScopeGroup(); addPortletBreadcrumbEntry( DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, request, scopeGroup.getDescriptiveName(request.getLocale()), portletURL); if (folderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) { Folder folder = DLAppServiceUtil.getFolder(folderId); List<Folder> ancestorFolders = folder.getAncestors(); Collections.reverse(ancestorFolders); for (Folder ancestorFolder : ancestorFolders) { addPortletBreadcrumbEntry( ancestorFolder.getFolderId(), request, ancestorFolder.getName(), portletURL); } addPortletBreadcrumbEntry( folder.getFolderId(), request, folder.getName(), portletURL); } } public static JSONObject getItemMetadataJSONObject( FileEntry fileEntry, Locale locale) throws PortalException { JSONObject itemMetadataJSONObject = JSONFactoryUtil.createJSONObject(); JSONArray groupsJSONArray = JSONFactoryUtil.createJSONArray(); JSONObject firstTabJSONObject = JSONFactoryUtil.createJSONObject(); JSONArray firstTabDataJSONArray = JSONFactoryUtil.createJSONArray(); FileVersion latestFileVersion = fileEntry.getLatestFileVersion(); firstTabDataJSONArray.put( _createJSONObject( LanguageUtil.get(locale, "format"), HtmlUtil.escape(latestFileVersion.getExtension()))); firstTabDataJSONArray.put( _createJSONObject( LanguageUtil.get(locale, "size"), TextFormatter.formatStorageSize(fileEntry.getSize(), locale))); firstTabDataJSONArray.put( _createJSONObject( LanguageUtil.get(locale, "name"), HtmlUtil.escape(DLUtil.getTitleWithExtension(fileEntry)))); firstTabDataJSONArray.put( _createJSONObject( LanguageUtil.get(locale, "modified"), LanguageUtil.format( locale, "x-ago-by-x", new Object[] { LanguageUtil.getTimeDescription( locale, System.currentTimeMillis() - fileEntry.getModifiedDate().getTime(), true), HtmlUtil.escape(fileEntry.getUserName()) }))); firstTabJSONObject.put("data", firstTabDataJSONArray); firstTabJSONObject.put("title", LanguageUtil.get(locale, "file-info")); groupsJSONArray.put(firstTabJSONObject); JSONObject secondTabJSONObject = JSONFactoryUtil.createJSONObject(); JSONArray secondTabDataJSONArray = JSONFactoryUtil.createJSONArray(); secondTabDataJSONArray.put( _createJSONObject( LanguageUtil.get(locale, "version"), HtmlUtil.escape(latestFileVersion.getVersion()))); secondTabDataJSONArray.put( _createJSONObject( LanguageUtil.get(locale, "status"), WorkflowConstants.getStatusLabel( latestFileVersion.getStatus()))); secondTabJSONObject.put("data", secondTabDataJSONArray); secondTabJSONObject.put("title", LanguageUtil.get(locale, "version")); groupsJSONArray.put(secondTabJSONObject); itemMetadataJSONObject.put("groups", groupsJSONArray); return itemMetadataJSONObject; } public static String getItemSelectorReturnTypeClassName( ItemSelectorReturnTypeResolver <? extends ItemSelectorReturnType, FileEntry> itemSelectorReturnTypeResolver, ItemSelectorReturnType itemSelectorReturnType) throws Exception { if (itemSelectorReturnTypeResolver != null) { Class<? extends ItemSelectorReturnType> itemSelectorReturnTypeClass = itemSelectorReturnTypeResolver. getItemSelectorReturnTypeClass(); return itemSelectorReturnTypeClass.getName(); } return ClassUtil.getClassName(itemSelectorReturnType); } public static String getValue( ItemSelectorReturnTypeResolver <? extends ItemSelectorReturnType, FileEntry> itemSelectorReturnTypeResolver, ItemSelectorReturnType itemSelectorReturnType, FileEntry fileEntry, ThemeDisplay themeDisplay) throws Exception { if (itemSelectorReturnTypeResolver != null) { return itemSelectorReturnTypeResolver.getValue( fileEntry, themeDisplay); } return ItemSelectorRepositoryEntryBrowserReturnTypeUtil.getValue( itemSelectorReturnType, fileEntry, themeDisplay); } protected static void addGroupSelectorBreadcrumbEntry( HttpServletRequest request, LiferayPortletResponse liferayPortletResponse, PortletURL portletURL) throws PortalException, PortletException { PortletURL viewGroupSelectorURL = PortletURLUtil.clone( portletURL, liferayPortletResponse); viewGroupSelectorURL.setParameter( "showGroupSelector", Boolean.TRUE.toString()); PortalUtil.addPortletBreadcrumbEntry( request, "sites", viewGroupSelectorURL.toString()); } protected static void addPortletBreadcrumbEntry( long folderId, HttpServletRequest request, String title, PortletURL portletURL) { portletURL.setParameter("folderId", String.valueOf(folderId)); PortalUtil.addPortletBreadcrumbEntry( request, title, portletURL.toString()); } private static JSONObject _createJSONObject(String key, String value) { JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); jsonObject.put("key", key); jsonObject.put("value", value); return jsonObject; } private static final Log _log = LogFactoryUtil.getLog( ItemSelectorRepositoryEntryBrowserUtil.class); }