You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by lu...@apache.org on 2015/01/24 22:39:59 UTC

svn commit: r1654581 - in /directory/shared/trunk/ldap/client/api/src: main/java/org/apache/directory/ldap/client/api/search/ test/java/org/apache/directory/ldap/client/api/search/

Author: lucastheisen
Date: Sat Jan 24 21:39:58 2015
New Revision: 1654581

URL: http://svn.apache.org/r1654581
Log:
DIRAPI-165: Add a FilterBuillder


Added:
    directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/
    directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AbstractFilter.java   (with props)
    directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AttributeFilter.java   (with props)
    directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AttributeValueAssertionFilter.java   (with props)
    directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/Filter.java   (with props)
    directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/FilterBuilder.java   (with props)
    directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/SetOfFiltersFilter.java   (with props)
    directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/UnaryFilter.java   (with props)
    directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/
    directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/AttributeFilterTest.java   (with props)
    directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/AttributeValueAssertionTest.java   (with props)
    directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/FilterBuilderTest.java   (with props)
    directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/SetOfFiltersFilterTest.java   (with props)
    directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/UnaryFilterTest.java   (with props)

Added: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AbstractFilter.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AbstractFilter.java?rev=1654581&view=auto
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AbstractFilter.java (added)
+++ directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AbstractFilter.java Sat Jan 24 21:39:58 2015
@@ -0,0 +1,11 @@
+
+package org.apache.directory.ldap.client.api.search;
+
+abstract class AbstractFilter implements Filter
+{
+    @Override
+    public StringBuilder build()
+    {
+        return build( new StringBuilder() );
+    }
+}

Propchange: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AbstractFilter.java
------------------------------------------------------------------------------
    svn:executable = *

Added: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AttributeFilter.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AttributeFilter.java?rev=1654581&view=auto
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AttributeFilter.java (added)
+++ directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AttributeFilter.java Sat Jan 24 21:39:58 2015
@@ -0,0 +1,48 @@
+package org.apache.directory.ldap.client.api.search;
+
+
+class AttributeFilter extends AbstractFilter
+{
+    private String attribute;
+    private Operator operator;
+
+
+    private AttributeFilter( String attribute, Operator operator )
+    {
+        this.attribute = attribute;
+        this.operator = operator;
+    }
+
+
+    public static AttributeFilter present( String attribute )
+    {
+        return new AttributeFilter( attribute, Operator.PRESENT );
+    }
+
+
+    @Override
+    public StringBuilder build( StringBuilder builder )
+    {
+        return builder.append( "(" ).append( attribute )
+            .append( operator.operator() ).append( ")" );
+    }
+
+    public static enum Operator
+    {
+        PRESENT("=*");
+
+        private String operator;
+
+
+        private Operator( String operator )
+        {
+            this.operator = operator;
+        }
+
+
+        public String operator()
+        {
+            return operator;
+        }
+    }
+}
\ No newline at end of file

Propchange: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AttributeFilter.java
------------------------------------------------------------------------------
    svn:executable = *

Added: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AttributeValueAssertionFilter.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AttributeValueAssertionFilter.java?rev=1654581&view=auto
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AttributeValueAssertionFilter.java (added)
+++ directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AttributeValueAssertionFilter.java Sat Jan 24 21:39:58 2015
@@ -0,0 +1,72 @@
+
+package org.apache.directory.ldap.client.api.search;
+
+
+class AttributeValueAssertionFilter extends AbstractFilter
+{
+    private String attribute;
+    private String value;
+    private Operator operator;
+    
+    
+    private AttributeValueAssertionFilter( String attribute, String value, Operator operator )
+    {
+        this.attribute = attribute;
+        this.value = value;
+        this.operator = operator;
+    }
+    
+    
+    public static AttributeValueAssertionFilter approximatelyEqual( String attribute, String value ) 
+    {
+        return new AttributeValueAssertionFilter( attribute, value, Operator.APPROXIMATELY_EQUAL );
+    }
+    
+    
+    public static AttributeValueAssertionFilter equal( String attribute, String value ) 
+    {
+        return new AttributeValueAssertionFilter( attribute, value, Operator.EQUAL );
+    }
+    
+    
+    public static AttributeValueAssertionFilter greaterThanOrEqual( String attribute, String value ) 
+    {
+        return new AttributeValueAssertionFilter( attribute, value, Operator.GREATER_THAN_OR_EQUAL );
+    }
+    
+    
+    public static AttributeValueAssertionFilter lessThanOrEqual( String attribute, String value ) 
+    {
+        return new AttributeValueAssertionFilter( attribute, value, Operator.LESS_THAN_OR_EQUAL );
+    }
+    
+
+    @Override
+    public StringBuilder build( StringBuilder builder )
+    {
+        return builder.append( "(" ).append( attribute )
+                .append( operator.operator() )
+                .append( value ).append( ")" );
+    }
+
+
+    public static enum Operator
+    {
+        APPROXIMATELY_EQUAL("~="),
+        EQUAL("="),
+        GREATER_THAN_OR_EQUAL(">="),
+        LESS_THAN_OR_EQUAL("<=");
+        
+        private String operator;
+        
+        private Operator( String operator ) 
+        {
+            this.operator = operator;
+        }
+        
+        public String operator() 
+        {
+            return operator;
+        }
+    }
+}
\ No newline at end of file

Propchange: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/AttributeValueAssertionFilter.java
------------------------------------------------------------------------------
    svn:executable = *

Added: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/Filter.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/Filter.java?rev=1654581&view=auto
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/Filter.java (added)
+++ directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/Filter.java Sat Jan 24 21:39:58 2015
@@ -0,0 +1,10 @@
+package org.apache.directory.ldap.client.api.search;
+
+
+interface Filter
+{
+    public StringBuilder build();
+
+
+    public StringBuilder build( StringBuilder builder );
+}
\ No newline at end of file

Propchange: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/Filter.java
------------------------------------------------------------------------------
    svn:executable = *

Added: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/FilterBuilder.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/FilterBuilder.java?rev=1654581&view=auto
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/FilterBuilder.java (added)
+++ directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/FilterBuilder.java Sat Jan 24 21:39:58 2015
@@ -0,0 +1,259 @@
+package org.apache.directory.ldap.client.api.search;
+
+
+/**
+ * A builder for constructing well formed search filters according to
+ * <a href="https://tools.ietf.org/html/rfc1960.html">RFC 1960</a>.  This 
+ * builder is most convenient when you use static imports.  For example:
+ * <pre>
+ * import static org.apache.directory.ldap.client.api.search.FilterBuilder.and;
+ * import static org.apache.directory.ldap.client.api.search.FilterBuilder.equal;
+ * import static org.apache.directory.ldap.client.api.search.FilterBuilder.or;
+ * 
+ * ...
+ * 
+ *         String filter = 
+ *                 or(
+ *                     and( 
+ *                         equal( "givenName", "kermit" ), 
+ *                         equal( "sn", "the frog" ) ),
+ *                     and( 
+ *                         equal( "givenName", "miss" ), 
+ *                         equal( "sn", "piggy" ) ) )
+ *                 .toString()
+ * </pre>
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class FilterBuilder
+{
+    private Filter filter;
+
+
+    private FilterBuilder( Filter filter )
+    {
+        this.filter = filter;
+    }
+
+
+    /**
+     * Returns a new FilterBuilder that will <code>&</code> together all of the 
+     * supplied filters.  For example:
+     * 
+     * <pre>
+     * and( equal( "givenName", "kermit" ), equal( "sn", "the frog" ) ).toString()
+     * </pre>
+     * would result in the string:
+     * <pre>
+     * (&(givenName=kermit)(sn=the frog))
+     * </pre>
+     * 
+     * Which would match all entries with a given name of <code>kermit</code>
+     * and a surname <code>the frog</code>.
+     *
+     * @param filters The filters to and together
+     * @return A new FilterBuilder
+     */
+    public static FilterBuilder and( FilterBuilder... filters )
+    {
+        SetOfFiltersFilter filter = SetOfFiltersFilter.and();
+        for ( FilterBuilder builder : filters )
+        {
+            filter.add( builder.filter() );
+        }
+        return new FilterBuilder( filter );
+    }
+
+
+    /**
+     * Returns a new FilterBuilder for testing the approximate equality of an 
+     * attribute. For example:
+     * 
+     * <pre>
+     * approximatelyEqual( "l", "san fransico" ).toString();
+     * </pre>
+     * would result in the string:
+     * <pre>
+     * (l~=san fransico)
+     * </pre>
+     * 
+     * Which <i>MIGHT</i> match results whose locality is 
+     * <code>San Francisco</code>.  The matching rule used to apply this filter
+     * is dependent on the server implementation.
+     *
+     * @param attribute The attribute 
+     * @param value The value
+     * @return A new FilterBuilder
+     */
+    public static FilterBuilder approximatelyEqual( String attribute, String value )
+    {
+        return new FilterBuilder( AttributeValueAssertionFilter.approximatelyEqual( attribute, value ) );
+    }
+
+
+    /**
+     * Returns a new FilterBuilder for testing equality of an attribute. For 
+     * example:
+     * 
+     * <pre>
+     * equal( "cn", "Kermit The Frog" ).toString();
+     * </pre>
+     * would result in the string:
+     * <pre>
+     * (cn>=Kermit The Frog)
+     * </pre>
+     * 
+     * Which would match entries with the common name 
+     * <code>Kermit The Frog</code>.
+     *
+     * @param attribute The attribute 
+     * @param value The value
+     * @return A new FilterBuilder
+     */
+    public static FilterBuilder equal( String attribute, String value )
+    {
+        return new FilterBuilder( AttributeValueAssertionFilter.equal( attribute, value ) );
+    }
+
+
+    private Filter filter()
+    {
+        return filter;
+    }
+
+
+    /**
+     * Returns a new FilterBuilder for testing lexicographical greater than.  
+     * For example:
+     * 
+     * <pre>
+     * greaterThanOrEqual( "sn", "n" ).toString();
+     * </pre>
+     * would result in the string:
+     * <pre>
+     * (sn>=n)
+     * </pre>
+     * 
+     * which would match results whose surname starts with the second half of
+     * the alphabet.  
+     *
+     * @param attribute The attribute 
+     * @param value The value
+     * @return A new FilterBuilder
+     */
+    public static FilterBuilder greaterThanOrEqual( String attribute, String value )
+    {
+        return new FilterBuilder( AttributeValueAssertionFilter.greaterThanOrEqual( attribute, value ) );
+    }
+
+
+    /**
+     * Returns a new FilterBuilder for testing lexicographical less than.  For
+     * example:
+     * 
+     * <pre>
+     * lessThanOrEqual( "sn", "mzzzzzz" ).toString();
+     * </pre>
+     * would result in the string:
+     * <pre>
+     * (sn<=mzzzzzz)
+     * </pre>
+     * 
+     * which would match results whose surname starts with the first half of
+     * the alphabet.  <i>Note, this is not perfect, but if you know anybody with
+     * a last name that starts with an <code>m</code> followed by six
+     * <code>z</code>'s...</i>
+     *
+     * @param attribute The attribute 
+     * @param value The value
+     * @return A new FilterBuilder
+     */
+    public static FilterBuilder lessThanOrEqual( String attribute, String value )
+    {
+        return new FilterBuilder( AttributeValueAssertionFilter.lessThanOrEqual( attribute, value ) );
+    }
+
+
+    /**
+     * Returns a new FilterBuilder for negating another filter.  For example:
+     * 
+     * <pre>
+     * not( present( "givenName" ) ).toString();
+     * </pre>
+     * would result in the string:
+     * <pre>
+     * (!(givenName=*))
+     * </pre>
+     *
+     * @param filter The filter to negate
+     * @return A new FilterBuilder
+     */
+    public static FilterBuilder not( FilterBuilder filter )
+    {
+        return new FilterBuilder( UnaryFilter.not( filter.filter() ) );
+    }
+
+
+    /**
+     * Returns a new FilterBuilder that will <code>|</code> together all of the 
+     * supplied filters.  For example:
+     * 
+     * <pre>
+     * or( equal( "givenName", "kermit" ), equal( "givenName", "walter" ) ).toString()
+     * </pre>
+     * would result in the string:
+     * <pre>
+     * (|(givenName=kermit)(givenName=walter))
+     * </pre>
+     * 
+     * Which would match any entry with the <code>givenName</code> of either
+     * <code>kermit</code> or <code>walter</code>.
+     *
+     * @param filters The filters to or together
+     * @return A new FilterBuilder
+     */
+    public static FilterBuilder or( FilterBuilder... filters )
+    {
+        SetOfFiltersFilter filter = SetOfFiltersFilter.or();
+        for ( FilterBuilder builder : filters )
+        {
+            filter.add( builder.filter() );
+        }
+        return new FilterBuilder( filter );
+    }
+
+
+    /**
+     * Returns a new FilterBuilder for testing the presence of an attributes.  
+     * For example:
+     * 
+     * <pre>
+     * present( "givenName" ).toString();
+     * </pre>
+     * would result in the string:
+     * <pre>
+     * (givenName=*)
+     * </pre>
+     * 
+     * Which would match any entry that has a <code>givenName</code> attribute.
+     *
+     * @param attribute The attribute to test the presence of
+     * @return A new FilterBuilder
+     */
+    public static FilterBuilder present( String attribute )
+    {
+        return new FilterBuilder( AttributeFilter.present( attribute ) );
+    }
+
+
+    /**
+     * Returns the string version of the filter represented by this FilterBuilder.
+     * 
+     * @return The string representation of the filter
+     */
+    @Override
+    public String toString()
+    {
+        return filter.build().toString();
+    }
+}

Propchange: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/FilterBuilder.java
------------------------------------------------------------------------------
    svn:executable = *

Added: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/SetOfFiltersFilter.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/SetOfFiltersFilter.java?rev=1654581&view=auto
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/SetOfFiltersFilter.java (added)
+++ directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/SetOfFiltersFilter.java Sat Jan 24 21:39:58 2015
@@ -0,0 +1,92 @@
+package org.apache.directory.ldap.client.api.search;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+class SetOfFiltersFilter extends AbstractFilter
+{
+    private Operator operator;
+    private List<Filter> filters;
+
+
+    private SetOfFiltersFilter( Operator operator )
+    {
+        this.operator = operator;
+        this.filters = new ArrayList<Filter>();
+    }
+
+
+    public SetOfFiltersFilter add( Filter filter )
+    {
+        filters.add( filter );
+        return this;
+    }
+
+
+    public SetOfFiltersFilter addAll( Filter... filters )
+    {
+        for ( Filter filter : filters )
+        {
+            this.filters.add( filter );
+        }
+        return this;
+    }
+
+
+    public SetOfFiltersFilter addAll( List<Filter> filters )
+    {
+        this.filters.addAll( filters );
+        return this;
+    }
+
+
+    public static SetOfFiltersFilter and( Filter... filters )
+    {
+        return new SetOfFiltersFilter( Operator.AND ).addAll( filters );
+    }
+
+
+    public static SetOfFiltersFilter or( Filter... filters )
+    {
+        return new SetOfFiltersFilter( Operator.OR ).addAll( filters );
+    }
+
+
+    @Override
+    public StringBuilder build( StringBuilder builder )
+    {
+        if ( filters.isEmpty() )
+        {
+            throw new IllegalStateException( "at least one filter required" );
+        }
+
+        builder.append( "(" ).append( operator.operator() );
+        for ( Filter filter : filters )
+        {
+            filter.build( builder );
+        }
+        return builder.append( ")" );
+    }
+
+    public static enum Operator
+    {
+        AND("&"),
+        OR("|");
+
+        private String operator;
+
+
+        private Operator( String operator )
+        {
+            this.operator = operator;
+        }
+
+
+        public String operator()
+        {
+            return operator;
+        }
+    }
+}
\ No newline at end of file

Propchange: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/SetOfFiltersFilter.java
------------------------------------------------------------------------------
    svn:executable = *

Added: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/UnaryFilter.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/UnaryFilter.java?rev=1654581&view=auto
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/UnaryFilter.java (added)
+++ directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/UnaryFilter.java Sat Jan 24 21:39:58 2015
@@ -0,0 +1,66 @@
+package org.apache.directory.ldap.client.api.search;
+
+
+class UnaryFilter extends AbstractFilter
+{
+    private Operator operator;
+    private Filter filter;
+
+
+    private UnaryFilter( Operator operator )
+    {
+        this.operator = operator;
+    }
+
+
+    public UnaryFilter setFilter( Filter filter )
+    {
+        this.filter = filter;
+        return this;
+    }
+
+
+    public static UnaryFilter not()
+    {
+        return new UnaryFilter( Operator.NOT );
+    }
+
+
+    public static UnaryFilter not( Filter filter )
+    {
+        return not().setFilter( filter );
+    }
+
+
+    @Override
+    public StringBuilder build( StringBuilder builder )
+    {
+        if ( filter == null )
+        {
+            throw new IllegalStateException( "filter not set" );
+        }
+
+        builder.append( "(" ).append( operator.operator() );
+        filter.build( builder );
+        return builder.append( ")" );
+    }
+
+    public static enum Operator
+    {
+        NOT("!");
+
+        private String operator;
+
+
+        private Operator( String operator )
+        {
+            this.operator = operator;
+        }
+
+
+        public String operator()
+        {
+            return operator;
+        }
+    }
+}
\ No newline at end of file

Propchange: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/search/UnaryFilter.java
------------------------------------------------------------------------------
    svn:executable = *

Added: directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/AttributeFilterTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/AttributeFilterTest.java?rev=1654581&view=auto
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/AttributeFilterTest.java (added)
+++ directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/AttributeFilterTest.java Sat Jan 24 21:39:58 2015
@@ -0,0 +1,17 @@
+
+package org.apache.directory.ldap.client.api.search;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+public class AttributeFilterTest
+{
+    @Test
+    public void testPresent() {
+        assertEquals( "(objectClass=*)", AttributeFilter.present( "objectClass" ).build().toString() );
+        assertEquals( "(uid=*)", AttributeFilter.present( "uid" ).build().toString() );
+        assertEquals( "(userPassword=*)", AttributeFilter.present( "userPassword" ).build().toString() );
+        assertEquals( "(cn=*)", AttributeFilter.present( "cn" ).build().toString() );
+    }
+}

Propchange: directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/AttributeFilterTest.java
------------------------------------------------------------------------------
    svn:executable = *

Added: directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/AttributeValueAssertionTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/AttributeValueAssertionTest.java?rev=1654581&view=auto
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/AttributeValueAssertionTest.java (added)
+++ directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/AttributeValueAssertionTest.java Sat Jan 24 21:39:58 2015
@@ -0,0 +1,60 @@
+package org.apache.directory.ldap.client.api.search;
+
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+
+public class AttributeValueAssertionTest
+{
+    @Test
+    public void testApproximatelyEqual()
+    {
+        assertEquals( "(objectClass~=person)",
+            AttributeValueAssertionFilter.approximatelyEqual( "objectClass", "person" )
+                .build().toString() );
+        assertEquals( "(uid~=admin)",
+            AttributeValueAssertionFilter.approximatelyEqual( "uid", "admin" )
+                .build().toString() );
+    }
+    
+    
+    @Test
+    public void testEqual()
+    {
+        assertEquals( "(objectClass=person)",
+            AttributeValueAssertionFilter.equal( "objectClass", "person" )
+                .build().toString() );
+        assertEquals( "(uid=admin)",
+            AttributeValueAssertionFilter.equal( "uid", "admin" )
+                .build().toString() );
+        assertEquals( "(cn=lu*)",
+            AttributeValueAssertionFilter.equal( "cn", "lu*" )
+                .build().toString() );
+    }
+    
+    
+    @Test
+    public void testGreaterThanOrEqual()
+    {
+        assertEquals( "(objectClass>=person)",
+            AttributeValueAssertionFilter.greaterThanOrEqual( "objectClass", "person" )
+                .build().toString() );
+        assertEquals( "(uid>=admin)",
+            AttributeValueAssertionFilter.greaterThanOrEqual( "uid", "admin" )
+                .build().toString() );
+    }
+    
+    
+    @Test
+    public void testLessThanOrEqual()
+    {
+        assertEquals( "(objectClass<=person)",
+            AttributeValueAssertionFilter.lessThanOrEqual( "objectClass", "person" )
+                .build().toString() );
+        assertEquals( "(uid<=admin)",
+            AttributeValueAssertionFilter.lessThanOrEqual( "uid", "admin" )
+                .build().toString() );
+    }
+}

Propchange: directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/AttributeValueAssertionTest.java
------------------------------------------------------------------------------
    svn:executable = *

Added: directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/FilterBuilderTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/FilterBuilderTest.java?rev=1654581&view=auto
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/FilterBuilderTest.java (added)
+++ directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/FilterBuilderTest.java Sat Jan 24 21:39:58 2015
@@ -0,0 +1,26 @@
+package org.apache.directory.ldap.client.api.search;
+
+
+import static org.apache.directory.ldap.client.api.search.FilterBuilder.and;
+import static org.apache.directory.ldap.client.api.search.FilterBuilder.equal;
+import static org.apache.directory.ldap.client.api.search.FilterBuilder.not;
+import static org.apache.directory.ldap.client.api.search.FilterBuilder.or;
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+
+public class FilterBuilderTest
+{
+    @Test
+    public void testFilterBuilder()
+    {
+        assertEquals( "(cn=Babs Jensen)", equal( "cn", "Babs Jensen" ).toString() );
+        assertEquals( "(!(cn=Tim Howes))", not( equal( "cn", "Tim Howes" ) ).toString() );
+        assertEquals( "(&(objectClass=Person)(|(sn=Jensen)(cn=Babs J*)))",
+            and( equal( "objectClass", "Person" ),
+                or( equal( "sn", "Jensen" ),
+                    equal( "cn", "Babs J*" ) ) ).toString() );
+        assertEquals( "(o=univ*of*mich*)", equal( "o", "univ*of*mich*" ).toString() );
+    }
+}

Propchange: directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/FilterBuilderTest.java
------------------------------------------------------------------------------
    svn:executable = *

Added: directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/SetOfFiltersFilterTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/SetOfFiltersFilterTest.java?rev=1654581&view=auto
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/SetOfFiltersFilterTest.java (added)
+++ directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/SetOfFiltersFilterTest.java Sat Jan 24 21:39:58 2015
@@ -0,0 +1,83 @@
+package org.apache.directory.ldap.client.api.search;
+
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+
+import org.junit.Test;
+
+
+public class SetOfFiltersFilterTest
+{
+    private String expected( SetOfFiltersFilter.Operator operator, Filter... filters )
+    {
+        StringBuilder builder = new StringBuilder( "(" )
+            .append( operator.operator() );
+        for ( Filter filter : filters )
+        {
+            filter.build( builder );
+        }
+        return builder.append( ")" ).toString();
+    }
+
+
+    @Test
+    public void testAnd()
+    {
+        AttributeFilter attributeFilter = AttributeFilter.present( "objectClass" );
+        AttributeValueAssertionFilter attributeValueAssertionFilter =
+            AttributeValueAssertionFilter.equal( "objectClass", "person" );
+        String expected = expected( SetOfFiltersFilter.Operator.AND, attributeFilter, attributeValueAssertionFilter );
+
+        assertEquals( expected,
+            SetOfFiltersFilter.and( attributeFilter, attributeValueAssertionFilter )
+                .build().toString() );
+
+        assertEquals( expected,
+            SetOfFiltersFilter.and()
+                .add( attributeFilter )
+                .add( attributeValueAssertionFilter )
+                .build().toString() );
+
+        assertEquals( expected,
+            SetOfFiltersFilter.and()
+                .addAll( attributeFilter, attributeValueAssertionFilter )
+                .build().toString() );
+
+        assertEquals( expected,
+            SetOfFiltersFilter.and()
+                .addAll( Arrays.asList( ( Filter ) attributeFilter, ( Filter ) attributeValueAssertionFilter ) )
+                .build().toString() );
+    }
+
+
+    @Test
+    public void testOr()
+    {
+        AttributeFilter attributeFilter = AttributeFilter.present( "objectClass" );
+        AttributeValueAssertionFilter attributeValueAssertionFilter =
+            AttributeValueAssertionFilter.equal( "objectClass", "person" );
+        String expected = expected( SetOfFiltersFilter.Operator.OR, attributeFilter, attributeValueAssertionFilter );
+
+        assertEquals( expected,
+            SetOfFiltersFilter.or( attributeFilter, attributeValueAssertionFilter )
+                .build().toString() );
+
+        assertEquals( expected,
+            SetOfFiltersFilter.or()
+                .add( attributeFilter )
+                .add( attributeValueAssertionFilter )
+                .build().toString() );
+
+        assertEquals( expected,
+            SetOfFiltersFilter.or()
+                .addAll( attributeFilter, attributeValueAssertionFilter )
+                .build().toString() );
+
+        assertEquals( expected,
+            SetOfFiltersFilter.or()
+                .addAll( Arrays.asList( ( Filter ) attributeFilter, ( Filter ) attributeValueAssertionFilter ) )
+                .build().toString() );
+    }
+}

Propchange: directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/SetOfFiltersFilterTest.java
------------------------------------------------------------------------------
    svn:executable = *

Added: directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/UnaryFilterTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/UnaryFilterTest.java?rev=1654581&view=auto
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/UnaryFilterTest.java (added)
+++ directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/UnaryFilterTest.java Sat Jan 24 21:39:58 2015
@@ -0,0 +1,27 @@
+package org.apache.directory.ldap.client.api.search;
+
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+
+public class UnaryFilterTest
+{
+    @Test
+    public void testNot()
+    {
+        AttributeFilter attributeFilter = AttributeFilter.present( "objectClass" );
+        assertEquals( "(!" + attributeFilter.build().toString() + ")",
+            UnaryFilter.not( attributeFilter ).build().toString() );
+        assertEquals( "(!" + attributeFilter.build().toString() + ")",
+            UnaryFilter.not().setFilter( attributeFilter ).build().toString() );
+
+        AttributeValueAssertionFilter attributeValueAssertionFilter =
+            AttributeValueAssertionFilter.equal( "objectClass", "person" );
+        assertEquals( "(!" + attributeValueAssertionFilter.build().toString() + ")",
+            UnaryFilter.not( attributeValueAssertionFilter ).build().toString() );
+        assertEquals( "(!" + attributeValueAssertionFilter.build().toString() + ")",
+            UnaryFilter.not().setFilter( attributeValueAssertionFilter ).build().toString() );
+    }
+}

Propchange: directory/shared/trunk/ldap/client/api/src/test/java/org/apache/directory/ldap/client/api/search/UnaryFilterTest.java
------------------------------------------------------------------------------
    svn:executable = *