001: /*
002: * Copyright 1999-2004 The Apache Software Foundation.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: /*
017: * $Id: MutableAttrListImpl.java,v 1.8 2004/08/17 18:57:22 jycli Exp $
018: */
019: package org.apache.xml.utils;
020:
021: import java.io.Serializable;
022:
023: import org.xml.sax.Attributes;
024: import org.xml.sax.helpers.AttributesImpl;
025:
026: /**
027: * Mutable version of AttributesImpl.
028: * @xsl.usage advanced
029: */
030: public class MutableAttrListImpl extends AttributesImpl implements
031: Serializable {
032: static final long serialVersionUID = 6289452013442934470L;
033:
034: /**
035: * Construct a new, empty AttributesImpl object.
036: */
037:
038: public MutableAttrListImpl() {
039: super ();
040: }
041:
042: /**
043: * Copy an existing Attributes object.
044: *
045: * <p>This constructor is especially useful inside a start
046: * element event.</p>
047: *
048: * @param atts The existing Attributes object.
049: */
050: public MutableAttrListImpl(Attributes atts) {
051: super (atts);
052: }
053:
054: /**
055: * Add an attribute to the end of the list.
056: *
057: * <p>For the sake of speed, this method does no checking
058: * to see if the attribute is already in the list: that is
059: * the responsibility of the application.</p>
060: *
061: * @param uri The Namespace URI, or the empty string if
062: * none is available or Namespace processing is not
063: * being performed.
064: * @param localName The local name, or the empty string if
065: * Namespace processing is not being performed.
066: * @param qName The qualified (prefixed) name, or the empty string
067: * if qualified names are not available.
068: * @param type The attribute type as a string.
069: * @param value The attribute value.
070: */
071: public void addAttribute(String uri, String localName,
072: String qName, String type, String value) {
073:
074: if (null == uri)
075: uri = "";
076:
077: // getIndex(qName) seems to be more reliable than getIndex(uri, localName),
078: // in the case of the xmlns attribute anyway.
079: int index = this .getIndex(qName);
080: // int index = this.getIndex(uri, localName);
081:
082: // System.out.println("MutableAttrListImpl#addAttribute: "+uri+":"+localName+", "+index+", "+qName+", "+this);
083:
084: if (index >= 0)
085: this
086: .setAttribute(index, uri, localName, qName, type,
087: value);
088: else
089: super .addAttribute(uri, localName, qName, type, value);
090: }
091:
092: /**
093: * Add the contents of the attribute list to this list.
094: *
095: * @param atts List of attributes to add to this list
096: */
097: public void addAttributes(Attributes atts) {
098:
099: int nAtts = atts.getLength();
100:
101: for (int i = 0; i < nAtts; i++) {
102: String uri = atts.getURI(i);
103:
104: if (null == uri)
105: uri = "";
106:
107: String localName = atts.getLocalName(i);
108: String qname = atts.getQName(i);
109: int index = this .getIndex(uri, localName);
110: // System.out.println("MutableAttrListImpl#addAttributes: "+uri+":"+localName+", "+index+", "+atts.getQName(i)+", "+this);
111: if (index >= 0)
112: this .setAttribute(index, uri, localName, qname, atts
113: .getType(i), atts.getValue(i));
114: else
115: addAttribute(uri, localName, qname, atts.getType(i),
116: atts.getValue(i));
117: }
118: }
119:
120: /**
121: * Return true if list contains the given (raw) attribute name.
122: *
123: * @param name Raw name of attribute to look for
124: *
125: * @return true if an attribute is found with this name
126: */
127: public boolean contains(String name) {
128: return getValue(name) != null;
129: }
130: }
131:
132: // end of MutableAttrListImpl.java
|