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

org.opencms.ade.configuration.CmsElementView 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.ade.configuration;

import org.opencms.file.CmsFile;
import org.opencms.file.CmsObject;
import org.opencms.file.CmsResource;
import org.opencms.file.CmsResourceFilter;
import org.opencms.main.CmsException;
import org.opencms.main.CmsLog;
import org.opencms.main.OpenCms;
import org.opencms.security.CmsPermissionSet;
import org.opencms.security.CmsRole;
import org.opencms.util.CmsStringUtil;
import org.opencms.util.CmsUUID;
import org.opencms.workplace.explorer.CmsExplorerTypeSettings;
import org.opencms.xml.content.CmsXmlContent;
import org.opencms.xml.content.CmsXmlContentFactory;
import org.opencms.xml.types.CmsXmlVarLinkValue;
import org.opencms.xml.types.I_CmsXmlContentValue;

import java.util.Comparator;
import java.util.Locale;

import org.apache.commons.logging.Log;

/**
 * Represents a element view for the container page editor.

*/ public class CmsElementView { /** * The element view comparator.

*/ public static class ElementViewComparator implements Comparator { /** * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ public int compare(CmsElementView o1, CmsElementView o2) { int result; if (o1.getOrder() == o2.getOrder()) { result = o1.m_title.compareTo(o2.m_title); } else { result = o1.getOrder() > o2.getOrder() ? 1 : -1; } return result; } } /** The default element view. */ public static final CmsElementView DEFAULT_ELEMENT_VIEW = new CmsElementView(); /** Default order if not configured. */ public static final int DEFAULT_ORDER = 1060; /** The default element view title key. */ public static final String GUI_ELEMENT_VIEW_DEFAULT_TITLE_0 = "GUI_ELEMENT_VIEW_DEFAULT_TITLE_0"; /** The order node. */ public static final String N_ORDER = "Order"; /** The title node. */ public static final String N_TITLE = "Title"; /** The title key node. */ public static final String N_TITLE_KEY = "TitleKey"; /** Special value indicating that no view is selected (used for parent view selection). */ public static final String PARENT_NONE = "view://null"; /** The logger instance for this class. */ private static final Log LOG = CmsLog.getLog(CmsElementView.class); /** The view title. */ String m_title; /** The explorer type. */ private CmsExplorerTypeSettings m_explorerType; /** Synthetic id for non-resource views. */ private CmsUUID m_id; /** The order. */ private int m_order; /** The parent view id. */ private CmsUUID m_parentViewId; /** The view resource. */ private CmsResource m_resource; /** The title localization key. */ private String m_titleKey; /** * Creates a new element view based on the given explorer type.

* * @param explorerType the explorer type */ public CmsElementView(CmsExplorerTypeSettings explorerType) { m_explorerType = explorerType; m_id = getExplorerTypeViewId(explorerType.getName()); m_titleKey = explorerType.getKey(); m_order = Integer.valueOf(explorerType.getNewResourceOrder()).intValue(); } /** * Constructor.

* * @param cms the cms context * @param resource the group resource * * @throws Exception if parsing the resource fails */ public CmsElementView(CmsObject cms, CmsResource resource) throws Exception { m_resource = resource; init(cms); } /** * Creates a new view with the given id, but initializes no other fields.

* * @param id the id */ public CmsElementView(CmsUUID id) { m_id = id; } /** * Constructor for the default element view.

*/ private CmsElementView() { // the default view m_title = "Content elements"; m_titleKey = GUI_ELEMENT_VIEW_DEFAULT_TITLE_0; m_order = 1050; } /** * Helper method to compute the uuid for views based on explorer types.

* * @param typeName the explorer type name * @return the element view id computed from the type name */ public static CmsUUID getExplorerTypeViewId(String typeName) { return CmsUUID.getConstantUUID("elementview-" + typeName); } /** * Gets the explorer type settings.

* * @return the explorer type */ public CmsExplorerTypeSettings getExplorerType() { return m_explorerType; } /** * Returns the element view id.

* * @return the group id */ public CmsUUID getId() { if (m_id != null) { return m_id; } else if (m_resource != null) { return m_resource.getStructureId(); } else { // only in case of the default element view return CmsUUID.getNullUUID(); } } /** * The order.

* * @return the order */ public int getOrder() { return m_order; } /** * Gets the parent view id (null if there is no parent view).

* * @return the parent view id */ public CmsUUID getParentViewId() { return m_parentViewId; } /** * Returns the element view resource.

* * @return the element view resource */ public CmsResource getResource() { return m_resource; } /** * Returns the element view title.

* * @param cms the cms context * @param locale the locale * * @return the title */ public String getTitle(CmsObject cms, Locale locale) { if (m_titleKey == null) { return m_title; } else { return OpenCms.getWorkplaceManager().getMessages(locale).key(m_titleKey); } } /** * Checks whether the current user has permissions to use the element view.

* * @param cms the cms context * @param folder used for permission checks for explorertype based views * * @return true if the current user has permissions to use the element view **/ public boolean hasPermission(CmsObject cms, CmsResource folder) { if ((m_explorerType != null) && (folder != null)) { CmsPermissionSet permSet = m_explorerType.getAccess().getPermissions(cms, folder); boolean result = permSet.requiresViewPermission(); return result; } try { if (m_resource != null) { return cms.hasPermissions( m_resource, CmsPermissionSet.ACCESS_VIEW, false, CmsResourceFilter.IGNORE_EXPIRATION.addRequireVisible()); } else { return OpenCms.getRoleManager().hasRole(cms, CmsRole.ELEMENT_AUTHOR); } } catch (CmsException e) { LOG.error(e.getLocalizedMessage(), e); } return false; } /** * 'Other types' view, for everything that isn't assigned to any other view.

* * @return true if this is the 'other types' view */ public boolean isOther() { return (m_explorerType != null) && m_explorerType.getName().equals("view_other"); } /** * Parses the edit view resource.

* * @param cms the cms context * @throws Exception if parsing the resource fails */ @SuppressWarnings("null") private void init(CmsObject cms) throws Exception { CmsFile configFile = cms.readFile(m_resource); CmsXmlContent content = CmsXmlContentFactory.unmarshal(cms, configFile); m_title = content.getValue(N_TITLE, CmsConfigurationReader.DEFAULT_LOCALE).getStringValue(cms); I_CmsXmlContentValue titleKey = content.getValue(N_TITLE_KEY, CmsConfigurationReader.DEFAULT_LOCALE); if ((titleKey != null) && CmsStringUtil.isNotEmptyOrWhitespaceOnly(titleKey.getStringValue(cms))) { m_titleKey = titleKey.getStringValue(cms); } I_CmsXmlContentValue orderVal = content.getValue(N_ORDER, CmsConfigurationReader.DEFAULT_LOCALE); if (orderVal != null) { try { m_order = Integer.parseInt(orderVal.getStringValue(cms)); } catch (Exception e) { LOG.error(e.getLocalizedMessage(), e); m_order = DEFAULT_ORDER; } } else { m_order = DEFAULT_ORDER; } I_CmsXmlContentValue parentView = content.getValue("Parent", CmsConfigurationReader.DEFAULT_LOCALE); if (parentView != null) { CmsUUID parentViewId = null; try { CmsXmlVarLinkValue elementViewValue = (CmsXmlVarLinkValue)parentView; String stringValue = elementViewValue.getStringValue(cms); if (CmsStringUtil.isEmpty(stringValue)) { parentViewId = CmsUUID.getNullUUID(); } else if (stringValue.equals(PARENT_NONE)) { parentViewId = null; } else if (stringValue.startsWith(CmsConfigurationReader.VIEW_SCHEME)) { parentViewId = new CmsUUID(stringValue.substring(CmsConfigurationReader.VIEW_SCHEME.length())); } else { parentViewId = elementViewValue.getLink(cms).getStructureId(); } } catch (Exception e) { LOG.error(e.getLocalizedMessage(), e); } m_parentViewId = parentViewId; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy