src/share/jaxws_classes/com/sun/xml/internal/fastinfoset/vocab/ParserVocabulary.java

Thu, 12 Oct 2017 19:44:07 +0800

author
aoqi
date
Thu, 12 Oct 2017 19:44:07 +0800
changeset 760
e530533619ec
parent 0
373ffda63c9a
permissions
-rw-r--r--

merge

     1 /*
     2  * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14  * version 2 for more details (a copy is included in the LICENSE file that
    15  * accompanied this code).
    16  *
    17  * You should have received a copy of the GNU General Public License version
    18  * 2 along with this work; if not, write to the Free Software Foundation,
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  *
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22  * or visit www.oracle.com if you need additional information or have any
    23  * questions.
    24  *
    25  * THIS FILE WAS MODIFIED BY SUN MICROSYSTEMS, INC.
    26  */
    28 package com.sun.xml.internal.fastinfoset.vocab;
    30 import com.sun.xml.internal.fastinfoset.EncodingConstants;
    31 import com.sun.xml.internal.fastinfoset.QualifiedName;
    32 import com.sun.xml.internal.fastinfoset.util.CharArray;
    33 import com.sun.xml.internal.fastinfoset.util.CharArrayArray;
    34 import com.sun.xml.internal.fastinfoset.util.ContiguousCharArrayArray;
    35 import com.sun.xml.internal.fastinfoset.util.DuplicateAttributeVerifier;
    36 import com.sun.xml.internal.fastinfoset.util.FixedEntryStringIntMap;
    37 import com.sun.xml.internal.fastinfoset.util.KeyIntMap;
    38 import com.sun.xml.internal.fastinfoset.util.PrefixArray;
    39 import com.sun.xml.internal.fastinfoset.util.QualifiedNameArray;
    40 import com.sun.xml.internal.fastinfoset.util.StringArray;
    41 import com.sun.xml.internal.fastinfoset.util.StringIntMap;
    42 import com.sun.xml.internal.fastinfoset.util.ValueArray;
    43 import java.util.Iterator;
    44 import javax.xml.namespace.QName;
    46 public class ParserVocabulary extends Vocabulary {
    47     public static final String IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS_PEOPERTY =
    48         "com.sun.xml.internal.fastinfoset.vocab.ParserVocabulary.IdentifyingStringTable.maximumItems";
    49     public static final String NON_IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS_PEOPERTY =
    50         "com.sun.xml.internal.fastinfoset.vocab.ParserVocabulary.NonIdentifyingStringTable.maximumItems";
    51     public static final String NON_IDENTIFYING_STRING_TABLE_MAXIMUM_CHARACTERS_PEOPERTY =
    52         "com.sun.xml.internal.fastinfoset.vocab.ParserVocabulary.NonIdentifyingStringTable.maximumCharacters";
    54     protected static final int IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS =
    55             getIntegerValueFromProperty(IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS_PEOPERTY);
    56     protected static final int NON_IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS =
    57             getIntegerValueFromProperty(NON_IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS_PEOPERTY);
    58     protected static final int NON_IDENTIFYING_STRING_TABLE_MAXIMUM_CHARACTERS =
    59             getIntegerValueFromProperty(NON_IDENTIFYING_STRING_TABLE_MAXIMUM_CHARACTERS_PEOPERTY);
    61     private static int getIntegerValueFromProperty(String property) {
    62         String value = System.getProperty(property);
    63         if (value == null) {
    64             return Integer.MAX_VALUE;
    65         }
    67         try {
    68             return Math.max(Integer.parseInt(value), ValueArray.DEFAULT_CAPACITY);
    69         } catch (NumberFormatException e) {
    70             return Integer.MAX_VALUE;
    71         }
    72     }
    74     public final CharArrayArray restrictedAlphabet = new CharArrayArray(ValueArray.DEFAULT_CAPACITY, 256);
    75     public final StringArray encodingAlgorithm = new StringArray(ValueArray.DEFAULT_CAPACITY, 256, true);
    77     public final StringArray namespaceName;
    78     public final PrefixArray prefix;
    79     public final StringArray localName;
    80     public final StringArray otherNCName ;
    81     public final StringArray otherURI;
    82     public final StringArray attributeValue;
    83     public final CharArrayArray otherString;
    85     public final ContiguousCharArrayArray characterContentChunk;
    87     public final QualifiedNameArray elementName;
    88     public final QualifiedNameArray attributeName;
    90     public final ValueArray[] tables = new ValueArray[12];
    92     protected SerializerVocabulary _readOnlyVocabulary;
    94     /** Creates a new instance of ParserVocabulary */
    95     public ParserVocabulary() {
    96         namespaceName = new StringArray(ValueArray.DEFAULT_CAPACITY, IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS, false);
    97         prefix = new PrefixArray(ValueArray.DEFAULT_CAPACITY, IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS);
    98         localName = new StringArray(ValueArray.DEFAULT_CAPACITY, IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS, false);
    99         otherNCName = new StringArray(ValueArray.DEFAULT_CAPACITY, IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS, false);
   100         otherURI = new StringArray(ValueArray.DEFAULT_CAPACITY, IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS, true);
   101         attributeValue = new StringArray(ValueArray.DEFAULT_CAPACITY, NON_IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS, true);
   102         otherString = new CharArrayArray(ValueArray.DEFAULT_CAPACITY, NON_IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS);
   104         characterContentChunk = new ContiguousCharArrayArray(ValueArray.DEFAULT_CAPACITY,
   105                 NON_IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS,
   106                 ContiguousCharArrayArray.INITIAL_CHARACTER_SIZE,
   107                 NON_IDENTIFYING_STRING_TABLE_MAXIMUM_CHARACTERS);
   109         elementName = new QualifiedNameArray(ValueArray.DEFAULT_CAPACITY, IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS);
   110         attributeName = new QualifiedNameArray(ValueArray.DEFAULT_CAPACITY, IDENTIFYING_STRING_TABLE_MAXIMUM_ITEMS);
   112         tables[RESTRICTED_ALPHABET] = restrictedAlphabet;
   113         tables[ENCODING_ALGORITHM] = encodingAlgorithm;
   114         tables[PREFIX] = prefix;
   115         tables[NAMESPACE_NAME] = namespaceName;
   116         tables[LOCAL_NAME] = localName;
   117         tables[OTHER_NCNAME] = otherNCName;
   118         tables[OTHER_URI] = otherURI;
   119         tables[ATTRIBUTE_VALUE] = attributeValue;
   120         tables[OTHER_STRING] = otherString;
   121         tables[CHARACTER_CONTENT_CHUNK] = characterContentChunk;
   122         tables[ELEMENT_NAME] = elementName;
   123         tables[ATTRIBUTE_NAME] = attributeName;
   124     }
   127     public ParserVocabulary(com.sun.xml.internal.org.jvnet.fastinfoset.Vocabulary v) {
   128         this();
   130         convertVocabulary(v);
   131     }
   133     void setReadOnlyVocabulary(ParserVocabulary readOnlyVocabulary, boolean clear) {
   134         for (int i = 0; i < tables.length; i++) {
   135             tables[i].setReadOnlyArray(readOnlyVocabulary.tables[i], clear);
   136         }
   137     }
   139     public void setInitialVocabulary(ParserVocabulary initialVocabulary, boolean clear) {
   140         setExternalVocabularyURI(null);
   141         setInitialReadOnlyVocabulary(true);
   142         setReadOnlyVocabulary(initialVocabulary, clear);
   143     }
   145     public void setReferencedVocabulary(String referencedVocabularyURI, ParserVocabulary referencedVocabulary, boolean clear) {
   146         if (!referencedVocabularyURI.equals(getExternalVocabularyURI())) {
   147             setInitialReadOnlyVocabulary(false);
   148             setExternalVocabularyURI(referencedVocabularyURI);
   149             setReadOnlyVocabulary(referencedVocabulary, clear);
   150         }
   151     }
   153     public void clear() {
   154         for (int i = 0; i < tables.length; i++) {
   155             tables[i].clear();
   156         }
   157     }
   159     private void convertVocabulary(com.sun.xml.internal.org.jvnet.fastinfoset.Vocabulary v) {
   160         final StringIntMap prefixMap = new FixedEntryStringIntMap(
   161                 EncodingConstants.XML_NAMESPACE_PREFIX, 8);
   162         final StringIntMap namespaceNameMap = new FixedEntryStringIntMap(
   163                 EncodingConstants.XML_NAMESPACE_NAME, 8);
   164         final StringIntMap localNameMap = new StringIntMap();
   166         addToTable(v.restrictedAlphabets.iterator(), restrictedAlphabet);
   167         addToTable(v.encodingAlgorithms.iterator(), encodingAlgorithm);
   168         addToTable(v.prefixes.iterator(), prefix, prefixMap);
   169         addToTable(v.namespaceNames.iterator(), namespaceName, namespaceNameMap);
   170         addToTable(v.localNames.iterator(), localName, localNameMap);
   171         addToTable(v.otherNCNames.iterator(), otherNCName);
   172         addToTable(v.otherURIs.iterator(), otherURI);
   173         addToTable(v.attributeValues.iterator(), attributeValue);
   174         addToTable(v.otherStrings.iterator(), otherString);
   175         addToTable(v.characterContentChunks.iterator(), characterContentChunk);
   176         addToTable(v.elements.iterator(), elementName, false,
   177                 prefixMap, namespaceNameMap, localNameMap);
   178         addToTable(v.attributes.iterator(), attributeName, true,
   179                 prefixMap, namespaceNameMap, localNameMap);
   180     }
   182     private void addToTable(Iterator i, StringArray a) {
   183         while (i.hasNext()) {
   184             addToTable((String)i.next(), a, null);
   185         }
   186     }
   188     private void addToTable(Iterator i, StringArray a, StringIntMap m) {
   189         while (i.hasNext()) {
   190             addToTable((String)i.next(), a, m);
   191         }
   192     }
   194     private void addToTable(String s, StringArray a, StringIntMap m) {
   195         if (s.length() == 0) {
   196             return;
   197         }
   199         if (m != null) m.obtainIndex(s);
   200         a.add(s);
   201     }
   203     private void addToTable(Iterator i, PrefixArray a, StringIntMap m) {
   204         while (i.hasNext()) {
   205             addToTable((String)i.next(), a, m);
   206         }
   207     }
   209     private void addToTable(String s, PrefixArray a, StringIntMap m) {
   210         if (s.length() == 0) {
   211             return;
   212         }
   214         if (m != null) m.obtainIndex(s);
   215         a.add(s);
   216     }
   218     private void addToTable(Iterator i, ContiguousCharArrayArray a) {
   219         while (i.hasNext()) {
   220             addToTable((String)i.next(), a);
   221         }
   222     }
   224     private void addToTable(String s, ContiguousCharArrayArray a) {
   225         if (s.length() == 0) {
   226             return;
   227         }
   229         char[] c = s.toCharArray();
   230         a.add(c, c.length);
   231     }
   233     private void addToTable(Iterator i, CharArrayArray a) {
   234         while (i.hasNext()) {
   235             addToTable((String)i.next(), a);
   236         }
   237     }
   239     private void addToTable(String s, CharArrayArray a) {
   240         if (s.length() == 0) {
   241             return;
   242         }
   244         char[] c = s.toCharArray();
   245         a.add(new CharArray(c, 0, c.length, false));
   246     }
   248     private void addToTable(Iterator i, QualifiedNameArray a,
   249             boolean isAttribute,
   250             StringIntMap prefixMap, StringIntMap namespaceNameMap,
   251             StringIntMap localNameMap) {
   252         while (i.hasNext()) {
   253             addToNameTable((QName)i.next(), a, isAttribute,
   254                     prefixMap, namespaceNameMap, localNameMap);
   255         }
   256     }
   258     private void addToNameTable(QName n, QualifiedNameArray a,
   259             boolean isAttribute,
   260             StringIntMap prefixMap, StringIntMap namespaceNameMap,
   261             StringIntMap localNameMap) {
   262         int namespaceURIIndex = -1;
   263         int prefixIndex = -1;
   264         if (n.getNamespaceURI().length() > 0) {
   265             namespaceURIIndex = namespaceNameMap.obtainIndex(n.getNamespaceURI());
   266             if (namespaceURIIndex == KeyIntMap.NOT_PRESENT) {
   267                 namespaceURIIndex = namespaceName.getSize();
   268                 namespaceName.add(n.getNamespaceURI());
   269             }
   271             if (n.getPrefix().length() > 0) {
   272                 prefixIndex = prefixMap.obtainIndex(n.getPrefix());
   273                 if (prefixIndex == KeyIntMap.NOT_PRESENT) {
   274                     prefixIndex = prefix.getSize();
   275                     prefix.add(n.getPrefix());
   276                 }
   277             }
   278         }
   280         int localNameIndex = localNameMap.obtainIndex(n.getLocalPart());
   281         if (localNameIndex == KeyIntMap.NOT_PRESENT) {
   282             localNameIndex = localName.getSize();
   283             localName.add(n.getLocalPart());
   284         }
   286         QualifiedName name = new QualifiedName(n.getPrefix(), n.getNamespaceURI(), n.getLocalPart(),
   287                 a.getSize(),
   288                 prefixIndex, namespaceURIIndex, localNameIndex);
   289         if (isAttribute) {
   290             name.createAttributeValues(DuplicateAttributeVerifier.MAP_SIZE);
   291         }
   292         a.add(name);
   293     }
   294 }

mercurial