You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ve...@apache.org on 2004/04/26 16:44:57 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/dom CoreDocumentImpl.java NodeImpl.java

venu        2004/04/26 07:44:57

  Modified:    java/src/org/apache/xerces/dom CoreDocumentImpl.java
                        NodeImpl.java
  Log:
  Modified patch submitted for bug XERCESJ-947 by neil dilema il dilema, also fixed the problem
  incase of importNode.
  
  Revision  Changes    Path
  1.71      +57 -6     xml-xerces/java/src/org/apache/xerces/dom/CoreDocumentImpl.java
  
  Index: CoreDocumentImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/CoreDocumentImpl.java,v
  retrieving revision 1.70
  retrieving revision 1.71
  diff -u -r1.70 -r1.71
  --- CoreDocumentImpl.java	17 Mar 2004 06:16:54 -0000	1.70
  +++ CoreDocumentImpl.java	26 Apr 2004 14:44:56 -0000	1.71
  @@ -1417,6 +1417,7 @@
       Hashtable reversedIdentifiers)
       throws DOMException {
           Node newnode=null;
  +		Hashtable userData = null;
   
           // Sigh. This doesn't work; too many nodes have private data that
           // would have to be manually tweaked. May be able to add local
  @@ -1429,7 +1430,8 @@
           //  newnode.ownerDocument=this;
           // }
           // else
  -
  +		if(source instanceof NodeImpl)
  +			userData = ((NodeImpl)source).getUserDataRecord();
           int type = source.getNodeType();
           switch (type) {
               case ELEMENT_NODE: {
  @@ -1632,7 +1634,8 @@
               }
           }
   
  -        callUserDataHandlers(source, newnode, UserDataHandler.NODE_IMPORTED);
  +		if(userData != null)
  +			callUserDataHandlers(source, newnode, UserDataHandler.NODE_IMPORTED,userData);
   
           // If deep, replicate and attach the kids.
           if (deep) {
  @@ -1659,6 +1662,7 @@
        **/
       public Node adoptNode(Node source) {
           NodeImpl node;
  +		Hashtable userData = null;
           try {
               node = (NodeImpl) source;
           } catch (ClassCastException e) {
  @@ -1675,9 +1679,12 @@
                   }
                   //2. specified flag is set to true
                   attr.isSpecified(true);
  +				userData = node.getUserDataRecord();
   
                   //3. change ownership
                   attr.setOwnerDocument(this);
  +				if(userData != null )
  +					setUserDataTable(node,userData);
                   break;
               }
               //entity, notation nodes are read only nodes.. so they can't be adopted.
  @@ -1696,6 +1703,7 @@
                   throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);
               }
               case ENTITY_REFERENCE_NODE: {
  +				userData = node.getUserDataRecord();
                   // remove node from wherever it is
                   Node parent = node.getParentNode();
                   if (parent != null) {
  @@ -1708,6 +1716,8 @@
                   }
                   // change ownership
                   node.setOwnerDocument(this);
  +				if(userData != null)
  +					setUserDataTable(node,userData);
                   // set its new replacement value if any
                   if (docType == null) {
                       break;
  @@ -1726,6 +1736,7 @@
                   break;
               }
               case ELEMENT_NODE: {
  +				userData = node.getUserDataRecord();
                   // remove node from wherever it is
                   Node parent = node.getParentNode();
                   if (parent != null) {
  @@ -1733,11 +1744,14 @@
                   }
                   // change ownership
                   node.setOwnerDocument(this);
  +				if(userData != null)
  +					setUserDataTable(node,userData);
                   // reconcile default attributes
                   ((ElementImpl)node).reconcileDefaultAttributes();
                   break;
               }
               default: {
  +				userData = node.getUserDataRecord();
                   // remove node from wherever it is
                   Node parent = node.getParentNode();
                   if (parent != null) {
  @@ -1745,12 +1759,15 @@
                   }
                   // change ownership
                   node.setOwnerDocument(this);
  +				if(userData != null)
  +					setUserDataTable(node,userData);
               }
           }
   
   		//DOM L3 Core CR
   		//http://www.w3.org/TR/2003/CR-DOM-Level-3-Core-20031107/core.html#UserDataHandler-ADOPTED
  -		callUserDataHandlers(source, null, UserDataHandler.NODE_ADOPTED);
  +		if(userData != null)
  +			callUserDataHandlers(source, null, UserDataHandler.NODE_ADOPTED,userData);
   
           return node;
       }
  @@ -2205,7 +2222,18 @@
           return null;
       }
   
  -    /**
  +	protected Hashtable getUserDataRecord(Node n){
  +        if (userData == null) {
  +            return null;
  +        }
  +        Hashtable t = (Hashtable) userData.get(n);
  +        if (t == null) {
  +            return null;
  +        }
  +		return t;
  +	}
  +    
  +	/**
        * Remove user data table for the given node.
        * @param n The node this operation applies to.
        * @return The removed table.
  @@ -2223,6 +2251,8 @@
        * @param data The user data table.
        */
       void setUserDataTable(Node n, Hashtable data) {
  +		if (userData == null)
  +			userData = new Hashtable();
           if (data != null) {
               userData.put(n, data);
           }
  @@ -2252,7 +2282,28 @@
           }
       }
   
  -    /**
  +	/**
  +     * Call user data handlers when a node is deleted (finalized)
  +     * @param n The node this operation applies to.
  +     * @param c The copy node or null.
  +     * @param operation The operation - import, clone, or delete.
  +	 * @param handlers Data associated with n.
  +	*/
  +	void callUserDataHandlers(Node n, Node c, short operation,Hashtable userData) {
  +        if (userData == null || userData.isEmpty()) {
  +            return;
  +        }
  +        Enumeration keys = userData.keys();
  +        while (keys.hasMoreElements()) {
  +            String key = (String) keys.nextElement();
  +            UserDataRecord r = (UserDataRecord) userData.get(key);
  +            if (r.fHandler != null) {
  +                r.fHandler.handle(operation, key, r.fData, n, c);
  +            }
  +        }
  +    }
  +    
  +	/**
        * Call user data handlers to let them know the nodes they are related to
        * are being deleted. The alternative would be to do that on Node but
        * because the nodes are used as the keys we have a reference to them that
  
  
  
  1.73      +5 -1      xml-xerces/java/src/org/apache/xerces/dom/NodeImpl.java
  
  Index: NodeImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/NodeImpl.java,v
  retrieving revision 1.72
  retrieving revision 1.73
  diff -u -r1.72 -r1.73
  --- NodeImpl.java	24 Feb 2004 23:23:18 -0000	1.72
  +++ NodeImpl.java	26 Apr 2004 14:44:56 -0000	1.73
  @@ -19,6 +19,7 @@
   import java.io.IOException;
   import java.io.ObjectOutputStream;
   import java.io.Serializable;
  +import java.util.Hashtable;
   
   import org.apache.xerces.dom3.UserDataHandler;
   import org.w3c.dom.DOMException;
  @@ -1787,6 +1788,9 @@
           return ownerDocument().getUserData(this, key);
       }
   
  +	protected Hashtable getUserDataRecord(){
  +        return ownerDocument().getUserDataRecord(this);
  +	}
   
       //
       // Public methods
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org