19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one 39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file 49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information 59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file 69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the "License"); 79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License. 89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at 99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software 139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and 169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License. 179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * $Id: XSLTElementDef.java 468640 2006-10-28 06:53:53Z minchau $ 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xalan.processor; 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.Enumeration; 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.Hashtable; 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.templates.Constants; 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.utils.QName; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class defines the allowed structure for an element in a XSLT stylesheet, 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * is meant to reflect the structure defined in http://www.w3.org/TR/xslt#dtd, and the 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * mapping between Xalan classes and the markup elements in the XSLT instance. 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This actually represents both text nodes and elements. 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class XSLTElementDef 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct an instance of XSLTElementDef. This must be followed by a 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * call to build(). 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef(){} 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct an instance of XSLTElementDef. 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param namespace The Namespace URI, "*", or null. 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The local name (without prefix), "*", or null. 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param nameAlias A potential alias for the name, or null. 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param elements An array of allowed child element defs, or null. 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param attributes An array of allowed attribute defs, or null. 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param contentHandler The element processor for this element. 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param classObject The class of the object that this element def should produce. 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef(XSLTSchema schema, String namespace, String name, String nameAlias, 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef[] elements, XSLTAttributeDef[] attributes, 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementProcessor contentHandler, Class classObject) 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson build(namespace, name, nameAlias, elements, attributes, contentHandler, 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson classObject); 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( (null != namespace) 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson && (namespace.equals(Constants.S_XSLNAMESPACEURL) 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || namespace.equals(Constants.S_BUILTIN_EXTENSIONS_URL) 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || namespace.equals(Constants.S_BUILTIN_OLD_EXTENSIONS_URL))) 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson schema.addAvailableElement(new QName(namespace, name)); 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(null != nameAlias) 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson schema.addAvailableElement(new QName(namespace, nameAlias)); 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct an instance of XSLTElementDef. 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param namespace The Namespace URI, "*", or null. 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The local name (without prefix), "*", or null. 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param nameAlias A potential alias for the name, or null. 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param elements An array of allowed child element defs, or null. 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param attributes An array of allowed attribute defs, or null. 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param contentHandler The element processor for this element. 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param classObject The class of the object that this element def should produce. 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param has_required true if this element has required elements by the XSLT specification. 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef(XSLTSchema schema, String namespace, String name, String nameAlias, 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef[] elements, XSLTAttributeDef[] attributes, 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementProcessor contentHandler, Class classObject, boolean has_required) 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_has_required = has_required; 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson build(namespace, name, nameAlias, elements, attributes, contentHandler, 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson classObject); 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ( (null != namespace) 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson && (namespace.equals(Constants.S_XSLNAMESPACEURL) 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || namespace.equals(Constants.S_BUILTIN_EXTENSIONS_URL) 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || namespace.equals(Constants.S_BUILTIN_OLD_EXTENSIONS_URL))) 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson schema.addAvailableElement(new QName(namespace, name)); 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(null != nameAlias) 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson schema.addAvailableElement(new QName(namespace, nameAlias)); 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct an instance of XSLTElementDef. 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param namespace The Namespace URI, "*", or null. 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The local name (without prefix), "*", or null. 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param nameAlias A potential alias for the name, or null. 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param elements An array of allowed child element defs, or null. 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param attributes An array of allowed attribute defs, or null. 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param contentHandler The element processor for this element. 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param classObject The class of the object that this element def should produce. 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param has_required true if this element has required elements by the XSLT specification. 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param required true if this element is required by the XSLT specification. 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef(XSLTSchema schema, String namespace, String name, String nameAlias, 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef[] elements, XSLTAttributeDef[] attributes, 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementProcessor contentHandler, Class classObject, 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean has_required, boolean required) 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this(schema, namespace, name, nameAlias, 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson elements, attributes, 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson contentHandler, classObject, has_required); 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_required = required; 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct an instance of XSLTElementDef. 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param namespace The Namespace URI, "*", or null. 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The local name (without prefix), "*", or null. 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param nameAlias A potential alias for the name, or null. 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param elements An array of allowed child element defs, or null. 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param attributes An array of allowed attribute defs, or null. 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param contentHandler The element processor for this element. 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param classObject The class of the object that this element def should produce. 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param has_required true if this element has required elements by the XSLT specification. 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param required true if this element is required by the XSLT specification. 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param order the order this element should appear according to the XSLT specification. 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param multiAllowed whether this element is allowed more than once 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef(XSLTSchema schema, String namespace, String name, String nameAlias, 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef[] elements, XSLTAttributeDef[] attributes, 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementProcessor contentHandler, Class classObject, 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean has_required, boolean required, int order, 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean multiAllowed) 1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this(schema, namespace, name, nameAlias, 1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson elements, attributes, 1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson contentHandler, classObject, has_required, required); 1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_order = order; 1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_multiAllowed = multiAllowed; 1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct an instance of XSLTElementDef. 1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param namespace The Namespace URI, "*", or null. 1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The local name (without prefix), "*", or null. 1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param nameAlias A potential alias for the name, or null. 1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param elements An array of allowed child element defs, or null. 1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param attributes An array of allowed attribute defs, or null. 1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param contentHandler The element processor for this element. 1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param classObject The class of the object that this element def should produce. 1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param has_required true if this element has required elements by the XSLT specification. 1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param required true if this element is required by the XSLT specification. 1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param has_order whether this element has ordered child elements 1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param order the order this element should appear according to the XSLT specification. 1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param multiAllowed whether this element is allowed more than once 1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef(XSLTSchema schema, String namespace, String name, String nameAlias, 1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef[] elements, XSLTAttributeDef[] attributes, 1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementProcessor contentHandler, Class classObject, 1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean has_required, boolean required, boolean has_order, int order, 1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean multiAllowed) 1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this(schema, namespace, name, nameAlias, 1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson elements, attributes, 1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson contentHandler, classObject, has_required, required); 1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_order = order; 1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_multiAllowed = multiAllowed; 1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_isOrdered = has_order; 1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct an instance of XSLTElementDef. 1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param namespace The Namespace URI, "*", or null. 1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The local name (without prefix), "*", or null. 1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param nameAlias A potential alias for the name, or null. 1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param elements An array of allowed child element defs, or null. 1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param attributes An array of allowed attribute defs, or null. 1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param contentHandler The element processor for this element. 1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param classObject The class of the object that this element def should produce. 1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param has_order whether this element has ordered child elements 1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param order the order this element should appear according to the XSLT specification. 1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param multiAllowed whether this element is allowed more than once 1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef(XSLTSchema schema, String namespace, String name, String nameAlias, 2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef[] elements, XSLTAttributeDef[] attributes, 2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementProcessor contentHandler, Class classObject, 2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean has_order, int order, boolean multiAllowed) 2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this(schema, namespace, name, nameAlias, 2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson elements, attributes, 2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson contentHandler, classObject, 2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson order, multiAllowed); 2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_isOrdered = has_order; 2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct an instance of XSLTElementDef. 2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param namespace The Namespace URI, "*", or null. 2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The local name (without prefix), "*", or null. 2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param nameAlias A potential alias for the name, or null. 2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param elements An array of allowed child element defs, or null. 2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param attributes An array of allowed attribute defs, or null. 2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param contentHandler The element processor for this element. 2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param classObject The class of the object that this element def should produce. 2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param order the order this element should appear according to the XSLT specification. 2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param multiAllowed whether this element is allowed more than once 2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef(XSLTSchema schema, String namespace, String name, String nameAlias, 2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef[] elements, XSLTAttributeDef[] attributes, 2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementProcessor contentHandler, Class classObject, 2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int order, boolean multiAllowed) 2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this(schema, namespace, name, nameAlias, elements, attributes, contentHandler, 2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson classObject); 2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_order = order; 2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_multiAllowed = multiAllowed; 2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct an instance of XSLTElementDef that represents text. 2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param classObject The class of the object that this element def should produce. 2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param contentHandler The element processor for this element. 2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param type Content type, one of T_ELEMENT, T_PCDATA, or T_ANY. 2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef(Class classObject, XSLTElementProcessor contentHandler, 2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int type) 2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_classObject = classObject; 2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_type = type; 2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setElementProcessor(contentHandler); 2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Construct an instance of XSLTElementDef. 2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param namespace The Namespace URI, "*", or null. 2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The local name (without prefix), "*", or null. 2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param nameAlias A potential alias for the name, or null. 2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param elements An array of allowed child element defs, or null. 2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param attributes An array of allowed attribute defs, or null. 2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param contentHandler The element processor for this element. 2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param classObject The class of the object that this element def should produce. 2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson void build(String namespace, String name, String nameAlias, 2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef[] elements, XSLTAttributeDef[] attributes, 2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementProcessor contentHandler, Class classObject) 2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_namespace = namespace; 2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_name = name; 2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_nameAlias = nameAlias; 2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_elements = elements; 2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_attributes = attributes; 2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setElementProcessor(contentHandler); 2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.m_classObject = classObject; 2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (hasRequired() && m_elements != null) 2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int n = m_elements.length; 2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (int i = 0; i < n; i++) 2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef def = m_elements[i]; 2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (def != null && def.getRequired()) 2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_requiredFound == null) 2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_requiredFound = new Hashtable(); 2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_requiredFound.put(def.getName(), "xsl:" +def.getName()); 2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if two objects are equal, when either one may be null. 2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If both are null, they are considered equal. 2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj1 A reference to the first object, or null. 3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param obj2 A reference to the second object, or null. 3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if the to objects are equal by both being null or 3039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * because obj2.equals(obj1) returns true. 3049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private static boolean equalsMayBeNull(Object obj1, Object obj2) 3069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (obj2 == obj1) 3089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || ((null != obj1) && (null != obj2) && obj2.equals(obj1)); 3099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if the two string refs are equal, 3139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * equality being defined as: 3149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1) Both strings are null. 3159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2) One string is null and the other is empty. 3169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3) Both strings are non-null, and equal. 3179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s1 A reference to the first string, or null. 3199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param s2 A reference to the second string, or null. 3209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if Both strings are null, or if 3229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * one string is null and the other is empty, or if 3239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * both strings are non-null, and equal because 3249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * s1.equals(s2) returns true. 3259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private static boolean equalsMayBeNullOrZeroLen(String s1, String s2) 3279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int len1 = (s1 == null) ? 0 : s1.length(); 3309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int len2 = (s2 == null) ? 0 : s2.length(); 3319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (len1 != len2) ? false 3339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson : (len1 == 0) ? true 3349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson : s1.equals(s2); 3359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Content type enumerations */ 3389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final int T_ELEMENT = 1, T_PCDATA = 2, T_ANY = 3; 3399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The type of this element. 3429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private int m_type = T_ELEMENT; 3449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the type of this element. 3479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return Content type, one of T_ELEMENT, T_PCDATA, or T_ANY. 3499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int getType() 3519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_type; 3539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set the type of this element. 3579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param t Content type, one of T_ELEMENT, T_PCDATA, or T_ANY. 3599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson void setType(int t) 3619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_type = t; 3639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The allowed namespace for this element. 3679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private String m_namespace; 3699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the allowed namespace for this element. 3729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The Namespace URI, "*", or null. 3749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String getNamespace() 3769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_namespace; 3789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The name of this element. 3829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private String m_name; 3849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the local name of this element. 3879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The local name of this element, "*", or null. 3899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String getName() 3919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_name; 3939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The name of this element. 3979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private String m_nameAlias; 3999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the name of this element. 4029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return A potential alias for the name, or null. 4049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String getNameAlias() 4069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_nameAlias; 4089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The allowed elements for this type. 4129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private XSLTElementDef[] m_elements; 4149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the allowed elements for this type. 4179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return An array of allowed child element defs, or null. 4199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage internal 4209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XSLTElementDef[] getElements() 4229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_elements; 4249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set the allowed elements for this type. 4289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param defs An array of allowed child element defs, or null. 4309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson void setElements(XSLTElementDef[] defs) 4329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_elements = defs; 4349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Tell if the namespace URI and local name match this 4389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * element. 4399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param uri The namespace uri, which may be null. 4409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param localName The local name of an element, which may be null. 4419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if the uri and local name arguments are considered 4439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to match the uri and local name of this element def. 4449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean QNameEquals(String uri, String localName) 4469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (equalsMayBeNullOrZeroLen(m_namespace, uri) 4499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson && (equalsMayBeNullOrZeroLen(m_name, localName) 4509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || equalsMayBeNullOrZeroLen(m_nameAlias, localName))); 4519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Given a namespace URI, and a local name, get the processor 4559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * for the element, or return null if not allowed. 4569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param uri The Namespace URI, or an empty string. 4589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param localName The local name (without prefix), or empty string if not namespace processing. 4599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The element processor that matches the arguments, or null. 4619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementProcessor getProcessorFor(String uri, String localName) 4639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementProcessor elemDef = null; // return value 4669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == m_elements) 4689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 4699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int n = m_elements.length; 4719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int order = -1; 4729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean multiAllowed = true; 4739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (int i = 0; i < n; i++) 4749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef def = m_elements[i]; 4769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // A "*" signals that the element allows literal result 4789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // elements, so just assign the def, and continue to 4799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // see if anything else matches. 4809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (def.m_name.equals("*")) 4819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Don't allow xsl elements 4849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!equalsMayBeNullOrZeroLen(uri, Constants.S_XSLNAMESPACEURL)) 4859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson elemDef = def.m_elementProcessor; 4879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson order = def.getOrder(); 4889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson multiAllowed = def.getMultiAllowed(); 4899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (def.QNameEquals(uri, localName)) 4929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (def.getRequired()) 4949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson this.setRequiredFound(def.getName(), true); 4959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson order = def.getOrder(); 4969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson multiAllowed = def.getMultiAllowed(); 4979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson elemDef = def.m_elementProcessor; 4989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 4999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (elemDef != null && this.isOrdered()) 5039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int lastOrder = getLastOrder(); 5059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (order > lastOrder) 5069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setLastOrder(order); 5079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (order == lastOrder && !multiAllowed) 5089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 5109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (order < lastOrder && order > 0) 5129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 5149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return elemDef; 5189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Given an unknown element, get the processor 5229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * for the element. 5239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param uri The Namespace URI, or an empty string. 5259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param localName The local name (without prefix), or empty string if not namespace processing. 5269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return normally a {@link ProcessorUnknown} reference. 5289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see ProcessorUnknown 5299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementProcessor getProcessorForUnknown(String uri, String localName) 5319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // XSLTElementProcessor lreDef = null; // return value 5349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == m_elements) 5359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 5369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int n = m_elements.length; 5389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (int i = 0; i < n; i++) 5409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTElementDef def = m_elements[i]; 5429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (def.m_name.equals("unknown") && uri.length() > 0) 5449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return def.m_elementProcessor; 5469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 5509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The allowed attributes for this type. 5549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private XSLTAttributeDef[] m_attributes; 5569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the allowed attributes for this type. 5599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return An array of allowed attribute defs, or null. 5619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTAttributeDef[] getAttributes() 5639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_attributes; 5659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Given a namespace URI, and a local name, return the element's 5699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * attribute definition, if it has one. 5709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param uri The Namespace URI, or an empty string. 5729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param localName The local name (without prefix), or empty string if not namespace processing. 5739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The attribute def that matches the arguments, or null. 5759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTAttributeDef getAttributeDef(String uri, String localName) 5779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTAttributeDef defaultDef = null; 5809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTAttributeDef[] attrDefs = getAttributes(); 5819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int nAttrDefs = attrDefs.length; 5829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (int k = 0; k < nAttrDefs; k++) 5849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTAttributeDef attrDef = attrDefs[k]; 5869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String uriDef = attrDef.getNamespace(); 5879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String nameDef = attrDef.getName(); 5889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (nameDef.equals("*") && (equalsMayBeNullOrZeroLen(uri, uriDef) || 5909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson (uriDef != null && uriDef.equals("*") && uri!=null && uri.length() > 0 ))) 5919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return attrDef; 5939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (nameDef.equals("*") && (uriDef == null)) 5959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // In this case, all attributes are legal, so return 5989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // this as the last resort. 5999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson defaultDef = attrDef; 6009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (equalsMayBeNullOrZeroLen(uri, uriDef) 6029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson && localName.equals(nameDef)) 6039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return attrDef; 6059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == defaultDef) 6099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (uri.length() > 0 && !equalsMayBeNullOrZeroLen(uri, Constants.S_XSLNAMESPACEURL)) 6119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return XSLTAttributeDef.m_foreignAttr; 6139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return defaultDef; 6179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If non-null, the ContentHandler/TransformerFactory for this element. 6219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private XSLTElementProcessor m_elementProcessor; 6239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return the XSLTElementProcessor for this element. 6269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The element processor for this element. 6289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage internal 6299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XSLTElementProcessor getElementProcessor() 6319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_elementProcessor; 6339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set the XSLTElementProcessor for this element. 6379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param handler The element processor for this element. 6399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage internal 6409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setElementProcessor(XSLTElementProcessor handler) 6429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (handler != null) 6459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_elementProcessor = handler; 6479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_elementProcessor.setElemDef(this); 6499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If non-null, the class object that should in instantiated for 6549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a Xalan instance of this element. 6559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private Class m_classObject; 6579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return the class object that should in instantiated for 6609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a Xalan instance of this element. 6619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The class of the object that this element def should produce, or null. 6639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Class getClassObject() 6659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_classObject; 6679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If true, this has a required element. 6719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean m_has_required = false; 6739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get whether or not this has a required element. 6769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if this this has a required element. 6789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean hasRequired() 6809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_has_required; 6829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If true, this is a required element. 6869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean m_required = false; 6889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get whether or not this is a required element. 6919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if this is a required element. 6939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean getRequired() 6959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_required; 6979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Hashtable m_requiredFound; 7009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set this required element found. 7039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson void setRequiredFound(String elem, boolean found) 7069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_requiredFound.get(elem) != null) 7089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_requiredFound.remove(elem); 7099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get whether all required elements were found. 7139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if all required elements were found. 7159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean getRequiredFound() 7179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_requiredFound == null) 7199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 7209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_requiredFound.isEmpty(); 7219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get required elements that were not found. 7259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return required elements that were not found. 7279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String getRequiredElem() 7299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_requiredFound == null) 7319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 7329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Enumeration elems = m_requiredFound.elements(); 7339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String s = ""; 7349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean first = true; 7359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson while (elems.hasMoreElements()) 7369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (first) 7389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson first = false; 7399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 7409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson s = s + ", "; 7419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson s = s + (String)elems.nextElement(); 7429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return s; 7449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean m_isOrdered = false; 7479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get whether this element requires ordered children. 7509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if this element requires ordered children. 7529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean isOrdered() 7549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /*if (!m_CheckedOrdered) 7569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_CheckedOrdered = true; 7589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_isOrdered = false; 7599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == m_elements) 7609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 7619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int n = m_elements.length; 7639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson for (int i = 0; i < n; i++) 7659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elements[i].getOrder() > 0) 7679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_isOrdered = true; 7699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 7709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 7739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else*/ 7759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_isOrdered; 7769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the order that this element should appear, or -1 if not ordered 7809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private int m_order = -1; 7829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the order that this element should appear . 7859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the order that this element should appear. 7879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int getOrder() 7899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_order; 7919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the highest order of child elements have appeared so far, 7959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or -1 if not ordered 7969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private int m_lastOrder = -1; 7989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the highest order of child elements have appeared so far . 8019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return the highest order of child elements have appeared so far. 8039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int getLastOrder() 8059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_lastOrder; 8079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set the highest order of child elements have appeared so far . 8119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param order the highest order of child elements have appeared so far. 8139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson void setLastOrder(int order) 8159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_lastOrder = order ; 8179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * True if this element can appear multiple times 8219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean m_multiAllowed = true; 8239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get whether this element can appear multiple times 8269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if this element can appear multiple times 8289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean getMultiAllowed() 8309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_multiAllowed; 8329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 834