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, I'm also attaching a gzipped version to this email. Hope that it works this time: Let me know if not and we'll work out what's going wrong somehow.
- 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/ser > > 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/NamespaceMap > > .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/XUp > > 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/XUp > > 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/ > >
patchfile.txt.gz
Description: GNU Zip compressed data