FileDocCategorySizeDatePackage
Attributes2Impl.javaAPI DocJava SE 5 API9037Fri Aug 26 14:58:42 BST 2005org.xml.sax.ext

Attributes2Impl

public class Attributes2Impl extends AttributesImpl implements Attributes2
SAX2 extension helper for additional Attributes information, implementing the {@link Attributes2} interface.
This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY.

This is not part of core-only SAX2 distributions.

The specified flag for each attribute will always be true, unless it has been set to false in the copy constructor or using {@link #setSpecified}. Similarly, the declared flag for each attribute will always be false, except for defaulted attributes (specified is false), non-CDATA attributes, or when it is set to true using {@link #setDeclared}. If you change an attribute's type by hand, you may need to modify its declared flag to match.

since
SAX 2.0 (extensions 1.1 alpha)
author
David Brownell
version
TBS

Fields Summary
private boolean[]
declared
private boolean[]
specified
Constructors Summary
public Attributes2Impl()
Construct a new, empty Attributes2Impl object.

 
public Attributes2Impl(Attributes atts)
Copy an existing Attributes or Attributes2 object. If the object implements Attributes2, values of the specified and declared flags for each attribute are copied. Otherwise the flag values are defaulted to assume no DTD was used, unless there is evidence to the contrary (such as attributes with type other than CDATA, which must have been declared).

This constructor is especially useful inside a {@link org.xml.sax.ContentHandler#startElement startElement} event.

param
atts The existing Attributes object.

	super (atts);
    
Methods Summary
public voidaddAttribute(java.lang.String uri, java.lang.String localName, java.lang.String qName, java.lang.String type, java.lang.String value)
Add an attribute to the end of the list, setting its "specified" flag to true. To set that flag's value to false, use {@link #setSpecified}.

Unless the attribute type is CDATA, this attribute is marked as being declared in the DTD. To set that flag's value to true for CDATA attributes, use {@link #setDeclared}.

see
AttributesImpl#addAttribute

	super.addAttribute (uri, localName, qName, type, value);

	int length = getLength ();

	if (length < specified.length) {
	    boolean	newFlags [];

	    newFlags = new boolean [length];
	    System.arraycopy (declared, 0, newFlags, 0, declared.length);
	    declared = newFlags;

	    newFlags = new boolean [length];
	    System.arraycopy (specified, 0, newFlags, 0, specified.length);
	    specified = newFlags;
	}

	specified [length - 1] = true;
	declared [length - 1] = !"CDATA".equals (type);
    
public booleanisDeclared(int index)
Returns the current value of the attribute's "declared" flag.

	if (index < 0 || index >= getLength ())
	    throw new ArrayIndexOutOfBoundsException (
		"No attribute at index: " + index);
	return declared [index];
    
public booleanisDeclared(java.lang.String uri, java.lang.String localName)
Returns the current value of the attribute's "declared" flag.

	int index = getIndex (uri, localName);

	if (index < 0)
	    throw new IllegalArgumentException (
		"No such attribute: local=" + localName
		+ ", namespace=" + uri);
	return declared [index];
    
public booleanisDeclared(java.lang.String qName)
Returns the current value of the attribute's "declared" flag.

	int index = getIndex (qName);

	if (index < 0)
	    throw new IllegalArgumentException (
		"No such attribute: " + qName);
	return declared [index];
    
public booleanisSpecified(int index)
Returns the current value of an attribute's "specified" flag.

param
index The attribute index (zero-based).
return
current flag value
exception
java.lang.ArrayIndexOutOfBoundsException When the supplied index does not identify an attribute.

	if (index < 0 || index >= getLength ())
	    throw new ArrayIndexOutOfBoundsException (
		"No attribute at index: " + index);
	return specified [index];
    
public booleanisSpecified(java.lang.String uri, java.lang.String localName)
Returns the current value of an attribute's "specified" flag.

param
uri The Namespace URI, or the empty string if the name has no Namespace URI.
param
localName The attribute's local name.
return
current flag value
exception
java.lang.IllegalArgumentException When the supplied names do not identify an attribute.

	int index = getIndex (uri, localName);

	if (index < 0)
	    throw new IllegalArgumentException (
		"No such attribute: local=" + localName
		+ ", namespace=" + uri);
	return specified [index];
    
public booleanisSpecified(java.lang.String qName)
Returns the current value of an attribute's "specified" flag.

param
qName The XML qualified (prefixed) name.
return
current flag value
exception
java.lang.IllegalArgumentException When the supplied name does not identify an attribute.

	int index = getIndex (qName);

	if (index < 0)
	    throw new IllegalArgumentException (
		"No such attribute: " + qName);
	return specified [index];
    
public voidremoveAttribute(int index)

	int origMax = getLength () - 1;

	super.removeAttribute (index);
	if (index != origMax) {
	    System.arraycopy (declared, index + 1, declared, index,
		    origMax - index);
	    System.arraycopy (specified, index + 1, specified, index,
		    origMax - index);
	}
    
public voidsetAttributes(org.xml.sax.Attributes atts)
Copy an entire Attributes object. The "specified" flags are assigned as true, and "declared" flags as false (except when an attribute's type is not CDATA), unless the object is an Attributes2 object. In that case those flag values are all copied.

see
AttributesImpl#setAttributes

	int length = atts.getLength ();

	super.setAttributes (atts);
	declared = new boolean [length];
	specified = new boolean [length];

	if (atts instanceof Attributes2) {
	    Attributes2	a2 = (Attributes2) atts;
	    for (int i = 0; i < length; i++) {
		declared [i] = a2.isDeclared (i);
		specified [i] = a2.isSpecified (i);
	    }
	} else {
	    for (int i = 0; i < length; i++) {
		declared [i] = !"CDATA".equals (atts.getType (i));
		specified [i] = true;
	    }
	}
    
public voidsetDeclared(int index, boolean value)
Assign a value to the "declared" flag of a specific attribute. This is normally needed only for attributes of type CDATA, including attributes whose type is changed to or from CDATA.

param
index The index of the attribute (zero-based).
param
value The desired flag value.
exception
java.lang.ArrayIndexOutOfBoundsException When the supplied index does not identify an attribute.
see
#setType

	if (index < 0 || index >= getLength ())
	    throw new ArrayIndexOutOfBoundsException (
		"No attribute at index: " + index);
	declared [index] = value;
    
public voidsetSpecified(int index, boolean value)
Assign a value to the "specified" flag of a specific attribute. This is the only way this flag can be cleared, except clearing by initialization with the copy constructor.

param
index The index of the attribute (zero-based).
param
value The desired flag value.
exception
java.lang.ArrayIndexOutOfBoundsException When the supplied index does not identify an attribute.

	if (index < 0 || index >= getLength ())
	    throw new ArrayIndexOutOfBoundsException (
		"No attribute at index: " + index);
	specified [index] = value;