All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.ui.components.CmsResourceIcon Maven / Gradle / Ivy

Go to download

OpenCms is an enterprise-ready, easy to use website content management system based on Java and XML technology. Offering a complete set of features, OpenCms helps content managers worldwide to create and maintain beautiful websites fast and efficiently.

There is a newer version: 18.0
Show newest version
/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (c) Alkacon Software GmbH & Co. KG (http://www.alkacon.com)
 *
 * 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.
 *
 * For further information about Alkacon Software, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.opencms.ui.components;

import org.opencms.ade.configuration.CmsADEConfigData;
import org.opencms.ade.detailpage.CmsDetailPageInfo;
import org.opencms.db.CmsResourceState;
import org.opencms.file.CmsObject;
import org.opencms.file.CmsResource;
import org.opencms.file.CmsResourceFilter;
import org.opencms.file.types.CmsResourceTypeFolderExtended;
import org.opencms.file.types.CmsResourceTypeFolderSubSitemap;
import org.opencms.file.types.CmsResourceTypeXmlContainerPage;
import org.opencms.file.types.I_CmsResourceType;
import org.opencms.gwt.CmsIconUtil;
import org.opencms.jsp.CmsJspNavBuilder;
import org.opencms.main.CmsException;
import org.opencms.main.CmsLog;
import org.opencms.main.OpenCms;
import org.opencms.security.CmsSecurityException;
import org.opencms.ui.CmsVaadinUtils;
import org.opencms.workplace.CmsWorkplace;
import org.opencms.workplace.explorer.CmsExplorerTypeSettings;
import org.opencms.workplace.explorer.CmsResourceUtil;
import org.opencms.workplace.list.Messages;
import org.opencms.xml.containerpage.CmsXmlDynamicFunctionHandler;

import java.util.List;

import org.apache.commons.logging.Log;

import com.google.common.collect.Lists;
import com.vaadin.shared.ui.label.ContentMode;
import com.vaadin.ui.Label;

/**
 * Displays the resource icon and state and lock info.

* Important: To avoid issues with click event propagation within tables, we are required to extent the Label component. */ public class CmsResourceIcon extends Label { /** Enum used to control icon display style. */ public enum IconMode { /** locale compare mode. */ localeCompare, /** sitemap selection mode. */ sitemapSelect; } /** The log object for this class. */ private static final Log LOG = CmsLog.getLog(CmsResourceIcon.class); /** The serial version id. */ private static final long serialVersionUID = 5031544534869165777L; /** * Constuctor.

* To be used in declarative layouts. Make sure to call initContent later on.

*/ public CmsResourceIcon() { setPrimaryStyleName(OpenCmsTheme.RESOURCE_ICON); setContentMode(ContentMode.HTML); } /** * Constructor.

* * @param resUtil the resource util * @param state the resource state * @param showLocks true to show the resource locks */ public CmsResourceIcon(CmsResourceUtil resUtil, CmsResourceState state, boolean showLocks) { this(); initContent(resUtil, state, showLocks, true); } /** * Returns the default file type or detail type for the given resource.

* * @param cms the cms context * @param resource the container page resource * * @return the detail content type */ public static String getDefaultFileOrDetailType(CmsObject cms, CmsResource resource) { String type = null; if (resource.isFolder()) { if (!(OpenCms.getResourceManager().getResourceType(resource) instanceof CmsResourceTypeFolderExtended)) { try { CmsResource defaultFile = cms.readDefaultFile(resource, CmsResourceFilter.ONLY_VISIBLE_NO_DELETED); if (defaultFile != null) { type = getDetailType(cms, defaultFile, resource); if (type == null) { type = OpenCms.getResourceManager().getResourceType(defaultFile).getTypeName(); } } } catch (CmsSecurityException e) { // ignore } } } else if (CmsResourceTypeXmlContainerPage.isContainerPage(resource)) { type = getDetailType(cms, resource, null); } return type; } /** * Returns the detail content type for container pages that may be detail pages.

* * @param cms the cms context * @param detailPage the container page resource * @param parentFolder the parent folder or null * * @return the detail content type */ public static String getDetailType(CmsObject cms, CmsResource detailPage, CmsResource parentFolder) { String type = null; try { if (OpenCms.getADEManager().isDetailPage(cms, detailPage)) { List detailPages = OpenCms.getADEManager().getAllDetailPages(cms); if (parentFolder == null) { parentFolder = cms.readParentFolder(detailPage.getStructureId()); } for (CmsDetailPageInfo info : detailPages) { if (info.getId().equals(detailPage.getStructureId()) || info.getId().equals(parentFolder.getStructureId())) { type = info.getType(); if (type.startsWith(CmsDetailPageInfo.FUNCTION_PREFIX)) { type = CmsXmlDynamicFunctionHandler.TYPE_FUNCTION; } break; } } } } catch (CmsException e) { // parent folder can't be read, ignore } return type; } /** * Returns the icon HTML.

* * @param resUtil the resource util for the resource * @param state the resource state * @param showLocks true to show lock state overlay * * @return the icon HTML */ public static String getIconHTML(CmsResourceUtil resUtil, CmsResourceState state, boolean showLocks) { return "" + getIconInnerHTML(resUtil, state, showLocks, true) + ""; } /** * Gets the resource icon for a resource for use in a CmsResourceInfo widget when used in a sitemap context.

* * @param cms the CMS context * @param resource a resource * @param iconMode the icon mode * @return the path for the resource icon */ public static String getSitemapResourceIcon(CmsObject cms, CmsResource resource, IconMode iconMode) { CmsResource defaultFile = null; List resourcesForType = Lists.newArrayList(); resourcesForType.add(resource); boolean skipDefaultFile = (iconMode == IconMode.sitemapSelect) && OpenCms.getResourceManager().matchResourceType( CmsResourceTypeFolderSubSitemap.TYPE_SUBSITEMAP, resource.getTypeId()); if (resource.isFolder() && !skipDefaultFile) { try { defaultFile = cms.readDefaultFile(resource, CmsResourceFilter.IGNORE_EXPIRATION); if (defaultFile != null) { resourcesForType.add(0, defaultFile); } } catch (Exception e) { // Shouldn't normally happen - readDefaultFile returns null instead of throwing an exception when it doesn't find a default file } } if (CmsJspNavBuilder.isNavLevelFolder(cms, resource)) { return CmsWorkplace.getResourceUri(CmsWorkplace.RES_PATH_FILETYPES + CmsIconUtil.ICON_NAV_LEVEL_BIG); } CmsResource maybePage = resourcesForType.get(0); if (CmsResourceTypeXmlContainerPage.isContainerPage(maybePage)) { CmsADEConfigData config = OpenCms.getADEManager().lookupConfiguration(cms, maybePage.getRootPath()); for (CmsDetailPageInfo realInfo : config.getAllDetailPages(true)) { if (realInfo.getUri().equals(maybePage.getRootPath()) || realInfo.getUri().equals(CmsResource.getParentFolder(maybePage.getRootPath()))) { CmsExplorerTypeSettings settings = OpenCms.getWorkplaceManager().getExplorerTypeSetting( realInfo.getIconType()); if (settings != null) { return CmsWorkplace.getResourceUri( CmsWorkplace.RES_PATH_FILETYPES + settings.getBigIconIfAvailable()); } } } } String result = null; for (CmsResource res : resourcesForType) { I_CmsResourceType type = OpenCms.getResourceManager().getResourceType(res); CmsExplorerTypeSettings settings = OpenCms.getWorkplaceManager().getExplorerTypeSetting(type.getTypeName()); if (settings != null) { result = CmsWorkplace.RES_PATH_FILETYPES + settings.getBigIconIfAvailable(); break; } } return CmsWorkplace.getResourceUri(result); } /** * Returns the tree caption HTML including the resource icon.

* * @param resourceName the resource name to display * @param resUtil the resource util for the resource * @param state the resource state * @param showLocks true to show lock state overlay * * @return the icon HTML */ public static String getTreeCaptionHTML( String resourceName, CmsResourceUtil resUtil, CmsResourceState state, boolean showLocks) { return CmsResourceIcon.getIconHTML(resUtil, null, false) + "" + resourceName + ""; } /** * Returns the icon inner HTML.

* * @param resUtil the resource util for the resource * @param state the resource state * @param showLocks true to show lock state overlay * @param showDetailIcon true to show the detail icon overlay * * @return the icon inner HTML */ private static String getIconInnerHTML( CmsResourceUtil resUtil, CmsResourceState state, boolean showLocks, boolean showDetailIcon) { return getIconInnerHTML(resUtil, resUtil.getBigIconPath(), state, showLocks, showDetailIcon); } /** * Returns the icon inner HTML.

* * @param resUtil the resource util for the resource * @param iconPath the icon path * @param state the resource state * @param showLocks true to show lock state overlay * @param showDetailIcon true to show the detail icon overlay * * @return the icon inner HTML */ private static String getIconInnerHTML( CmsResourceUtil resUtil, String iconPath, CmsResourceState state, boolean showLocks, boolean showDetailIcon) { String content = ""; if (resUtil != null) { if (showDetailIcon && !iconPath.endsWith(CmsIconUtil.ICON_NAV_LEVEL_BIG)) { if (resUtil.getResource().isFolder()) { String detailType = getDefaultFileOrDetailType(resUtil.getCms(), resUtil.getResource()); if (detailType != null) { String smallIconUri = getSmallTypeIconURI(detailType); if (smallIconUri != null) { content += ""; } } } else if (CmsResourceTypeXmlContainerPage.isContainerPage(resUtil.getResource())) { String detailType = getDefaultFileOrDetailType(resUtil.getCms(), resUtil.getResource()); if (detailType != null) { String smallIconUri = getSmallTypeIconURI(detailType); if (smallIconUri != null) { content += ""; } } } } if (showLocks) { String lockIcon; String message = null; if (resUtil.getLock().getSystemLock().isPublish()) { lockIcon = OpenCmsTheme.LOCK_PUBLISH; message = CmsVaadinUtils.getMessageText( org.opencms.workplace.explorer.Messages.GUI_PUBLISH_TOOLTIP_0); } else { switch (resUtil.getLockState()) { case 1: lockIcon = OpenCmsTheme.LOCK_OTHER; break; case 2: lockIcon = OpenCmsTheme.LOCK_SHARED; break; case 3: lockIcon = OpenCmsTheme.LOCK_USER; break; default: lockIcon = null; } if (lockIcon != null) { message = CmsVaadinUtils.getMessageText( Messages.GUI_EXPLORER_LIST_ACTION_LOCK_NAME_2, resUtil.getLockedByName(), resUtil.getLockedInProjectName()); } } if (lockIcon != null) { content += getOverlaySpan(lockIcon, message); } } } if (state != null) { String title = resUtil != null ? CmsVaadinUtils.getMessageText(org.opencms.workplace.commons.Messages.GUI_LABEL_USER_LAST_MODIFIED_0) + " " + resUtil.getUserLastModified() : null; if (state.isChanged() || state.isDeleted()) { content += getOverlaySpan(OpenCmsTheme.STATE_CHANGED, title); } else if (state.isNew()) { content += getOverlaySpan(OpenCmsTheme.STATE_NEW, title); } } if ((resUtil != null) && (resUtil.getLinkType() == 1)) { content += getOverlaySpan(OpenCmsTheme.SIBLING, null); } return content; } /** * Generates an overlay icon span.

* * @param title the span title * @param cssClass the CSS class * * @return the span element string */ private static String getOverlaySpan(String cssClass, String title) { StringBuffer result = new StringBuffer(); result.append(""); return result.toString(); } /** * Returns the URI of the small resource type icon for the given type.

* * @param type the resource type name * * @return the icon URI */ private static String getSmallTypeIconURI(String type) { CmsExplorerTypeSettings typeSettings = OpenCms.getWorkplaceManager().getExplorerTypeSetting(type); if ((typeSettings == null) && LOG.isWarnEnabled()) { LOG.warn("Could not read explorer type settings for " + type); } return typeSettings != null ? CmsWorkplace.getResourceUri(CmsWorkplace.RES_PATH_FILETYPES + typeSettings.getIcon()) : null; } /** * Initializes the content.

* * @param resUtil the resource util * @param state the resource state * @param showLocks true to show the resource locks * @param showDetailIcon true to show the detail icon overlay */ public void initContent( CmsResourceUtil resUtil, CmsResourceState state, boolean showLocks, boolean showDetailIcon) { setValue(getIconInnerHTML(resUtil, state, showLocks, showDetailIcon)); } /** * Initializes the content.

* * @param resUtil the resource util * @param iconPath the icon path * @param state the resource state * @param showLocks true to show the resource locks * @param showDetailIcon true to show the detail icon overlay */ public void initContent( CmsResourceUtil resUtil, String iconPath, CmsResourceState state, boolean showLocks, boolean showDetailIcon) { setValue(getIconInnerHTML(resUtil, iconPath, state, showLocks, showDetailIcon)); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy