From: Wolfgang M. M. <wol...@us...> - 2004-06-29 14:25:23
|
Update of /cvsroot/exist/eXist-1.0/src/org/exist/memtree In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29938/src/org/exist/memtree Modified Files: DocumentImpl.java NodeImpl.java Receiver.java MemTreeBuilder.java Added Files: NamespaceNode.java Log Message: Added dynamic namespace constructor. Index: NodeImpl.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/memtree/NodeImpl.java,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** NodeImpl.java 2 Jun 2004 11:34:34 -0000 1.15 --- NodeImpl.java 29 Jun 2004 14:25:12 -0000 1.16 *************** *** 50,53 **** --- 50,54 ---- public final static short REFERENCE_NODE = 100; + public final static short NAMESPACE_NODE = 101; protected int nodeNumber; --- NEW FILE: NamespaceNode.java --- /* * eXist Open Source Native XML Database * Copyright (C) 2001-04 Wolfgang M. Meier * wol...@ex... * http://exist-db.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id: NamespaceNode.java,v 1.1 2004/06/29 14:25:12 wolfgang_m Exp $ */ package org.exist.memtree; import org.exist.dom.QName; import org.exist.xquery.value.Type; /** * A dynamically constructed namespace node. * * @author wolf */ public class NamespaceNode extends NodeImpl { /** * @param doc * @param nodeNumber */ public NamespaceNode(DocumentImpl doc, int nodeNumber) { super(doc, nodeNumber); } /* (non-Javadoc) * @see org.exist.memtree.NodeImpl#getNodeType() */ public short getNodeType() { return NodeImpl.NAMESPACE_NODE; } /* (non-Javadoc) * @see org.exist.memtree.NodeImpl#getType() */ public int getType() { return Type.NAMESPACE; } public String getPrefix() { QName qn = (QName)document.namePool.get(document.nodeName[nodeNumber]); return qn != null ? qn.getLocalName() : null; } public String getNamespaceURI() { return new String(document.characters, document.alpha[nodeNumber], document.alphaLen[nodeNumber]); } } Index: DocumentImpl.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/memtree/DocumentImpl.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** DocumentImpl.java 27 Jun 2004 21:10:06 -0000 1.10 --- DocumentImpl.java 29 Jun 2004 14:25:12 -0000 1.11 *************** *** 27,30 **** --- 27,32 ---- import org.exist.dom.QName; import org.exist.util.hashtable.NamePool; + import org.exist.xquery.XQueryContext; + import org.exist.xquery.value.Type; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; *************** *** 278,281 **** --- 280,286 ---- node = new ReferenceNode(this, nodeNr); break; + case NodeImpl.NAMESPACE_NODE: + node = new NamespaceNode(this, nodeNr); + break; default: throw new DOMException(DOMException.NOT_FOUND_ERR, *************** *** 567,570 **** --- 572,582 ---- .addReferenceNode(document.references[document.alpha[nr]]); break; + case NodeImpl.NAMESPACE_NODE: + XQueryContext context = receiver.getContext(); + QName prefix = (QName) document.namePool.get(document.nodeName[nr]); + String uri = new String(document.characters, + document.alpha[nr], document.alphaLen[nr]); + context.declareInScopeNamespace(prefix.getLocalName(), uri); + break; } } Index: Receiver.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/memtree/Receiver.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** Receiver.java 3 May 2004 13:08:43 -0000 1.4 --- Receiver.java 29 Jun 2004 14:25:12 -0000 1.5 *************** *** 25,28 **** --- 25,29 ---- import org.exist.dom.NodeProxy; import org.exist.dom.QName; + import org.exist.xquery.XQueryContext; import org.w3c.dom.Document; import org.xml.sax.Attributes; *************** *** 54,57 **** --- 55,62 ---- } + public XQueryContext getContext() { + return builder.getContext(); + } + /* (non-Javadoc) * @see org.xml.sax.ContentHandler#setDocumentLocator(org.xml.sax.Locator) Index: MemTreeBuilder.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/memtree/MemTreeBuilder.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** MemTreeBuilder.java 27 Jun 2004 21:10:06 -0000 1.11 --- MemTreeBuilder.java 29 Jun 2004 14:25:12 -0000 1.12 *************** *** 28,31 **** --- 28,32 ---- import org.exist.dom.QName; import org.exist.xquery.XQueryContext; + import org.exist.xquery.value.Type; import org.w3c.dom.Node; import org.xml.sax.Attributes; *************** *** 64,67 **** --- 65,72 ---- } + public XQueryContext getContext() { + return context; + } + public int getSize() { return doc.getSize(); *************** *** 242,244 **** --- 247,261 ---- return nodeNr; } + + public int namespaceNode(String prefix, String uri) { + QName qn = new QName(prefix, null, null); + int nodeNr = doc.addNode(NodeImpl.NAMESPACE_NODE, level, qn); + doc.addChars(nodeNr, uri); + int prevNr = prevNodeInLevel[level]; + if (prevNr > -1) + doc.next[prevNr] = nodeNr; + doc.next[nodeNr] = prevNodeInLevel[level - 1]; + prevNodeInLevel[level] = nodeNr; + return nodeNr; + } } |