From: Sebastian B. <bo...@us...> - 2004-09-01 17:41:57
|
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; } } |