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

org.apache.axis.message.NamedNodeMapImpl Maven / Gradle / Ivy

There is a newer version: 7.4.3.112-ga112
Show newest version
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * 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 org.apache.axis.message;

import org.w3c.dom.Attr;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

import java.util.Iterator;
import java.util.Vector;

/**
 * A W3C simple DOM NameNodeMap implementation
 *
 * @author Heejune Ahn ([email protected])
 */
public class NamedNodeMapImpl implements  NamedNodeMap {


  /** Nodes. */
  protected Vector nodes;

  static private Document doc = null;
  static{
    try {
      org.w3c.dom.Document doc = org.apache.axis.utils.XMLUtils.newDocument();
    } catch (javax.xml.parsers.ParserConfigurationException e) {
      throw new org.apache.axis.InternalException(e);
    }
  }

  public NamedNodeMapImpl()
  {
    nodes = new Vector();
  }
  /**
   * Retrieves a node specified by name.
   * @param name The nodeName of a node to retrieve.
   * @return A Node (of any type) with the specified
   *   nodeName, or null if it does not identify
   *   any node in this map.
   */
  public Node getNamedItem(String name){
    if(name == null   ){
      Thread.dumpStack();
      throw new java.lang.IllegalArgumentException("local name = null");
    }

   for(Iterator iter = nodes.iterator(); iter.hasNext();){
     Attr attr = (Attr)iter.next();
     if(name.equals(attr.getName())){
       return attr;
     }
   }
   return null;
  }

    /**
     * Adds a node using its nodeName attribute. If a node with
     * that name is already present in this map, it is replaced by the new
     * one.
     * 
As the nodeName attribute is used to derive the name * which the node must be stored under, multiple nodes of certain types * (those that have a "special" string value) cannot be stored as the * names would clash. This is seen as preferable to allowing nodes to be * aliased. * @param arg A node to store in this map. The node will later be * accessible using the value of its nodeName attribute. * @return If the new Node replaces an existing node the * replaced Node is returned, otherwise null * is returned. * @exception DOMException * WRONG_DOCUMENT_ERR: Raised if arg was created from a * different document than the one that created this map. *
NO_MODIFICATION_ALLOWED_ERR: Raised if this map is readonly. *
INUSE_ATTRIBUTE_ERR: Raised if arg is an * Attr that is already an attribute of another * Element object. The DOM user must explicitly clone * Attr nodes to re-use them in other elements. *
HIERARCHY_REQUEST_ERR: Raised if an attempt is made to add a node * doesn't belong in this NamedNodeMap. Examples would include trying * to insert something other than an Attr node into an Element's map * of attributes, or a non-Entity node into the DocumentType's map of * Entities. */ public Node setNamedItem(Node arg) throws DOMException { String name = arg.getNodeName(); if(name == null ){ Thread.dumpStack(); throw new java.lang.IllegalArgumentException("local name = null"); } for(int i = 0; i < nodes.size(); i++){ Attr attr = (Attr)nodes.get(i); // search if we have already if(name.equals(attr.getName())){ nodes.remove(i); nodes.add(i, arg); return attr; // return old one } } // if cannot found nodes.add(arg); return null; } /** * Removes a node specified by name. When this map contains the attributes * attached to an element, if the removed attribute is known to have a * default value, an attribute immediately appears containing the * default value as well as the corresponding namespace URI, local name, * and prefix when applicable. * @param name The nodeName of the node to remove. * @return The node removed from this map if a node with such a name * exists. * @exception DOMException * NOT_FOUND_ERR: Raised if there is no node named name in * this map. *
NO_MODIFICATION_ALLOWED_ERR: Raised if this map is readonly. */ public Node removeNamedItem(String name) throws DOMException { if(name == null ){ Thread.dumpStack(); throw new java.lang.IllegalArgumentException("local name = null"); } for(int i = 0; i < nodes.size(); i++){ Attr attr = (Attr)nodes.get(i); // search if we have already if(name.equals(attr.getLocalName())){ nodes.remove(i); return attr; // return old one } } return null; } /** * Returns the indexth item in the map. If index * is greater than or equal to the number of nodes in this map, this * returns null. * @param index Index into this map. * @return The node at the indexth position in the map, or * null if that is not a valid index. */ public Node item(int index){ return (nodes != null && index < nodes.size()) ? (Node)(nodes.elementAt(index)) : null; } /** * The number of nodes in this map. The range of valid child node indices * is 0 to length-1 inclusive. */ public int getLength(){ return (nodes != null) ? nodes.size() : 0; } /** * Retrieves a node specified by local name and namespace URI. *
Documents which do not support the "XML" feature will permit only * the DOM Level 1 calls for creating/setting elements and attributes. * Hence, if you specify a non-null namespace URI, these DOMs will never * find a matching node. * @param namespaceURI The namespace URI of the node to retrieve. * @param localName The local name of the node to retrieve. * @return A Node (of any type) with the specified local * name and namespace URI, or null if they do not * identify any node in this map. * @since DOM Level 2 */ public Node getNamedItemNS(String namespaceURI, String localName){ if(namespaceURI == null) namespaceURI = ""; if(localName == null ){ Thread.dumpStack(); throw new java.lang.IllegalArgumentException("local name = null"); } for(Iterator iter = nodes.iterator(); iter.hasNext();){ Attr attr = (Attr)iter.next(); if(namespaceURI.equals(attr.getNamespaceURI()) && localName.equals(attr.getLocalName())){ return attr; } } return null; } /** * Adds a node using its namespaceURI and * localName. If a node with that namespace URI and that * local name is already present in this map, it is replaced by the new * one. * @param arg A node to store in this map. The node will later be * accessible using the value of its namespaceURI and * localName attributes. * @return If the new Node replaces an existing node the * replaced Node is returned, otherwise null * is returned. * @exception DOMException * WRONG_DOCUMENT_ERR: Raised if arg was created from a * different document than the one that created this map. *
NO_MODIFICATION_ALLOWED_ERR: Raised if this map is readonly. *
INUSE_ATTRIBUTE_ERR: Raised if arg is an * Attr that is already an attribute of another * Element object. The DOM user must explicitly clone * Attr nodes to re-use them in other elements. *
HIERARCHY_REQUEST_ERR: Raised if an attempt is made to add a node * doesn't belong in this NamedNodeMap. Examples would include trying * to insert something other than an Attr node into an Element's map * of attributes, or a non-Entity node into the DocumentType's map of * Entities. *
NOT_SUPPORTED_ERR: Always thrown if the current document does not * support the "XML" feature, since namespaces were * defined by XML. * @since DOM Level 2 */ public Node setNamedItemNS(Node arg) throws DOMException { String namespaceURI = arg.getNamespaceURI(); String localName = arg.getLocalName(); if(namespaceURI == null) namespaceURI = ""; if(localName == null ){ Thread.dumpStack(); throw new java.lang.IllegalArgumentException("local name = null"); } for(int i = 0; i < nodes.size(); i++){ Attr attr = (Attr)nodes.get(i); // search if we have already if(namespaceURI.equals(attr.getNamespaceURI()) && namespaceURI.equals(attr.getLocalName())){ nodes.remove(i); nodes.add(i, arg); return attr; // return old one } } // if cannot found nodes.add(arg); return null; } /** * Removes a node specified by local name and namespace URI. A removed * attribute may be known to have a default value when this map contains * the attributes attached to an element, as returned by the attributes * attribute of the Node interface. If so, an attribute * immediately appears containing the default value as well as the * corresponding namespace URI, local name, and prefix when applicable. *
Documents which do not support the "XML" feature will permit only * the DOM Level 1 calls for creating/setting elements and attributes. * Hence, if you specify a non-null namespace URI, these DOMs will never * find a matching node. * @param namespaceURI The namespace URI of the node to remove. * @param localName The local name of the node to remove. * @return The node removed from this map if a node with such a local * name and namespace URI exists. * @exception DOMException * NOT_FOUND_ERR: Raised if there is no node with the specified * namespaceURI and localName in this map. *
NO_MODIFICATION_ALLOWED_ERR: Raised if this map is readonly. * @since DOM Level 2 */ public Node removeNamedItemNS(String namespaceURI, String localName) throws DOMException{ if(namespaceURI == null) namespaceURI = ""; if(localName == null ){ Thread.dumpStack(); throw new java.lang.IllegalArgumentException("local name = null"); } for(int i = 0; i < nodes.size(); i++){ Attr attr = (Attr)nodes.get(i); // search if we have already if(namespaceURI.equals(attr.getNamespaceURI()) && localName.equals(attr.getLocalName())){ nodes.remove(i); return attr; // return old one } } return null; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy