You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by dm...@apache.org on 2002/11/26 02:20:08 UTC

cvs commit: jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/jdom JDOMModelTest.java

dmitri      2002/11/25 17:20:08

  Modified:    jxpath   .cvsignore
               jxpath/src/java/org/apache/commons/jxpath
                        XMLDocumentContainer.java
               jxpath/src/java/org/apache/commons/jxpath/ri
                        EvalContext.java
                        JXPathContextFactoryReferenceImpl.java
               jxpath/src/java/org/apache/commons/jxpath/ri/axes
                        AncestorContext.java ParentContext.java
                        PrecedingOrFollowingContext.java
                        PredicateContext.java SimplePathInterpreter.java
               jxpath/src/java/org/apache/commons/jxpath/ri/compiler
                        CoreFunction.java CoreOperation.java
                        NameAttributeTest.java
               jxpath/src/java/org/apache/commons/jxpath/ri/model
                        NodePointer.java VariablePointer.java
               jxpath/src/java/org/apache/commons/jxpath/ri/model/beans
                        BeanAttributeIterator.java BeanPointer.java
                        BeanPropertyPointer.java CollectionPointer.java
                        DynamicPropertyPointer.java
                        LangAttributePointer.java NullElementPointer.java
                        NullPropertyPointer.java PropertyOwnerPointer.java
                        PropertyPointer.java
               jxpath/src/java/org/apache/commons/jxpath/ri/model/container
                        ContainerPointer.java
               jxpath/src/java/org/apache/commons/jxpath/ri/model/dom
                        DOMAttributePointer.java DOMNodePointer.java
                        NamespacePointer.java
               jxpath/src/java/org/apache/commons/jxpath/ri/model/dynabeans
                        DynaBeanPointer.java DynaBeanPointerFactory.java
                        DynaBeanPropertyPointer.java
               jxpath/src/java/org/apache/commons/jxpath/ri/model/jdom
                        JDOMAttributePointer.java
                        JDOMNamespaceIterator.java
                        JDOMNamespacePointer.java JDOMNodePointer.java
               jxpath/src/java/org/apache/commons/jxpath/util
                        MethodLookupUtils.java TypeUtils.java
                        ValueUtils.java
               jxpath/src/test/org/apache/commons/jxpath
                        JXPathTestCase.java TestNull.java
               jxpath/src/test/org/apache/commons/jxpath/ri/axes
                        SimplePathInterpreterTest.java
               jxpath/src/test/org/apache/commons/jxpath/ri/compiler
                        CoreFunctionTest.java TestFunctions2.java
               jxpath/src/test/org/apache/commons/jxpath/ri/model
                        BeanModelTestCase.java
                        TestDynamicPropertyFactory.java
                        TestMixedModelFactory.java XMLModelTestCase.java
               jxpath/src/test/org/apache/commons/jxpath/ri/model/beans
                        BeanModelTest.java DynamicPropertiesModelTest.java
                        TestBeanFactory.java
               jxpath/src/test/org/apache/commons/jxpath/ri/model/dom
                        DOMModelTest.java
               jxpath/src/test/org/apache/commons/jxpath/ri/model/dynabeans
                        TestDynaBeanFactory.java
               jxpath/src/test/org/apache/commons/jxpath/ri/model/jdom
                        JDOMModelTest.java
  Log:
  Organized imports, formatted code
  Fixed problems with getValue() and getNode()
  
  Revision  Changes    Path
  1.3       +7 -0      jakarta-commons/jxpath/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/.cvsignore,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- .cvsignore	21 Apr 2002 21:52:31 -0000	1.2
  +++ .cvsignore	26 Nov 2002 01:20:05 -0000	1.3
  @@ -2,3 +2,10 @@
   dist
   target
   bin
  +.classpath
  +.project
  +build.bat
  +maven.bat
  +maven.log
  +docs
  +test-reports
  \ No newline at end of file
  
  
  
  1.7       +4 -15     jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/XMLDocumentContainer.java
  
  Index: XMLDocumentContainer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/XMLDocumentContainer.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XMLDocumentContainer.java	10 Aug 2002 01:28:49 -0000	1.6
  +++ XMLDocumentContainer.java	26 Nov 2002 01:20:06 -0000	1.7
  @@ -61,26 +61,15 @@
    */
   package org.apache.commons.jxpath;
   
  -import java.io.IOException;
  -import java.io.InputStream;
   import java.net.URL;
   
  -import javax.xml.parsers.DocumentBuilderFactory;
  -import javax.xml.parsers.ParserConfigurationException;
   import javax.xml.transform.Source;
   import javax.xml.transform.Transformer;
  -import javax.xml.transform.TransformerConfigurationException;
  -import javax.xml.transform.TransformerException;
   import javax.xml.transform.TransformerFactory;
  -import javax.xml.transform.TransformerFactoryConfigurationError;
   import javax.xml.transform.dom.DOMResult;
  -import javax.xml.transform.stream.StreamSource;
   
   import org.apache.commons.jxpath.xml.DocumentContainer;
   import org.w3c.dom.Document;
  -import org.xml.sax.SAXException;
  -
  -import org.apache.commons.jxpath.xml.DocumentContainer;
   
   /**
    * An XML document container reads and parses XML only when it is
  
  
  
  1.19      +8 -10     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.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- EvalContext.java	20 Oct 2002 03:43:39 -0000	1.18
  +++ EvalContext.java	26 Nov 2002 01:20:06 -0000	1.19
  @@ -63,13 +63,11 @@
   
   import java.util.*;
   
  -import org.apache.commons.jxpath.*;
  -import org.apache.commons.jxpath.ri.axes.*;
  -import org.apache.commons.jxpath.ri.compiler.*;
  -import org.apache.commons.jxpath.ri.model.NodeIterator;
  +import org.apache.commons.jxpath.ExpressionContext;
  +import org.apache.commons.jxpath.JXPathContext;
  +import org.apache.commons.jxpath.Pointer;
  +import org.apache.commons.jxpath.ri.axes.RootContext;
   import org.apache.commons.jxpath.ri.model.NodePointer;
  -import org.apache.commons.jxpath.ri.model.beans.*;
  -import org.apache.commons.jxpath.util.ValueUtils;
   
   /**
    * An XPath evaluation context.
  
  
  
  1.2       +4 -5      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/JXPathContextFactoryReferenceImpl.java
  
  Index: JXPathContextFactoryReferenceImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/JXPathContextFactoryReferenceImpl.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- JXPathContextFactoryReferenceImpl.java	23 Aug 2001 00:46:59 -0000	1.1
  +++ JXPathContextFactoryReferenceImpl.java	26 Nov 2002 01:20:06 -0000	1.2
  @@ -61,10 +61,9 @@
    */
   package org.apache.commons.jxpath.ri;
   
  +import org.apache.commons.jxpath.JXPathContext;
   import org.apache.commons.jxpath.JXPathContextFactory;
   import org.apache.commons.jxpath.JXPathContextFactoryConfigurationError;
  -import org.apache.commons.jxpath.JXPathContext;
  -import org.apache.commons.jxpath.Variables;
   
   /**
    * Default implementation of JXPathContextFactory.
  
  
  
  1.10      +4 -6      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/AncestorContext.java
  
  Index: AncestorContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/AncestorContext.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- AncestorContext.java	20 Oct 2002 03:43:39 -0000	1.9
  +++ AncestorContext.java	26 Nov 2002 01:20:06 -0000	1.10
  @@ -61,8 +61,6 @@
    */
   package org.apache.commons.jxpath.ri.axes;
   
  -import java.util.HashSet;
  -
   import org.apache.commons.jxpath.ri.EvalContext;
   import org.apache.commons.jxpath.ri.compiler.NodeTest;
   import org.apache.commons.jxpath.ri.model.NodePointer;
  
  
  
  1.9       +4 -6      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/ParentContext.java
  
  Index: ParentContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/ParentContext.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ParentContext.java	20 Oct 2002 03:43:38 -0000	1.8
  +++ ParentContext.java	26 Nov 2002 01:20:06 -0000	1.9
  @@ -61,8 +61,6 @@
    */
   package org.apache.commons.jxpath.ri.axes;
   
  -import java.util.HashSet;
  -
   import org.apache.commons.jxpath.ri.EvalContext;
   import org.apache.commons.jxpath.ri.compiler.NodeTest;
   import org.apache.commons.jxpath.ri.model.NodePointer;
  
  
  
  1.9       +4 -6      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/PrecedingOrFollowingContext.java
  
  Index: PrecedingOrFollowingContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/PrecedingOrFollowingContext.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- PrecedingOrFollowingContext.java	29 May 2002 00:41:32 -0000	1.8
  +++ PrecedingOrFollowingContext.java	26 Nov 2002 01:20:06 -0000	1.9
  @@ -83,12 +83,10 @@
       private Stack nameStack;
       private NodePointer currentNodePointer;
       private NodePointer currentRootLocation;
  -    private boolean includeSelf;
       private boolean reverse;
   
       public PrecedingOrFollowingContext(EvalContext parentContext, NodeTest nodeTest, boolean reverse){
           super(parentContext);
  -        this.includeSelf = includeSelf;
           this.nodeTest = nodeTest;
           this.reverse = reverse;
       }
  
  
  
  1.15      +63 -61    jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/PredicateContext.java
  
  Index: PredicateContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/PredicateContext.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- PredicateContext.java	12 Oct 2002 21:02:24 -0000	1.14
  +++ PredicateContext.java	26 Nov 2002 01:20:06 -0000	1.15
  @@ -62,14 +62,14 @@
   package org.apache.commons.jxpath.ri.axes;
   
   import java.util.Iterator;
  +
   import org.apache.commons.jxpath.ri.EvalContext;
  -import org.apache.commons.jxpath.ri.compiler.CoreOperation;
  +import org.apache.commons.jxpath.ri.InfoSetUtil;
   import org.apache.commons.jxpath.ri.compiler.Expression;
   import org.apache.commons.jxpath.ri.compiler.NameAttributeTest;
   import org.apache.commons.jxpath.ri.model.NodePointer;
   import org.apache.commons.jxpath.ri.model.beans.PropertyOwnerPointer;
   import org.apache.commons.jxpath.ri.model.beans.PropertyPointer;
  -import org.apache.commons.jxpath.ri.InfoSetUtil;
   
   /**
    * EvalContext that checks predicates.
  @@ -93,46 +93,47 @@
       }
   
       public boolean nextNode(){
  -        if (done){
  -            return false;
  -        }
  -        while (parentContext.nextNode()){
  -            if (setupDynamicPropertyPointer()){
  -                Object pred = nameTestExpression.computeValue(parentContext);
  -                if (pred instanceof NodePointer){
  -                    pred = ((NodePointer)pred).getValue();
  -                }
  -                dynamicPropertyPointer.setPropertyName(InfoSetUtil.stringValue(pred));
  -                position = 1;
  -                done = true;
  -                return true;
  -            }
  -            else {
  -                Object pred = expression.computeValue(parentContext);
  -                if (pred instanceof Iterator){
  -                    if (!((Iterator)pred).hasNext()){
  -                        return false;
  -                    }
  -                    pred = ((Iterator)pred).next();
  -                }
  -
  -                if (pred instanceof NodePointer){
  -                    pred = ((NodePointer)pred).getNode();
  -                }
  -
  -                if (pred instanceof Number){
  -                    int pos = (int)InfoSetUtil.doubleValue(pred);
  -                    position++;
  -                    done = true;
  -                    return parentContext.setPosition(pos);
  -                }
  -                else if (InfoSetUtil.booleanValue(pred)){
  -                    position++;
  -                    return true;
  -                }
  -            }
  -        }
  -        return false;
  +		if (done) {
  +			return false;
  +		}
  +		while (parentContext.nextNode()) {
  +			if (setupDynamicPropertyPointer()) {
  +				Object pred = nameTestExpression.computeValue(parentContext);
  +				if (pred instanceof NodePointer) {
  +					pred = ((NodePointer) pred).getValue();
  +				}
  +				dynamicPropertyPointer.setPropertyName(
  +					InfoSetUtil.stringValue(pred));
  +				position = 1;
  +				done = true;
  +				return true;
  +			}
  +			else {
  +				Object pred = expression.computeValue(parentContext);
  +				if (pred instanceof Iterator) {
  +					if (!((Iterator) pred).hasNext()) {
  +						return false;
  +					}
  +					pred = ((Iterator) pred).next();
  +				}
  +
  +				if (pred instanceof NodePointer) {
  +					pred = ((NodePointer) pred).getNode();
  +				}
  +
  +				if (pred instanceof Number) {
  +					int pos = (int) InfoSetUtil.doubleValue(pred);
  +					position++;
  +					done = true;
  +					return parentContext.setPosition(pos);
  +				}
  +				else if (InfoSetUtil.booleanValue(pred)) {
  +					position++;
  +					return true;
  +				}
  +			}
  +		}
  +		return false;
       }
   
       /**
  @@ -158,21 +159,22 @@
       }
   
       public boolean setPosition(int position){
  -        if (nameTestExpression == null){
  -            return setPositionStandard(position);
  -        }
  -        else {
  -            if (dynamicPropertyPointer == null){
  -                if (!setupDynamicPropertyPointer()){
  -                    return setPositionStandard(position);
  -                }
  -            }
  -            if (position < 1 || position > dynamicPropertyPointer.getLength()){
  -                return false;
  -            }
  -            dynamicPropertyPointer.setIndex(position - 1);
  -            return true;
  -        }
  +		if (nameTestExpression == null) {
  +			return setPositionStandard(position);
  +		}
  +		else {
  +			if (dynamicPropertyPointer == null) {
  +				if (!setupDynamicPropertyPointer()) {
  +					return setPositionStandard(position);
  +				}
  +			}
  +			if (position < 1
  +				|| position > dynamicPropertyPointer.getLength()) {
  +				return false;
  +			}
  +			dynamicPropertyPointer.setIndex(position - 1);
  +			return true;
  +		}
       }
   
       public NodePointer getCurrentNodePointer(){
  
  
  
  1.8       +12 -11    jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/SimplePathInterpreter.java
  
  Index: SimplePathInterpreter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/axes/SimplePathInterpreter.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- SimplePathInterpreter.java	13 Oct 2002 02:59:01 -0000	1.7
  +++ SimplePathInterpreter.java	26 Nov 2002 01:20:06 -0000	1.8
  @@ -111,7 +111,8 @@
       {
   //        PATH = createNullPointer(context, root, steps, 0).toString();  // Dbg
           NodePointer pointer = doStep(context, root, steps, 0);
  -        return valuePointer(pointer);
  +//        return valuePointer(pointer);
  +        return pointer;
       }
   
       /**
  @@ -129,7 +130,9 @@
       {
   //        PATH = createNullPointerForPredicates(context, root,
   //                    steps, -1, predicates, 0).toString();  // Debugging
  -        return doPredicate(context, root, steps, -1, predicates, 0);
  +        NodePointer pointer = doPredicate(context, root, steps, -1, predicates, 0);
  +//        return valuePointer(pointer);
  +        return pointer;
       }
   
       /**
  @@ -143,8 +146,6 @@
               EvalContext context, NodePointer parent,
               Step steps[], int current_step)
       {
  -        parent = valuePointer(parent);
  -
           if (parent == null){
               return null;
           }
  @@ -154,6 +155,9 @@
               return parent;
           }
   
  +        // Open all containers
  +        parent = valuePointer(parent);
  +        
           Step step = steps[current_step];
           Expression predicates[] = step.getPredicates();
   
  @@ -584,7 +588,7 @@
           NodePointer pointer = parent;
           if (isCollectionElement(pointer, index)){
               pointer.setIndex(index);
  -            return doPredicate(context, valuePointer(pointer),
  +            return doPredicate(context, pointer,
                       steps, current_step, predicates, current_predicate + 1);
           }
           return createNullPointerForPredicates(context, parent,
  @@ -671,10 +675,7 @@
        * returns a pointer for the contained value.
        */
       private static NodePointer valuePointer(NodePointer pointer){
  -        while (pointer != null && !pointer.isNode()){
  -            pointer = pointer.getValuePointer();
  -        }
  -        return pointer;
  +        return pointer == null ? null : pointer.getValuePointer();
       }
   
       /**
  @@ -686,11 +687,11 @@
               EvalContext context, NodePointer parent, Step[] steps,
               int current_step)
       {
  -        parent = valuePointer(parent);
  -
           if (current_step == steps.length){
               return parent;
           }
  +
  +        parent = valuePointer(parent);
   
           Step step = steps[current_step];
   
  
  
  
  1.8       +7 -8      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/compiler/CoreFunction.java
  
  Index: CoreFunction.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/compiler/CoreFunction.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- CoreFunction.java	12 Oct 2002 20:56:03 -0000	1.7
  +++ CoreFunction.java	26 Nov 2002 01:20:06 -0000	1.8
  @@ -61,15 +61,14 @@
    */
   package org.apache.commons.jxpath.ri.compiler;
   
  +import java.util.Collection;
  +
   import org.apache.commons.jxpath.JXPathContext;
   import org.apache.commons.jxpath.JXPathException;
   import org.apache.commons.jxpath.ri.Compiler;
  -import org.apache.commons.jxpath.ri.InfoSetUtil;
   import org.apache.commons.jxpath.ri.EvalContext;
  +import org.apache.commons.jxpath.ri.InfoSetUtil;
   import org.apache.commons.jxpath.ri.model.NodePointer;
  -import org.apache.commons.jxpath.ri.model.beans.NullPointer;
  -
  -import java.util.Collection;
   
   /**
    * An element of the compile tree representing one of built-in functions
  
  
  
  1.7       +8 -13     jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/compiler/CoreOperation.java
  
  Index: CoreOperation.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/compiler/CoreOperation.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- CoreOperation.java	26 Aug 2002 22:19:51 -0000	1.6
  +++ CoreOperation.java	26 Nov 2002 01:20:06 -0000	1.7
  @@ -61,20 +61,15 @@
    */
   package org.apache.commons.jxpath.ri.compiler;
   
  +import java.util.*;
  +
   import org.apache.commons.jxpath.Pointer;
  -import org.apache.commons.jxpath.ri.Compiler;
  -import org.apache.commons.jxpath.ri.InfoSetUtil;
  -import org.apache.commons.jxpath.ri.QName;
   import org.apache.commons.jxpath.ri.EvalContext;
  -import org.apache.commons.jxpath.ri.model.NodePointer;
  +import org.apache.commons.jxpath.ri.InfoSetUtil;
   import org.apache.commons.jxpath.ri.axes.InitialContext;
   import org.apache.commons.jxpath.ri.axes.SelfContext;
   import org.apache.commons.jxpath.ri.axes.UnionContext;
  -
  -import java.util.Collection;
  -import java.util.Iterator;
  -import java.util.Set;
  -import java.util.HashSet;
  +import org.apache.commons.jxpath.ri.model.NodePointer;
   
   /**
    * A compile tree element representing one of the core operations like "+",
  
  
  
  1.2       +4 -3      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/compiler/NameAttributeTest.java
  
  Index: NameAttributeTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/compiler/NameAttributeTest.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- NameAttributeTest.java	8 May 2002 00:39:59 -0000	1.1
  +++ NameAttributeTest.java	26 Nov 2002 01:20:06 -0000	1.2
  @@ -1,9 +1,10 @@
   package org.apache.commons.jxpath.ri.compiler;
   
  -import org.apache.commons.jxpath.ri.EvalContext;
   
   /**
  - *
  + * Captures the <code>foo[@name=<i>expr</i>]</code> expression. These
  + * expressions are handled in a special way when applied to beans
  + * or maps.
    *
    * @author Dmitri Plotnikov
    * @version $Revision$ $Date$
  
  
  
  1.13      +42 -7     jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/NodePointer.java
  
  Index: NodePointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/NodePointer.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- NodePointer.java	20 Oct 2002 03:47:17 -0000	1.12
  +++ NodePointer.java	26 Nov 2002 01:20:06 -0000	1.13
  @@ -65,7 +65,6 @@
   
   import org.apache.commons.jxpath.JXPathContext;
   import org.apache.commons.jxpath.JXPathException;
  -import org.apache.commons.jxpath.JXPathIntrospector;
   import org.apache.commons.jxpath.Pointer;
   import org.apache.commons.jxpath.ri.Compiler;
   import org.apache.commons.jxpath.ri.JXPathContextReferenceImpl;
  @@ -216,11 +215,16 @@
       public abstract int getLength();
   
       /**
  -     * By default, returns <code>getNodeValue()</code>, can be overridden to
  +     * By default, returns <code>getNode()</code>, can be overridden to
        * return a "canonical" value, like for instance a DOM element should
        * return its string value.
        */
       public Object getValue() {
  +        NodePointer valuePointer = getValuePointer();
  +        if (valuePointer != this){
  +            return valuePointer.getValue();
  +        }
  +        // Default behavior is to return the same as getNode() 
           return getNode();
       }
   
  @@ -229,12 +233,34 @@
        * this method returns the pointer to the contents.
        * Only an auxiliary (non-node) pointer can (and should) return a
        * value pointer other than itself.
  +     * Note that you probably don't want to override <code>getValuePointer()</code>
  +     * directly.  Override the <code>getImmediateValuePointer()</code> 
  +     * method instead.  The <code>getValuePointer()</code> method is
  +     * calls <code>getImmediateValuePointer()</code> and, if the result is not
  +     * <code>this</code>, invokes <code>getValuePointer()</code> recursively.
  +     * The idea here is to open all nested containers. Let's say we have a 
  +     * container within a container within a container.
  +     * The <code>getValuePointer()</code> method should then open all 
  +     * those containers and return the pointer to the ultimate contents.
  +     * It does so with the above recursion.
        */
       public NodePointer getValuePointer() {
  +        NodePointer ivp = getImmediateValuePointer();
  +        if (ivp != this){
  +            return ivp.getValuePointer();
  +        }
           return this;
       }
   
       /**
  +     * @see #getValuePointer()
  +     * 
     * @return NodePointer is either <code>this</code> or a pointer
  +     *   for the immediately contained value.
     */
  +    public NodePointer getImmediateValuePointer() {
  +        return this;
  +    }
  +    
  +    /**
        * An actual pointer points to an existing part of an object graph, even
        * if it is null. A non-actual pointer represents a part that does not exist
        * at all.
  @@ -280,9 +306,18 @@
   
       /**
        * Returns the object the pointer points to; does not convert it
  +     * to a "canonical" type. Opens containers, properties etc and returns
  +     * the ultimate contents.
  +     */
  +    public Object getNode(){
  +        return getValuePointer().getImmediateNode();
  +    }
  +    
  +    /**
  +     * Returns the object the pointer points to; does not convert it
        * to a "canonical" type.
        */
  -    public abstract Object getNode();
  +    public abstract Object getImmediateNode();
   
       /**
        * Converts the value to the required type and changes the corresponding
  
  
  
  1.8       +7 -7      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/VariablePointer.java
  
  Index: VariablePointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/VariablePointer.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- VariablePointer.java	20 Oct 2002 03:47:17 -0000	1.7
  +++ VariablePointer.java	26 Nov 2002 01:20:06 -0000	1.8
  @@ -121,7 +121,7 @@
           return value != null && ValueUtils.isCollection(value);
       }
   
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           Object value = getBaseValue();
           if (index != WHOLE_COLLECTION){
               return ValueUtils.getValue(value, index);
  @@ -147,11 +147,11 @@
           return actual;
       }
   
  -    public NodePointer getValuePointer(){
  +    public NodePointer getImmediateValuePointer(){
           if (valuePointer == null){
               Object value = null;
               if (actual){
  -                value = getNode();
  +                value = getImmediateNode();
               }
               valuePointer = NodePointer.newChildNodePointer(this, null, value);
           }
  
  
  
  1.4       +4 -5      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/BeanAttributeIterator.java
  
  Index: BeanAttributeIterator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/BeanAttributeIterator.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- BeanAttributeIterator.java	13 Oct 2002 02:59:01 -0000	1.3
  +++ BeanAttributeIterator.java	26 Nov 2002 01:20:06 -0000	1.4
  @@ -62,7 +62,6 @@
   package org.apache.commons.jxpath.ri.model.beans;
   
   import org.apache.commons.jxpath.ri.QName;
  -import org.apache.commons.jxpath.ri.model.NodeIterator;
   import org.apache.commons.jxpath.ri.model.NodePointer;
   
   /**
  
  
  
  1.8       +82 -72    jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/BeanPointer.java
  
  Index: BeanPointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/BeanPointer.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- BeanPointer.java	20 Oct 2002 03:47:17 -0000	1.7
  +++ BeanPointer.java	26 Nov 2002 01:20:06 -0000	1.8
  @@ -61,14 +61,12 @@
    */
   package org.apache.commons.jxpath.ri.model.beans;
   
  -import java.beans.PropertyDescriptor;
   import java.util.Locale;
   
   import org.apache.commons.jxpath.JXPathBeanInfo;
   import org.apache.commons.jxpath.JXPathIntrospector;
   import org.apache.commons.jxpath.ri.QName;
   import org.apache.commons.jxpath.ri.model.NodePointer;
  -import org.apache.commons.jxpath.util.ValueUtils;
   
   /**
    * A Pointer that points to a JavaBean or a collection. It is either
  @@ -84,22 +82,32 @@
       private Object bean;
       private JXPathBeanInfo beanInfo;
   
  -    public BeanPointer(QName name, Object bean, JXPathBeanInfo beanInfo, Locale locale){
  -        super(null, locale);
  -        this.name = name;
  -        this.bean = bean;
  -        this.beanInfo = beanInfo;
  -    }
  +	public BeanPointer(
  +    		QName name,
  +    		Object bean,
  +    		JXPathBeanInfo beanInfo,
  +    		Locale locale) 
  +    {
  +		super(null, locale);
  +		this.name = name;
  +		this.bean = bean;
  +		this.beanInfo = beanInfo;
  +	}
   
       /**
        * @param name is the name given to the first node
        */
  -    public BeanPointer(NodePointer parent, QName name, Object bean, JXPathBeanInfo beanInfo){
  -        super(parent);
  -        this.name = name;
  -        this.bean = bean;
  -        this.beanInfo = beanInfo;
  -    }
  +	public BeanPointer(
  +    		NodePointer parent,
  +    		QName name,
  +    		Object bean,
  +    		JXPathBeanInfo beanInfo) 
  +    {
  +		super(parent);
  +		this.name = name;
  +		this.bean = bean;
  +		this.beanInfo = beanInfo;
  +	}
   
       public PropertyPointer getPropertyPointer(){
           return new BeanPropertyPointer(this, beanInfo);
  @@ -140,38 +148,40 @@
           return name == null ? 0 : name.hashCode();
       }
   
  -    public boolean equals(Object object){
  -        if (object == this){
  -            return true;
  -        }
  -
  -        if (!(object instanceof BeanPointer)){
  -            return false;
  -        }
  -
  -        BeanPointer other = (BeanPointer)object;
  -        if (parent != other.parent){
  -            if (parent == null || !parent.equals(other.parent)){
  -                return false;
  -            }
  -        }
  -
  -        if ((name == null && other.name != null) ||
  -                (name != null && !name.equals(other.name))){
  -            return false;
  -        }
  -
  -        int i_this = (index == WHOLE_COLLECTION ? 0 : index);
  -        int i_other = (other.index == WHOLE_COLLECTION ? 0 : other.index);
  -        if (i_this != i_other){
  -            return false;
  -        }
  -
  -        if (bean instanceof Number || bean instanceof String || bean instanceof Boolean){
  -            return bean.equals(other.bean);
  -        }
  -        return bean == other.bean;
  -    }
  +	public boolean equals(Object object) {
  +		if (object == this) {
  +			return true;
  +		}
  +
  +		if (!(object instanceof BeanPointer)) {
  +			return false;
  +		}
  +
  +		BeanPointer other = (BeanPointer) object;
  +		if (parent != other.parent) {
  +			if (parent == null || !parent.equals(other.parent)) {
  +				return false;
  +			}
  +		}
  +
  +		if ((name == null && other.name != null)
  +			|| (name != null && !name.equals(other.name))) {
  +			return false;
  +		}
  +
  +		int i_this = (index == WHOLE_COLLECTION ? 0 : index);
  +		int i_other = (other.index == WHOLE_COLLECTION ? 0 : other.index);
  +		if (i_this != i_other) {
  +			return false;
  +		}
  +
  +		if (bean instanceof Number
  +			|| bean instanceof String
  +			|| bean instanceof Boolean) {
  +			return bean.equals(other.bean);
  +		}
  +		return bean == other.bean;
  +	}
   
       /**
        * If the pointer has a parent, then parent's path.
  @@ -179,26 +189,26 @@
        * If the bean is a primitive value, the value itself.
        * Otherwise - an empty string.
        */
  -    public String asPath(){
  -        if (parent != null){
  -            return super.asPath();
  -        }
  -        else if (bean == null){
  -            return "null()";
  -        }
  -        else if (bean instanceof Number){
  -            String string = bean.toString();
  -            if (string.endsWith(".0")){
  -                string = string.substring(0, string.length() - 2);
  -            }
  -            return string;
  -        }
  -        else if (bean instanceof Boolean){
  -            return ((Boolean)bean).booleanValue() ? "true()" : "false()";
  -        }
  -        else if (bean instanceof String){
  -            return "'" + bean + "'";
  -        }
  -        return "/";
  -    }
  +	public String asPath() {
  +		if (parent != null) {
  +			return super.asPath();
  +		}
  +		else if (bean == null) {
  +			return "null()";
  +		}
  +		else if (bean instanceof Number) {
  +			String string = bean.toString();
  +			if (string.endsWith(".0")) {
  +				string = string.substring(0, string.length() - 2);
  +			}
  +			return string;
  +		}
  +		else if (bean instanceof Boolean) {
  +			return ((Boolean) bean).booleanValue() ? "true()" : "false()";
  +		}
  +		else if (bean instanceof String) {
  +			return "'" + bean + "'";
  +		}
  +		return "/";
  +	}
   }
  
  
  
  1.10      +40 -7     jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/BeanPropertyPointer.java
  
  Index: BeanPropertyPointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/BeanPropertyPointer.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- BeanPropertyPointer.java	20 Oct 2002 03:47:17 -0000	1.9
  +++ BeanPropertyPointer.java	26 Nov 2002 01:20:06 -0000	1.10
  @@ -62,13 +62,11 @@
   package org.apache.commons.jxpath.ri.model.beans;
   
   import java.beans.PropertyDescriptor;
  -import java.util.Arrays;
   
   import org.apache.commons.jxpath.AbstractFactory;
   import org.apache.commons.jxpath.JXPathBeanInfo;
   import org.apache.commons.jxpath.JXPathContext;
   import org.apache.commons.jxpath.JXPathException;
  -import org.apache.commons.jxpath.JXPathIntrospector;
   import org.apache.commons.jxpath.ri.QName;
   import org.apache.commons.jxpath.ri.model.NodePointer;
   import org.apache.commons.jxpath.util.ValueUtils;
  @@ -174,7 +172,7 @@
        * property. If the property is not a collection, index should be zero
        * and the value will be the property itself.
        */
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           if (value == UNINITIALIZED){
               Object baseValue = getBaseValue();
               if (index == WHOLE_COLLECTION){
  @@ -194,6 +192,41 @@
           return getPropertyDescriptor() != null;
       }
   
  +    public boolean isCollection(){
  +        PropertyDescriptor pd = getPropertyDescriptor();
  +        if (pd == null){
  +            return false;
  +        }
  +        
  +        int hint = ValueUtils.getCollectionHint(pd.getPropertyType());
  +        if (hint == -1){
  +            return false;
  +        }
  +        if (hint == 1){
  +            return true;
  +        }
  +        
  +        Object value = getBaseValue();
  +        return value != null && ValueUtils.isCollection(value);
  +    }
  +    
  +    /**
  +     * If the property contains a collection, then the length of that
  +     * collection, otherwise - 1.
  +     */
  +    public int getLength(){
  +        PropertyDescriptor pd = getPropertyDescriptor();
  +        if (pd == null){
  +            return 1;
  +        }
  +        
  +        int hint = ValueUtils.getCollectionHint(pd.getPropertyType());
  +        if (hint == -1){
  +            return 1;
  +        }
  +        return ValueUtils.getLength(getBaseValue());
  +    }
  +    
       /**
        * If index == WHOLE_COLLECTION, change the value of the property, otherwise
        * change the value of the index'th element of the collection
  
  
  
  1.8       +8 -8      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/CollectionPointer.java
  
  Index: CollectionPointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/CollectionPointer.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- CollectionPointer.java	20 Oct 2002 03:47:17 -0000	1.7
  +++ CollectionPointer.java	26 Nov 2002 01:20:06 -0000	1.8
  @@ -117,7 +117,7 @@
           return index == WHOLE_COLLECTION;
       }
   
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           if (index != WHOLE_COLLECTION){
               return ValueUtils.getValue(collection, index);
           }
  @@ -144,9 +144,9 @@
                   valuePointer = this;
               }
               else {
  -                Object value = getNode();
  -                valuePointer = NodePointer.
  -                			newChildNodePointer(this, getName(), value);
  +                Object value = getImmediateNode();
  +                valuePointer =
  +                    NodePointer.newChildNodePointer(this, getName(), value);
               }
           }
           return valuePointer;
  
  
  
  1.10      +133 -112  jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/DynamicPropertyPointer.java
  
  Index: DynamicPropertyPointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/DynamicPropertyPointer.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- DynamicPropertyPointer.java	20 Oct 2002 03:47:17 -0000	1.9
  +++ DynamicPropertyPointer.java	26 Nov 2002 01:20:06 -0000	1.10
  @@ -63,11 +63,7 @@
   
   import java.util.Arrays;
   
  -import org.apache.commons.jxpath.AbstractFactory;
  -import org.apache.commons.jxpath.DynamicPropertyHandler;
  -import org.apache.commons.jxpath.JXPathContext;
  -import org.apache.commons.jxpath.JXPathException;
  -import org.apache.commons.jxpath.JXPathIntrospector;
  +import org.apache.commons.jxpath.*;
   import org.apache.commons.jxpath.ri.QName;
   import org.apache.commons.jxpath.ri.model.NodePointer;
   import org.apache.commons.jxpath.util.ValueUtils;
  @@ -84,11 +80,13 @@
       private String[] names;
       private String requiredPropertyName;
   
  -    public DynamicPropertyPointer(NodePointer parent, DynamicPropertyHandler handler){
  -        super(parent);
  -        this.handler = handler;
  -    }
  -
  +	public DynamicPropertyPointer(
  +    		NodePointer parent,
  +    		DynamicPropertyHandler handler) 
  +    {
  +		super(parent);
  +		this.handler = handler;
  +	}
       /**
        * This type of node is auxiliary.
        */
  @@ -203,15 +201,18 @@
        * property. If the property is not a collection, index should be zero
        * and the value will be the property itself.
        */
  -    public Object getNode(){
  -        Object value;
  -        if (index == WHOLE_COLLECTION){
  -            value = handler.getProperty(getBean(), getPropertyName());
  -        }
  -        else {
  -            value = ValueUtils.getValue(handler.getProperty(getBean(), getPropertyName()), index);
  -        }
  -        return value;
  +    public Object getImmediateNode(){
  +		Object value;
  +		if (index == WHOLE_COLLECTION) {
  +			value = handler.getProperty(getBean(), getPropertyName());
  +		}
  +		else {
  +			value =
  +				ValueUtils.getValue(
  +					handler.getProperty(getBean(), getPropertyName()),
  +					index);
  +		}
  +		return value;
       }
   
       /**
  @@ -228,12 +229,15 @@
        * represented by the property.
        */
       public void setValue(Object value){
  -        if (index == WHOLE_COLLECTION){
  -            handler.setProperty(getBean(), getPropertyName(), value);
  -        }
  -        else {
  -            ValueUtils.setValue(handler.getProperty(getBean(), getPropertyName()), index, value);
  -        }
  +		if (index == WHOLE_COLLECTION) {
  +			handler.setProperty(getBean(), getPropertyName(), value);
  +		}
  +		else {
  +			ValueUtils.setValue(
  +				handler.getProperty(getBean(), getPropertyName()),
  +				index,
  +				value);
  +		}
       }
   
       public NodePointer createPath(JXPathContext context, Object value){
  @@ -241,101 +245,118 @@
       }
   
       public NodePointer createChild(JXPathContext context, QName name, int index, Object value){
  -        // Ignore the name passed to us, use our own data
  -        if (index == WHOLE_COLLECTION){
  -            handler.setProperty(getBean(), getPropertyName(), value);
  -        }
  -        else {
  -            Object collection = getBaseValue();
  -            if (collection == null){
  -                AbstractFactory factory = getAbstractFactory(context);
  -                if (!factory.createObject(context, this, getBean(), getPropertyName(), 0)){
  -                    throw new JXPathException("Factory could not create an object for path: " + asPath());
  -                }
  -                collection = getBaseValue();
  -            }
  -
  -            if (index < 0){
  -                throw new JXPathException("Index is less than 1: " + asPath());
  -            }
  -
  -            if (index >= getLength()){
  -                collection = ValueUtils.expandCollection(collection, index + 1);
  -                handler.setProperty(getBean(), getPropertyName(), collection);
  -            }
  -
  -            ValueUtils.setValue(collection, index, value);
  -        }
  -        NodePointer ptr = (NodePointer)clone();
  -        ptr.setIndex(index);
  -        return ptr;
  +		// Ignore the name passed to us, use our own data
  +		if (index == WHOLE_COLLECTION) {
  +			handler.setProperty(getBean(), getPropertyName(), value);
  +		}
  +		else {
  +			Object collection = getBaseValue();
  +			if (collection == null) {
  +				AbstractFactory factory = getAbstractFactory(context);
  +				if (!factory
  +					.createObject(
  +						context,
  +						this,
  +						getBean(),
  +						getPropertyName(),
  +						0)) {
  +					throw new JXPathException(
  +						"Factory could not create an object for path: "
  +							+ asPath());
  +				}
  +				collection = getBaseValue();
  +			}
  +
  +			if (index < 0) {
  +				throw new JXPathException("Index is less than 1: " + asPath());
  +			}
  +
  +			if (index >= getLength()) {
  +				collection = ValueUtils.expandCollection(collection, index + 1);
  +				handler.setProperty(getBean(), getPropertyName(), collection);
  +			}
  +
  +			ValueUtils.setValue(collection, index, value);
  +		}
  +		NodePointer ptr = (NodePointer) clone();
  +		ptr.setIndex(index);
  +		return ptr;
       }
   
       public NodePointer createChild(JXPathContext context, QName name, int index){
  -        // Ignore the name passed to us, use our own data
  -        Object collection = getBaseValue();
  -        if (collection == null){
  -            AbstractFactory factory = getAbstractFactory(context);
  -            if (!factory.createObject(context, this, getBean(), getPropertyName(), 0)){
  -                throw new JXPathException("Factory could not create an object for path: " + asPath());
  -            }
  -            collection = getBaseValue();
  -        }
  -
  -        if (index < 0){
  -            throw new JXPathException("Index is less than 1: " + asPath());
  -        }
  -
  -        if (index >= getLength()){
  -            collection = ValueUtils.expandCollection(collection, index + 1);
  -            handler.setProperty(getBean(), getPropertyName(), collection);
  -        }
  -
  -        DynamicPropertyPointer pointer = (DynamicPropertyPointer)this.clone();
  -        pointer.setIndex(index);
  -        return pointer;
  +		// Ignore the name passed to us, use our own data
  +		Object collection = getBaseValue();
  +		if (collection == null) {
  +			AbstractFactory factory = getAbstractFactory(context);
  +			if (!factory
  +				.createObject(context, this, getBean(), getPropertyName(), 0)) {
  +				throw new JXPathException(
  +					"Factory could not create an object for path: " + asPath());
  +			}
  +			collection = getBaseValue();
  +		}
  +
  +		if (index < 0) {
  +			throw new JXPathException("Index is less than 1: " + asPath());
  +		}
  +
  +		if (index >= getLength()) {
  +			collection = ValueUtils.expandCollection(collection, index + 1);
  +			handler.setProperty(getBean(), getPropertyName(), collection);
  +		}
  +
  +		DynamicPropertyPointer pointer = (DynamicPropertyPointer) this.clone();
  +		pointer.setIndex(index);
  +		return pointer;
       }
   
       public NodePointer createPath(JXPathContext context){
  -        if (getNode() == null){
  -            AbstractFactory factory = getAbstractFactory(context);
  -            int inx = (index == WHOLE_COLLECTION ? 0 : index);
  -            if (!factory.createObject(context, this, getBean(), getPropertyName(), inx)){
  -                throw new JXPathException("Factory could not create an object for path: " + asPath());
  -            }
  -        }
  -        return this;
  +		if (getNode() == null) {
  +			AbstractFactory factory = getAbstractFactory(context);
  +			int inx = (index == WHOLE_COLLECTION ? 0 : index);
  +			if (!factory
  +				.createObject(
  +					context,
  +					this,
  +					getBean(),
  +					getPropertyName(),
  +					inx)) {
  +				throw new JXPathException(
  +					"Factory could not create an object for path: " + asPath());
  +			}
  +		}
  +		return this;
       }
   
       public void remove(){
  -        if (index == WHOLE_COLLECTION){
  -            handler.setProperty(getBean(), getPropertyName(), null);
  -        }
  -        else if (isCollection()){
  -            Object collection = ValueUtils.remove(getBaseValue(), index);
  -            handler.setProperty(getBean(), getPropertyName(), collection);
  -        }
  -        else if (index == 0){
  -            handler.setProperty(getBean(), getPropertyName(), null);
  -        }
  +		if (index == WHOLE_COLLECTION) {
  +			handler.setProperty(getBean(), getPropertyName(), null);
  +		}
  +		else if (isCollection()) {
  +			Object collection = ValueUtils.remove(getBaseValue(), index);
  +			handler.setProperty(getBean(), getPropertyName(), collection);
  +		}
  +		else if (index == 0) {
  +			handler.setProperty(getBean(), getPropertyName(), null);
  +		}
       }
   
       public String asPath(){
  -        StringBuffer buffer = new StringBuffer();
  -        buffer.append(getParent().asPath());
  -        if (buffer.length() == 0){
  -            buffer.append("/.");
  -        }
  -        else if (buffer.charAt(buffer.length() - 1) == '/'){
  -            buffer.append('.');
  -        }
  -        buffer.append("[@name='");
  -        buffer.append(escape(getPropertyName()));
  -        buffer.append("']");
  -        if (index != WHOLE_COLLECTION && isCollection()){
  -            buffer.append('[').append(index + 1).append(']');
  -        }
  -        return buffer.toString();
  +		StringBuffer buffer = new StringBuffer();
  +		buffer.append(getParent().asPath());
  +		if (buffer.length() == 0) {
  +			buffer.append("/.");
  +		}
  +		else if (buffer.charAt(buffer.length() - 1) == '/') {
  +			buffer.append('.');
  +		}
  +		buffer.append("[@name='");
  +		buffer.append(escape(getPropertyName()));
  +		buffer.append("']");
  +		if (index != WHOLE_COLLECTION && isCollection()) {
  +			buffer.append('[').append(index + 1).append(']');
  +		}
  +		return buffer.toString();
       }
   
       private String escape(String string){
  
  
  
  1.6       +5 -5      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/LangAttributePointer.java
  
  Index: LangAttributePointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/LangAttributePointer.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- LangAttributePointer.java	20 Oct 2002 03:47:17 -0000	1.5
  +++ LangAttributePointer.java	26 Nov 2002 01:20:06 -0000	1.6
  @@ -101,7 +101,7 @@
           return parent.getLocale().toString().replace('_', '-');
       }
   
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           return getBaseValue();
       }
   
  
  
  
  1.10      +5 -5      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/NullElementPointer.java
  
  Index: NullElementPointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/NullElementPointer.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- NullElementPointer.java	20 Oct 2002 03:47:17 -0000	1.9
  +++ NullElementPointer.java	26 Nov 2002 01:20:06 -0000	1.10
  @@ -94,7 +94,7 @@
           return null;
       }
   
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           return null;
       }
       
  
  
  
  1.10      +5 -5      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/NullPropertyPointer.java
  
  Index: NullPropertyPointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/NullPropertyPointer.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- NullPropertyPointer.java	20 Oct 2002 03:47:17 -0000	1.9
  +++ NullPropertyPointer.java	26 Nov 2002 01:20:06 -0000	1.10
  @@ -96,7 +96,7 @@
           return null;
       }
   
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           return null;
       }
   
  
  
  
  1.10      +5 -5      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/PropertyOwnerPointer.java
  
  Index: PropertyOwnerPointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/PropertyOwnerPointer.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- PropertyOwnerPointer.java	20 Oct 2002 03:47:17 -0000	1.9
  +++ PropertyOwnerPointer.java	26 Nov 2002 01:20:06 -0000	1.10
  @@ -130,7 +130,7 @@
       private static final Object UNINITIALIZED = new Object();
   
       private Object value = UNINITIALIZED;
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           if (value == UNINITIALIZED){
               if (index == WHOLE_COLLECTION){
                   value = getBaseValue();
  
  
  
  1.7       +10 -7     jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/PropertyPointer.java
  
  Index: PropertyPointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/beans/PropertyPointer.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- PropertyPointer.java	20 Oct 2002 03:47:17 -0000	1.6
  +++ PropertyPointer.java	26 Nov 2002 01:20:06 -0000	1.7
  @@ -128,7 +128,7 @@
       private static final Object UNINITIALIZED = new Object();
   
       private Object value = UNINITIALIZED;
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           if (value == UNINITIALIZED){
               if (index == WHOLE_COLLECTION){
                   value = getBaseValue();
  @@ -164,8 +164,11 @@
        * Returns a NodePointer that can be used to access the currently
        * selected property value.
        */
  -    public NodePointer getValuePointer(){
  -        return NodePointer.newChildNodePointer(this, getName(), getNode());
  +    public NodePointer getImmediateValuePointer(){
  +        return NodePointer.newChildNodePointer(
  +            this,
  +            getName(),
  +            getImmediateNode());
       }
   
       public int hashCode(){
  
  
  
  1.6       +10 -9     jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/container/ContainerPointer.java
  
  Index: ContainerPointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/container/ContainerPointer.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ContainerPointer.java	20 Oct 2002 03:47:18 -0000	1.5
  +++ ContainerPointer.java	26 Nov 2002 01:20:07 -0000	1.6
  @@ -124,7 +124,7 @@
           return getValuePointer().isLeaf();
       }    
   
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           Object value = getBaseValue();
           if (index != WHOLE_COLLECTION){
               if (index >= 0 && index < getLength()){
  @@ -141,10 +141,11 @@
           container.setValue(value);
       }
   
  -    public NodePointer getValuePointer(){
  -        if (valuePointer == null){
  -            Object value = getNode();
  -            valuePointer = NodePointer.newChildNodePointer(this, getName(), value).getValuePointer();
  +    public NodePointer getImmediateValuePointer(){
  +        if (valuePointer == null) {
  +            Object value = getImmediateNode();
  +            valuePointer =
  +                NodePointer.newChildNodePointer(this, getName(), value);
           }
           return valuePointer;
       }
  
  
  
  1.8       +5 -5      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dom/DOMAttributePointer.java
  
  Index: DOMAttributePointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dom/DOMAttributePointer.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- DOMAttributePointer.java	20 Oct 2002 03:47:18 -0000	1.7
  +++ DOMAttributePointer.java	26 Nov 2002 01:20:07 -0000	1.8
  @@ -111,7 +111,7 @@
           return 1;
       }    
   
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           String value = attr.getValue();
           if (value == null){
               return null;
  
  
  
  1.12      +5 -5      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java
  
  Index: DOMNodePointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- DOMNodePointer.java	20 Oct 2002 03:44:52 -0000	1.11
  +++ DOMNodePointer.java	26 Nov 2002 01:20:07 -0000	1.12
  @@ -301,7 +301,7 @@
           return node;
       }
   
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           return node;
       }
   
  
  
  
  1.7       +5 -5      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dom/NamespacePointer.java
  
  Index: NamespacePointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dom/NamespacePointer.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- NamespacePointer.java	20 Oct 2002 03:47:18 -0000	1.6
  +++ NamespacePointer.java	26 Nov 2002 01:20:07 -0000	1.7
  @@ -104,7 +104,7 @@
           return 1;
       }    
   
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           return getNamespaceURI();
       }
   
  
  
  
  1.2       +7 -10     jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dynabeans/DynaBeanPointer.java
  
  Index: DynaBeanPointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dynabeans/DynaBeanPointer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DynaBeanPointer.java	20 Oct 2002 03:44:18 -0000	1.1
  +++ DynaBeanPointer.java	26 Nov 2002 01:20:07 -0000	1.2
  @@ -61,16 +61,13 @@
    */
   package org.apache.commons.jxpath.ri.model.dynabeans;
   
  -import java.beans.PropertyDescriptor;
   import java.util.Locale;
   
   import org.apache.commons.beanutils.DynaBean;
  -import org.apache.commons.jxpath.ri.model.beans.PropertyOwnerPointer;
  -import org.apache.commons.jxpath.ri.model.beans.PropertyPointer;
  -import org.apache.commons.jxpath.JXPathIntrospector;
   import org.apache.commons.jxpath.ri.QName;
   import org.apache.commons.jxpath.ri.model.NodePointer;
  -import org.apache.commons.jxpath.util.ValueUtils;
  +import org.apache.commons.jxpath.ri.model.beans.PropertyOwnerPointer;
  +import org.apache.commons.jxpath.ri.model.beans.PropertyPointer;
   
   
   /**
  @@ -114,7 +111,7 @@
           return dynaBean;
       }
   
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           return dynaBean;
       }
   
  
  
  
  1.2       +4 -5      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dynabeans/DynaBeanPointerFactory.java
  
  Index: DynaBeanPointerFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dynabeans/DynaBeanPointerFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DynaBeanPointerFactory.java	20 Oct 2002 03:44:18 -0000	1.1
  +++ DynaBeanPointerFactory.java	26 Nov 2002 01:20:07 -0000	1.2
  @@ -64,7 +64,6 @@
   import java.util.Locale;
   
   import org.apache.commons.beanutils.DynaBean;
  -import org.apache.commons.beanutils.DynaClass;
   import org.apache.commons.jxpath.ri.QName;
   import org.apache.commons.jxpath.ri.model.NodePointer;
   import org.apache.commons.jxpath.ri.model.NodePointerFactory;
  
  
  
  1.3       +149 -128  jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dynabeans/DynaBeanPropertyPointer.java
  
  Index: DynaBeanPropertyPointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/dynabeans/DynaBeanPropertyPointer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DynaBeanPropertyPointer.java	20 Oct 2002 03:47:18 -0000	1.2
  +++ DynaBeanPropertyPointer.java	26 Nov 2002 01:20:07 -0000	1.3
  @@ -67,14 +67,11 @@
   import org.apache.commons.beanutils.DynaClass;
   import org.apache.commons.beanutils.DynaProperty;
   import org.apache.commons.jxpath.AbstractFactory;
  -import org.apache.commons.jxpath.ri.model.beans.PropertyOwnerPointer;
   import org.apache.commons.jxpath.JXPathContext;
   import org.apache.commons.jxpath.JXPathException;
  -import org.apache.commons.jxpath.JXPathIntrospector;
   import org.apache.commons.jxpath.ri.QName;
  -import org.apache.commons.jxpath.ri.model.beans.PropertyPointer;
   import org.apache.commons.jxpath.ri.model.NodePointer;
  -import org.apache.commons.jxpath.util.TypeConverter;
  +import org.apache.commons.jxpath.ri.model.beans.PropertyPointer;
   import org.apache.commons.jxpath.util.TypeUtils;
   import org.apache.commons.jxpath.util.ValueUtils;
   
  @@ -197,7 +194,7 @@
        * property. If the property is not a collection, index should be zero
        * and the value will be the property itself.
        */
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           String name = getPropertyName();
           if (name.equals("*")){
               return null;
  @@ -265,118 +262,140 @@
       public NodePointer createChild(JXPathContext context,
               QName name, int index, Object value)
       {
  -        // Ignore the name passed to us, use our own data
  -        if (index == WHOLE_COLLECTION){
  -            setValue(index, value);
  -        }
  -        else if (isIndexedProperty()){
  -            dynaBean.set(getPropertyName(), index, convert(value, true));
  -        }
  -        else {
  -            Object collection = getBaseValue();
  -            if (collection == null){
  -                AbstractFactory factory = getAbstractFactory(context);
  -                if (!factory.createObject(
  -                        context, this, getBean(), getPropertyName(), 0)){
  -                    throw new JXPathException(
  -                        "Factory could not create an object for path: " +
  -                        asPath());
  -                }
  -                collection = getBaseValue();
  -            }
  -
  -            if (index < 0){
  -                throw new JXPathException("Index is less than 1: " + asPath());
  -            }
  -
  -            if (index >= getLength()){
  -                collection = ValueUtils.expandCollection(collection, index + 1);
  -                dynaBean.set(getPropertyName(), collection);
  -            }
  -
  -            ValueUtils.setValue(collection, index, value);
  -        }
  -        NodePointer ptr = (NodePointer)clone();
  -        ptr.setIndex(index);
  -        return ptr;
  +		// Ignore the name passed to us, use our own data
  +		if (index == WHOLE_COLLECTION) {
  +			setValue(index, value);
  +		}
  +		else if (isIndexedProperty()) {
  +			dynaBean.set(getPropertyName(), index, convert(value, true));
  +		}
  +		else {
  +			Object collection = getBaseValue();
  +			if (collection == null) {
  +				AbstractFactory factory = getAbstractFactory(context);
  +				if (!factory
  +					.createObject(
  +						context,
  +						this,
  +						getBean(),
  +						getPropertyName(),
  +						0)) {
  +					throw new JXPathException(
  +						"Factory could not create an object for path: "
  +							+ asPath());
  +				}
  +				collection = getBaseValue();
  +			}
  +
  +			if (index < 0) {
  +				throw new JXPathException("Index is less than 1: " + asPath());
  +			}
  +
  +			if (index >= getLength()) {
  +				collection = ValueUtils.expandCollection(collection, index + 1);
  +				dynaBean.set(getPropertyName(), collection);
  +			}
  +
  +			ValueUtils.setValue(collection, index, value);
  +		}
  +		NodePointer ptr = (NodePointer) clone();
  +		ptr.setIndex(index);
  +		return ptr;
       }
   
       public NodePointer createChild(JXPathContext context,
               QName name, int index)
       {
  -        if (isIndexedProperty()){
  -            AbstractFactory factory = getAbstractFactory(context);
  -            if (!factory.createObject(
  -                        context, this, dynaBean, getPropertyName(), index)){
  -                throw new JXPathException(
  -                    "Factory could not create an object for path: " + asPath());
  -            }
  -        }
  -        else {
  -            // Ignore the name passed to us, use our own data
  -            Object collection = getBaseValue();
  -            if (collection == null){
  -                AbstractFactory factory = getAbstractFactory(context);
  -                if (!factory.createObject(
  -                            context, this, dynaBean, getPropertyName(), index)){
  -                    throw new JXPathException(
  -                        "Factory could not create an object for path: " +
  -                        asPath());
  -                }
  -                collection = getBaseValue();
  -            }
  -
  -            if (index < 0){
  -                throw new JXPathException("Index is less than 1: " + asPath());
  -            }
  -
  -            if (index >= getLength()){
  -                collection = ValueUtils.expandCollection(collection, index + 1);
  -                dynaBean.set(getPropertyName(), collection);
  -            }
  -        }
  -
  -        DynaBeanPropertyPointer pointer = (DynaBeanPropertyPointer)this.clone();
  -        pointer.setIndex(index);
  -        return pointer;
  +		if (isIndexedProperty()) {
  +			AbstractFactory factory = getAbstractFactory(context);
  +			if (!factory
  +				.createObject(
  +					context,
  +					this,
  +					dynaBean,
  +					getPropertyName(),
  +					index)) {
  +				throw new JXPathException(
  +					"Factory could not create an object for path: " + asPath());
  +			}
  +		}
  +		else {
  +			// Ignore the name passed to us, use our own data
  +			Object collection = getBaseValue();
  +			if (collection == null) {
  +				AbstractFactory factory = getAbstractFactory(context);
  +				if (!factory
  +					.createObject(
  +						context,
  +						this,
  +						dynaBean,
  +						getPropertyName(),
  +						index)) {
  +					throw new JXPathException(
  +						"Factory could not create an object for path: "
  +							+ asPath());
  +				}
  +				collection = getBaseValue();
  +			}
  +
  +			if (index < 0) {
  +				throw new JXPathException("Index is less than 1: " + asPath());
  +			}
  +
  +			if (index >= getLength()) {
  +				collection = ValueUtils.expandCollection(collection, index + 1);
  +				dynaBean.set(getPropertyName(), collection);
  +			}
  +		}
  +
  +		DynaBeanPropertyPointer pointer =
  +			(DynaBeanPropertyPointer) this.clone();
  +		pointer.setIndex(index);
  +		return pointer;
       }
   
       public NodePointer createPath(JXPathContext context){
  -        if (getNode() == null){
  -            AbstractFactory factory = getAbstractFactory(context);
  -            int inx = (index == WHOLE_COLLECTION ? 0 : index);
  -            if (!factory.createObject(
  -                    context, this, dynaBean, getPropertyName(), inx)){
  -                throw new JXPathException(
  -                        "Factory could not create an object for path: " +
  -                        asPath());
  -            }
  -        }
  +		if (getNode() == null) {
  +			AbstractFactory factory = getAbstractFactory(context);
  +			int inx = (index == WHOLE_COLLECTION ? 0 : index);
  +			if (!factory
  +				.createObject(
  +					context,
  +					this,
  +					dynaBean,
  +					getPropertyName(),
  +					inx)) {
  +				throw new JXPathException(
  +					"Factory could not create an object for path: " + asPath());
  +			}
  +		}
           return this;
       }
   
       public void remove(){
  -        if (index == WHOLE_COLLECTION){
  -            dynaBean.set(getPropertyName(), null);
  -        }
  -        else if (isIndexedProperty()){
  -            dynaBean.set(getPropertyName(), index, null);
  -        }
  -        else if (isCollection()){
  -            Object collection = ValueUtils.remove(getBaseValue(), index);
  -            dynaBean.set(getPropertyName(), collection);
  -        }
  -        else if (index == 0){
  -            dynaBean.set(getPropertyName(), null);
  -        }
  +		if (index == WHOLE_COLLECTION) {
  +			dynaBean.set(getPropertyName(), null);
  +		}
  +		else if (isIndexedProperty()) {
  +			dynaBean.set(getPropertyName(), index, null);
  +		}
  +		else if (isCollection()) {
  +			Object collection = ValueUtils.remove(getBaseValue(), index);
  +			dynaBean.set(getPropertyName(), collection);
  +		}
  +		else if (index == 0) {
  +			dynaBean.set(getPropertyName(), null);
  +		}
       }
   
       private AbstractFactory getAbstractFactory(JXPathContext context){
  -        AbstractFactory factory = context.getFactory();
  -        if (factory == null){
  -            throw new JXPathException("Factory is not set on the JXPathContext - cannot create path: " + asPath());
  -        }
  -        return factory;
  +		AbstractFactory factory = context.getFactory();
  +		if (factory == null) {
  +			throw new JXPathException(
  +				"Factory is not set on the JXPathContext - cannot create path: "
  +					+ asPath());
  +		}
  +		return factory;
       }
   
       private void setValue(int index, Object value){
  @@ -394,27 +413,29 @@
   
   
       private Object convert(Object value, boolean element){
  -        DynaClass dynaClass = (DynaClass)dynaBean.getDynaClass();
  -        DynaProperty property =
  -                dynaClass.getDynaProperty(getPropertyName());
  -        Class type = property.getType();
  -        if (element){
  -            if (type.isArray()){
  -                type = type.getComponentType();
  -            }
  -            else {
  -                return value;       // No need to convert
  -            }
  -        }
  -
  -        try {
  -            return TypeUtils.convert(value, type);
  -        }
  -        catch (Exception ex){
  -            ex.printStackTrace();
  -            throw new JXPathException("Cannot convert value of class " +
  -                    (value == null ? "null" : value.getClass().getName()) +
  -                    " to type " + type, ex);
  -        }
  +		DynaClass dynaClass = (DynaClass) dynaBean.getDynaClass();
  +		DynaProperty property = dynaClass.getDynaProperty(getPropertyName());
  +		Class type = property.getType();
  +		if (element) {
  +			if (type.isArray()) {
  +				type = type.getComponentType();
  +			}
  +			else {
  +				return value; // No need to convert
  +			}
  +		}
  +
  +		try {
  +			return TypeUtils.convert(value, type);
  +		}
  +		catch (Exception ex) {
  +			ex.printStackTrace();
  +			throw new JXPathException(
  +				"Cannot convert value of class "
  +					+ (value == null ? "null" : value.getClass().getName())
  +					+ " to type "
  +					+ type,
  +				ex);
  +		}
       }
   }
  
  
  
  1.3       +17 -21    jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMAttributePointer.java
  
  Index: JDOMAttributePointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMAttributePointer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JDOMAttributePointer.java	20 Oct 2002 03:47:18 -0000	1.2
  +++ JDOMAttributePointer.java	26 Nov 2002 01:20:07 -0000	1.3
  @@ -61,10 +61,7 @@
    */
   package org.apache.commons.jxpath.ri.model.jdom;
   
  -import org.apache.commons.jxpath.ri.Compiler;
   import org.apache.commons.jxpath.ri.QName;
  -import org.apache.commons.jxpath.ri.compiler.NodeTest;
  -import org.apache.commons.jxpath.ri.compiler.NodeTypeTest;
   import org.apache.commons.jxpath.ri.model.NodePointer;
   import org.apache.commons.jxpath.util.TypeUtils;
   import org.jdom.Attribute;
  @@ -83,9 +80,11 @@
           this.attr = attr;
       }
   
  -    public QName getName(){
  -        return new QName(JDOMNodePointer.getPrefix(attr), JDOMNodePointer.getLocalName(attr));
  -    }
  +	public QName getName() {
  +		return new QName(
  +			JDOMNodePointer.getPrefix(attr),
  +			JDOMNodePointer.getLocalName(attr));
  +	}
   
       public QName getExpandedName(){
           return new QName(getNamespaceURI(),  attr.getName());
  @@ -111,7 +110,7 @@
           return 1;
       }    
   
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           String value = attr.getValue();
           if (value == null){
               return null;
  @@ -127,12 +126,6 @@
           return true;
       }
   
  -//    public boolean testNode(NodeTest nodeTest){
  -//        return nodeTest == null ||
  -//                ((nodeTest instanceof NodeTypeTest) &&
  -//                    ((NodeTypeTest)nodeTest).getNodeType() == Compiler.NODE_TYPE_NODE);
  -//    }
  -
       /**
        * Sets the value of this attribute.
        */
  @@ -177,8 +170,11 @@
           return attr == other.attr;
       }
   
  -    public int compareChildNodePointers(NodePointer pointer1, NodePointer pointer2){
  -        // Won't happen - attributes don't have children
  -        return 0;
  -    }
  +	public int compareChildNodePointers(
  +    		NodePointer pointer1,
  +    		NodePointer pointer2) 
  +    {
  +		// Won't happen - attributes don't have children
  +		return 0;
  +	}
   }
  
  
  
  1.2       +6 -24     jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNamespaceIterator.java
  
  Index: JDOMNamespaceIterator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNamespaceIterator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- JDOMNamespaceIterator.java	26 Aug 2002 22:29:48 -0000	1.1
  +++ JDOMNamespaceIterator.java	26 Nov 2002 01:20:07 -0000	1.2
  @@ -61,13 +61,12 @@
    */
   package org.apache.commons.jxpath.ri.model.jdom;
   
  -import java.util.ArrayList;
  -import java.util.List;
   import java.util.*;
   
   import org.apache.commons.jxpath.ri.model.NodeIterator;
   import org.apache.commons.jxpath.ri.model.NodePointer;
  -import org.jdom.*;
  +import org.jdom.Element;
  +import org.jdom.Namespace;
   
   /**
    * An iterator of namespaces of a DOM Node.
  @@ -88,22 +87,10 @@
               namespaces = new ArrayList();
               prefixes = new HashSet();
               collectNamespaces((Element)parent.getNode());
  -//            System.err.println("NAMESPACES: " + namespaces);
           }
       }
   
       private void collectNamespaces(Element element){
  -//            NamedNodeMap map = node.getAttributes();
  -//            int count = map.getLength();
  -//            for (int i = 0; i < count; i++){
  -//                Attr attr = (Attr)map.item(i);
  -//                String prefix = DOMNodePointer.getPrefix(attr);
  -//                String name = DOMNodePointer.getLocalName(attr);
  -//                if ((prefix != null && prefix.equals("xmlns")) ||
  -//                        (prefix == null && name.equals("xmlns"))){
  -//                    attributes.add(attr);
  -//                }
  -//            }
           Namespace ns = element.getNamespace();
           if (ns != null && !prefixes.contains(ns.getPrefix())){
               namespaces.add(ns);
  @@ -134,12 +121,7 @@
           if (index < 0){
               index = 0;
           }
  -        String prefix = "";
           Namespace ns = (Namespace)namespaces.get(index);
  -//        String name = attr.getPrefix();
  -//        if (name != null && name.equals("xmlns")){
  -//            prefix = JDOMNodePointer.getLocalName(attr);
  -//        }
           return new JDOMNamespacePointer(parent, ns.getPrefix(), ns.getURI());
       }
   
  
  
  
  1.3       +21 -24    jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNamespacePointer.java
  
  Index: JDOMNamespacePointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNamespacePointer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JDOMNamespacePointer.java	20 Oct 2002 03:47:18 -0000	1.2
  +++ JDOMNamespacePointer.java	26 Nov 2002 01:20:07 -0000	1.3
  @@ -61,10 +61,7 @@
    */
   package org.apache.commons.jxpath.ri.model.jdom;
   
  -import org.apache.commons.jxpath.ri.Compiler;
   import org.apache.commons.jxpath.ri.QName;
  -import org.apache.commons.jxpath.ri.compiler.NodeTest;
  -import org.apache.commons.jxpath.ri.compiler.NodeTypeTest;
   import org.apache.commons.jxpath.ri.model.NodePointer;
   
   /**
  @@ -82,11 +79,15 @@
           this.prefix = prefix;
       }
   
  -    public JDOMNamespacePointer(NodePointer parent, String prefix, String namespaceURI){
  -        super(parent);
  -        this.prefix = prefix;
  -        this.namespaceURI = namespaceURI;
  -    }
  +	public JDOMNamespacePointer(
  +    		NodePointer parent,
  +    		String prefix,
  +    		String namespaceURI) 
  +    {
  +		super(parent);
  +		this.prefix = prefix;
  +		this.namespaceURI = namespaceURI;
  +	}
   
       public QName getName(){
           return new QName(getNamespaceURI(), prefix);
  @@ -104,7 +105,7 @@
           return 1;
       }    
   
  -    public Object getNode(){
  +    public Object getImmediateNode(){
           return getNamespaceURI();
       }
   
  @@ -126,13 +127,6 @@
           throw new UnsupportedOperationException("Cannot modify a namespace");
       }
   
  -    /*
  -    public boolean testNode(NodeTest nodeTest){
  -        return nodeTest == null ||
  -                ((nodeTest instanceof NodeTypeTest) &&
  -                    ((NodeTypeTest)nodeTest).getNodeType() == Compiler.NODE_TYPE_NODE);
  -    }
  -*/
       public String asPath(){
           StringBuffer buffer = new StringBuffer();
           if (parent != null){
  @@ -164,8 +158,11 @@
           return prefix.equals(other.prefix);
       }
   
  -    public int compareChildNodePointers(NodePointer pointer1, NodePointer pointer2){
  -        // Won't happen - namespaces don't have children
  -        return 0;
  -    }
  +	public int compareChildNodePointers(
  +		NodePointer pointer1,
  +		NodePointer pointer2) 
  +    {
  +		// Won't happen - namespaces don't have children
  +		return 0;
  +	}
    }
  
  
  
  1.4       +61 -70    jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java
  
  Index: JDOMNodePointer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JDOMNodePointer.java	20 Oct 2002 03:44:51 -0000	1.3
  +++ JDOMNodePointer.java	26 Nov 2002 01:20:07 -0000	1.4
  @@ -61,7 +61,6 @@
    */
   package org.apache.commons.jxpath.ri.model.jdom;
   
  -import java.util.ArrayList;
   import java.util.List;
   import java.util.Locale;
   import java.util.Map;
  @@ -71,21 +70,11 @@
   import org.apache.commons.jxpath.JXPathException;
   import org.apache.commons.jxpath.ri.Compiler;
   import org.apache.commons.jxpath.ri.QName;
  -import org.apache.commons.jxpath.ri.compiler.NodeNameTest;
  -import org.apache.commons.jxpath.ri.compiler.NodeTest;
  -import org.apache.commons.jxpath.ri.compiler.NodeTypeTest;
  -import org.apache.commons.jxpath.ri.compiler.ProcessingInstructionTest;
  +import org.apache.commons.jxpath.ri.compiler.*;
   import org.apache.commons.jxpath.ri.model.NodeIterator;
   import org.apache.commons.jxpath.ri.model.NodePointer;
   import org.apache.commons.jxpath.util.TypeUtils;
  -import org.jdom.Attribute;
  -import org.jdom.CDATA;
  -import org.jdom.Comment;
  -import org.jdom.Document;
  -import org.jdom.Element;
  -import org.jdom.Namespace;
  -import org.jdom.ProcessingInstruction;
  -import org.jdom.Text;
  +import org.jdom.*;
   
   /**
    * A Pointer that points to a DOM node.
  @@ -263,7 +252,7 @@
       /**
        * @see org.apache.commons.jxpath.ri.model.NodePointer#getNode()
        */
  -    public Object getNode() {
  +    public Object getImmediateNode() {
           return node;
       }
   
  @@ -580,31 +569,32 @@
       }
   
       public NodePointer createAttribute(JXPathContext context, QName name){
  -        if (!(node instanceof Element)){
  -            return super.createAttribute(context, name);
  -        }
  -
  -        Element element = (Element)node;
  -        String prefix = name.getPrefix();
  -        if (prefix != null){
  -            Namespace ns = element.getNamespace(prefix);
  -            if (ns == null){
  -                throw new JXPathException("Unknown namespace prefix: " + prefix);
  -            }
  -            Attribute attr = element.getAttribute(name.getName(), ns);
  -            if (attr == null){
  -                element.setAttribute(name.getName(), "", ns);
  -            }
  -        }
  -        else {
  -            Attribute attr = element.getAttribute(name.getName());
  -            if (attr == null){
  -                element.setAttribute(name.getName(), "");
  -            }
  -        }
  -        NodeIterator it = attributeIterator(name);
  -        it.setPosition(1);
  -        return it.getNodePointer();
  +		if (!(node instanceof Element)) {
  +			return super.createAttribute(context, name);
  +		}
  +
  +		Element element = (Element) node;
  +		String prefix = name.getPrefix();
  +		if (prefix != null) {
  +			Namespace ns = element.getNamespace(prefix);
  +			if (ns == null) {
  +				throw new JXPathException(
  +					"Unknown namespace prefix: " + prefix);
  +			}
  +			Attribute attr = element.getAttribute(name.getName(), ns);
  +			if (attr == null) {
  +				element.setAttribute(name.getName(), "", ns);
  +			}
  +		}
  +		else {
  +			Attribute attr = element.getAttribute(name.getName());
  +			if (attr == null) {
  +				element.setAttribute(name.getName(), "");
  +			}
  +		}
  +		NodeIterator it = attributeIterator(name);
  +		it.setPosition(1);
  +		return it.getNodePointer();
       }
   
       public void remove(){
  @@ -723,24 +713,25 @@
       }
   
       private int getRelativePositionOfPI(String target){
  -        Element parent = ((ProcessingInstruction)node).getParent();
  -        if (parent == null){
  -            return 1;
  -        }
  -        List children = parent.getContent();
  -        int count = 0;
  -        for (int i = 0; i < children.size(); i++){
  -            Object child = children.get(i);
  -            if (child instanceof ProcessingInstruction &&
  -                  (target == null ||
  -                   target.equals(((ProcessingInstruction)child).getTarget()))){
  -                count++;
  -            }
  -            if (child == node){
  -                break;
  -            }
  -        }
  -        return count;
  +		Element parent = ((ProcessingInstruction) node).getParent();
  +		if (parent == null) {
  +			return 1;
  +		}
  +		List children = parent.getContent();
  +		int count = 0;
  +		for (int i = 0; i < children.size(); i++) {
  +			Object child = children.get(i);
  +			if (child instanceof ProcessingInstruction
  +				&& (target == null
  +					|| target.equals(
  +						((ProcessingInstruction) child).getTarget()))) {
  +				count++;
  +			}
  +			if (child == node) {
  +				break;
  +			}
  +		}
  +		return count;
       }
   
       public int hashCode(){
  @@ -760,13 +751,13 @@
           return node == other.node;
       }
   
  -    private AbstractFactory getAbstractFactory(JXPathContext context){
  -        AbstractFactory factory = context.getFactory();
  -        if (factory == null){
  -            throw new JXPathException(
  -                    "Factory is not set on the JXPathContext - " +
  -                    "cannot create path: " + asPath());
  -        }
  -        return factory;
  -    }
  +	private AbstractFactory getAbstractFactory(JXPathContext context) {
  +		AbstractFactory factory = context.getFactory();
  +		if (factory == null) {
  +			throw new JXPathException(
  +				"Factory is not set on the JXPathContext - cannot create path: "
  +					+ asPath());
  +		}
  +		return factory;
  +	}
   }
  
  
  
  1.2       +8 -7      jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/util/MethodLookupUtils.java
  
  Index: MethodLookupUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/util/MethodLookupUtils.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MethodLookupUtils.java	12 Jun 2002 21:02:05 -0000	1.1
  +++ MethodLookupUtils.java	26 Nov 2002 01:20:07 -0000	1.2
  @@ -61,12 +61,13 @@
    */
   package org.apache.commons.jxpath.util;
   
  -import java.lang.reflect.*;
  -import java.util.*;
  +import java.lang.reflect.Constructor;
  +import java.lang.reflect.Method;
  +import java.lang.reflect.Modifier;
  +import java.util.Arrays;
   
   import org.apache.commons.jxpath.ExpressionContext;
   import org.apache.commons.jxpath.JXPathException;
  -import org.apache.commons.jxpath.Pointer;
   
   /**
    * Method lookup utilities, which find static and non-static methods as well
  
  
  
  1.9       +4 -11     jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/util/TypeUtils.java
  
  Index: TypeUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/util/TypeUtils.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- TypeUtils.java	16 Jun 2002 03:22:21 -0000	1.8
  +++ TypeUtils.java	26 Nov 2002 01:20:07 -0000	1.9
  @@ -61,13 +61,6 @@
    */
   package org.apache.commons.jxpath.util;
   
  -import java.lang.reflect.*;
  -import java.util.*;
  -
  -import org.apache.commons.jxpath.ExpressionContext;
  -import org.apache.commons.jxpath.JXPathException;
  -import org.apache.commons.jxpath.Pointer;
  -
   /**
    * Global type conversion utilities.
    *
  
  
  
  1.10      +42 -13    jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/util/ValueUtils.java
  
  Index: ValueUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/java/org/apache/commons/jxpath/util/ValueUtils.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ValueUtils.java	20 Oct 2002 03:43:55 -0000	1.9
  +++ ValueUtils.java	26 Nov 2002 01:20:07 -0000	1.10
  @@ -63,11 +63,13 @@
   
   import java.beans.IndexedPropertyDescriptor;
   import java.beans.PropertyDescriptor;
  -import java.lang.reflect.*;
  +import java.lang.reflect.Array;
  +import java.lang.reflect.Method;
  +import java.lang.reflect.Modifier;
   import java.util.*;
   
  -import org.apache.commons.jxpath.JXPathException;
   import org.apache.commons.jxpath.DynamicPropertyHandler;
  +import org.apache.commons.jxpath.JXPathException;
   
   /**
    * Collection and property access utilities.
  @@ -93,6 +95,35 @@
           }
           return false;
       }
  +    
  +    /**
  +     * Returns 1 if the type is a collection, 
  +     * -1 if it is definitely not
  +     * and 0 if it may be a collection in some cases.
  +     */
  +    public static int getCollectionHint(Class clazz){
  +        if (clazz.isArray()){
  +            return 1;
  +        }
  +        
  +        if (Collection.class.isAssignableFrom(clazz)){
  +            return 1;
  +        }
  +        
  +        if (clazz.isPrimitive()){
  +            return -1;
  +        }
  +        
  +        if (clazz.isInterface()){
  +            return 0;
  +        }
  +        
  +        if (Modifier.isFinal(clazz.getModifiers())){
  +            return -1;
  +        }
  +                
  +        return 0;
  +    }
   
       /**
        * Returns the length of the supplied collection. If the supplied object
  @@ -336,7 +367,6 @@
       public static Object getValue(Object bean,
               PropertyDescriptor propertyDescriptor, int index){
           if (propertyDescriptor instanceof IndexedPropertyDescriptor){
  -            Object value;
               try {
                   IndexedPropertyDescriptor ipd =
                       (IndexedPropertyDescriptor)propertyDescriptor;
  @@ -448,12 +478,11 @@
           }
   
           // Check the implemented interfaces and subinterfaces
  -        String methodName = method.getName();
  -        Class[] parameterTypes = method.getParameterTypes();
  -        method =
  -            getAccessibleMethodFromInterfaceNest(clazz,
  -                                                 method.getName(),
  -                                                 method.getParameterTypes());
  +		method =
  +			getAccessibleMethodFromInterfaceNest(
  +				clazz,
  +				method.getName(),
  +				method.getParameterTypes());
           return (method);
       }
   
  
  
  
  1.30      +7 -92     jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/JXPathTestCase.java
  
  Index: JXPathTestCase.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/JXPathTestCase.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- JXPathTestCase.java	20 Oct 2002 03:48:21 -0000	1.29
  +++ JXPathTestCase.java	26 Nov 2002 01:20:08 -0000	1.30
  @@ -62,26 +62,11 @@
   
   package org.apache.commons.jxpath;
   
  -import java.lang.reflect.InvocationTargetException;
  +import java.util.*;
   
  -import junit.framework.Test;
   import junit.framework.TestCase;
  -import junit.framework.TestSuite;
   
  -import org.w3c.dom.*;
  -import java.util.*;
  -import java.lang.reflect.*;
  -import org.apache.commons.jxpath.*;
  -import org.apache.commons.jxpath.util.*;
  -import org.apache.commons.jxpath.ri.*;
  -import org.apache.commons.jxpath.ri.parser.*;
  -import org.apache.commons.jxpath.ri.model.*;
  -import org.apache.commons.jxpath.ri.model.beans.*;
  -import org.apache.commons.jxpath.ri.axes.*;
  -import org.apache.commons.jxpath.ri.compiler.*;
  -import org.apache.commons.jxpath.ri.compiler.Expression;
  -import org.apache.commons.jxpath.xml.*;
  -import java.beans.*;
  +import org.apache.commons.jxpath.ri.model.NodePointer;
   
   /**
    * Abstract superclass for various JXPath tests.
  @@ -101,77 +86,7 @@
       {
           super(name);
       }
  -/*
  -    protected void testXPaths(JXPathContext ctx, XPathTest xpath_tests[])
  -            throws Exception
  -    {
  -        Exception exception = null;
  -        for  (int i=0; i < xpath_tests.length; i++) {
  -            try {
  -                Object actual;
  -                // System.err.println("XPATH: " + xpath_tests[i].xpath);
  -                if (xpath_tests[i].path){
  -                    if (xpath_tests[i].eval){
  -                        Iterator it = ctx.iteratePointers(xpath_tests[i].xpath);
  -                        List paths = new ArrayList();
  -                        while (it.hasNext()){
  -                            paths.add(((Pointer)it.next()).asPath());
  -                        }
  -                        actual = paths;
  -                    }
  -                    else {
  -                        ctx.setLenient(xpath_tests[i].lenient);
  -                        actual = ctx.getPointer(xpath_tests[i].xpath).asPath();
  -                    }
  -                }
  -                else {
  -                    if (xpath_tests[i].eval){
  -                        ArrayList list = new ArrayList();
  -                        Iterator it = ctx.iterate(xpath_tests[i].xpath);
  -                        while (it.hasNext()){
  -                            list.add(it.next());
  -                        }
  -                        actual = list;
  -                    }
  -                    else {
  -                        ctx.setLenient(xpath_tests[i].lenient);
  -                        actual = ctx.getValue(xpath_tests[i].xpath);
  -                        ctx.setLenient(false);
  -                    }
  -                }
  -                assertEquals("Evaluating <" + xpath_tests[i].xpath + ">",
  -                        xpath_tests[i].expected, actual);
  -            }
  -            catch (Exception ex){
  -                System.err.println("Exception during <" +
  -                    xpath_tests[i].xpath + ">");
  -                ex.printStackTrace();
  -                exception = ex;
  -            }
  -            if (exception != null){
  -                throw exception;
  -            }
  -        }
  -
  -        // Make sure that location paths are properly constructed
  -        for (int i=0; i < xpath_tests.length; i++) {
  -            try {
  -                if (!xpath_tests[i].path && !xpath_tests[i].eval){
  -                    Pointer ptr = ctx.getPointer(xpath_tests[i].xpath);
  -                    Pointer test = ctx.getPointer(ptr.asPath());
  -                    assertEquals(
  -                        "Testing pointer for <" + xpath_tests[i].xpath + ">",
  -                        ptr.asPath(), test.asPath());
  -                }
  -            }
  -            catch (Exception ex){
  -                System.err.println("Exception during pointer test <" +
  -                        xpath_tests[i].xpath + ">");
  -                ex.printStackTrace();
  -            }
  -        }
  -    }
  -*/
  +    
       protected void assertXPathValue(JXPathContext ctx,
                   String xpath, Object expected)
       {
  
  
  
  1.2       +3 -4      jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/TestNull.java
  
  Index: TestNull.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/TestNull.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestNull.java	23 Aug 2001 00:47:02 -0000	1.1
  +++ TestNull.java	26 Nov 2002 01:20:08 -0000	1.2
  @@ -62,7 +62,6 @@
   
   package org.apache.commons.jxpath;
   
  -import java.util.*;
   
   /**
    * General purpose test bean for JUnit tests for the "jxpath" component.
  
  
  
  1.3       +175 -128  jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/axes/SimplePathInterpreterTest.java
  
  Index: SimplePathInterpreterTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/axes/SimplePathInterpreterTest.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SimplePathInterpreterTest.java	20 Oct 2002 03:48:22 -0000	1.2
  +++ SimplePathInterpreterTest.java	26 Nov 2002 01:20:08 -0000	1.3
  @@ -55,150 +55,157 @@
   
       public void test_doStep_noPredicates_propertyOwner(){
           // Existing scalar property
  -        testValueAndPointer("/int",
  +        assertValueAndPointer("/int",
                   new Integer(1),
                   "/int",
  +                "Bb",
                   "BbB");
   
           // self::
  -        testValueAndPointer("/./int",
  +        assertValueAndPointer("/./int",
                   new Integer(1),
                   "/int",
  +                "Bb",
                   "BbB");
   
           // Missing property
  -        testNullPointer("/foo",
  +        assertNullPointer("/foo",
                   "/foo",
  -                "BnN");
  +                "Bn");
   
           // existingProperty/existingScalarProperty
  -        testValueAndPointer("/nestedBean/int",
  +        assertValueAndPointer("/nestedBean/int",
                   new Integer(1),
                   "/nestedBean/int",
  +                "BbBb",
                   "BbBbB");
   
           // existingProperty/collectionProperty
  -        testValueAndPointer("/nestedBean/strings",
  +        assertValueAndPointer("/nestedBean/strings",
                   bean.getNestedBean().getStrings(),
                   "/nestedBean/strings",
  +                "BbBb",
                   "BbBbC");
   
           // existingProperty/missingProperty
  -        testNullPointer("/nestedBean/foo",
  +        assertNullPointer("/nestedBean/foo",
                   "/nestedBean/foo",
  -                "BbBnN");
  +                "BbBn");
   
           // map/missingProperty
  -        testNullPointer("/map/foo",
  +        assertNullPointer("/map/foo",
                   "/map[@name='foo']",
  -                "BbDdN");
  +                "BbDd");
   
           // Existing property by search in collection
  -        testValueAndPointer("/list/int",
  +        assertValueAndPointer("/list/int",
                   new Integer(1),
                   "/list[3]/int",
  +                "BbBb",
                   "BbBbB");
   
           // Missing property by search in collection
  -        testNullPointer("/list/foo",
  +        assertNullPointer("/list/foo",
                   "/list[1]/foo",
  -                "BbBnN");
  +                "BbBn");
   
           // existingProperty/missingProperty/missingProperty
  -        testNullPointer("/nestedBean/foo/bar",
  +        assertNullPointer("/nestedBean/foo/bar",
                   "/nestedBean/foo/bar",
  -                "BbBnNnN");
  +                "BbBnNn");
   
           // collection/existingProperty/missingProperty
  -        testNullPointer("/list/int/bar",
  +        assertNullPointer("/list/int/bar",
                   "/list[3]/int/bar",
  -                "BbBbBnN");
  +                "BbBbBn");
   
           // collectionProperty/missingProperty/missingProperty
  -        testNullPointer("/list/foo/bar",
  +        assertNullPointer("/list/foo/bar",
                   "/list[1]/foo/bar",
  -                "BbBnNnN");
  +                "BbBnNn");
   
           // map/missingProperty/anotherStep
  -        testNullPointer("/map/foo/bar",
  +        assertNullPointer("/map/foo/bar",
                   "/map[@name='foo']/bar",
  -                "BbDdNnN");
  +                "BbDdNn");
   
           // Existing dynamic property
  -        testValueAndPointer("/map/Key1",
  +        assertValueAndPointer("/map/Key1",
                   "Value 1",
                   "/map[@name='Key1']",
  +                "BbDd",
                   "BbDdB");
   
           // collectionProperty
  -        testValueAndPointer("/integers",
  +        assertValueAndPointer("/integers",
                   bean.getIntegers(),
                   "/integers",
  +                "Bb",
                   "BbC");
       }
   
       public void test_doStep_noPredicates_standard(){
           // Existing DOM node
  -        testValueAndPointer("/vendor/location/address/city",
  +        assertValueAndPointer("/vendor/location/address/city",
                   "Fruit Market",
                   "/vendor/location[2]/address[1]/city[1]",
                   "BbMMMM");
   
           // Missing DOM node
  -        testNullPointer("/vendor/location/address/pity",
  +        assertNullPointer("/vendor/location/address/pity",
                   "/vendor/location[1]/address[1]/pity",
  -                "BbMMMnN");
  +                "BbMMMn");
   
           // Missing DOM node inside a missing element
  -        testNullPointer("/vendor/location/address/itty/bitty",
  +        assertNullPointer("/vendor/location/address/itty/bitty",
                   "/vendor/location[1]/address[1]/itty/bitty",
  -                "BbMMMnNnN");
  +                "BbMMMnNn");
   
           // Missing DOM node by search for the best match
  -        testNullPointer("/vendor/location/address/city/pretty",
  +        assertNullPointer("/vendor/location/address/city/pretty",
                   "/vendor/location[2]/address[1]/city[1]/pretty",
  -                "BbMMMMnN");
  +                "BbMMMMn");
       }
   
       public void test_doStep_predicates_propertyOwner(){
           // missingProperty[@name=foo]
  -        testNullPointer("/foo[@name='foo']",
  +        assertNullPointer("/foo[@name='foo']",
                   "/foo[@name='foo']",
  -                "BnNnN");
  +                "BnNn");
   
           // missingProperty[index]
  -        testNullPointer("/foo[3]",
  +        assertNullPointer("/foo[3]",
                   "/foo[3]",
  -                "BnN");
  +                "Bn");
       }
   
       public void test_doStep_predicates_standard(){
           // Looking for an actual XML attribute called "name"
           // nodeProperty/name[@name=value]
  -        testValueAndPointer("/vendor/contact[@name='jack']",
  +        assertValueAndPointer("/vendor/contact[@name='jack']",
                   "Jack",
                   "/vendor/contact[2]",
                   "BbMM");
   
           // Indexing in XML
  -        testValueAndPointer("/vendor/contact[2]",
  +        assertValueAndPointer("/vendor/contact[2]",
                   "Jack",
                   "/vendor/contact[2]",
                   "BbMM");
   
           // Indexing in XML, no result
  -        testNullPointer("/vendor/contact[5]",
  +        assertNullPointer("/vendor/contact[5]",
                   "/vendor/contact[5]",
  -                "BbMnN");
  +                "BbMn");
   
           // Combination of search by name and indexing in XML
  -        testValueAndPointer("/vendor/contact[@name='jack'][2]",
  +        assertValueAndPointer("/vendor/contact[@name='jack'][2]",
                   "Jack Black",
                   "/vendor/contact[4]",
                   "BbMM");
   
           // Combination of search by name and indexing in XML
  -        testValueAndPointer("/vendor/contact[@name='jack'][2]",
  +        assertValueAndPointer("/vendor/contact[@name='jack'][2]",
                   "Jack Black",
                   "/vendor/contact[4]",
                   "BbMM");
  @@ -206,126 +213,135 @@
   
       public void test_doPredicate_name(){
           // existingProperty[@name=existingProperty]
  -        testValueAndPointer("/nestedBean[@name='int']",
  +        assertValueAndPointer("/nestedBean[@name='int']",
                   new Integer(1),
                   "/nestedBean/int",
  +                "BbBb",
                   "BbBbB");
   
           // /self::node()[@name=existingProperty]
  -        testValueAndPointer("/.[@name='int']",
  +        assertValueAndPointer("/.[@name='int']",
                   new Integer(1),
                   "/int",
  +                "Bb",
                   "BbB");
   
           // dynamicProperty[@name=existingProperty]
  -        testValueAndPointer("/map[@name='Key1']",
  +        assertValueAndPointer("/map[@name='Key1']",
                   "Value 1",
                   "/map[@name='Key1']",
  +                "BbDd",
                   "BbDdB");
   
           // existingProperty[@name=collectionProperty]
  -        testValueAndPointer("/nestedBean[@name='strings']",
  +        assertValueAndPointer("/nestedBean[@name='strings']",
                   bean.getNestedBean().getStrings(),
                   "/nestedBean/strings",
  +                "BbBb",
                   "BbBbC");
   
           // existingProperty[@name=missingProperty]
  -        testNullPointer("/nestedBean[@name='foo']",
  +        assertNullPointer("/nestedBean[@name='foo']",
                   "/nestedBean[@name='foo']",
  -                "BbBnN");
  +                "BbBn");
   
           // map[@name=collectionProperty]
  -        testValueAndPointer("/map[@name='Key3']",
  +        assertValueAndPointer("/map[@name='Key3']",
                   bean.getMap().get("Key3"),
                   "/map[@name='Key3']",
  +                "BbDd",
                   "BbDdC");
  -
  +                
           // map[@name=missingProperty]
  -        testNullPointer("/map[@name='foo']",
  +        assertNullPointer("/map[@name='foo']",
                   "/map[@name='foo']",
  -                "BbDdN");
  +                "BbDd");
   
           // collectionProperty[@name=...] (find node)
  -        testValueAndPointer("/list[@name='fruitco']",
  +        assertValueAndPointer("/list[@name='fruitco']",
                   context.getValue("/vendor"),
                   "/list[5]",
                   "BbCM");
   
           // collectionProperty[@name=...] (find map entry)
  -        testValueAndPointer("/map/Key3[@name='key']/name",
  +        assertValueAndPointer("/map/Key3[@name='key']/name",
                   "Name 9",
                   "/map[@name='Key3'][4][@name='key']/name",
  +                "BbDdCDdBb",
                   "BbDdCDdBbB");
   
           // map/collectionProperty[@name...]
  -        testValueAndPointer("map/Key3[@name='fruitco']",
  +        assertValueAndPointer("map/Key3[@name='fruitco']",
                   context.getValue("/vendor"),
                   "/map[@name='Key3'][3]",
                   "BbDdCM");
   
           // Bean property -> DOM Node, name match
  -        testValueAndPointer("/vendor[@name='fruitco']",
  +        assertValueAndPointer("/vendor[@name='fruitco']",
                   context.getValue("/vendor"),
                   "/vendor",
                   "BbM");
   
           // Bean property -> DOM Node, name mismatch
  -        testNullPointer("/vendor[@name='foo']",
  +        assertNullPointer("/vendor[@name='foo']",
                   "/vendor[@name='foo']",
  -                "BbMnN");
  +                "BbMn");
   
  -        testNullPointer("/vendor[@name='foo'][3]",
  +        assertNullPointer("/vendor[@name='foo'][3]",
                   "/vendor[@name='foo'][3]",
  -                "BbMnN");
  +                "BbMn");
   
           // existingProperty(bean)[@name=missingProperty]/anotherStep
  -        testNullPointer("/nestedBean[@name='foo']/bar",
  +        assertNullPointer("/nestedBean[@name='foo']/bar",
                   "/nestedBean[@name='foo']/bar",
  -                "BbBnNnN");
  +                "BbBnNn");
   
           // map[@name=missingProperty]/anotherStep
  -        testNullPointer("/map[@name='foo']/bar",
  +        assertNullPointer("/map[@name='foo']/bar",
                   "/map[@name='foo']/bar",
  -                "BbDdNnN");
  +                "BbDdNn");
   
           // existingProperty(node)[@name=missingProperty]/anotherStep
  -        testNullPointer("/vendor[@name='foo']/bar",
  +        assertNullPointer("/vendor[@name='foo']/bar",
                   "/vendor[@name='foo']/bar",
  -                "BbMnNnN");
  +                "BbMnNn");
   
           // existingProperty(node)[@name=missingProperty][index]/anotherStep
  -        testNullPointer("/vendor[@name='foo'][3]/bar",
  +        assertNullPointer("/vendor[@name='foo'][3]/bar",
                   "/vendor[@name='foo'][3]/bar",
  -                "BbMnNnN");
  +                "BbMnNn");
   
           // Existing dynamic property + existing property
  -        testValueAndPointer("/map[@name='Key2'][@name='name']",
  +        assertValueAndPointer("/map[@name='Key2'][@name='name']",
                   "Name 6",
                   "/map[@name='Key2']/name",
  +                "BbDdBb",
                   "BbDdBbB");
   
           // Existing dynamic property + existing property + index
  -        testValueAndPointer("/map[@name='Key2'][@name='strings'][2]",
  +        assertValueAndPointer("/map[@name='Key2'][@name='strings'][2]",
                   "String 2",
                   "/map[@name='Key2']/strings[2]",
  +                "BbDdBb",
                   "BbDdBbB");
   
           // bean/map/map/property
  -        testValueAndPointer("map[@name='Key5'][@name='key']/name",
  +        assertValueAndPointer("map[@name='Key5'][@name='key']/name",
                   "Name 9",
                   "/map[@name='Key5'][@name='key']/name",
  +                "BbDdDdBb",
                   "BbDdDdBbB");
   
  -        testNullPointer("map[@name='Key2'][@name='foo']",
  +        assertNullPointer("map[@name='Key2'][@name='foo']",
                   "/map[@name='Key2'][@name='foo']",
  -                "BbDdBnN");
  +                "BbDdBn");
   
  -        testNullPointer("map[@name='Key2'][@name='foo'][@name='bar']",
  +        assertNullPointer("map[@name='Key2'][@name='foo'][@name='bar']",
                   "/map[@name='Key2'][@name='foo'][@name='bar']",
  -                "BbDdBnNnN");
  +                "BbDdBnNn");
   
           // bean/map/node
  -        testValueAndPointer("map[@name='Key4'][@name='fruitco']",
  +        assertValueAndPointer("map[@name='Key4'][@name='fruitco']",
                   context.getValue("/vendor"),
                   "/map[@name='Key4']",
                   "BbDdM");
  @@ -333,40 +349,40 @@
   
       public void test_doPredicates_standard(){
           // bean/map/collection/node
  -        testValueAndPointer("map[@name='Key3'][@name='fruitco']",
  +        assertValueAndPointer("map[@name='Key3'][@name='fruitco']",
                   context.getValue("/vendor"),
                   "/map[@name='Key3'][3]",
                   "BbDdCM");
   
           // bean/map/collection/missingNode
  -        testNullPointer("map[@name='Key3'][@name='foo']",
  +        assertNullPointer("map[@name='Key3'][@name='foo']",
                   "/map[@name='Key3'][4][@name='foo']",
  -                "BbDdCDdN");
  +                "BbDdCDd");
   
           // bean/map/node
  -        testValueAndPointer("map[@name='Key4'][@name='fruitco']",
  +        assertValueAndPointer("map[@name='Key4'][@name='fruitco']",
                   context.getValue("/vendor"),
                   "/map[@name='Key4']",
                   "BbDdM");
   
           // bean/map/emptyCollection[@name=foo]
  -        testNullPointer("map[@name='Key6'][@name='fruitco']",
  +        assertNullPointer("map[@name='Key6'][@name='fruitco']",
                   "/map[@name='Key6'][@name='fruitco']",
  -                "BbDdCnN");
  +                "BbDdCn");
   
           // bean/node[@name=foo][index]
  -        testValueAndPointer("/vendor/contact[@name='jack'][2]",
  +        assertValueAndPointer("/vendor/contact[@name='jack'][2]",
                   "Jack Black",
                   "/vendor/contact[4]",
                   "BbMM");
   
           // bean/node[@name=foo][missingIndex]
  -        testNullPointer("/vendor/contact[@name='jack'][5]",
  +        assertNullPointer("/vendor/contact[@name='jack'][5]",
                   "/vendor/contact[@name='jack'][5]",
  -                "BbMnNnN");
  +                "BbMnNn");
   
           // bean/node/.[@name=foo][index]
  -        testValueAndPointer("/vendor/contact/.[@name='jack']",
  +        assertValueAndPointer("/vendor/contact/.[@name='jack']",
                   "Jack",
                   "/vendor/contact[2]",
                   "BbMM");
  @@ -374,135 +390,147 @@
   
       public void test_doPredicate_index(){
           // Existing dynamic property + existing property + index
  -        testValueAndPointer("/map[@name='Key2'][@name='strings'][2]",
  +        assertValueAndPointer("/map[@name='Key2'][@name='strings'][2]",
                   "String 2",
                   "/map[@name='Key2']/strings[2]",
  +                "BbDdBb",
                   "BbDdBbB");
   
           // existingProperty[@name=collectionProperty][index]
  -        testValueAndPointer("/nestedBean[@name='strings'][2]",
  +        assertValueAndPointer("/nestedBean[@name='strings'][2]",
                   bean.getNestedBean().getStrings()[1],
                   "/nestedBean/strings[2]",
  +                "BbBb",
                   "BbBbB");
   
           // existingProperty[@name=missingProperty][index]
  -        testNullPointer("/nestedBean[@name='foo'][3]",
  +        assertNullPointer("/nestedBean[@name='foo'][3]",
                   "/nestedBean[@name='foo'][3]",
  -                "BbBnN");
  +                "BbBn");
   
           // existingProperty[@name=collectionProperty][missingIndex]
  -        testNullPointer("/nestedBean[@name='strings'][5]",
  +        assertNullPointer("/nestedBean[@name='strings'][5]",
                   "/nestedBean/strings[5]",
  -                "BbBbEN");
  +                "BbBbE");
   
           // map[@name=collectionProperty][index]
  -        testValueAndPointer("/map[@name='Key3'][2]",
  +        assertValueAndPointer("/map[@name='Key3'][2]",
                   new Integer(2),
                   "/map[@name='Key3'][2]",
  +                "BbDd",
                   "BbDdB");
   
           // map[@name=collectionProperty][missingIndex]
  -        testNullPointer("/map[@name='Key3'][5]",
  +        assertNullPointer("/map[@name='Key3'][5]",
                   "/map[@name='Key3'][5]",
  -                "BbDdEN");
  +                "BbDdE");
   
           // map[@name=collectionProperty][missingIndex]/property
  -        testNullPointer("/map[@name='Key3'][5]/foo",
  +        assertNullPointer("/map[@name='Key3'][5]/foo",
                   "/map[@name='Key3'][5]/foo",
  -                "BbDdENnN");
  +                "BbDdENn");
   
           // map[@name=map][@name=collection][index]
  -        testValueAndPointer("/map[@name='Key5'][@name='strings'][2]",
  +        assertValueAndPointer("/map[@name='Key5'][@name='strings'][2]",
                   "String 2",
                   "/map[@name='Key5'][@name='strings'][2]",
  +                "BbDdDd",
                   "BbDdDdB");
   
           // map[@name=map][@name=collection][missingIndex]
  -        testNullPointer("/map[@name='Key5'][@name='strings'][5]",
  +        assertNullPointer("/map[@name='Key5'][@name='strings'][5]",
                   "/map[@name='Key5'][@name='strings'][5]",
  -                "BbDdDdEN");
  +                "BbDdDdE");
   
           // Existing dynamic property + indexing
  -        testValueAndPointer("/map[@name='Key3'][2]",
  +        assertValueAndPointer("/map[@name='Key3'][2]",
                   new Integer(2),
                   "/map[@name='Key3'][2]",
  +                "BbDd",
                   "BbDdB");
   
           // Existing dynamic property + indexing
  -        testValueAndPointer("/map[@name='Key3'][1]/name",
  +        assertValueAndPointer("/map[@name='Key3'][1]/name",
                   "some",
                   "/map[@name='Key3'][1]/name",
  +                "BbDdBb",
                   "BbDdBbB");
   
           // map[@name=missingProperty][index]
  -        testNullPointer("/map[@name='foo'][3]",
  +        assertNullPointer("/map[@name='foo'][3]",
                   "/map[@name='foo'][3]",
  -                "BbDdEN");
  +                "BbDdE");
   
           // collectionProperty[index]
  -        testValueAndPointer("/integers[2]",
  +        assertValueAndPointer("/integers[2]",
                   new Integer(2),
                   "/integers[2]",
  +                "Bb",
                   "BbB");
   
           // existingProperty/collectionProperty[index]
  -        testValueAndPointer("/nestedBean/strings[2]",
  +        assertValueAndPointer("/nestedBean/strings[2]",
                   bean.getNestedBean().getStrings()[1],
                   "/nestedBean/strings[2]",
  +                "BbBb",
                   "BbBbB");
   
           // existingProperty[index]/existingProperty
  -        testValueAndPointer("/list[3]/int",
  +        assertValueAndPointer("/list[3]/int",
                   new Integer(1),
                   "/list[3]/int",
  +                "BbBb",
                   "BbBbB");
   
           // existingProperty[missingIndex]
  -        testNullPointer("/list[6]",
  +        assertNullPointer("/list[6]",
                   "/list[6]",
  -                "BbEN");
  +                "BbE");
   
           // existingProperty/missingProperty[index]
  -        testNullPointer("/nestedBean/foo[3]",
  +        assertNullPointer("/nestedBean/foo[3]",
                   "/nestedBean/foo[3]",
  -                "BbBnN");
  +                "BbBn");
   
           // map[@name=missingProperty][index]
  -        testNullPointer("/map/foo[3]",
  +        assertNullPointer("/map/foo[3]",
                   "/map[@name='foo'][3]",
  -                "BbDdEN");
  +                "BbDdE");
   
           // existingProperty/collectionProperty[missingIndex]
  -        testNullPointer("/nestedBean/strings[5]",
  +        assertNullPointer("/nestedBean/strings[5]",
                   "/nestedBean/strings[5]",
  -                "BbBbEN");
  +                "BbBbE");
   
           // map/collectionProperty[missingIndex]/property
  -        testNullPointer("/map/Key3[5]/foo",
  +        assertNullPointer("/map/Key3[5]/foo",
                   "/map[@name='Key3'][5]/foo",
  -                "BbDdENnN");
  +                "BbDdENn");
   
           // map[@name=map]/collection[index]
  -        testValueAndPointer("/map[@name='Key5']/strings[2]",
  +        assertValueAndPointer("/map[@name='Key5']/strings[2]",
                   "String 2",
                   "/map[@name='Key5'][@name='strings'][2]",
  +                "BbDdDd",
                   "BbDdDdB");
   
           // map[@name=map]/collection[missingIndex]
  -        testNullPointer("/map[@name='Key5']/strings[5]",
  +        assertNullPointer("/map[@name='Key5']/strings[5]",
                   "/map[@name='Key5'][@name='strings'][5]",
  -                "BbDdDdEN");
  +                "BbDdDdE");
   
           // scalarPropertyAsCollection[index]
  -        testValueAndPointer("/int[1]",
  +        assertValueAndPointer("/int[1]",
                   new Integer(1),
                   "/int",
  +                "Bb",
                   "BbB");
   
           // scalarPropertyAsCollection[index]
  -        testValueAndPointer(".[1]/int",
  +        assertValueAndPointer(".[1]/int",
                   new Integer(1),
                   "/int",
  +                "Bb",
                   "BbB");
       }
   
  @@ -510,15 +538,27 @@
           context.getVariables().declareVariable("array", new String[]{"Value1"});
           context.getVariables().declareVariable("testnull", new TestNull());
   
  -        testNullPointer("$testnull/nothing[2]",
  +        assertNullPointer("$testnull/nothing[2]",
                   "$testnull/nothing[2]",
  -                "VBbEN");
  +                "VBbE");
       }
   
  -    private void testValueAndPointer(
  +    private void assertValueAndPointer(
               String path, Object expectedValue, String expectedPath,
               String expectedSignature)
       {
  +        assertValueAndPointer(
  +            path,
  +            expectedValue,
  +            expectedPath,
  +            expectedSignature,
  +            expectedSignature);
  +    }
  +    
  +    private void assertValueAndPointer(
  +            String path, Object expectedValue, String expectedPath,
  +            String expectedSignature, String expectedValueSignature)
  +    {
           Object value = context.getValue(path);
           assertEquals("Checking value: " + path, expectedValue, value);
   
  @@ -528,21 +568,28 @@
   
           assertEquals("Checking signature: " + path,
                   expectedSignature, pointerSignature(pointer));
  +        
  +        Pointer vPointer = ((NodePointer)pointer).getValuePointer();
  +        assertEquals("Checking value pointer signature: " + path,
  +                expectedValueSignature, pointerSignature(vPointer));
       }
   
  -
  -    private void testNullPointer(String path, String expectedPath,
  +    private void assertNullPointer(String path, String expectedPath,
               String expectedSignature)
       {
           Pointer pointer = context.getPointer(path);
           assertNotNull("Null path exists: " + path,
                       pointer);
  -        assertTrue("Null path is null: " + path,
  -                    !((NodePointer)pointer).isActual());
           assertEquals("Null path as path: " + path,
                       expectedPath, pointer.asPath());
           assertEquals("Checking Signature: " + path,
  -                expectedSignature, pointerSignature(pointer));
  +                    expectedSignature, pointerSignature(pointer));
  +                
  +        Pointer vPointer = ((NodePointer)pointer).getValuePointer();
  +        assertTrue("Null path is null: " + path,
  +                    !((NodePointer)vPointer).isActual());
  +        assertEquals("Checking value pointer signature: " + path,
  +                    expectedSignature + "N", pointerSignature(vPointer));
       }
   
       /**
  
  
  
  1.2       +6 -4      jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/compiler/CoreFunctionTest.java
  
  Index: CoreFunctionTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/compiler/CoreFunctionTest.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- CoreFunctionTest.java	20 Oct 2002 03:48:22 -0000	1.1
  +++ CoreFunctionTest.java	26 Nov 2002 01:20:08 -0000	1.2
  @@ -147,7 +147,9 @@
       public void testIDFunction(){
           context.setIdentityManager(new IdentityManager(){
               public Pointer getPointerByID(JXPathContext context, String id){
  -                NodePointer ptr = (NodePointer)context.getPointer("/document");
  +                NodePointer ptr = (NodePointer)context.
  +                        getPointer("/document");
  +                ptr = ptr.getValuePointer();
                   return ptr.getPointerByID(context, id);
               }
           });
  
  
  
  1.2       +3 -4      jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/compiler/TestFunctions2.java
  
  Index: TestFunctions2.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/compiler/TestFunctions2.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestFunctions2.java	20 Oct 2002 03:48:22 -0000	1.1
  +++ TestFunctions2.java	26 Nov 2002 01:20:08 -0000	1.2
  @@ -61,7 +61,6 @@
    */
   package org.apache.commons.jxpath.ri.compiler;
   
  -import java.util.*;
   
   /**
    * @author Dmitri Plotnikov
  
  
  
  1.2       +147 -127  jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/BeanModelTestCase.java
  
  Index: BeanModelTestCase.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/BeanModelTestCase.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BeanModelTestCase.java	20 Oct 2002 03:48:22 -0000	1.1
  +++ BeanModelTestCase.java	26 Nov 2002 01:20:08 -0000	1.2
  @@ -62,18 +62,9 @@
   
   package org.apache.commons.jxpath.ri.model;
   
  -import java.util.ArrayList;
  -import java.util.Iterator;
  -import java.util.List;
  -import java.util.Locale;
  -
  -import junit.framework.TestSuite;
  -
  -import org.apache.commons.jxpath.AbstractFactory;
  -import org.apache.commons.jxpath.JXPathContext;
  -import org.apache.commons.jxpath.JXPathTestCase;
  -import org.apache.commons.jxpath.NestedTestBean;
  -import org.apache.commons.jxpath.Pointer;
  +import java.util.*;
  +
  +import org.apache.commons.jxpath.*;
   import org.apache.commons.jxpath.ri.QName;
   import org.apache.commons.jxpath.ri.compiler.NodeNameTest;
   import org.apache.commons.jxpath.ri.model.beans.PropertyOwnerPointer;
  @@ -88,7 +79,6 @@
   
   public abstract class BeanModelTestCase extends JXPathTestCase
   {
  -    private static boolean enabled = true;
       private JXPathContext context;
   
       /**
  @@ -115,10 +105,6 @@
        * Test property iterators, the core of the graph traversal engine
        */
       public void testIndividualIterators(){
  -        if (!enabled){
  -            return;
  -        }
  -//        testIndividual(0, 0, true, false, 3);
           testIndividual(+1, 0, true, false, 0);
           testIndividual(-1, 0, true, false, 4);
   
  @@ -136,41 +122,49 @@
       private void testIndividual(int relativePropertyIndex, int offset,
                   boolean useStartLocation, boolean reverse, int expected)
       {
  -        PropertyOwnerPointer root =
  -            (PropertyOwnerPointer)NodePointer.newNodePointer(
  -                    new QName(null, "root"), createContextBean(),
  -                    Locale.getDefault());
  -
  -        NodeIterator it;
  -
  -        PropertyPointer start = null;
  -
  -        if (useStartLocation){
  -            start = root.getPropertyPointer();
  -            start.setPropertyIndex(relativeProperty(start, relativePropertyIndex));
  -            start.setIndex(offset);
  -        }
  -        it = root.childIterator(
  -                new NodeNameTest(new QName(null, "integers")),
  -                reverse, start);
  -
  -        int size = 0;
  -        while(it.setPosition(it.getPosition() + 1)){
  -            size++;
  -        }
  -        assertEquals("ITERATIONS: Individual, relativePropertyIndex=" +
  -            relativePropertyIndex +
  -            ", offset=" + offset + ", useStartLocation=" + useStartLocation +
  -            ", reverse=" + reverse, expected, size);
  +		PropertyOwnerPointer root =
  +			(PropertyOwnerPointer) NodePointer.newNodePointer(
  +				new QName(null, "root"),
  +				createContextBean(),
  +				Locale.getDefault());
  +
  +		NodeIterator it;
  +
  +		PropertyPointer start = null;
  +
  +		if (useStartLocation) {
  +			start = root.getPropertyPointer();
  +			start.setPropertyIndex(
  +				relativeProperty(start, relativePropertyIndex));
  +			start.setIndex(offset);
  +		}
  +		it =
  +			root.childIterator(
  +				new NodeNameTest(new QName(null, "integers")),
  +				reverse,
  +				start);
  +
  +		int size = 0;
  +		while (it.setPosition(it.getPosition() + 1)) {
  +			size++;
  +		}
  +		assertEquals(
  +			"ITERATIONS: Individual, relativePropertyIndex="
  +				+ relativePropertyIndex
  +				+ ", offset="
  +				+ offset
  +				+ ", useStartLocation="
  +				+ useStartLocation
  +				+ ", reverse="
  +				+ reverse,
  +			expected,
  +			size);
       }
   
       /**
        * Test property iterators with multiple properties returned
        */
       public void testMultipleIterators(){
  -        if (!enabled){
  -            return;
  -        }
           testMultiple(0, 0, true, false, 20);
   
           testMultiple(3, 0, true, false, 16);
  @@ -222,40 +216,40 @@
       }
   
       public void testIteratePropertyArrayWithHasNext(){
  -        if (!enabled){
  -            return;
  -        }
  -        JXPathContext context = JXPathContext.newContext(createContextBean());
  -        Iterator it = context.iteratePointers("/integers");
  -        List actual = new ArrayList();
  -        while(it.hasNext()){
  -            actual.add(((Pointer)it.next()).asPath());
  -        }
  -        assertEquals("Iterating 'hasNext'/'next'<" + "/integers" + ">",
  -            list("/integers[1]", "/integers[2]", "/integers[3]", "/integers[4]"),
  -            actual);
  -    }
  -
  -    public void testIteratePropertyArrayWithoutHasNext(){
  -        if (!enabled){
  -            return;
  -        }
  -        JXPathContext context = JXPathContext.newContext(createContextBean());
  -        Iterator it = context.iteratePointers("/integers");
  -        List actual = new ArrayList();
  -        for (int i = 0; i < 4; i++){
  -            actual.add(it.next().toString());
  -        }
  -        assertEquals("Iterating 'next'<" + "/integers" + ">",
  -            list("/integers[1]", "/integers[2]", "/integers[3]", "/integers[4]"),
  -            actual);
  -    }
  +		JXPathContext context = JXPathContext.newContext(createContextBean());
  +		Iterator it = context.iteratePointers("/integers");
  +		List actual = new ArrayList();
  +		while (it.hasNext()) {
  +			actual.add(((Pointer) it.next()).asPath());
  +		}
  +		assertEquals(
  +			"Iterating 'hasNext'/'next'<" + "/integers" + ">",
  +			list(
  +				"/integers[1]",
  +				"/integers[2]",
  +				"/integers[3]",
  +				"/integers[4]"),
  +			actual);
  +    }
  +
  +	public void testIteratePropertyArrayWithoutHasNext() {
  +		JXPathContext context = JXPathContext.newContext(createContextBean());
  +		Iterator it = context.iteratePointers("/integers");
  +		List actual = new ArrayList();
  +		for (int i = 0; i < 4; i++) {
  +			actual.add(it.next().toString());
  +		}
  +		assertEquals(
  +			"Iterating 'next'<" + "/integers" + ">",
  +			list(
  +				"/integers[1]",
  +				"/integers[2]",
  +				"/integers[3]",
  +				"/integers[4]"),
  +			actual);
  +	}
   
       public void testIterateAndSet(){
  -        if (!enabled){
  -            return;
  -        }
  -
           JXPathContext context = JXPathContext.newContext(createContextBean());
   
           Iterator it = context.iteratePointers("beans/int");
  @@ -277,37 +271,40 @@
       /**
        * Test contributed by Kate Dvortsova
        */
  -    public void testIteratePointerSetValue() {
  -        JXPathContext context = JXPathContext.newContext(createContextBean());
  +	public void testIteratePointerSetValue() {
  +		JXPathContext context = JXPathContext.newContext(createContextBean());
   
  -        assertXPathValue(context, "/beans[1]/name", "Name 1");
  -        assertXPathValue(context, "/beans[2]/name", "Name 2");
  +		assertXPathValue(context, "/beans[1]/name", "Name 1");
  +		assertXPathValue(context, "/beans[2]/name", "Name 2");
   
  -        // Test setting via context
  -        context.setValue("/beans[2]/name", "Name 2 set");
  -        assertXPathValue(context, "/beans[2]/name", "Name 2 set");
  -
  -        // Restore original value
  -        context.setValue("/beans[2]/name", "Name 2");
  -        assertXPathValue(context, "/beans[2]/name", "Name 2");
  -
  -        int iter_count = 0;
  -        Iterator iter = context.iteratePointers("/beans/name");
  -        while (iter.hasNext()) {
  -            iter_count++;
  -            Pointer pointer = (Pointer) iter.next();
  -            String s = (String) pointer.getValue();
  -            s = s + "suffix";
  -            pointer.setValue(s);
  -            assertEquals("pointer.getValue", s, pointer.getValue());
  -            // fails right here, the value isn't getting set in the bean.
  -            assertEquals("context.getValue", s, context.getValue(pointer.asPath()));
  -        }
  -        assertEquals("Iteration count", 2, iter_count);
  -
  -        assertXPathValue(context, "/beans[1]/name", "Name 1suffix");
  -        assertXPathValue(context, "/beans[2]/name", "Name 2suffix");
  -    }
  +		// Test setting via context
  +		context.setValue("/beans[2]/name", "Name 2 set");
  +		assertXPathValue(context, "/beans[2]/name", "Name 2 set");
  +
  +		// Restore original value
  +		context.setValue("/beans[2]/name", "Name 2");
  +		assertXPathValue(context, "/beans[2]/name", "Name 2");
  +
  +		int iter_count = 0;
  +		Iterator iter = context.iteratePointers("/beans/name");
  +		while (iter.hasNext()) {
  +			iter_count++;
  +			Pointer pointer = (Pointer) iter.next();
  +			String s = (String) pointer.getValue();
  +			s = s + "suffix";
  +			pointer.setValue(s);
  +			assertEquals("pointer.getValue", s, pointer.getValue());
  +			// fails right here, the value isn't getting set in the bean.
  +			assertEquals(
  +				"context.getValue",
  +				s,
  +				context.getValue(pointer.asPath()));
  +		}
  +		assertEquals("Iteration count", 2, iter_count);
  +
  +		assertXPathValue(context, "/beans[1]/name", "Name 1suffix");
  +		assertXPathValue(context, "/beans[2]/name", "Name 2suffix");
  +	}
   
       public void testRoot(){
           assertXPathValueAndPointer(context,
  @@ -634,24 +631,47 @@
                   "/nestedBean/int");
       }
   
  -    public void testAttributeLang(){
  -
  -        assertXPathValue(context,
  -                "@xml:lang",
  -                "en-US");
  +	public void testAttributeLang() {
   
  -        assertXPathValue(context,
  -                "count(@xml:*)",
  -                new Double(1));
  -
  -        assertXPathValue(context,"lang('en')", Boolean.TRUE);
  -        assertXPathValue(context,"lang('fr')", Boolean.FALSE);
  -        assertXPathValueIterator(context, "beans[1]/strings[string-length() = 8]", list("String 1", "String 2", "String 3"));
  -        assertXPathValue(context,"boolean(boolean)", Boolean.FALSE);
  -        assertXPathValue(context,"boolean(integers[position() < 3])", Boolean.TRUE);
  -        assertXPathValue(context,"boolean(integers[position() > 4])", Boolean.FALSE);
  -        assertXPathValue(context,"sum(integers)", new Double(10));
  -    }
  +		assertXPathValue(context, 
  +            "@xml:lang", 
  +            "en-US");
  +
  +		assertXPathValue(context, 
  +            "count(@xml:*)", 
  +            new Double(1));
  +
  +		assertXPathValue(context, 
  +            "lang('en')", 
  +            Boolean.TRUE);
  +            
  +		assertXPathValue(context, 
  +            "lang('fr')", 
  +            Boolean.FALSE);
  +            
  +		assertXPathValueIterator(
  +			context,
  +			"beans[1]/strings[string-length() = 8]",
  +			list("String 1", "String 2", "String 3"));
  +            
  +		assertXPathValue(context, 
  +            "boolean(boolean)", 
  +            Boolean.FALSE);
  +            
  +		assertXPathValue(
  +			context,
  +			"boolean(integers[position() < 3])",
  +			Boolean.TRUE);
  +            
  +		assertXPathValue(
  +			context,
  +			"boolean(integers[position() > 4])",
  +			Boolean.FALSE);
  +            
  +		assertXPathValue(context, 
  +            "sum(integers)", 
  +            new Double(10));
  +	}
   
       public void testBooleanPredicate(){
           // use child axis
  
  
  
  1.2       +34 -39    jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/TestDynamicPropertyFactory.java
  
  Index: TestDynamicPropertyFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/TestDynamicPropertyFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestDynamicPropertyFactory.java	20 Oct 2002 03:48:22 -0000	1.1
  +++ TestDynamicPropertyFactory.java	26 Nov 2002 01:20:08 -0000	1.2
  @@ -63,17 +63,10 @@
   package org.apache.commons.jxpath.ri.model;
   
   import java.util.HashMap;
  -import java.util.List;
   import java.util.Map;
   import java.util.Vector;
   
  -import org.apache.commons.jxpath.AbstractFactory;
  -import org.apache.commons.jxpath.JXPathContext;
  -import org.apache.commons.jxpath.NestedTestBean;
  -import org.apache.commons.jxpath.Pointer;
  -import org.apache.commons.jxpath.TestBean;
  -import org.jdom.Element;
  -import org.w3c.dom.Node;
  +import org.apache.commons.jxpath.*;
   
   /**
    * Test AbstractFactory.
  @@ -87,33 +80,35 @@
        * Create a new instance and put it in the collection on the parent object.
        * Return <b>false</b> if this factory cannot create the requested object.
        */
  -    public boolean createObject(JXPathContext context, Pointer pointer, Object parent, String name, int index){
  -        if (name.equals("map")){
  -            ((TestBean)parent).setMap(new HashMap());
  -            return true;
  -        }
  -        else if (name.equals("TestKey1")){
  -            ((Map)parent).put(name, "");
  -            return true;
  -        }
  -        else if (name.equals("TestKey2")){
  -            ((Map)parent).put(name, new NestedTestBean("newName"));
  -            return true;
  -        }
  -        else if (name.equals("TestKey3")){
  -            Vector v = new Vector();
  -            for (int i = 0; i <= index; i++){
  -                v.add(null);
  -            }
  -            ((Map)parent).put(name, v);
  -            return true;
  -        }
  -        else if (name.equals("TestKey4")){
  -            ((Map)parent).put(name, new Object[]{new TestBean()});
  -            return true;
  -        }
  -        return false;
  -    }
  +	public boolean createObject(
  +    		JXPathContext context,
  +    		Pointer pointer,
  +    		Object parent,
  +    		String name,
  +    		int index) 
  +    {
  +		if (name.equals("map")) {
  +			((TestBean) parent).setMap(new HashMap());
  +			return true;
  +		} else if (name.equals("TestKey1")) {
  +			((Map) parent).put(name, "");
  +			return true;
  +		} else if (name.equals("TestKey2")) {
  +			((Map) parent).put(name, new NestedTestBean("newName"));
  +			return true;
  +		} else if (name.equals("TestKey3")) {
  +			Vector v = new Vector();
  +			for (int i = 0; i <= index; i++) {
  +				v.add(null);
  +			}
  +			((Map) parent).put(name, v);
  +			return true;
  +		} else if (name.equals("TestKey4")) {
  +			((Map) parent).put(name, new Object[] { new TestBean()});
  +			return true;
  +		}
  +		return false;
  +	}
   
       public boolean declareVariable(JXPathContext context, String name){
           return false;
  
  
  
  1.2       +5 -13     jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/TestMixedModelFactory.java
  
  Index: TestMixedModelFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/TestMixedModelFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestMixedModelFactory.java	20 Oct 2002 03:48:22 -0000	1.1
  +++ TestMixedModelFactory.java	26 Nov 2002 01:20:08 -0000	1.2
  @@ -63,17 +63,9 @@
   package org.apache.commons.jxpath.ri.model;
   
   import java.util.HashMap;
  -import java.util.List;
   import java.util.Map;
  -import java.util.Vector;
   
  -import org.apache.commons.jxpath.AbstractFactory;
  -import org.apache.commons.jxpath.JXPathContext;
  -import org.apache.commons.jxpath.NestedTestBean;
  -import org.apache.commons.jxpath.Pointer;
  -import org.apache.commons.jxpath.TestBean;
  -import org.jdom.Element;
  -import org.w3c.dom.Node;
  +import org.apache.commons.jxpath.*;
   
   /**
    * Test AbstractFactory.
  
  
  
  1.3       +12 -5     jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/XMLModelTestCase.java
  
  Index: XMLModelTestCase.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/XMLModelTestCase.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XMLModelTestCase.java	20 Oct 2002 03:48:22 -0000	1.2
  +++ XMLModelTestCase.java	26 Nov 2002 01:20:08 -0000	1.3
  @@ -99,6 +99,8 @@
               Variables vars = context.getVariables();
               vars.declareVariable("document", docCtr.getValue());
               vars.declareVariable("container", docCtr);
  +            vars.declareVariable("element", 
  +            context.getPointer("vendor/location/address/street").getNode());
           }
       }
   
  @@ -626,7 +628,6 @@
           assertXPathValue(context,
                   "$document/vendor//street",
                   "Orchard Road");
  -
       }
   
       public void testContainer() {
  @@ -646,6 +647,12 @@
           assertXPathValue(context,
                   "number(vendor/location/employeeCount)",
                   new Double(10));
  +    }
  +    
  +    public void testElementInVariable() {
  +        assertXPathValue(context,
  +                "$element",
  +                "Orchard Road");                
       }
   
       public void testTypeConversions() {
  
  
  
  1.2       +8 -29     jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/beans/BeanModelTest.java
  
  Index: BeanModelTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/beans/BeanModelTest.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BeanModelTest.java	20 Oct 2002 03:48:22 -0000	1.1
  +++ BeanModelTest.java	26 Nov 2002 01:20:08 -0000	1.2
  @@ -62,27 +62,11 @@
   
   package org.apache.commons.jxpath.ri.model.beans;
   
  -import java.lang.reflect.InvocationTargetException;
  -
  -import junit.framework.Test;
  -import junit.framework.TestCase;
   import junit.framework.TestSuite;
   
  -import org.w3c.dom.*;
  -import java.util.*;
  -import java.lang.reflect.*;
  -import org.apache.commons.jxpath.ri.model.XMLModelTestCase;
  -import org.apache.commons.jxpath.*;
  -import org.apache.commons.jxpath.util.*;
  -import org.apache.commons.jxpath.ri.*;
  -import org.apache.commons.jxpath.ri.parser.*;
  -import org.apache.commons.jxpath.ri.model.*;
  -import org.apache.commons.jxpath.ri.model.beans.*;
  -import org.apache.commons.jxpath.ri.axes.*;
  -import org.apache.commons.jxpath.ri.compiler.*;
  -import org.apache.commons.jxpath.ri.compiler.Expression;
  -import org.apache.commons.jxpath.xml.*;
  -import java.beans.*;
  +import org.apache.commons.jxpath.AbstractFactory;
  +import org.apache.commons.jxpath.TestBean;
  +import org.apache.commons.jxpath.ri.model.BeanModelTestCase;
   
   /**
    * Tests JXPath with JavaBeans
  @@ -93,8 +77,6 @@
   
   public class BeanModelTest extends BeanModelTestCase
   {
  -    private static final boolean enabled = true;
  -
       /**
        * Construct a new instance of this test case.
        *
  @@ -108,10 +90,7 @@
        * Return the tests included in this test suite.
        */
       public static TestSuite suite(){
  -//        return (new TestSuite(BeanModelTest.class));
  -        TestSuite s = new TestSuite();
  -        s.addTest(new BeanModelTest("testAxisParent"));
  -        return s;
  +        return (new TestSuite(BeanModelTest.class));
       }
   
       protected Object createContextBean(){
  
  
  
  1.2       +7 -23     jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/beans/DynamicPropertiesModelTest.java
  
  Index: DynamicPropertiesModelTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/beans/DynamicPropertiesModelTest.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DynamicPropertiesModelTest.java	20 Oct 2002 03:48:22 -0000	1.1
  +++ DynamicPropertiesModelTest.java	26 Nov 2002 01:20:08 -0000	1.2
  @@ -62,26 +62,10 @@
   
   package org.apache.commons.jxpath.ri.model.beans;
   
  -import java.lang.reflect.InvocationTargetException;
  -
  -import junit.framework.Test;
  -import junit.framework.TestCase;
  -import junit.framework.TestSuite;
  -
  -import org.w3c.dom.*;
  -import java.util.*;
  -import java.lang.reflect.*;
  -import org.apache.commons.jxpath.*;
  -import org.apache.commons.jxpath.util.*;
  -import org.apache.commons.jxpath.ri.*;
  -import org.apache.commons.jxpath.ri.parser.*;
  -import org.apache.commons.jxpath.ri.model.*;
  -import org.apache.commons.jxpath.ri.model.beans.*;
  -import org.apache.commons.jxpath.ri.axes.*;
  -import org.apache.commons.jxpath.ri.compiler.*;
  -import org.apache.commons.jxpath.ri.compiler.Expression;
  -import org.apache.commons.jxpath.xml.*;
  -import java.beans.*;
  +import org.apache.commons.jxpath.JXPathContext;
  +import org.apache.commons.jxpath.JXPathTestCase;
  +import org.apache.commons.jxpath.TestBean;
  +import org.apache.commons.jxpath.ri.model.TestDynamicPropertyFactory;
   
   /**
    * @todo more iterator testing with maps
  
  
  
  1.2       +18 -30    jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/beans/TestBeanFactory.java
  
  Index: TestBeanFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/beans/TestBeanFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestBeanFactory.java	20 Oct 2002 03:48:22 -0000	1.1
  +++ TestBeanFactory.java	26 Nov 2002 01:20:08 -0000	1.2
  @@ -62,18 +62,7 @@
   
   package org.apache.commons.jxpath.ri.model.beans;
   
  -import java.util.HashMap;
  -import java.util.List;
  -import java.util.Map;
  -import java.util.Vector;
  -
  -import org.apache.commons.jxpath.AbstractFactory;
  -import org.apache.commons.jxpath.JXPathContext;
  -import org.apache.commons.jxpath.NestedTestBean;
  -import org.apache.commons.jxpath.Pointer;
  -import org.apache.commons.jxpath.TestBean;
  -import org.jdom.Element;
  -import org.w3c.dom.Node;
  +import org.apache.commons.jxpath.*;
   
   /**
    * Test AbstractFactory.
  @@ -89,20 +78,19 @@
       public boolean createObject(JXPathContext context, 
                   Pointer pointer, Object parent, String name, int index)
       {
  -        if (name.equals("nestedBean")){
  -            ((TestBean)parent).setNestedBean(new NestedTestBean("newName"));
  -            return true;
  -        }
  -        else if (name.equals("beans")){
  -            TestBean bean = (TestBean)parent;
  -            if (bean.getBeans() == null || index >= bean.getBeans().length){
  -                bean.setBeans(new NestedTestBean[index + 1]);
  -            }
  -            ((TestBean)parent).getBeans()[index] = new NestedTestBean("newName");
  -            return true;
  -        }
  -        return false;
  -    }
  +		if (name.equals("nestedBean")) {
  +			((TestBean) parent).setNestedBean(new NestedTestBean("newName"));
  +			return true;
  +		} else if (name.equals("beans")) {
  +			TestBean bean = (TestBean) parent;
  +			if (bean.getBeans() == null || index >= bean.getBeans().length) {
  +				bean.setBeans(new NestedTestBean[index + 1]);
  +			}
  +			((TestBean) parent).getBeans()[index] =
  +				new NestedTestBean("newName");
  +			return true;
  +		}
  +		return false;   }
   
       /**
        * Create a new object and set it on the specified variable
  
  
  
  1.4       +8 -7      jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/dom/DOMModelTest.java
  
  Index: DOMModelTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/dom/DOMModelTest.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DOMModelTest.java	20 Oct 2002 03:48:22 -0000	1.3
  +++ DOMModelTest.java	26 Nov 2002 01:20:08 -0000	1.4
  @@ -68,8 +68,9 @@
   import org.apache.commons.jxpath.AbstractFactory;
   import org.apache.commons.jxpath.ri.model.XMLModelTestCase;
   import org.apache.commons.jxpath.xml.DocumentContainer;
  -
  -import org.w3c.dom.*;
  +import org.w3c.dom.Element;
  +import org.w3c.dom.Node;
  +import org.w3c.dom.NodeList;
   
   /**
    * Tests JXPath with DOM
  @@ -88,7 +89,7 @@
       public DOMModelTest(String name){
           super(name);
       }
  -
  +    
       /**
        * Return the tests included in this test suite.
        */
  
  
  
  1.2       +29 -30    jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/dynabeans/TestDynaBeanFactory.java
  
  Index: TestDynaBeanFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/dynabeans/TestDynaBeanFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestDynaBeanFactory.java	20 Oct 2002 03:48:22 -0000	1.1
  +++ TestDynaBeanFactory.java	26 Nov 2002 01:20:08 -0000	1.2
  @@ -62,16 +62,8 @@
   
   package org.apache.commons.jxpath.ri.model.dynabeans;
   
  -import java.util.HashMap;
  -import java.util.Map;
  -import java.util.Vector;
  -
   import org.apache.commons.beanutils.DynaBean;
  -import org.apache.commons.jxpath.AbstractFactory;
  -import org.apache.commons.jxpath.JXPathContext;
  -import org.apache.commons.jxpath.NestedTestBean;
  -import org.apache.commons.jxpath.Pointer;
  -import org.apache.commons.jxpath.TestBean;
  +import org.apache.commons.jxpath.*;
   
   /**
    * Test AbstractFactory.
  @@ -83,23 +75,30 @@
   
       /**
        */
  -    public boolean createObject(JXPathContext context, Pointer pointer, Object parent, String name, int index){
  -        if (name.equals("nestedBean")){
  -            ((DynaBean)parent).set("nestedBean", new NestedTestBean("newName"));
  -            return true;
  -        }
  -        else if (name.equals("beans")){
  -            DynaBean bean = (DynaBean)parent;
  -            Object beans[] = (Object[])bean.get("beans");
  -            if (beans == null || index >= beans.length){
  -                beans = new NestedTestBean[index + 1];
  -                bean.set("beans", beans);
  -            }
  -            beans[index] = new NestedTestBean("newName");
  -            return true;
  -        }
  -        return false;
  -    }
  +	public boolean createObject(
  +    		JXPathContext context,
  +    		Pointer pointer,
  +    		Object parent,
  +    		String name,
  +    		int index) 
  +    {
  +		if (name.equals("nestedBean")) {
  +			((DynaBean) parent).set(
  +				"nestedBean",
  +				new NestedTestBean("newName"));
  +			return true;
  +		} else if (name.equals("beans")) {
  +			DynaBean bean = (DynaBean) parent;
  +			Object beans[] = (Object[]) bean.get("beans");
  +			if (beans == null || index >= beans.length) {
  +				beans = new NestedTestBean[index + 1];
  +				bean.set("beans", beans);
  +			}
  +			beans[index] = new NestedTestBean("newName");
  +			return true;
  +		}
  +		return false;
  +	}
   
   
       /**
  
  
  
  1.4       +7 -20     jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/jdom/JDOMModelTest.java
  
  Index: JDOMModelTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/jxpath/src/test/org/apache/commons/jxpath/ri/model/jdom/JDOMModelTest.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JDOMModelTest.java	20 Oct 2002 03:48:22 -0000	1.3
  +++ JDOMModelTest.java	26 Nov 2002 01:20:08 -0000	1.4
  @@ -62,28 +62,15 @@
   
   package org.apache.commons.jxpath.ri.model.jdom;
   
  -import java.lang.reflect.InvocationTargetException;
  +import java.util.List;
   
   import junit.framework.Test;
  -import junit.framework.TestCase;
   import junit.framework.TestSuite;
   
  -import java.util.*;
  -import java.lang.reflect.*;
  +import org.apache.commons.jxpath.AbstractFactory;
   import org.apache.commons.jxpath.ri.model.XMLModelTestCase;
  -import org.apache.commons.jxpath.*;
  -import org.apache.commons.jxpath.util.*;
  -import org.apache.commons.jxpath.ri.*;
  -import org.apache.commons.jxpath.ri.parser.*;
  -import org.apache.commons.jxpath.ri.model.*;
  -import org.apache.commons.jxpath.ri.model.beans.*;
  -import org.apache.commons.jxpath.ri.axes.*;
  -import org.apache.commons.jxpath.ri.compiler.*;
  -import org.apache.commons.jxpath.ri.compiler.Expression;
  -import org.apache.commons.jxpath.xml.*;
  +import org.apache.commons.jxpath.xml.DocumentContainer;
   import org.jdom.*;
  -
  -import java.beans.*;
   
   /**
    * Tests JXPath with JDOM
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>