cmsdefaultxmlcontenthandler.java
来自「找了很久才找到到源代码」· Java 代码 · 共 1,448 行 · 第 1/5 页
JAVA
1,448 行
/*
* File : $Source: /usr/local/cvs/opencms/src/org/opencms/xml/content/CmsDefaultXmlContentHandler.java,v $
* Date : $Date: 2007-09-07 13:01:32 $
* Version: $Revision: 1.52 $
*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) 2002 - 2007 Alkacon Software GmbH (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, 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.content;
import org.opencms.configuration.CmsConfigurationManager;
import org.opencms.file.CmsFile;
import org.opencms.file.CmsObject;
import org.opencms.file.CmsProperty;
import org.opencms.file.CmsResource;
import org.opencms.file.CmsResourceFilter;
import org.opencms.i18n.CmsEncoder;
import org.opencms.i18n.CmsMessages;
import org.opencms.main.CmsException;
import org.opencms.main.CmsLog;
import org.opencms.main.CmsRuntimeException;
import org.opencms.main.OpenCms;
import org.opencms.relations.CmsLink;
import org.opencms.relations.CmsRelationType;
import org.opencms.site.CmsSite;
import org.opencms.util.CmsFileUtil;
import org.opencms.util.CmsHtmlConverter;
import org.opencms.util.CmsMacroResolver;
import org.opencms.util.CmsStringUtil;
import org.opencms.widgets.CmsDisplayWidget;
import org.opencms.widgets.I_CmsWidget;
import org.opencms.xml.CmsXmlContentDefinition;
import org.opencms.xml.CmsXmlEntityResolver;
import org.opencms.xml.CmsXmlException;
import org.opencms.xml.CmsXmlUtils;
import org.opencms.xml.types.CmsXmlNestedContentDefinition;
import org.opencms.xml.types.CmsXmlVarLinkValue;
import org.opencms.xml.types.CmsXmlVfsFileValue;
import org.opencms.xml.types.I_CmsXmlContentValue;
import org.opencms.xml.types.I_CmsXmlSchemaType;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
/**
* Default implementation for the XML content handler, will be used by all XML contents that do not
* provide their own handler.<p>
*
* @author Alexander Kandzior
* @author Michael Moossen
*
* @version $Revision: 1.52 $
*
* @since 6.0.0
*/
public class CmsDefaultXmlContentHandler implements I_CmsXmlContentHandler {
/** Constant for the "appinfo" element name itself. */
public static final String APPINFO_APPINFO = "appinfo";
/** Constant for the "configuration" appinfo attribute name. */
public static final String APPINFO_ATTR_CONFIGURATION = "configuration";
/** Constant for the "element" appinfo attribute name. */
public static final String APPINFO_ATTR_ELEMENT = "element";
/** Constant for the "invalidate" appinfo attribute name. */
public static final String APPINFO_ATTR_INVALIDATE = "invalidate";
/** Constant for the "mapto" appinfo attribute name. */
public static final String APPINFO_ATTR_MAPTO = "mapto";
/** Constant for the "message" appinfo attribute name. */
public static final String APPINFO_ATTR_MESSAGE = "message";
/** Constant for the "name" appinfo attribute name. */
public static final String APPINFO_ATTR_NAME = "name";
/** Constant for the "regex" appinfo attribute name. */
public static final String APPINFO_ATTR_REGEX = "regex";
/** Constant for the "searchcontent" appinfo attribute name. */
public static final String APPINFO_ATTR_SEARCHCONTENT = "searchcontent";
/** Constant for the "type" appinfo attribute name. */
public static final String APPINFO_ATTR_TYPE = "type";
/** Constant for the "node" appinfo attribute value. */
public static final String APPINFO_ATTR_TYPE_NODE = "node";
/** Constant for the "parent" appinfo attribute value. */
public static final String APPINFO_ATTR_TYPE_PARENT = "parent";
/** Constant for the "warning" appinfo attribute value. */
public static final String APPINFO_ATTR_TYPE_WARNING = "warning";
/** Constant for the "uri" appinfo attribute name. */
public static final String APPINFO_ATTR_URI = "uri";
/** Constant for the "value" appinfo attribute name. */
public static final String APPINFO_ATTR_VALUE = "value";
/** Constant for the "widget" appinfo attribute name. */
public static final String APPINFO_ATTR_WIDGET = "widget";
/** Constant for the "default" appinfo element name. */
public static final String APPINFO_DEFAULT = "default";
/** Constant for the "defaults" appinfo element name. */
public static final String APPINFO_DEFAULTS = "defaults";
/** Constant for the "layout" appinfo element name. */
public static final String APPINFO_LAYOUT = "layout";
/** Constant for the "layouts" appinfo element name. */
public static final String APPINFO_LAYOUTS = "layouts";
/** Constant for the "mapping" appinfo element name. */
public static final String APPINFO_MAPPING = "mapping";
/** Constant for the "mappings" appinfo element name. */
public static final String APPINFO_MAPPINGS = "mappings";
/** Constant for the "modelfolder" appinfo element name. */
public static final String APPINFO_MODELFOLDER = "modelfolder";
/** Constant for the "preview" appinfo element name. */
public static final String APPINFO_PREVIEW = "preview";
/** Constant for the "relation" appinfo element name. */
public static final String APPINFO_RELATION = "relation";
/** Constant for the "relations" appinfo element name. */
public static final String APPINFO_RELATIONS = "relations";
/** Constant for the "searchexclusions" appinfo element name. */
public static final String APPINFO_RESOURCEBUNDLE = "resourcebundle";
/** Constant for the "rule" appinfo element name. */
public static final String APPINFO_RULE = "rule";
/** The file where the default appinfo schema is located. */
public static final String APPINFO_SCHEMA_FILE = "org/opencms/xml/content/DefaultAppinfo.xsd";
/** The file where the default appinfo schema types are located. */
public static final String APPINFO_SCHEMA_FILE_TYPES = "org/opencms/xml/content/DefaultAppinfoTypes.xsd";
/** The XML system id for the default appinfo schema types. */
public static final String APPINFO_SCHEMA_SYSTEM_ID = CmsConfigurationManager.DEFAULT_DTD_PREFIX
+ APPINFO_SCHEMA_FILE;
/** The XML system id for the default appinfo schema types. */
public static final String APPINFO_SCHEMA_TYPES_SYSTEM_ID = CmsConfigurationManager.DEFAULT_DTD_PREFIX
+ APPINFO_SCHEMA_FILE_TYPES;
/** Constant for the "searchsetting" appinfo element name. */
public static final String APPINFO_SEARCHSETTING = "searchsetting";
/** Constant for the "searchsettings" appinfo element name. */
public static final String APPINFO_SEARCHSETTINGS = "searchsettings";
/** Constant for the "validationrule" appinfo element name. */
public static final String APPINFO_VALIDATIONRULE = "validationrule";
/** Constant for the "validationrules" appinfo element name. */
public static final String APPINFO_VALIDATIONRULES = "validationrules";
/** Macro for resolving the preview URI. */
public static final String MACRO_PREVIEW_TEMPFILE = "previewtempfile";
/** Default message for validation errors. */
protected static final String MESSAGE_VALIDATION_DEFAULT_ERROR = "${validation.path}: "
+ "${key."
+ Messages.GUI_EDITOR_XMLCONTENT_VALIDATION_ERROR_2
+ "|${validation.value}|[${validation.regex}]}";
/** Default message for validation warnings. */
protected static final String MESSAGE_VALIDATION_DEFAULT_WARNING = "${validation.path}: "
+ "${key."
+ Messages.GUI_EDITOR_XMLCONTENT_VALIDATION_WARNING_2
+ "|${validation.value}|[${validation.regex}]}";
/** The log object for this class. */
private static final Log LOG = CmsLog.getLog(CmsDefaultXmlContentHandler.class);
/** Prefix to cache the checkrule relation types. */
private static final String RELATION_TYPE_PREFIX = "rt_";
/** The configuration values for the element widgets (as defined in the annotations). */
protected Map m_configurationValues;
/** The default values for the elements (as defined in the annotations). */
protected Map m_defaultValues;
/** The element mappings (as defined in the annotations). */
protected Map m_elementMappings;
/** The widgets used for the elements (as defined in the annotations). */
protected Map m_elementWidgets;
/** The resource bundle name to be used for localization of this content handler. */
protected String m_messageBundleName;
/** The folder containing the model file(s) for the content. */
protected String m_modelFolder;
/** The preview location (as defined in the annotations). */
protected String m_previewLocation;
/** The relation check rules. */
protected Map m_relations;
/** The search settings. */
protected Map m_searchSettings;
/** The messages for the error validation rules. */
protected Map m_validationErrorMessages;
/** The validation rules that cause an error (as defined in the annotations). */
protected Map m_validationErrorRules;
/** The messages for the warning validation rules. */
protected Map m_validationWarningMessages;
/** The validation rules that cause a warning (as defined in the annotations). */
protected Map m_validationWarningRules;
/**
* Creates a new instance of the default XML content handler.<p>
*/
public CmsDefaultXmlContentHandler() {
init();
}
/**
* Static initializer for caching the default appinfo validation schema.<p>
*/
static {
// the schema definition is located in 2 separates file for easier editing
// 2 files are required in case an extended schema want to use the default definitions,
// but with an extended "appinfo" node
byte[] appinfoSchemaTypes;
try {
// first read the default types
appinfoSchemaTypes = CmsFileUtil.readFile(APPINFO_SCHEMA_FILE_TYPES);
} catch (Exception e) {
throw new CmsRuntimeException(Messages.get().container(
org.opencms.xml.types.Messages.ERR_XMLCONTENT_LOAD_SCHEMA_1,
APPINFO_SCHEMA_FILE_TYPES), e);
}
CmsXmlEntityResolver.cacheSystemId(APPINFO_SCHEMA_TYPES_SYSTEM_ID, appinfoSchemaTypes);
byte[] appinfoSchema;
try {
// now read the default base schema
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?