dmitri      2004/12/30 13:59:36

  Modified:    jxpath/src/java/org/apache/commons/jxpath/ri/model/dom
                        DOMNodePointer.java
               jxpath/src/java/org/apache/commons/jxpath/ri
                        NamespaceResolver.java
                        JXPathContextReferenceImpl.java
               jxpath/src/test/org/apache/commons/jxpath/ri/model
                        XMLModelTestCase.java
  Log:
  Made namespace mappings inherited by child contexts
  
  Revision  Changes    Path
  1.26      +5 -1      
jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java
  
  Index: DOMNodePointer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- DOMNodePointer.java       6 Oct 2004 00:34:14 -0000       1.25
  +++ DOMNodePointer.java       30 Dec 2004 21:59:36 -0000      1.26
  @@ -226,6 +226,10 @@
           }
   
           namespaces.put(prefix, namespace);
  +        if (namespace == UNKNOWN_NAMESPACE) {
  +            return null;
  +        }
  +        
           // TBD: We are supposed to resolve relative URIs to absolute ones.
           return namespace;
       }
  
  
  
  1.3       +18 -2     
jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/NamespaceResolver.java
  
  Index: NamespaceResolver.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/NamespaceResolver.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- NamespaceResolver.java    29 Jun 2004 22:57:20 -0000      1.2
  +++ NamespaceResolver.java    30 Dec 2004 21:59:36 -0000      1.3
  @@ -31,11 +31,15 @@
    * @version $Revision$ $Date$
    */
   public class NamespaceResolver implements Cloneable {
  -    
  +    final protected NamespaceResolver parent;
       protected HashMap namespaceMap = new HashMap();
       protected HashMap reverseMap;
       protected NodePointer pointer;
       private boolean sealed;
  +        
  +    public NamespaceResolver(NamespaceResolver parent) {
  +        this.parent = parent;
  +    }
       
       /**
        * Registers a namespace prefix.
  @@ -56,6 +60,9 @@
       }
       
       public Pointer getNamespaceContextPointer() {
  +        if (pointer == null && parent != null) {
  +            return parent.getNamespaceContextPointer();
  +        }
           return pointer;
       }
       
  @@ -74,6 +81,9 @@
           if (uri == null && pointer != null) {
               uri = pointer.getNamespaceURI(prefix);
           }
  +        if (uri == null && parent != null) {
  +            return parent.getNamespaceURI(prefix);
  +        }
   //        System.err.println("For prefix " + prefix + " URI=" + uri);
           return uri;
       }
  @@ -96,6 +106,9 @@
               }
           }
           String prefix = (String) reverseMap.get(namespaceURI);
  +        if (prefix == null && parent != null) {
  +            return parent.getPrefix(namespaceURI);
  +        }
           return prefix;
       }
       
  @@ -105,6 +118,9 @@
       
       public void seal() {
           sealed = true;
  +        if (parent != null) {
  +            parent.seal();
  +        }
       }
       
       public Object clone() {
  
  
  
  1.44      +6 -2      
jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/JXPathContextReferenceImpl.java
  
  Index: JXPathContextReferenceImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/JXPathContextReferenceImpl.java,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- JXPathContextReferenceImpl.java   4 Apr 2004 23:16:23 -0000       1.43
  +++ JXPathContextReferenceImpl.java   30 Dec 2004 21:59:36 -0000      1.44
  @@ -146,7 +146,11 @@
               this.rootPointer = this.contextPointer;
           }
           
  -        namespaceResolver = new NamespaceResolver();
  +        NamespaceResolver parentNR = null;
  +        if (parentContext instanceof JXPathContextReferenceImpl) {
  +            parentNR = 
((JXPathContextReferenceImpl)parentContext).getNamespaceResolver();
  +        }
  +        namespaceResolver = new NamespaceResolver(parentNR);
           namespaceResolver
                   .setNamespaceContextPointer((NodePointer) 
this.contextPointer);
       }
  
  
  
  1.25      +17 -1     
jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/XMLModelTestCase.java
  
  Index: XMLModelTestCase.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/XMLModelTestCase.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- XMLModelTestCase.java     6 Oct 2004 00:34:14 -0000       1.24
  +++ XMLModelTestCase.java     30 Dec 2004 21:59:36 -0000      1.25
  @@ -800,5 +800,21 @@
                   "//product:name",
                   "Box of oranges",
                   "/vendor[1]/product[1]/goods:name[1]");
  +        
  +        // Same, but with a child context        
  +        JXPathContext childCtx = 
  +            JXPathContext.newContext(context, context.getContextBean());
  +        assertXPathValueAndPointer(childCtx,
  +                "//product:name",
  +                "Box of oranges",
  +                "/vendor[1]/product[1]/goods:name[1]");
  +        
  +        // Same, but with a relative context        
  +        JXPathContext relativeCtx = 
  +            context.getRelativeContext(context.getPointer("/vendor"));
  +        assertXPathValueAndPointer(relativeCtx,
  +                "product/product:name",
  +                "Box of oranges",
  +                "/vendor[1]/product[1]/goods:name[1]");
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to