You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2005/06/16 07:48:25 UTC

svn commit: r190873 - in /directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter: AbstractExprNode.java BranchNode.java LeafNode.java SimpleNode.java

Author: akarasulu
Date: Wed Jun 15 22:48:24 2005
New Revision: 190873

URL: http://svn.apache.org/viewcvs?rev=190873&view=rev
Log:
 o applied patch from Jacob in new feature DIRLDAP-41
 o cleaned up old LDAPd file headers 
 o cleaned up formating
 o removed @author tags with my name on it
 o changed patched code:
    o to be simpler with return lines kept to smaller meaning the
      size of logical statements for readability
    o formatted for style and put {} around single line if statements

Modified:
    directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/AbstractExprNode.java
    directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/BranchNode.java
    directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/LeafNode.java
    directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/SimpleNode.java

Modified: directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/AbstractExprNode.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/AbstractExprNode.java?rev=190873&r1=190872&r2=190873&view=diff
==============================================================================
--- directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/AbstractExprNode.java (original)
+++ directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/AbstractExprNode.java Wed Jun 15 22:48:24 2005
@@ -1,29 +1,19 @@
-/*
- *   Copyright 2004 The Apache Software Foundation
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- */
-
 /*
- * $Id: AbstractExprNode.java,v 1.6 2003/09/26 19:04:38 akarasulu Exp $
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
  *
- * -- (c) LDAPd Group                                                    --
- * -- Please refer to the LICENSE.txt file in the root directory of      --
- * -- any LDAPd project for copyright and distribution information.      --
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
  *
  */
-
 package org.apache.ldap.common.filter ;
 
 
@@ -34,9 +24,8 @@
 /**
  * Abstract implementation of a expression node.
  * 
- * @author <a href="mailto:aok123@bellsouth.net">Alex Karasulu</a>
- * @author $Author: akarasulu $
- * @version $Revision$
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
  */
 public abstract class AbstractExprNode
     implements ExprNode
@@ -243,5 +232,45 @@
 
 
         return l_opstr;
+    }
+    
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals(Object other)
+    {
+        if ( null == other )
+        {
+            return false;
+        }
+
+        if ( this == other )
+        {
+            return true;
+        }
+        
+        if ( !( other instanceof AbstractExprNode ) )
+        {
+            return false;
+        }
+        
+        AbstractExprNode otherExprNode = ( AbstractExprNode ) other;
+
+        if ( otherExprNode.getAssertionType() != m_assertionType )
+        {
+            return false;
+        }
+
+        Map otherAnnotations = otherExprNode.getAnnotations();
+
+        if ( otherAnnotations == m_annotations )
+        {
+            return true;
+        }
+
+        // return true if both are non-null and equals() is true
+
+        return ( ( null != m_annotations && null != otherAnnotations ) &&
+                 m_annotations.equals( otherAnnotations ) );
     }
 }

Modified: directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/BranchNode.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/BranchNode.java?rev=190873&r1=190872&r2=190873&view=diff
==============================================================================
--- directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/BranchNode.java (original)
+++ directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/BranchNode.java Wed Jun 15 22:48:24 2005
@@ -1,369 +1,401 @@
-/*
- *   Copyright 2004 The Apache Software Foundation
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- */
-
-/*
- * $Id: BranchNode.java,v 1.14 2003/10/14 04:59:23 akarasulu Exp $
- *
- * -- (c) LDAPd Group                                                    --
- * -- Please refer to the LICENSE.txt file in the root directory of      --
- * -- any LDAPd project for copyright and distribution information.      --
- * 
- */
-
-package org.apache.ldap.common.filter ;
-
-
-import java.util.ArrayList ;
-import java.math.BigInteger ;
-
-
-/**
- * Node representing branches within the expression tree corresponding to 
- * logical operators within the filter expression.
- * 
- * @author <a href="mailto:aok123@bellsouth.net">Alex Karasulu</a>
- * @author $Author: akarasulu $
- * @version $Revision$
- */
-public class BranchNode
-    extends AbstractExprNode
-{
-    /** logical operator for this branch node */ 
-    private final int m_operator ;
-    /** child node list for this branch node */
-    private ArrayList m_children = null ;
-
-
-    /**
-     * Creates a BranchNode using a logical operator and a list of children.
-     *
-     * @param an_operator the logical operator to use for this branch node.
-     * @param a_childList the child nodes under this branch node.
-     */
-    public BranchNode( int an_operator, ArrayList a_childList )
-    {
-        super ( an_operator ) ;
-        
-        if ( null == a_childList ) 
-        {
-            m_children = new ArrayList( 2 ) ;
-        } 
-        else  
-        {
-            m_children = a_childList ;
-        }
-
-        m_operator = an_operator ;
-
-        switch( m_operator ) 
-        {
-        case( AND ):
-            break ;
-        case( NOT ):
-            break ;
-        case( OR ):
-            break ;
-        default:
-            throw new IllegalArgumentException(
-                "Logical operator argument in constructor is undefined." ) ;
-        }
-    }
-
-
-    /**
-     * Creates a BranchNode using a logical operator.
-     *
-     * @param an_operator the logical operator to use for this branch node.
-     */
-    public BranchNode( int an_operator )
-    {
-        this( an_operator, null ) ;
-    }
-
-
-    /**
-     * Adds a child node to this branch node if it allows it.  Some branch nodes
-     * like the negation node does not allow more than one child.  An attempt to
-     * add more than one node to a negation branch node will result in an 
-     * IllegalStateException.
-     *
-     * @param a_node the child expression to add to this branch node
-     */
-    public void addNode( ExprNode a_node )
-    {
-        if ( NOT == m_operator && m_children.size() >= 1 )
-        {
-            throw new IllegalStateException( "Cannot add more than one element"
-                + " to a negation node." ) ;
-        }
-        
-        m_children.add( a_node ) ;
-    }
-
-
-    /**
-     * Adds a child node to this branch node if it allows it at the head rather
-     * than the tail.  Some branch nodes like the negation node does not allow
-     * more than one child.  An attempt to add more than one node to a negation
-     * branch node will result in an IllegalStateException.
-     *
-     * @param a_node the child expression to add to this branch node
-     */
-    public void addNodeToHead( ExprNode a_node )
-    {
-        if ( NOT == m_operator && m_children.size() >= 1 )
-        {
-            throw new IllegalStateException( "Cannot add more than one element"
-                + " to a negation node." ) ;
-        }
-
-        m_children.add( 0, a_node ) ;
-    }
-
-
-    /**
-     * @see org.apache.ldap.common.filter.ExprNode#isLeaf()
-     * @return false all the time.
-     */
-    public final boolean isLeaf()
-    {
-        return false ;
-    }
-
-
-    /**
-     * Gets the children below this BranchNode.
-     * We purposefully do not clone the array list so that backends can sort the
-     * order of children using their own search optimization algorithms.  We
-     * want backends and other parts of the system to be able to induce side
-     * effects on the tree structure.
-     * 
-     * @return the list of child nodes under this branch node.
-     */
-    public ArrayList getChildren()
-    {
-        return m_children ;
-    }
-    
-    
-    /**
-     * Convenience method that gets the first child in the children array.  Its
-     * very useful for NOT nodes since they only have one child by avoiding code
-     * that looks like: <code> ( ExprNode ) m_children.get( 0 ) </code> 
-     *
-     * @return the first child
-     */
-    public ExprNode getChild()
-    {
-        return ( ExprNode ) m_children.get( 0 ) ;
-    }
-
-
-    /**
-     * Sets the list of children under this node.
-     * 
-     * @param a_list the list of children to set.
-     */
-    void setChildren( ArrayList a_list )
-    {
-        m_children = a_list ;
-    }
-
-
-    /**
-     * Gets the operator for this branch node.
-     *
-     * @return the operator constant.
-     */
-    public int getOperator()
-    {
-        return m_operator ;
-    }
-
-
-    /**
-     * Tests whether or not this node is a disjunction (a OR'ed branch).
-     *
-     * @return true if the operation is a OR, false otherwise.
-     */
-    public boolean isDisjunction()
-    {
-        return OR == m_operator ;
-    }
-
-
-    /**
-     * Tests whether or not this node is a conjunction (a AND'ed branch).
-     *
-     * @return true if the operation is a AND, false otherwise.
-     */
-    public boolean isConjunction()
-    {
-        return AND == m_operator ;
-    }
-
-
-    /**
-     * Tests whether or not this node is a negation (a NOT'ed branch).
-     *
-     * @return true if the operation is a NOT, false otherwise.
-     */
-    public final boolean isNegation()
-    {
-        return NOT == m_operator ;
-    }
-
-
-    /**
-     * Recursively prints the String representation of this node and all its 
-     * descendents to a buffer.  
-     *
-     * @see org.apache.ldap.common.filter.ExprNode#printToBuffer(java.lang.StringBuffer)
-     */
-    public void printToBuffer( StringBuffer a_buf )
-    {
-        a_buf.append( '(' ) ;
-
-        switch( m_operator ) 
-        {
-        case( AND ):
-            a_buf.append( "& " ) ;
-            break ;
-        case( NOT ):
-            a_buf.append( "! " ) ;
-            break ;
-        case( OR ):
-            a_buf.append( "| " ) ;
-            break ;
-        default:
-            a_buf.append( "UNKNOWN" ) ;
-        }
-
-        for ( int ii = 0; ii < m_children.size(); ii++ ) 
-        {
-            ( ( ExprNode ) m_children.get( ii ) ).printToBuffer( a_buf ) ;
-        }
-
-        a_buf.append( ')' ) ;
-        if ( null != getAnnotations() 
-            && getAnnotations().containsKey( "count" ) ) 
-        {
-            a_buf.append( '[' ) ;
-            a_buf.append( ( ( BigInteger ) 
-                getAnnotations().get( "count" ) ).toString() ) ;
-            a_buf.append( "] " ) ;
-        } 
-        else 
-        {
-            a_buf.append( ' ' ) ;
-        }
-    }
-
-
-    /**
-     * Gets a human readable representation for the operators: AND for '&', OR
-     * for '|' and NOT for '!'.
-     *
-     * @param a_operator the operator constant.
-     * @return one of the strings AND, OR, or NOT. 
-     */
-    public static String getOperatorString( int a_operator )
-    {
-        String l_opstr = null ;
-
-        switch( a_operator ) 
-        {
-        case( AND ):
-            l_opstr = "AND" ;
-            break ;
-        case( NOT ):
-            l_opstr = "NOT" ;
-            break ;
-        case( OR ):
-            l_opstr = "OR" ;
-            break ;
-        default:
-            l_opstr = "UNKNOWN" ;
-        }
-
-        return l_opstr ;
-    }
-
-
-    /**
-     * Gets the recursive prefix string represent of the filter from this node
-     * down.
-     *
-     * @see java.lang.Object#toString()
-     */
-    public String toString()
-    {
-        StringBuffer l_buf = new StringBuffer() ;
-        l_buf.append( getOperatorString( m_operator ) ) ;
-        if ( null != getAnnotations() 
-            && getAnnotations().containsKey( "count" ) ) 
-        {
-            l_buf.append( '[' ) ;
-            l_buf.append( ( ( BigInteger ) 
-                getAnnotations().get( "count" ) ).toString() ) ;
-            l_buf.append( "] " ) ;
-        } 
-        else 
-        {
-            l_buf.append( ' ' ) ;
-        }
-
-        return l_buf.toString() ;
-    }
-    
-
-    /**
-     * @see org.apache.ldap.common.filter.ExprNode#accept(
-     * org.apache.ldap.common.filter.FilterVisitor)
-     */
-    public void accept( FilterVisitor a_visitor )
-    {
-        if ( a_visitor.isPrefix() )
-        {
-            ArrayList l_children = a_visitor.getOrder( this, m_children ) ;
-            
-            if ( a_visitor.canVisit( this ) ) 
-            {
-                a_visitor.visit( this ) ;
-            }
-
-            for ( int ii = 0; ii < l_children.size(); ii++ )
-            {
-                ( ( ExprNode ) l_children.get( ii ) ).accept( a_visitor ) ;
-            }
-        }
-        else 
-        {
-            ArrayList l_children = a_visitor.getOrder( this, m_children ) ;
-            
-            for ( int ii = 0; ii < l_children.size(); ii++ )
-            {
-                ( ( ExprNode ) l_children.get( ii ) ).accept( a_visitor ) ;
-            }
-            
-            if ( a_visitor.canVisit( this ) )
-            {
-                a_visitor.visit( this ) ;
-            }
-        }
-    }
-}
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+package org.apache.ldap.common.filter ;
+
+
+import java.util.ArrayList ;
+import java.math.BigInteger ;
+
+
+/**
+ * Node representing branches within the expression tree corresponding to 
+ * logical operators within the filter expression.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class BranchNode extends AbstractExprNode
+{
+    /** logical operator for this branch node */ 
+    private final int m_operator ;
+    /** child node list for this branch node */
+    private ArrayList m_children = null ;
+
+
+    /**
+     * Creates a BranchNode using a logical operator and a list of children.
+     *
+     * @param an_operator the logical operator to use for this branch node.
+     * @param a_childList the child nodes under this branch node.
+     */
+    public BranchNode( int an_operator, ArrayList a_childList )
+    {
+        super ( an_operator ) ;
+        
+        if ( null == a_childList ) 
+        {
+            m_children = new ArrayList( 2 ) ;
+        } 
+        else  
+        {
+            m_children = a_childList ;
+        }
+
+        m_operator = an_operator ;
+
+        switch( m_operator ) 
+        {
+        case( AND ):
+            break ;
+        case( NOT ):
+            break ;
+        case( OR ):
+            break ;
+        default:
+            throw new IllegalArgumentException(
+                "Logical operator argument in constructor is undefined." ) ;
+        }
+    }
+
+
+    /**
+     * Creates a BranchNode using a logical operator.
+     *
+     * @param an_operator the logical operator to use for this branch node.
+     */
+    public BranchNode( int an_operator )
+    {
+        this( an_operator, null ) ;
+    }
+
+
+    /**
+     * Adds a child node to this branch node if it allows it.  Some branch nodes
+     * like the negation node does not allow more than one child.  An attempt to
+     * add more than one node to a negation branch node will result in an 
+     * IllegalStateException.
+     *
+     * @param a_node the child expression to add to this branch node
+     */
+    public void addNode( ExprNode a_node )
+    {
+        if ( NOT == m_operator && m_children.size() >= 1 )
+        {
+            throw new IllegalStateException( "Cannot add more than one element"
+                + " to a negation node." ) ;
+        }
+        
+        m_children.add( a_node ) ;
+    }
+
+
+    /**
+     * Adds a child node to this branch node if it allows it at the head rather
+     * than the tail.  Some branch nodes like the negation node does not allow
+     * more than one child.  An attempt to add more than one node to a negation
+     * branch node will result in an IllegalStateException.
+     *
+     * @param a_node the child expression to add to this branch node
+     */
+    public void addNodeToHead( ExprNode a_node )
+    {
+        if ( NOT == m_operator && m_children.size() >= 1 )
+        {
+            throw new IllegalStateException( "Cannot add more than one element"
+                + " to a negation node." ) ;
+        }
+
+        m_children.add( 0, a_node ) ;
+    }
+
+
+    /**
+     * @see org.apache.ldap.common.filter.ExprNode#isLeaf()
+     * @return false all the time.
+     */
+    public final boolean isLeaf()
+    {
+        return false ;
+    }
+
+
+    /**
+     * Gets the children below this BranchNode.
+     * We purposefully do not clone the array list so that backends can sort the
+     * order of children using their own search optimization algorithms.  We
+     * want backends and other parts of the system to be able to induce side
+     * effects on the tree structure.
+     * 
+     * @return the list of child nodes under this branch node.
+     */
+    public ArrayList getChildren()
+    {
+        return m_children ;
+    }
+    
+    
+    /**
+     * Convenience method that gets the first child in the children array.  Its
+     * very useful for NOT nodes since they only have one child by avoiding code
+     * that looks like: <code> ( ExprNode ) m_children.get( 0 ) </code> 
+     *
+     * @return the first child
+     */
+    public ExprNode getChild()
+    {
+        return ( ExprNode ) m_children.get( 0 ) ;
+    }
+
+
+    /**
+     * Sets the list of children under this node.
+     * 
+     * @param a_list the list of children to set.
+     */
+    void setChildren( ArrayList a_list )
+    {
+        m_children = a_list ;
+    }
+
+
+    /**
+     * Gets the operator for this branch node.
+     *
+     * @return the operator constant.
+     */
+    public int getOperator()
+    {
+        return m_operator ;
+    }
+
+
+    /**
+     * Tests whether or not this node is a disjunction (a OR'ed branch).
+     *
+     * @return true if the operation is a OR, false otherwise.
+     */
+    public boolean isDisjunction()
+    {
+        return OR == m_operator ;
+    }
+
+
+    /**
+     * Tests whether or not this node is a conjunction (a AND'ed branch).
+     *
+     * @return true if the operation is a AND, false otherwise.
+     */
+    public boolean isConjunction()
+    {
+        return AND == m_operator ;
+    }
+
+
+    /**
+     * Tests whether or not this node is a negation (a NOT'ed branch).
+     *
+     * @return true if the operation is a NOT, false otherwise.
+     */
+    public final boolean isNegation()
+    {
+        return NOT == m_operator ;
+    }
+
+
+    /**
+     * Recursively prints the String representation of this node and all its 
+     * descendents to a buffer.  
+     *
+     * @see org.apache.ldap.common.filter.ExprNode#printToBuffer(java.lang.StringBuffer)
+     */
+    public void printToBuffer( StringBuffer a_buf )
+    {
+        a_buf.append( '(' ) ;
+
+        switch( m_operator ) 
+        {
+        case( AND ):
+            a_buf.append( "& " ) ;
+            break ;
+        case( NOT ):
+            a_buf.append( "! " ) ;
+            break ;
+        case( OR ):
+            a_buf.append( "| " ) ;
+            break ;
+        default:
+            a_buf.append( "UNKNOWN" ) ;
+        }
+
+        for ( int ii = 0; ii < m_children.size(); ii++ ) 
+        {
+            ( ( ExprNode ) m_children.get( ii ) ).printToBuffer( a_buf ) ;
+        }
+
+        a_buf.append( ')' ) ;
+        if ( null != getAnnotations() 
+            && getAnnotations().containsKey( "count" ) ) 
+        {
+            a_buf.append( '[' ) ;
+            a_buf.append( ( ( BigInteger ) 
+                getAnnotations().get( "count" ) ).toString() ) ;
+            a_buf.append( "] " ) ;
+        } 
+        else 
+        {
+            a_buf.append( ' ' ) ;
+        }
+    }
+
+
+    /**
+     * Gets a human readable representation for the operators: AND for '&', OR
+     * for '|' and NOT for '!'.
+     *
+     * @param a_operator the operator constant.
+     * @return one of the strings AND, OR, or NOT. 
+     */
+    public static String getOperatorString( int a_operator )
+    {
+        String l_opstr = null ;
+
+        switch( a_operator ) 
+        {
+        case( AND ):
+            l_opstr = "AND" ;
+            break ;
+        case( NOT ):
+            l_opstr = "NOT" ;
+            break ;
+        case( OR ):
+            l_opstr = "OR" ;
+            break ;
+        default:
+            l_opstr = "UNKNOWN" ;
+        }
+
+        return l_opstr ;
+    }
+
+
+    /**
+     * Gets the recursive prefix string represent of the filter from this node
+     * down.
+     *
+     * @see java.lang.Object#toString()
+     */
+    public String toString()
+    {
+        StringBuffer l_buf = new StringBuffer() ;
+        l_buf.append( getOperatorString( m_operator ) ) ;
+        if ( null != getAnnotations() 
+            && getAnnotations().containsKey( "count" ) ) 
+        {
+            l_buf.append( '[' ) ;
+            l_buf.append( ( ( BigInteger ) 
+                getAnnotations().get( "count" ) ).toString() ) ;
+            l_buf.append( "] " ) ;
+        } 
+        else 
+        {
+            l_buf.append( ' ' ) ;
+        }
+
+        return l_buf.toString() ;
+    }
+    
+
+    /**
+     * @see org.apache.ldap.common.filter.ExprNode#accept(
+     * org.apache.ldap.common.filter.FilterVisitor)
+     */
+    public void accept( FilterVisitor a_visitor )
+    {
+        if ( a_visitor.isPrefix() )
+        {
+            ArrayList l_children = a_visitor.getOrder( this, m_children ) ;
+            
+            if ( a_visitor.canVisit( this ) ) 
+            {
+                a_visitor.visit( this ) ;
+            }
+
+            for ( int ii = 0; ii < l_children.size(); ii++ )
+            {
+                ( ( ExprNode ) l_children.get( ii ) ).accept( a_visitor ) ;
+            }
+        }
+        else 
+        {
+            ArrayList l_children = a_visitor.getOrder( this, m_children ) ;
+            
+            for ( int ii = 0; ii < l_children.size(); ii++ )
+            {
+                ( ( ExprNode ) l_children.get( ii ) ).accept( a_visitor ) ;
+            }
+            
+            if ( a_visitor.canVisit( this ) )
+            {
+                a_visitor.visit( this ) ;
+            }
+        }
+    }
+    
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals(Object other)
+    {
+        if ( null == other )
+        {
+            return false;
+        }
+
+        if ( this == other )
+        {
+            return true;
+        }
+        
+        if ( ! ( other instanceof BranchNode ) )
+        {
+            return false;
+        }
+        
+        if ( ! super.equals( other ) )
+        {
+            return false;
+        }
+
+        BranchNode otherExprNode = ( BranchNode ) other;
+        
+        ArrayList otherChildren = otherExprNode.getChildren();
+
+        if ( otherExprNode.getOperator() != m_operator )
+        {
+            return false;
+        }
+
+        if ( otherChildren == m_children )
+        {
+            return true;
+        }
+
+        return ( null != m_children && null != otherChildren ) &&
+            m_children.equals( otherChildren );
+    }
+}

Modified: directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/LeafNode.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/LeafNode.java?rev=190873&r1=190872&r2=190873&view=diff
==============================================================================
--- directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/LeafNode.java (original)
+++ directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/LeafNode.java Wed Jun 15 22:48:24 2005
@@ -1,26 +1,17 @@
-/*
- *   Copyright 2004 The Apache Software Foundation
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- */
-
 /*
- * $Id: LeafNode.java,v 1.8 2003/10/14 04:59:23 akarasulu Exp $
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
  *
- * -- (c) LDAPd Group
- * -- Please refer to the LICENSE.txt file in the root directory of      --
- * -- any LDAPd project for copyright and distribution information.      --
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
  *
  */
 package org.apache.ldap.common.filter;
@@ -29,9 +20,8 @@
 /**
  * Abstract base class for leaf nodes within the expression filter tree. 
  *
- * @author <a href="mailto:aok123@bellsouth.net">Alex Karasulu</a>
- * @author $author$
- * @version $Revision$
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
  */
 public abstract class LeafNode extends AbstractExprNode
 {
@@ -47,6 +37,7 @@
     protected LeafNode( String a_attribute, int a_type )
     {
         super ( a_type ) ;
+
         m_attribute = a_attribute ;
     }
 
@@ -70,5 +61,34 @@
     public final String getAttribute(  )
     {
         return m_attribute ;
+    }
+
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals(Object other)
+    {
+        if ( null == other )
+        {
+            return false;
+        }
+
+        if ( this == other )
+        {
+            return true;
+        }
+        
+        if ( ! ( other instanceof LeafNode ) )
+        {
+            return false;
+        }
+        
+        if ( ! super.equals( other ) )
+        {
+            return false;
+        }
+
+        return m_attribute.equals( ( ( LeafNode ) other ).getAttribute() );
     }
 }

Modified: directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/SimpleNode.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/SimpleNode.java?rev=190873&r1=190872&r2=190873&view=diff
==============================================================================
--- directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/SimpleNode.java (original)
+++ directory/shared/ldap/trunk/common/src/java/org/apache/ldap/common/filter/SimpleNode.java Wed Jun 15 22:48:24 2005
@@ -1,172 +1,200 @@
-/*
- *   Copyright 2004 The Apache Software Foundation
- *
- *   Licensed under the Apache License, Version 2.0 (the "License");
- *   you may not use this file except in compliance with the License.
- *   You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *   Unless required by applicable law or agreed to in writing, software
- *   distributed under the License is distributed on an "AS IS" BASIS,
- *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *   See the License for the specific language governing permissions and
- *   limitations under the License.
- *
- */
-
-/*
- * $Id: SimpleNode.java,v 1.8 2003/10/14 04:59:23 akarasulu Exp $
- *
- * -- (c) LDAPd Group
- * -- Please refer to the LICENSE.txt file in the root directory of      --
- * -- any LDAPd project for copyright and distribution information.      --
- *
- */
-package org.apache.ldap.common.filter ;
-
-
-/**
- * A simple assertion value node.
- *
- * @author <a href="mailto:aok123@bellsouth.net">Alex Karasulu</a>
- * @author $author$
- * @version $Revision$
- */
-public class SimpleNode extends LeafNode
-{
-    /** the value */
-    private final String m_value ;
-
-
-    /**
-     * Creates a new SimpleNode object.
-     *
-     * @param a_attribute the attribute name
-     * @param a_value the value to test for 
-     * @param a_type the type of the assertion
-     */
-    public SimpleNode( String a_attribute, String a_value, int a_type )
-    {
-        super( a_attribute, a_type ) ;
-        m_value = a_value ;
-
-        switch ( a_type )
-        {
-        case ( APPROXIMATE ):
-            break ;
-
-        case ( EQUALITY ):
-            break ;
-
-        case ( EXTENSIBLE ):
-            throw new IllegalArgumentException( "Assertion type supplied is "
-                + "extensible.  Use ExtensibleNode instead." ) ;
-
-        case ( GREATEREQ ):
-            break ;
-
-        case ( LESSEQ ):
-            break ;
-
-        case ( PRESENCE ):
-            throw new IllegalArgumentException( "Assertion type supplied is "
-                + "presence.  Use PresenceNode instead." ) ;
-
-        case ( SUBSTRING ):
-            throw new IllegalArgumentException( "Assertion type supplied is "
-                + "substring.  Use SubstringNode instead." ) ;
-
-        default:
-            throw new IllegalArgumentException( 
-                "Attribute value assertion type is undefined." ) ;
-        }
-    }
-
-    /**
-     * Gets the value.
-     *
-     * @return the value
-     */
-    public final String getValue()
-    {
-        return m_value ;
-    }
-
-
-    /**
-     * @see org.apache.ldap.common.filter.ExprNode#printToBuffer(
-     * java.lang.StringBuffer)
-     */
-    public void printToBuffer( StringBuffer a_buf )
-    {
-        a_buf.append( '(' ).append( getAttribute() ) ;
-
-        switch ( getAssertionType() )
-        {
-        case ( APPROXIMATE ):
-            a_buf.append( "~=" ) ;
-
-            break ;
-
-        case ( EQUALITY ):
-            a_buf.append( "=" ) ;
-
-            break ;
-
-        case ( GREATEREQ ):
-            a_buf.append( ">=" ) ;
-
-            break ;
-
-        case ( LESSEQ ):
-            a_buf.append( "<=" ) ;
-
-            break ;
-
-        default:
-            a_buf.append( "UNKNOWN" ) ;
-        }
-
-
-        a_buf.append( m_value ) ;
-        a_buf.append( ')' ) ;
-
-        if ( ( null != getAnnotations() )
-                && getAnnotations().containsKey( "count" ) )
-        {
-            a_buf.append( '[' ) ;
-            a_buf.append( getAnnotations().get( "count" ).toString() ) ;
-            a_buf.append( "] " ) ;
-        }
-        else
-        {
-            a_buf.append( ' ' ) ;
-        }
-    }
-
-
-    /**
-     * @see java.lang.Object#toString()
-     */
-    public String toString()
-    {
-        StringBuffer l_buf = new StringBuffer() ;
-        printToBuffer( l_buf ) ;
-
-        return ( l_buf.toString() ) ;
-    }
-
-
-    /**
-     * @see org.apache.ldap.common.filter.ExprNode#accept(
-     * org.apache.ldap.common.filter.FilterVisitor)
-     */
-    public void accept( FilterVisitor a_visitor )
-    {
-        if ( a_visitor.canVisit( this ) ) 
-        {
-            a_visitor.visit( this ) ;
-        }
-    }
-}
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+/*
+ * $Id: SimpleNode.java,v 1.8 2003/10/14 04:59:23 akarasulu Exp $
+ *
+ * -- (c) LDAPd Group
+ * -- Please refer to the LICENSE.txt file in the root directory of      --
+ * -- any LDAPd project for copyright and distribution information.      --
+ *
+ */
+package org.apache.ldap.common.filter ;
+
+
+/**
+ * A simple assertion value node.
+ *
+ * @author <a href="mailto:aok123@bellsouth.net">Alex Karasulu</a>
+ * @author $author$
+ * @version $Revision$
+ */
+public class SimpleNode extends LeafNode
+{
+    /** the value */
+    private final String m_value ;
+
+
+    /**
+     * Creates a new SimpleNode object.
+     *
+     * @param a_attribute the attribute name
+     * @param a_value the value to test for 
+     * @param a_type the type of the assertion
+     */
+    public SimpleNode( String a_attribute, String a_value, int a_type )
+    {
+        super( a_attribute, a_type ) ;
+        m_value = a_value ;
+
+        switch ( a_type )
+        {
+        case ( APPROXIMATE ):
+            break ;
+
+        case ( EQUALITY ):
+            break ;
+
+        case ( EXTENSIBLE ):
+            throw new IllegalArgumentException( "Assertion type supplied is "
+                + "extensible.  Use ExtensibleNode instead." ) ;
+
+        case ( GREATEREQ ):
+            break ;
+
+        case ( LESSEQ ):
+            break ;
+
+        case ( PRESENCE ):
+            throw new IllegalArgumentException( "Assertion type supplied is "
+                + "presence.  Use PresenceNode instead." ) ;
+
+        case ( SUBSTRING ):
+            throw new IllegalArgumentException( "Assertion type supplied is "
+                + "substring.  Use SubstringNode instead." ) ;
+
+        default:
+            throw new IllegalArgumentException( 
+                "Attribute value assertion type is undefined." ) ;
+        }
+    }
+
+    /**
+     * Gets the value.
+     *
+     * @return the value
+     */
+    public final String getValue()
+    {
+        return m_value ;
+    }
+
+
+    /**
+     * @see org.apache.ldap.common.filter.ExprNode#printToBuffer(
+     * java.lang.StringBuffer)
+     */
+    public void printToBuffer( StringBuffer a_buf )
+    {
+        a_buf.append( '(' ).append( getAttribute() ) ;
+
+        switch ( getAssertionType() )
+        {
+        case ( APPROXIMATE ):
+            a_buf.append( "~=" ) ;
+
+            break ;
+
+        case ( EQUALITY ):
+            a_buf.append( "=" ) ;
+
+            break ;
+
+        case ( GREATEREQ ):
+            a_buf.append( ">=" ) ;
+
+            break ;
+
+        case ( LESSEQ ):
+            a_buf.append( "<=" ) ;
+
+            break ;
+
+        default:
+            a_buf.append( "UNKNOWN" ) ;
+        }
+
+
+        a_buf.append( m_value ) ;
+        a_buf.append( ')' ) ;
+
+        if ( ( null != getAnnotations() )
+                && getAnnotations().containsKey( "count" ) )
+        {
+            a_buf.append( '[' ) ;
+            a_buf.append( getAnnotations().get( "count" ).toString() ) ;
+            a_buf.append( "] " ) ;
+        }
+        else
+        {
+            a_buf.append( ' ' ) ;
+        }
+    }
+
+
+    /**
+     * @see java.lang.Object#toString()
+     */
+    public String toString()
+    {
+        StringBuffer l_buf = new StringBuffer() ;
+        printToBuffer( l_buf ) ;
+
+        return ( l_buf.toString() ) ;
+    }
+
+
+    /**
+     * @see org.apache.ldap.common.filter.ExprNode#accept(
+     * org.apache.ldap.common.filter.FilterVisitor)
+     */
+    public void accept( FilterVisitor a_visitor )
+    {
+        if ( a_visitor.canVisit( this ) ) 
+        {
+            a_visitor.visit( this ) ;
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals(Object other)
+    {
+        if ( null == other )
+        {
+            return false;
+        }
+
+        if ( this == other )
+        {
+            return true;
+        }
+
+        if ( ! ( other instanceof SimpleNode ) )
+        {
+            return false;
+        }
+        
+        if ( ! super.equals( other ) )
+        {
+            return false;
+        }
+        
+        return m_value.equals( ( ( SimpleNode ) other ).getValue() );
+    }
+}