dmitri 2004/03/24 21:42:01 Modified: jxpath/src/java/org/apache/commons/jxpath/util BasicTypeConverter.java jxpath/src/test/org/apache/commons/jxpath/ri/compiler TestFunctions.java ExtensionFunctionTest.java jxpath/src/java/org/apache/commons/jxpath/ri/axes InitialContext.java RootContext.java NamespaceContext.java jxpath/src/java/org/apache/commons/jxpath PackageFunctions.java jxpath/src/java/org/apache/commons/jxpath/ri EvalContext.java jxpath/src/java/org/apache/commons/jxpath/ri/compiler ExtensionFunction.java Log: Improved type conversion for extenstion functions Revision Changes Path 1.13 +7 -1 jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/util/BasicTypeConverter.java Index: BasicTypeConverter.java =================================================================== RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/util/BasicTypeConverter.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- BasicTypeConverter.java 29 Feb 2004 14:17:43 -0000 1.12 +++ BasicTypeConverter.java 25 Mar 2004 05:42:01 -0000 1.13 @@ -177,6 +177,12 @@ } if (toType == Object.class) { + if (object instanceof NodeSet) { + return convert(((NodeSet) object).getValues(), toType); + } + else if (object instanceof Pointer) { + return convert(((Pointer) object).getValue(), toType); + } return object; } 1.10 +6 -1 jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/compiler/TestFunctions.java Index: TestFunctions.java =================================================================== RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/compiler/TestFunctions.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- TestFunctions.java 29 Feb 2004 14:17:42 -0000 1.9 +++ TestFunctions.java 25 Mar 2004 05:42:01 -0000 1.10 @@ -49,6 +49,11 @@ ((Number) context.getContextNodePointer().getValue()).intValue(); this.bar = bar; } + + public TestFunctions(int foo, Object object, boolean another) { + this.foo = foo; + bar = String.valueOf(object); + } public int getFoo() { return foo; 1.15 +9 -11 jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/compiler/ExtensionFunctionTest.java Index: ExtensionFunctionTest.java =================================================================== RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/compiler/ExtensionFunctionTest.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- ExtensionFunctionTest.java 29 Feb 2004 14:17:42 -0000 1.14 +++ ExtensionFunctionTest.java 25 Mar 2004 05:42:01 -0000 1.15 @@ -170,6 +170,12 @@ // Allocate new object using a custom constructor - type conversion assertXPathValue(context, "string(test:new('3', 4))", "foo=3; bar=4.0"); + + context.getVariables().declareVariable("A", "baz"); + assertXPathValue( + context, + "string(test:new(2, $A, false))", + "foo=2; bar=baz"); } public void testMethodCall() { @@ -210,16 +216,8 @@ "size(beans)", new Integer(2)); - boolean exception = false; - try { - assertXPathValue(context, "add($myList, 'hello')", Boolean.TRUE); - } - catch (Exception ex) { - exception = true; - } - assertTrue( - "Exception trying to add to an unmodifiable list", - exception); + context.getValue("add($myList, 'hello')"); + assertEquals("After adding an element", 2, list.size()); } public void testStaticMethodCall() { 1.14 +6 -2 jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/InitialContext.java Index: InitialContext.java =================================================================== RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/InitialContext.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- InitialContext.java 29 Feb 2004 14:17:37 -0000 1.13 +++ InitialContext.java 25 Mar 2004 05:42:01 -0000 1.14 @@ -50,7 +50,11 @@ public NodePointer getCurrentNodePointer() { return nodePointer; } - + + public Object getValue() { + return nodePointer; + } + public boolean nextNode() { return setPosition(position + 1); } 1.17 +6 -2 jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/RootContext.java Index: RootContext.java =================================================================== RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/RootContext.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- RootContext.java 29 Feb 2004 14:17:38 -0000 1.16 +++ RootContext.java 25 Mar 2004 05:42:01 -0000 1.17 @@ -61,7 +61,11 @@ public NodePointer getCurrentNodePointer() { return pointer; } - + + public Object getValue() { + return pointer; + } + public int getCurrentPosition() { throw new UnsupportedOperationException(); } 1.10 +5 -5 jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/NamespaceContext.java Index: NamespaceContext.java =================================================================== RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/NamespaceContext.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- NamespaceContext.java 29 Feb 2004 14:17:38 -0000 1.9 +++ NamespaceContext.java 25 Mar 2004 05:42:01 -0000 1.10 @@ -74,19 +74,19 @@ return false; } - QName testName = ((NodeNameTest) nodeTest).getNodeName(); + NodeNameTest nodeNameTest = (NodeNameTest) nodeTest; + QName testName = nodeNameTest.getNodeName(); if (testName.getPrefix() != null) { return false; } - String testLocalName = testName.getName(); - if (testLocalName.equals("*")) { + if (nodeNameTest.isWildcard()) { iterator = parentContext.getCurrentNodePointer().namespaceIterator(); } else { currentNodePointer = parentContext.getCurrentNodePointer().namespacePointer( - testLocalName); + testName.getName()); return currentNodePointer != null; } } 1.13 +3 -2 jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/PackageFunctions.java Index: PackageFunctions.java =================================================================== RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/PackageFunctions.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- PackageFunctions.java 29 Feb 2004 14:17:42 -0000 1.12 +++ PackageFunctions.java 25 Mar 2004 05:42:01 -0000 1.13 @@ -25,6 +25,7 @@ import org.apache.commons.jxpath.functions.ConstructorFunction; import org.apache.commons.jxpath.functions.MethodFunction; import org.apache.commons.jxpath.util.MethodLookupUtils; +import org.apache.commons.jxpath.util.TypeUtils; /** * Extension functions provided by Java classes. The class prefix specified @@ -119,7 +120,7 @@ } if (parameters.length >= 1) { - Object target = parameters[0]; + Object target = TypeUtils.convert(parameters[0], Object.class); if (target != null) { Method method = MethodLookupUtils.lookupMethod( 1.30 +10 -1 jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/EvalContext.java Index: EvalContext.java =================================================================== RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/EvalContext.java,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- EvalContext.java 29 Feb 2004 14:17:45 -0000 1.29 +++ EvalContext.java 25 Mar 2004 05:42:01 -0000 1.30 @@ -244,6 +244,15 @@ return set; } + + /** + * Typically returns the NodeSet by calling getNodeSet(), + * but will be overridden for contexts that more naturally produce + * individual values, e.g. VariableContext + */ + public Object getValue() { + return getNodeSet(); + } public String toString() { Pointer ptr = getContextNodePointer(); 1.13 +2 -2 jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/compiler/ExtensionFunction.java Index: ExtensionFunction.java =================================================================== RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/compiler/ExtensionFunction.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- ExtensionFunction.java 29 Feb 2004 14:17:38 -0000 1.12 +++ ExtensionFunction.java 25 Mar 2004 05:42:01 -0000 1.13 @@ -94,7 +94,7 @@ private Object convert(Object object) { if (object instanceof EvalContext) { - return ((EvalContext) object).getNodeSet(); + return ((EvalContext) object).getValue(); } return object; }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]