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