I just ran through the tests I've been using to check namespace access,
and everything works as expected. Thanks for committing my changes.

- Tim


> -----Original Message-----
> From: Kimbro Staken [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, January 16, 2002 3:53 AM
> To: [EMAIL PROTECTED]
> Subject: Re: [PATCH] XIndice namespace mapping enhancements
> 
> 
> Thanks, looks good after some light regression testing. You should 
> probably verify the new functions made it in correctly.
> 
> On Tuesday, January 15, 2002, at 09:37 PM, Timothy M. Dean wrote:
> 
> >
> > I've temporarily copied the patch file to a place where it can be 
> > accessed via the web: You should be able to get it at: 
> > http://www.visi.com/~tdean/patchfile.txt. If that doesn't 
> work, let me 
> > know and I will email you a GZIP'd version. (not sure if this email 
> > list accepts
> > attachments or not!)
> >
> > - Tim
> >
> >> ----- Original Message -----
> >> From: "Kimbro Staken" <[EMAIL PROTECTED]>
> >> To: <[EMAIL PROTECTED]>
> >> Sent: Tuesday, January 15, 2002 8:18 AM
> >> Subject: Re: [PATCH] XIndice namespace mapping enhancements
> >>
> >>
> >>> Hi Tim, your Lexus patch just made it in so I'm finally able to 
> >>> apply
> > this
> >>> patch. Unfortunately, somewhere in the mail chain the file was 
> >>> wrapped
> > and
> >>> corrupted. I tried to reconcile it but with no success. 
> Can you make
> > this
> >>> available from the web or just send it again gzipped? I'd really 
> >>> like to get this in before we finally release 1.0rc1.
> >>>
> >>> On Thursday, January 3, 2002, at 02:18 PM, Timothy M. Dean wrote:
> >>>
> >>>> Index: XUpdateQueryServiceImpl.java 
> >>>> 
> ===================================================================
> >>>> RCS file:
> >>>>
> > 
> /home/cvspublic/xml-xindice/java/src/org/apache/xindice/client/xmldb/s
> > er
> >>>> vices/XUpdateQueryServiceImpl.java,v
> >>>> retrieving revision 1.1.1.1
> >>>> diff -u -r1.1.1.1 XUpdateQueryServiceImpl.java
> >>>> --- XUpdateQueryServiceImpl.java 6 Dec 2001 19:33:54 
> -0000 1.1.1.1
> >>>> +++ XUpdateQueryServiceImpl.java 3 Jan 2002 20:07:58 -0000
> >>>> @@ -74,11 +74,13 @@
> >>>>  import org.xmldb.api.base.*;
> >>>>  import org.xmldb.api.modules.*;
> >>>>
> >>>> +import java.util.*;
> >>>> +
> >>>>  public class XUpdateQueryServiceImpl extends CommonConfigurable
> >>>>     implements org.xmldb.api.modules.XUpdateQueryService
> >>>>  {
> >>>> -   private static final NamedVal[] EmptyNamedVals = new 
> NamedVal[0];
> >>>>     protected org.xmldb.api.base.Collection collection = null;
> >>>> +   private NamespaceMap nsMap = new NamespaceMap();
> >>>>
> >>>>     public XUpdateQueryServiceImpl() {
> >>>>     }
> >>>> @@ -96,12 +98,71 @@
> >>>>        this.collection = col;
> >>>>     }
> >>>>
> >>>> +
> >>>> +    public void setDefaultNamespace(String uri) throws 
> >>>> + XMLDBException
> > {
> >>>> +       if ( uri != null )
> >>>> +          nsMap.setDefaultNamespace(uri);
> >>>> +       else
> >>>> +          nsMap.removeDefaultNamespace();
> >>>> +    }
> >>>> +
> >>>> +    public void removeDefaultNamespace() {
> >>>> +       nsMap.removeDefaultNamespace();
> >>>> +    }
> >>>> +
> >>>> +    public void setNamespace(String prefix, String uri) throws
> >>>> XMLDBException {
> >>>> +       if ( ( prefix == null ) || prefix.equals("") ) {
> >>>> +          setDefaultNamespace(uri);
> >>>> +       }
> >>>> +       else {
> >>>> +          if ( uri != null ) {
> >>>> +             nsMap.setNamespace(prefix, uri);
> >>>> +          }
> >>>> +       }
> >>>> +    }
> >>>> +
> >>>> +    public void removeNamespace(String prefix) {
> >>>> +       if ( ( prefix == null ) || prefix.equals("") ) {
> >>>> +          removeDefaultNamespace();
> >>>> +       }
> >>>> +
> >>>> +       nsMap.removeNamespace(prefix);
> >>>> +    }
> >>>> +
> >>>> +    public String getDefaultNamespace() {
> >>>> +       return nsMap.getDefaultNamespaceURI();
> >>>> +    }
> >>>> +
> >>>> +    public String getNamespace(String prefix) {
> >>>> +       if ( ( prefix == null ) || prefix.equals("") ) {
> >>>> +          return nsMap.getDefaultNamespaceURI();
> >>>> +       }
> >>>> +
> >>>> +       return nsMap.getNamespaceURI(prefix);
> >>>> +    }
> >>>> +
> >>>> +    public void clearNamespaces() {
> >>>> +       nsMap.clear();
> >>>> +    }
> >>>> +
> >>>> +    private NamedVal[] getNamespaces() {
> >>>> +       NamedVal[] nv = new NamedVal[nsMap.size()];
> >>>> +       Iterator iter = nsMap.keySet().iterator();
> >>>> +       int i = 0;
> >>>> +       while ( iter.hasNext() ) {
> >>>> +          String prefix = (String)iter.next();
> >>>> +          String uri = nsMap.getNamespaceURI(prefix);
> >>>> +          nv[i++] = new NamedVal(prefix, uri);
> >>>> +       }
> >>>> +       return nv;
> >>>> +    }
> >>>> +
> >>>>     public XMLResource updateResult(String commands) throws 
> >>>> XMLDBException {
> >>>>        // Get the Xindice collection object from the XML:DB 
> >>>> collection wrapper.
> >>>>        Collection col = ((CollectionImpl)
> > collection).getServerObject();
> >>>>
> >>>>        try {
> >>>> -         EncodedBuffer buffer = col.queryCollection("XUpdate",
> >>>> commands, EmptyNamedVals, -1);
> >>>> +         EncodedBuffer buffer = col.queryCollection("XUpdate", 
> >>>> + commands, getNamespaces(), -1);
> >>>>           return new XMLResourceImpl("", collection, new 
> >>>> String(buffer.buf));
> >>>>        }
> >>>>        catch (Exception e) {
> >>>> @@ -129,7 +190,7 @@
> >>>>        Collection col = ((CollectionImpl)
> > collection).getServerObject();
> >>>>
> >>>>        try {
> >>>> -         EncodedBuffer buffer = col.queryDocument("XUpdate",
> > commands,
> >>>> EmptyNamedVals, id, -1);
> >>>> +         EncodedBuffer buffer = col.queryDocument("XUpdate",
> > commands,
> >>>> + getNamespaces(), id, -1);
> >>>>           return new XMLResourceImpl("", collection, new 
> >>>> String(buffer.buf));
> >>>>        }
> >>>>        catch (Exception e) {
> >>>> Index: NamespaceMap.java 
> >>>> 
> ===================================================================
> >>>> RCS file:
> >>>>
> > 
> /home/cvspublic/xml-xindice/java/src/org/apache/xindice/xml/NamespaceM
> > ap
> >>>> .java,v
> >>>> retrieving revision 1.1.1.1
> >>>> diff -u -r1.1.1.1 NamespaceMap.java
> >>>> --- NamespaceMap.java 6 Dec 2001 19:33:58 -0000 1.1.1.1
> >>>> +++ NamespaceMap.java 3 Jan 2002 20:09:19 -0000
> >>>> @@ -72,7 +72,7 @@
> >>>>
> >>>>  public final class NamespaceMap extends HashMap {
> >>>>     private Element elem = null;
> >>>> -
> >>>> +
> >>>>     public Node getContextNode() {
> >>>>        if ( elem == null ) {
> >>>>           Document d = new DocumentImpl();
> >>>> @@ -92,8 +92,9 @@
> >>>>
> >>>>     public void clearNamespaces() {
> >>>>        clear();
> >>>> +      elem = null;
> >>>>     }
> >>>> -
> >>>> +
> >>>>     public String getDefaultNamespaceURI() {
> >>>>        return (String)get("");
> >>>>     }
> >>>> @@ -104,17 +105,32 @@
> >>>>
> >>>>     public void setDefaultNamespace(String uri) {
> >>>>        put("", uri);
> >>>> +      elem = null;
> >>>>     }
> >>>>
> >>>>     public void setNamespace(String prefix, String uri) {
> >>>>        put(prefix, uri);
> >>>> +      elem = null;
> >>>>     }
> >>>>
> >>>>     public void removeDefaultNamespace() {
> >>>>        remove("");
> >>>> +      elem = null;
> >>>>     }
> >>>>
> >>>>     public void removeNamespace(String prefix) {
> >>>>        remove(prefix);
> >>>> +      elem = null;
> >>>> +   }
> >>>> +
> >>>> +   public void includeNamespaces(Map nsMap, boolean override) {
> >>>> +      Iterator newEntries = nsMap.entrySet().iterator();
> >>>> +      while (newEntries.hasNext()) {
> >>>> +         Map.Entry entry = (Map.Entry) newEntries.next();
> >>>> +         if (!override && super.containsKey(entry.getKey()))
> >>>> +           continue;
> >>>> +         super.put(entry.getKey(), entry.getValue());
> >>>> +      }
> >>>> +      elem = null;
> >>>>     }
> >>>>  }
> >>>> Index: XUpdateImpl.java 
> >>>> 
> ===================================================================
> >>>> RCS file:
> >>>>
> > 
> /home/cvspublic/xml-xindice/java/src/org/apache/xindice/core/xupdate/X
> > Up
> >>>> dateImpl.java,v
> >>>> retrieving revision 1.1
> >>>> diff -u -r1.1 XUpdateImpl.java
> >>>> --- XUpdateImpl.java 6 Dec 2001 21:00:15 -0000 1.1
> >>>> +++ XUpdateImpl.java 3 Jan 2002 20:12:17 -0000
> >>>> @@ -64,12 +64,15 @@
> >>>>  import org.apache.xindice.xml.dom.*;
> >>>>  import org.apache.xindice.xml.*;
> >>>>
> >>>> -import org.infozone.lexus.commands.*;
> >>>> -import org.infozone.lexus.*;
> >>>> +import org.xmldb.xupdate.lexus.commands.*;
> >>>> +import org.xmldb.xupdate.lexus.*;
> >>>> +import org.infozone.tools.xml.queries.*;
> >>>>
> >>>>  import java.util.*;
> >>>>
> >>>>  import org.w3c.dom.*;
> >>>> +import org.xmldb.xupdate.lexus.*;
> >>>> +import org.xml.sax.*;
> >>>>
> >>>>  /**
> >>>>   * Provides Collection and document based XUpdate 
> capabilities. @@ 
> >>>> -79,8 +82,43 @@
> >>>>   */
> >>>>  public class XUpdateImpl extends XUpdateQueryImpl {
> >>>>     protected int nodesModified = 0;
> >>>> -
> >>>> -   /**
> >>>> +   protected NamespaceMap nsMap;
> >>>> +
> >>>> +    /**
> >>>> +     * If set to true, then namespaces set explicitly 
> via an API 
> >>>> + call
> >>>> will take precendence.
> >>>> +     * If set to false, then namespaces set implicitly within 
> >>>> + query
> >>>> string will take precedence.
> >>>> +     */
> >>>> +    private static final boolean API_NS_PRECEDENCE = true;
> >>>> +
> >>>> +    /**
> >>>> +     * Set the namespace map to be used when resolving queries
> >>>> +     */
> >>>> +    public void setNamespaceMap(NamespaceMap nsMap) {
> >>>> +       if (nsMap == null)
> >>>> +          return;
> >>>> +
> >>>> +       if (this.nsMap == null) {
> >>>> +          this.nsMap = nsMap;
> >>>> +       }
> >>>> +       else {
> >>>> +          this.nsMap.includeNamespaces(nsMap, 
> API_NS_PRECEDENCE);
> >>>> +       }
> >>>> +    }
> >>>> +
> >>>> +
> >>>> +    /**
> >>>> +     * Sets the query string to be used when executing update
> >>>> +     */
> >>>> +    public void setQString(String query) throws SAXException {
> >>>> +       super.setQString(query);
> >>>> +       if (nsMap == null) {
> >>>> +          nsMap = new NamespaceMap();
> >>>> +       }
> >>>> +       nsMap.includeNamespaces(_namespaces, !API_NS_PRECEDENCE);
> >>>> +    }
> >>>> +
> >>>> +
> >>>> +    /**
> >>>>      * Execute the XUpdate commands against a document.
> >>>>      */
> >>>>     public void execute(Node contextNode) throws Exception { @@ 
> >>>> -89,6 +127,7 @@
> >>>>        Enumeration attributes = _query[1].elements();
> >>>>        Enumeration characters = _query[2].elements();
> >>>>        Node origNode = contextNode;
> >>>> +      
> >>>> + CommandObject.getXPath().setNamespace(nsMap.getContextNode());
> >>>>
> >>>>        while (commands.hasMoreElements()) {
> >>>>           int id = ((Integer) commands.nextElement()).intValue();
> >>>> @@ -143,7 +182,7 @@
> >>>>
> >>>>              // If we found an XPath selector we need to execute 
> >>>> the commands.
> >>>>              if (selector != null) {
> >>>> -               NodeSet ns = 
> col.queryCollection("XPath", selector,
> >>>> null);
> >>>> +               NodeSet ns = 
> col.queryCollection("XPath", selector, 
> >>>> + nsMap);
> >>>>                 Document lastDoc = null;
> >>>>                 while (ns != null && ns.hasMoreNodes()) {
> >>>>                    DBNode node = (DBNode)ns.getNextNode();
> >>>> Index: XUpdateQueryResolver.java 
> >>>> 
> ===================================================================
> >>>> RCS file:
> >>>>
> > 
> /home/cvspublic/xml-xindice/java/src/org/apache/xindice/core/xupdate/X
> > Up
> >>>> dateQueryResolver.java,v
> >>>> retrieving revision 1.1
> >>>> diff -u -r1.1 XUpdateQueryResolver.java
> >>>> --- XUpdateQueryResolver.java 6 Dec 2001 21:00:15 -0000 1.1
> >>>> +++ XUpdateQueryResolver.java 3 Jan 2002 20:14:07 -0000
> >>>> @@ -127,6 +127,7 @@
> >>>>           try {
> >>>>              xu = new XUpdateImpl();
> >>>>              xu.setQString(query);
> >>>> +            xu.setNamespaceMap(nsMap);
> >>>>           }
> >>>>           catch ( Exception e ) {
> >>>>              throw new CompilationException("Error Compiling 
> >>>> XUpdate Query");
> >>>>
> >>>>
> >>>>
> Kimbro Staken
> XML Database Software, Consulting and Writing 
> http://www.xmldatabases.org/
> >>>
> >>>
> >>
> >
> >
> 
> 

Reply via email to