![JAR search and dependency download from the Maven repository](/logo.png)
com.sun.xml.stream.buffer.AbstractProcessor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of streambuffer Show documentation
Show all versions of streambuffer Show documentation
Stream based representation for XML infoset
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2005-2012 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* http://glassfish.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package com.sun.xml.stream.buffer;
/**
* Base class for classes that processes {@link XMLStreamBuffer}
* and produces infoset in API-specific form.
*/
public abstract class AbstractProcessor extends AbstractCreatorProcessor {
protected static final int STATE_ILLEGAL = 0;
protected static final int STATE_DOCUMENT = 1;
protected static final int STATE_DOCUMENT_FRAGMENT = 2;
protected static final int STATE_ELEMENT_U_LN_QN = 3;
protected static final int STATE_ELEMENT_P_U_LN = 4;
protected static final int STATE_ELEMENT_U_LN = 5;
protected static final int STATE_ELEMENT_LN = 6;
protected static final int STATE_TEXT_AS_CHAR_ARRAY_SMALL = 7;
protected static final int STATE_TEXT_AS_CHAR_ARRAY_MEDIUM = 8;
protected static final int STATE_TEXT_AS_CHAR_ARRAY_COPY = 9;
protected static final int STATE_TEXT_AS_STRING = 10;
protected static final int STATE_TEXT_AS_OBJECT = 11;
protected static final int STATE_COMMENT_AS_CHAR_ARRAY_SMALL = 12;
protected static final int STATE_COMMENT_AS_CHAR_ARRAY_MEDIUM = 13;
protected static final int STATE_COMMENT_AS_CHAR_ARRAY_COPY = 14;
protected static final int STATE_COMMENT_AS_STRING = 15;
protected static final int STATE_PROCESSING_INSTRUCTION = 16;
protected static final int STATE_END = 17;
private static final int[] _eiiStateTable = new int[256];
protected static final int STATE_NAMESPACE_ATTRIBUTE = 1;
protected static final int STATE_NAMESPACE_ATTRIBUTE_P = 2;
protected static final int STATE_NAMESPACE_ATTRIBUTE_P_U = 3;
protected static final int STATE_NAMESPACE_ATTRIBUTE_U = 4;
private static final int[] _niiStateTable = new int[256];
protected static final int STATE_ATTRIBUTE_U_LN_QN = 1;
protected static final int STATE_ATTRIBUTE_P_U_LN = 2;
protected static final int STATE_ATTRIBUTE_U_LN = 3;
protected static final int STATE_ATTRIBUTE_LN = 4;
protected static final int STATE_ATTRIBUTE_U_LN_QN_OBJECT = 5;
protected static final int STATE_ATTRIBUTE_P_U_LN_OBJECT = 6;
protected static final int STATE_ATTRIBUTE_U_LN_OBJECT = 7;
protected static final int STATE_ATTRIBUTE_LN_OBJECT = 8;
private static final int[] _aiiStateTable = new int[256];
static {
/*
* Create a state table from information items and options.
* The swtich statement using such states will often generate a more
* efficient byte code representation that can be hotspotted using
* jump tables.
*/
_eiiStateTable[T_DOCUMENT] = STATE_DOCUMENT;
_eiiStateTable[T_DOCUMENT_FRAGMENT] = STATE_DOCUMENT_FRAGMENT;
_eiiStateTable[T_ELEMENT_U_LN_QN] = STATE_ELEMENT_U_LN_QN;
_eiiStateTable[T_ELEMENT_P_U_LN] = STATE_ELEMENT_P_U_LN;
_eiiStateTable[T_ELEMENT_U_LN] = STATE_ELEMENT_U_LN;
_eiiStateTable[T_ELEMENT_LN] = STATE_ELEMENT_LN;
_eiiStateTable[T_TEXT_AS_CHAR_ARRAY_SMALL] = STATE_TEXT_AS_CHAR_ARRAY_SMALL;
_eiiStateTable[T_TEXT_AS_CHAR_ARRAY_MEDIUM] = STATE_TEXT_AS_CHAR_ARRAY_MEDIUM;
_eiiStateTable[T_TEXT_AS_CHAR_ARRAY_COPY] = STATE_TEXT_AS_CHAR_ARRAY_COPY;
_eiiStateTable[T_TEXT_AS_STRING] = STATE_TEXT_AS_STRING;
_eiiStateTable[T_TEXT_AS_OBJECT] = STATE_TEXT_AS_OBJECT;
_eiiStateTable[T_COMMENT_AS_CHAR_ARRAY_SMALL] = STATE_COMMENT_AS_CHAR_ARRAY_SMALL;
_eiiStateTable[T_COMMENT_AS_CHAR_ARRAY_MEDIUM] = STATE_COMMENT_AS_CHAR_ARRAY_MEDIUM;
_eiiStateTable[T_COMMENT_AS_CHAR_ARRAY_COPY] = STATE_COMMENT_AS_CHAR_ARRAY_COPY;
_eiiStateTable[T_COMMENT_AS_STRING] = STATE_COMMENT_AS_STRING;
_eiiStateTable[T_PROCESSING_INSTRUCTION] = STATE_PROCESSING_INSTRUCTION;
_eiiStateTable[T_END] = STATE_END;
_niiStateTable[T_NAMESPACE_ATTRIBUTE] = STATE_NAMESPACE_ATTRIBUTE;
_niiStateTable[T_NAMESPACE_ATTRIBUTE_P] = STATE_NAMESPACE_ATTRIBUTE_P;
_niiStateTable[T_NAMESPACE_ATTRIBUTE_P_U] = STATE_NAMESPACE_ATTRIBUTE_P_U;
_niiStateTable[T_NAMESPACE_ATTRIBUTE_U] = STATE_NAMESPACE_ATTRIBUTE_U;
_aiiStateTable[T_ATTRIBUTE_U_LN_QN] = STATE_ATTRIBUTE_U_LN_QN;
_aiiStateTable[T_ATTRIBUTE_P_U_LN] = STATE_ATTRIBUTE_P_U_LN;
_aiiStateTable[T_ATTRIBUTE_U_LN] = STATE_ATTRIBUTE_U_LN;
_aiiStateTable[T_ATTRIBUTE_LN] = STATE_ATTRIBUTE_LN;
_aiiStateTable[T_ATTRIBUTE_U_LN_QN_OBJECT] = STATE_ATTRIBUTE_U_LN_QN_OBJECT;
_aiiStateTable[T_ATTRIBUTE_P_U_LN_OBJECT] = STATE_ATTRIBUTE_P_U_LN_OBJECT;
_aiiStateTable[T_ATTRIBUTE_U_LN_OBJECT] = STATE_ATTRIBUTE_U_LN_OBJECT;
_aiiStateTable[T_ATTRIBUTE_LN_OBJECT] = STATE_ATTRIBUTE_LN_OBJECT;
}
protected XMLStreamBuffer _buffer;
/**
* True if this processor should create a fragment of XML, without the start/end document markers.
*/
protected boolean _fragmentMode;
protected boolean _stringInterningFeature = false;
/**
* Number of remaining XML element trees that should be visible
* through this {@link AbstractProcessor}.
*/
protected int _treeCount;
/**
* @deprecated
* Use {@link #setBuffer(XMLStreamBuffer, boolean)}
*/
protected final void setBuffer(XMLStreamBuffer buffer) {
setBuffer(buffer,buffer.isFragment());
}
protected final void setBuffer(XMLStreamBuffer buffer, boolean fragmentMode) {
_buffer = buffer;
_fragmentMode = fragmentMode;
_currentStructureFragment = _buffer.getStructure();
_structure = _currentStructureFragment.getArray();
_structurePtr = _buffer.getStructurePtr();
_currentStructureStringFragment = _buffer.getStructureStrings();
_structureStrings = _currentStructureStringFragment.getArray();
_structureStringsPtr = _buffer.getStructureStringsPtr();
_currentContentCharactersBufferFragment = _buffer.getContentCharactersBuffer();
_contentCharactersBuffer = _currentContentCharactersBufferFragment.getArray();
_contentCharactersBufferPtr = _buffer.getContentCharactersBufferPtr();
_currentContentObjectFragment = _buffer.getContentObjects();
_contentObjects = _currentContentObjectFragment.getArray();
_contentObjectsPtr = _buffer.getContentObjectsPtr();
_stringInterningFeature = _buffer.hasInternedStrings();
_treeCount = _buffer.treeCount;
}
protected final int peekStructure() {
if (_structurePtr < _structure.length) {
return _structure[_structurePtr] & 255;
}
return readFromNextStructure(0);
}
protected final int readStructure() {
if (_structurePtr < _structure.length) {
return _structure[_structurePtr++] & 255;
}
return readFromNextStructure(1);
}
protected final int readEiiState() {
return _eiiStateTable[readStructure()];
}
protected static int getEIIState(int item) {
return _eiiStateTable[item];
}
protected static int getNIIState(int item) {
return _niiStateTable[item];
}
protected static int getAIIState(int item) {
return _aiiStateTable[item];
}
protected final int readStructure16() {
return (readStructure() << 8) | readStructure();
}
private int readFromNextStructure(int v) {
_structurePtr = v;
_currentStructureFragment = _currentStructureFragment.getNext();
_structure = _currentStructureFragment.getArray();
return _structure[0] & 255;
}
protected final String readStructureString() {
if (_structureStringsPtr < _structureStrings.length) {
return _structureStrings[_structureStringsPtr++];
}
_structureStringsPtr = 1;
_currentStructureStringFragment = _currentStructureStringFragment.getNext();
_structureStrings = _currentStructureStringFragment.getArray();
return _structureStrings[0];
}
protected final String readContentString() {
return (String)readContentObject();
}
protected final char[] readContentCharactersCopy() {
return (char[])readContentObject();
}
protected final int readContentCharactersBuffer(int length) {
if (_contentCharactersBufferPtr + length < _contentCharactersBuffer.length) {
final int start = _contentCharactersBufferPtr;
_contentCharactersBufferPtr += length;
return start;
}
_contentCharactersBufferPtr = length;
_currentContentCharactersBufferFragment = _currentContentCharactersBufferFragment.getNext();
_contentCharactersBuffer = _currentContentCharactersBufferFragment.getArray();
return 0;
}
protected final Object readContentObject() {
if (_contentObjectsPtr < _contentObjects.length) {
return _contentObjects[_contentObjectsPtr++];
}
_contentObjectsPtr = 1;
_currentContentObjectFragment = _currentContentObjectFragment.getNext();
_contentObjects = _currentContentObjectFragment.getArray();
return _contentObjects[0];
}
protected final StringBuilder _qNameBuffer = new StringBuilder();
protected final String getQName(String prefix, String localName) {
_qNameBuffer.append(prefix).append(':').append(localName);
final String qName = _qNameBuffer.toString();
_qNameBuffer.setLength(0);
return (_stringInterningFeature) ? qName.intern() : qName;
}
protected final String getPrefixFromQName(String qName) {
int pIndex = qName.indexOf(':');
if (_stringInterningFeature) {
return (pIndex != -1) ? qName.substring(0,pIndex).intern() : "";
} else {
return (pIndex != -1) ? qName.substring(0,pIndex) : "";
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy