Update of /cvsroot/exist/eXist-1.0/src/org/exist/xquery/functions
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31609/src/org/exist/xquery/functions
Modified Files:
FunNodeName.java
Log Message:
Apply node-name patch by Finder and introduce QNameable interface to avoid using reflection.
Index: FunNodeName.java
===================================================================
RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/xquery/functions/FunNodeName.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** FunNodeName.java 29 Jun 2004 14:21:23 -0000 1.1
--- FunNodeName.java 1 Sep 2004 17:41:31 -0000 1.2
***************
*** 23,34 ****
package org.exist.xquery.functions;
import org.exist.dom.QName;
! import org.exist.memtree.NodeImpl;
! import org.exist.xquery.BasicFunction;
import org.exist.xquery.Cardinality;
import org.exist.xquery.FunctionSignature;
import org.exist.xquery.XPathException;
import org.exist.xquery.XQueryContext;
! import org.exist.xquery.value.NodeValue;
import org.exist.xquery.value.QNameValue;
import org.exist.xquery.value.Sequence;
--- 23,35 ----
package org.exist.xquery.functions;
+ import org.exist.dom.NodeSet;
import org.exist.dom.QName;
! import org.exist.dom.QNameable;
import org.exist.xquery.Cardinality;
+ import org.exist.xquery.Function;
import org.exist.xquery.FunctionSignature;
import org.exist.xquery.XPathException;
import org.exist.xquery.XQueryContext;
! import org.exist.xquery.value.Item;
import org.exist.xquery.value.QNameValue;
import org.exist.xquery.value.Sequence;
***************
*** 44,48 ****
* Window - Preferences - Java - Code Style - Code Templates
*/
! public class FunNodeName extends BasicFunction {
public final static FunctionSignature signature =
--- 45,49 ----
* Window - Preferences - Java - Code Style - Code Templates
*/
! public class FunNodeName extends Function {
public final static FunctionSignature signature =
***************
*** 64,85 ****
}
! /* (non-Javadoc)
! * @see org.exist.xquery.BasicFunction#eval(org.exist.xquery.value.Sequence[], org.exist.xquery.value.Sequence)
! */
! public Sequence eval(Sequence[] args, Sequence contextSequence)
! throws XPathException {
! if(args[0].getLength() == 0)
! return Sequence.EMPTY_SEQUENCE;
! NodeValue val = (NodeValue)args[0];
! Node node = val.getNode();
! if(node.getNodeType() == Node.ELEMENT_NODE ||
! node.getNodeType() == Node.ATTRIBUTE_NODE) {
! if(val.getImplementationType() == NodeValue.IN_MEMORY_NODE)
! return new QNameValue(context, ((NodeImpl)val).getQName());
! else
! return new QNameValue(context, ((org.exist.dom.NodeImpl)node).getQName());
}
! return Sequence.EMPTY_SEQUENCE;
}
-
}
--- 65,94 ----
}
! public Sequence eval(Sequence contextSequence, Item contextItem) throws XPathException {
! Sequence retval = Sequence.EMPTY_SEQUENCE;
! Node n = null;
!
! if(contextItem != null)
! contextSequence = contextItem.toSequence();
! if(getArgumentCount() > 0) {
! NodeSet result = getArgument(0).eval(contextSequence).toNodeSet();
! if(result.getLength() > 0)
! n = result.item(0);
! } else {
! if(contextSequence.getLength() > 0 && contextSequence.getItemType() == Type.NODE)
! n = ((NodeSet)contextSequence).item(0);
}
! if(n != null) {
! switch(n.getNodeType()) {
! case Node.ELEMENT_NODE:
! case Node.ATTRIBUTE_NODE:
! retval = new QNameValue(context, ((QNameable) n).getQName());
! break;
! default:
! retval = Sequence.EMPTY_SEQUENCE;
! break;
! }
! }
! return retval;
}
}
|