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

com.ctc.wstx.sr.Attribute Maven / Gradle / Ivy

There is a newer version: 4.0.4
Show newest version
/* Woodstox XML processor
 *
 * Copyright (c) 2004- Tatu Saloranta, [email protected]
 *
 * Licensed under the License specified in file LICENSE, included with
 * the source code.
 * You may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.ctc.wstx.sr;

import javax.xml.namespace.QName;

import com.ctc.wstx.compat.QNameCreator;

/**
 * Container for information collected regarding a single element
 * attribute instance. Used for both regular explicit attributes
 * and values added via attribute value defaulting.
 *

* This class is not exposed outside of the package and is considered * part of internal implementation. * * @since 4.1 */ final class Attribute { // // // Name information protected String mLocalName; protected String mPrefix; protected String mNamespaceURI; // // // Value information /** * Numeric offset within text builder that denotes pointer * to the first character of the value for this attribute * (or namespace). End offset is derived by looking at * start pointer of the following attribute; or total * length for the last entry */ protected int mValueStartOffset; /** * Value as a String iff it has been requested once; stored * here in case it will be accessed again. */ protected String mReusableValue; /* ////////////////////////////////////////////////// // Life-cycle ////////////////////////////////////////////////// */ public Attribute(String prefix, String localName, int valueStart) { mLocalName = localName; mPrefix = prefix; mValueStartOffset = valueStart; } public void reset(String prefix, String localName, int valueStart) { mLocalName = localName; mPrefix = prefix; mValueStartOffset = valueStart; mNamespaceURI = null; mReusableValue = null; } /** * Method called to inject specific value for this attribute. */ public void setValue(String value) { mReusableValue = value; } /* ////////////////////////////////////////////////// // Accessors ////////////////////////////////////////////////// */ /** * @param uri Namespace URI of the attribute, if any; MUST be * given as null if no namespace * @param localName Local name to match. Note: is NOT guaranteed * to have been interned * * @return True if qualified name of this attribute is the same * as what arguments describe */ protected boolean hasQName(String uri, String localName) { if (localName != mLocalName && !localName.equals(mLocalName)) { return false; } if (mNamespaceURI == uri) { return true; } if (uri == null) { return (mNamespaceURI == null) || mNamespaceURI.length() == 0; } return (mNamespaceURI != null && uri.equals(mNamespaceURI)); } public QName getQName() { if (mPrefix == null) { if (mNamespaceURI == null) { return new QName(mLocalName); } return new QName(mNamespaceURI, mLocalName); } String uri = mNamespaceURI; if (uri == null) { // Some QName impls (older JDKs) don't like nulls uri = ""; } // For [WSTX-174] need to use indirection: return QNameCreator.create(uri, mLocalName, mPrefix); } /** * Method called if this attribute is the last one with value * in the buffer. If so, end value is implied */ public String getValue(String allValues) { if (mReusableValue == null) { mReusableValue = (mValueStartOffset == 0) ? allValues : allValues.substring(mValueStartOffset); } return mReusableValue; } public String getValue(String allValues, int endOffset) { if (mReusableValue == null) { mReusableValue = allValues.substring(mValueStartOffset, endOffset); } return mReusableValue; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy