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]

Reply via email to