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

org.opencms.xml.containerpage.CmsXmlContainerPageHandler 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 GmbH & Co. KG, 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.xml.containerpage;

import org.opencms.file.CmsObject;
import org.opencms.file.CmsResourceFilter;
import org.opencms.main.CmsException;
import org.opencms.relations.CmsLink;
import org.opencms.xml.CmsXmlException;
import org.opencms.xml.CmsXmlUtils;
import org.opencms.xml.content.CmsDefaultXmlContentHandler;
import org.opencms.xml.content.CmsXmlContent;
import org.opencms.xml.content.CmsXmlContentErrorHandler;
import org.opencms.xml.types.CmsXmlVarLinkValue;
import org.opencms.xml.types.CmsXmlVfsFileValue;
import org.opencms.xml.types.I_CmsXmlContentValue;

import java.util.Iterator;
import java.util.Locale;

/**
 * Container page handler to validate consistency.

* * @since 7.6 */ public class CmsXmlContainerPageHandler extends CmsDefaultXmlContentHandler { /** * Creates a new instance.

*/ public CmsXmlContainerPageHandler() { super(); } /** * @see org.opencms.xml.content.CmsDefaultXmlContentHandler#hasModifiableFormatters() */ @Override public boolean hasModifiableFormatters() { return false; } /** * @see org.opencms.xml.content.I_CmsXmlContentHandler#resolveValidation(org.opencms.file.CmsObject, org.opencms.xml.types.I_CmsXmlContentValue, org.opencms.xml.content.CmsXmlContentErrorHandler) */ @Override public CmsXmlContentErrorHandler resolveValidation( CmsObject cms, I_CmsXmlContentValue value, CmsXmlContentErrorHandler errorHandler) { if (errorHandler == null) { // init a new error handler if required errorHandler = new CmsXmlContentErrorHandler(); } // we only have to validate containers if ((value != null) && CmsXmlUtils.removeXpath(value.getPath()).equals(CmsXmlContainerPage.XmlNode.Containers.name())) { CmsXmlContent content = (CmsXmlContent)value.getDocument(); try { validateNames(cms, value, content); } catch (CmsXmlException e) { errorHandler.addError(value, e.getLocalizedMessage()); } } return errorHandler; } /** * @see org.opencms.xml.content.CmsDefaultXmlContentHandler#validateLink(org.opencms.file.CmsObject, org.opencms.xml.types.I_CmsXmlContentValue, org.opencms.xml.content.CmsXmlContentErrorHandler) */ @Override protected boolean validateLink(CmsObject cms, I_CmsXmlContentValue value, CmsXmlContentErrorHandler errorHandler) { // if there is a value of type file reference if ((value == null) || (!(value instanceof CmsXmlVfsFileValue) && !(value instanceof CmsXmlVarLinkValue))) { return false; } // if the value has a link (this will automatically fix, for instance, the path of moved resources) CmsLink link = null; if (value instanceof CmsXmlVfsFileValue) { link = ((CmsXmlVfsFileValue)value).getLink(cms); } else if (value instanceof CmsXmlVarLinkValue) { link = ((CmsXmlVarLinkValue)value).getLink(cms); } if ((link == null) || !link.isInternal()) { return false; } try { String sitePath = cms.getRequestContext().removeSiteRoot(link.getTarget()); // validate the link for error cms.readResource(sitePath, CmsResourceFilter.IGNORE_EXPIRATION); // we handle expiration in the cms:container tag, so don't validate it here } catch (CmsException e) { if (errorHandler != null) { // generate error message errorHandler.addError( value, org.opencms.xml.content.Messages.get().getBundle(value.getLocale()).key( org.opencms.xml.content.Messages.GUI_XMLCONTENT_CHECK_ERROR_0)); } return true; } return false; } /** * Validates container names, so that they are unique in the page.

* * @param cms the cms context * @param value the value to validate * @param content the container page to validate * * @throws CmsXmlException if there are duplicated names */ protected void validateNames(CmsObject cms, I_CmsXmlContentValue value, CmsXmlContent content) throws CmsXmlException { // get the current name Locale locale = value.getLocale(); String namePath = CmsXmlUtils.concatXpath(value.getPath(), CmsXmlContainerPage.XmlNode.Name.name()); String name = content.getValue(namePath, locale).getStringValue(cms); // iterate over all containers Iterator itValues = content.getValues( CmsXmlContainerPage.XmlNode.Containers.name(), locale).iterator(); while (itValues.hasNext()) { I_CmsXmlContentValue itValue = itValues.next(); if (itValue.getPath().equals(value.getPath())) { // skip current container continue; } // get container name namePath = CmsXmlUtils.concatXpath(itValue.getPath(), CmsXmlContainerPage.XmlNode.Name.name()); String itName = content.getValue(namePath, locale).getStringValue(cms); // validate if (name.equals(itName)) { throw new CmsXmlException(Messages.get().container(Messages.ERR_DUPLICATE_NAME_1, name)); } } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy