Attributes2Implpublic class Attributes2Impl extends AttributesImpl implements Attributes2SAX2 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.
|
Fields Summary |
---|
private boolean[] | declared | private boolean[] | specified |
Constructors Summary |
---|
public Attributes2Impl()Construct a new, empty Attributes2Impl object.
specified = null;
declared = null;
| 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.
super (atts);
|
Methods Summary |
---|
public void | addAttribute(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}.
super.addAttribute (uri, localName, qName, type, value);
int length = getLength ();
if(specified==null)
{
specified = new boolean[length];
declared = new boolean[length];
} else 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 boolean | isDeclared(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 boolean | isDeclared(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 boolean | isDeclared(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 boolean | isSpecified(int index)Returns the current value of an attribute's "specified" flag.
if (index < 0 || index >= getLength ())
throw new ArrayIndexOutOfBoundsException (
"No attribute at index: " + index);
return specified [index];
| public boolean | isSpecified(java.lang.String uri, java.lang.String localName)Returns the current value of an attribute's "specified" flag.
int index = getIndex (uri, localName);
if (index < 0)
throw new IllegalArgumentException (
"No such attribute: local=" + localName
+ ", namespace=" + uri);
return specified [index];
| public boolean | isSpecified(java.lang.String qName)Returns the current value of an attribute's "specified" flag.
int index = getIndex (qName);
if (index < 0)
throw new IllegalArgumentException (
"No such attribute: " + qName);
return specified [index];
| public void | removeAttribute(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 void | setAttributes(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.
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 void | setDeclared(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.
if (index < 0 || index >= getLength ())
throw new ArrayIndexOutOfBoundsException (
"No attribute at index: " + index);
declared [index] = value;
| public void | setSpecified(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.
if (index < 0 || index >= getLength ())
throw new ArrayIndexOutOfBoundsException (
"No attribute at index: " + index);
specified [index] = value;
|
|