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 2011/01/25 23:42:11 UTC
svn commit: r1063497 [2/3] - in /directory/shared/trunk:
dsml-parser/src/main/java/org/apache/directory/shared/dsmlv2/request/
ldap/src/main/java/org/apache/directory/shared/ldap/codec/
ldap/src/main/java/org/apache/directory/shared/ldap/codec/actions/...
Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/SearchRequestDecorator.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/SearchRequestDecorator.java?rev=1063497&r1=1063496&r2=1063497&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/SearchRequestDecorator.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/decorators/SearchRequestDecorator.java Tue Jan 25 22:42:10 2011
@@ -20,10 +20,21 @@
package org.apache.directory.shared.ldap.codec.decorators;
-import org.apache.directory.shared.ldap.codec.search.Filter;
-import org.apache.directory.shared.ldap.message.SearchRequestImpl;
+import org.apache.directory.shared.asn1.DecoderException;
+import org.apache.directory.shared.asn1.ber.Asn1Container;
+import org.apache.directory.shared.asn1.ber.tlv.TLV;
+import org.apache.directory.shared.ldap.codec.AttributeValueAssertion;
+import org.apache.directory.shared.ldap.codec.LdapConstants;
+import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.search.*;
+import org.apache.directory.shared.ldap.model.entry.Value;
+import org.apache.directory.shared.ldap.model.exception.LdapException;
+import org.apache.directory.shared.ldap.model.filter.*;
import org.apache.directory.shared.ldap.model.message.SearchRequest;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* A decorator for the SearchRequest message
@@ -38,6 +49,18 @@ public class SearchRequestDecorator exte
/** The attributeDescriptionList length */
private int attributeDescriptionListLength;
+ /** A temporary storage for a terminal Filter */
+ private Filter terminalFilter;
+
+ /** The current filter. This is used while decoding a PDU */
+ private Filter currentFilter;
+
+ /** The global filter. This is used while decoding a PDU */
+ private Filter topFilter;
+
+ /** The SearchRequest TLV id */
+ private int tlvId;
+
/**
* Makes a SearchRequest encodable.
@@ -99,7 +122,726 @@ public class SearchRequestDecorator exte
public Filter getCurrentFilter()
{
- // TODO - very very bad move for now to make sure it works but need to remove Impl ref and use interface
- return ( ( SearchRequestImpl ) getSearchRequest() ).getCurrentFilter();
+ return currentFilter;
+ }
+
+
+ /**
+ * Set the SearchRequest PDU TLV's Id
+ * @param tlvId The TLV id
+ */
+ public void setTlvId( int tlvId )
+ {
+ this.tlvId = tlvId;
+ }
+
+
+ /**
+ * Gets the search filter associated with this search request.
+ *
+ * @return the expression node for the root of the filter expression tree.
+ */
+ public ExprNode getFilter()
+ {
+ if ( getSearchRequest().getFilter() == null )
+ {
+ getSearchRequest().setFilter( transform( topFilter ) );
+ }
+
+ return getSearchRequest().getFilter();
+ }
+
+
+ /**
+ * Get the terminal filter
+ *
+ * @return Returns the terminal filter.
+ */
+ public Filter getTerminalFilter()
+ {
+ return terminalFilter;
+ }
+
+
+ /**
+ * Set the terminal filter
+ *
+ * @param terminalFilter the teminalFilter.
+ */
+ public void setTerminalFilter( Filter terminalFilter )
+ {
+ this.terminalFilter = terminalFilter;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setFilter( ExprNode filter )
+ {
+ getSearchRequest().setFilter( filter );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setFilter( String filter ) throws LdapException
+ {
+ getSearchRequest().setFilter( filter );
+ this.currentFilter = transform( getSearchRequest().getFilter() );
+ }
+
+
+ /**
+ * Set the current filter
+ *
+ * @param filter The filter to set.
+ */
+ public void setCurrentFilter( Filter filter )
+ {
+ currentFilter = filter;
+ }
+
+
+ /**
+ * Add a current filter. We have two cases :
+ * - there is no previous current filter : the filter
+ * is the top level filter
+ * - there is a previous current filter : the filter is added
+ * to the currentFilter set, and the current filter is changed
+ *
+ * In any case, the previous current filter will always be a
+ * ConnectorFilter when this method is called.
+ *
+ * @param localFilter The filter to set.
+ */
+ public void addCurrentFilter( Filter localFilter ) throws DecoderException
+ {
+ if ( currentFilter != null )
+ {
+ // Ok, we have a parent. The new Filter will be added to
+ // this parent, and will become the currentFilter if it's a connector.
+ ( ( ConnectorFilter ) currentFilter ).addFilter( localFilter );
+ localFilter.setParent( currentFilter, currentFilter.getTlvId() );
+
+ if ( localFilter instanceof ConnectorFilter )
+ {
+ currentFilter = localFilter;
+ }
+ }
+ else
+ {
+ // No parent. This Filter will become the root.
+ currentFilter = localFilter;
+ currentFilter.setParent( null, tlvId );
+ topFilter = localFilter;
+ }
+ }
+
+
+ /**
+ * This method is used to clear the filter's stack for terminated elements. An element
+ * is considered as terminated either if :
+ * - it's a final element (ie an element which cannot contains a Filter)
+ * - its current length equals its expected length.
+ *
+ * @param container The container being decoded
+ */
+ public void unstackFilters( Asn1Container container )
+ {
+ LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
+
+ TLV tlv = ldapMessageContainer.getCurrentTLV();
+ TLV localParent = tlv.getParent();
+ Filter localFilter = terminalFilter;
+
+ // The parent has been completed, so fold it
+ while ( ( localParent != null ) && ( localParent.getExpectedLength() == 0 ) )
+ {
+ int parentTlvId = localFilter.getParent() != null ? localFilter.getParent().getTlvId() : localFilter
+ .getParentTlvId();
+
+ if ( localParent.getId() != parentTlvId )
+ {
+ localParent = localParent.getParent();
+
+ }
+ else
+ {
+ Filter filterParent = localFilter.getParent();
+
+ // We have a special case with PresentFilter, which has not been
+ // pushed on the stack, so we need to get its parent's parent
+ if ( localFilter instanceof PresentFilter )
+ {
+ if ( filterParent == null )
+ {
+ // We don't have parent, get out
+ break;
+ }
+
+ filterParent = filterParent.getParent();
+ }
+ else if ( filterParent instanceof Filter )
+ {
+ filterParent = filterParent.getParent();
+ }
+
+ if ( filterParent instanceof Filter )
+ {
+ // The parent is a filter ; it will become the new currentFilter
+ // and we will loop again.
+ currentFilter = ( Filter ) filterParent;
+ localFilter = currentFilter;
+ localParent = localParent.getParent();
+ }
+ else
+ {
+ // We can stop the recursion, we have reached the searchResult Object
+ break;
+ }
+ }
+ }
+ }
+
+
+ /**
+ * Transform the Filter part of a SearchRequest to an ExprNode
+ *
+ * @param filter The filter to be transformed
+ * @return An ExprNode
+ */
+ private ExprNode transform( Filter filter )
+ {
+ if ( filter != null )
+ {
+ // Transform OR, AND or NOT leaves
+ if ( filter instanceof ConnectorFilter)
+ {
+ BranchNode branch = null;
+
+ if ( filter instanceof AndFilter)
+ {
+ branch = new AndNode();
+ }
+ else if ( filter instanceof OrFilter)
+ {
+ branch = new OrNode();
+ }
+ else if ( filter instanceof NotFilter)
+ {
+ branch = new NotNode();
+ }
+
+ List<Filter> filtersSet = ( ( ConnectorFilter ) filter ).getFilterSet();
+
+ // Loop on all AND/OR children
+ if ( filtersSet != null )
+ {
+ for ( Filter node : filtersSet )
+ {
+ branch.addNode( transform( node ) );
+ }
+ }
+
+ return branch;
+ }
+ else
+ {
+ // Transform PRESENT or ATTRIBUTE_VALUE_ASSERTION
+ LeafNode branch = null;
+
+ if ( filter instanceof PresentFilter )
+ {
+ branch = new PresenceNode( ( ( PresentFilter ) filter ).getAttributeDescription() );
+ }
+ else if ( filter instanceof AttributeValueAssertionFilter )
+ {
+ AttributeValueAssertion ava = ( ( AttributeValueAssertionFilter ) filter ).getAssertion();
+
+ // Transform =, >=, <=, ~= filters
+ switch ( ( ( AttributeValueAssertionFilter ) filter ).getFilterType() )
+ {
+ case LdapConstants.EQUALITY_MATCH_FILTER:
+ branch = new EqualityNode( ava.getAttributeDesc(), ava.getAssertionValue() );
+
+ break;
+
+ case LdapConstants.GREATER_OR_EQUAL_FILTER:
+ branch = new GreaterEqNode( ava.getAttributeDesc(), ava.getAssertionValue() );
+
+ break;
+
+ case LdapConstants.LESS_OR_EQUAL_FILTER:
+ branch = new LessEqNode( ava.getAttributeDesc(), ava.getAssertionValue() );
+
+ break;
+
+ case LdapConstants.APPROX_MATCH_FILTER:
+ branch = new ApproximateNode( ava.getAttributeDesc(), ava.getAssertionValue() );
+
+ break;
+ }
+
+ }
+ else if ( filter instanceof SubstringFilter )
+ {
+ // Transform Substring filters
+ SubstringFilter substrFilter = ( SubstringFilter ) filter;
+ String initialString = null;
+ String finalString = null;
+ List<String> anyString = null;
+
+ if ( substrFilter.getInitialSubstrings() != null )
+ {
+ initialString = substrFilter.getInitialSubstrings();
+ }
+
+ if ( substrFilter.getFinalSubstrings() != null )
+ {
+ finalString = substrFilter.getFinalSubstrings();
+ }
+
+ if ( substrFilter.getAnySubstrings() != null )
+ {
+ anyString = new ArrayList<String>();
+
+ for ( String any : substrFilter.getAnySubstrings() )
+ {
+ anyString.add( any );
+ }
+ }
+
+ branch = new SubstringNode( anyString, substrFilter.getType(), initialString, finalString );
+ }
+ else if ( filter instanceof ExtensibleMatchFilter )
+ {
+ // Transform Extensible Match Filter
+ ExtensibleMatchFilter extFilter = ( ExtensibleMatchFilter ) filter;
+ String matchingRule = null;
+
+ Value<?> value = extFilter.getMatchValue();
+
+ if ( extFilter.getMatchingRule() != null )
+ {
+ matchingRule = extFilter.getMatchingRule();
+ }
+
+ branch = new ExtensibleNode( extFilter.getType(), value, matchingRule, extFilter.isDnAttributes() );
+ }
+
+ return branch;
+ }
+ }
+ else
+ {
+ // We have found nothing to transform. Return null then.
+ return null;
+ }
+ }
+
+
+ /**
+ * Transform an ExprNode filter to a Filter
+ *
+ * @param exprNode The filter to be transformed
+ * @return A filter
+ */
+ private static Filter transform( ExprNode exprNode )
+ {
+ if ( exprNode != null )
+ {
+ Filter filter = null;
+
+ // Transform OR, AND or NOT leaves
+ if ( exprNode instanceof BranchNode )
+ {
+ if ( exprNode instanceof AndNode )
+ {
+ filter = new AndFilter();
+ }
+ else if ( exprNode instanceof OrNode )
+ {
+ filter = new OrFilter();
+ }
+ else if ( exprNode instanceof NotNode )
+ {
+ filter = new NotFilter();
+ }
+
+ List<ExprNode> children = ( (BranchNode) exprNode ).getChildren();
+
+ // Loop on all AND/OR children
+ if ( children != null )
+ {
+ for ( ExprNode child : children )
+ {
+ try
+ {
+ ( ( ConnectorFilter ) filter ).addFilter( transform( child ) );
+ }
+ catch ( DecoderException de )
+ {
+ return null;
+ }
+ }
+ }
+ }
+ else
+ {
+ if ( exprNode instanceof PresenceNode )
+ {
+ // Transform Presence Node
+ filter = new PresentFilter();
+ ( ( PresentFilter ) filter ).setAttributeDescription( ( ( PresenceNode ) exprNode ).getAttribute() );
+ }
+ else if ( exprNode instanceof SimpleNode<?> )
+ {
+ if ( exprNode instanceof EqualityNode<?> )
+ {
+ filter = new AttributeValueAssertionFilter( LdapConstants.EQUALITY_MATCH_FILTER );
+ AttributeValueAssertion assertion = new AttributeValueAssertion();
+ assertion.setAttributeDesc( ( ( EqualityNode<?> ) exprNode ).getAttribute() );
+ assertion.setAssertionValue( ( ( EqualityNode<?> ) exprNode ).getValue() );
+ ( ( AttributeValueAssertionFilter ) filter ).setAssertion( assertion );
+ }
+ else if ( exprNode instanceof GreaterEqNode<?> )
+ {
+ filter = new AttributeValueAssertionFilter( LdapConstants.GREATER_OR_EQUAL_FILTER );
+ AttributeValueAssertion assertion = new AttributeValueAssertion();
+ assertion.setAttributeDesc( ( ( GreaterEqNode<?> ) exprNode ).getAttribute() );
+ assertion.setAssertionValue( ( ( GreaterEqNode<?> ) exprNode ).getValue() );
+ ( ( AttributeValueAssertionFilter ) filter ).setAssertion( assertion );
+ }
+ else if ( exprNode instanceof LessEqNode<?> )
+ {
+ filter = new AttributeValueAssertionFilter( LdapConstants.LESS_OR_EQUAL_FILTER );
+ AttributeValueAssertion assertion = new AttributeValueAssertion();
+ assertion.setAttributeDesc( ( ( LessEqNode<?> ) exprNode ).getAttribute() );
+ assertion.setAssertionValue( ( ( LessEqNode<?> ) exprNode ).getValue() );
+ ( ( AttributeValueAssertionFilter ) filter ).setAssertion( assertion );
+ }
+ else if ( exprNode instanceof ApproximateNode<?> )
+ {
+ filter = new AttributeValueAssertionFilter( LdapConstants.APPROX_MATCH_FILTER );
+ AttributeValueAssertion assertion = new AttributeValueAssertion();
+ assertion.setAttributeDesc( ( (ApproximateNode<?>) exprNode ).getAttribute() );
+ assertion.setAssertionValue( ( ( ApproximateNode<?> ) exprNode ).getValue() );
+ ( ( AttributeValueAssertionFilter ) filter ).setAssertion( assertion );
+ }
+ }
+ else if ( exprNode instanceof SubstringNode )
+ {
+ // Transform Substring Nodes
+ filter = new SubstringFilter();
+
+ ( ( SubstringFilter ) filter ).setType( ( ( SubstringNode ) exprNode ).getAttribute() );
+ String initialString = ( ( SubstringNode ) exprNode ).getInitial();
+ String finalString = ( ( SubstringNode ) exprNode ).getFinal();
+ List<String> anyStrings = ( ( SubstringNode ) exprNode ).getAny();
+
+ if ( initialString != null )
+ {
+ ( ( SubstringFilter ) filter ).setInitialSubstrings( initialString );
+ }
+
+ if ( finalString != null )
+ {
+ ( ( SubstringFilter ) filter ).setFinalSubstrings( finalString );
+ }
+
+ if ( anyStrings != null )
+ {
+ for ( String any : anyStrings )
+ {
+ ( ( SubstringFilter ) filter ).addAnySubstrings( any );
+ }
+ }
+ }
+ else if ( exprNode instanceof ExtensibleNode )
+ {
+ // Transform Extensible Node
+ filter = new ExtensibleMatchFilter();
+
+ String attribute = ( ( ExtensibleNode ) exprNode ).getAttribute();
+ String matchingRule = ( ( ExtensibleNode ) exprNode ).getMatchingRuleId();
+ boolean dnAttributes = ( ( ExtensibleNode ) exprNode ).hasDnAttributes();
+ Value<?> value = ( ( ExtensibleNode ) exprNode ).getValue();
+
+ if ( attribute != null )
+ {
+ ( ( ExtensibleMatchFilter ) filter ).setType( attribute );
+ }
+
+ if ( matchingRule != null )
+ {
+ ( ( ExtensibleMatchFilter ) filter ).setMatchingRule( matchingRule );
+ }
+
+ ( ( ExtensibleMatchFilter ) filter ).setMatchValue( value );
+ ( ( ExtensibleMatchFilter ) filter ).setDnAttributes( dnAttributes );
+ }
+ }
+
+ return filter;
+ }
+ else
+ {
+ // We have found nothing to transform. Return null then.
+ return null;
+ }
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int hashCode()
+ {
+ int hash = 37;
+
+ if ( getSearchRequest().getBase() != null )
+ {
+ hash = hash * 17 + getSearchRequest().getBase().hashCode();
+ }
+
+ hash = hash * 17 + getSearchRequest().getDerefAliases().hashCode();
+ hash = hash * 17 + getSearchRequest().getScope().hashCode();
+ hash = hash * 17 + Long.valueOf( getSearchRequest().getSizeLimit() ).hashCode();
+ hash = hash * 17 + getSearchRequest().getTimeLimit();
+ hash = hash * 17 + ( getSearchRequest().getTypesOnly() ? 0 : 1 );
+
+ List<String> attributes = getSearchRequest().getAttributes();
+ if ( attributes != null )
+ {
+ hash = hash * 17 + attributes.size();
+
+ // Order doesn't matter, thus just add hashCode
+ for ( String attr : attributes )
+ {
+ hash = hash + attr.hashCode();
+ }
+ }
+
+ BranchNormalizedVisitor visitor = new BranchNormalizedVisitor();
+ getSearchRequest().getFilter().accept( visitor );
+ hash = hash * 17 + currentFilter.toString().hashCode();
+ hash = hash * 17 + super.hashCode();
+
+ return hash;
+ }
+
+
+ /**
+ * Checks to see if two search requests are equal. The Lockable properties
+ * and the get/set context specific parameters are not consulted to
+ * determine equality. The filter expression tree comparison will normalize
+ * the child order of filter branch nodes then generate a string
+ * representation which is comparable. For the time being this is a very
+ * costly operation.
+ *
+ * @param obj the object to check for equality to this SearchRequest
+ * @return true if the obj is a SearchRequest and equals this SearchRequest,
+ * false otherwise
+ */
+ public boolean equals( Object obj )
+ {
+ if ( obj == this )
+ {
+ return true;
+ }
+
+ if ( !super.equals( obj ) )
+ {
+ return false;
+ }
+
+ SearchRequest req = ( SearchRequest ) obj;
+
+ if ( !req.getBase().equals( getSearchRequest().getBase() ) )
+ {
+ return false;
+ }
+
+ if ( req.getDerefAliases() != getSearchRequest().getDerefAliases() )
+ {
+ return false;
+ }
+
+ if ( req.getScope() != getSearchRequest().getScope() )
+ {
+ return false;
+ }
+
+ if ( req.getSizeLimit() != getSearchRequest().getSizeLimit() )
+ {
+ return false;
+ }
+
+ if ( req.getTimeLimit() != getSearchRequest().getTimeLimit() )
+ {
+ return false;
+ }
+
+ if ( req.getTypesOnly() != getSearchRequest().getTypesOnly() )
+ {
+ return false;
+ }
+
+ List<String> attributes = getSearchRequest().getAttributes();
+ if ( req.getAttributes() == null && attributes != null && attributes.size() > 0 )
+ {
+ return false;
+ }
+
+ if ( req.getAttributes() != null && attributes == null && req.getAttributes().size() > 0 )
+ {
+ return false;
+ }
+
+ if ( req.getAttributes() != null && attributes != null )
+ {
+ if ( req.getAttributes().size() != attributes.size() )
+ {
+ return false;
+ }
+
+ for ( String attribute : attributes )
+ {
+ if ( ! req.getAttributes().contains( attribute ) )
+ {
+ return false;
+ }
+ }
+ }
+
+ BranchNormalizedVisitor visitor = new BranchNormalizedVisitor();
+ req.getFilter().accept( visitor );
+ getSearchRequest().getFilter().accept( visitor );
+
+ String myFilterString = currentFilter.toString();
+ String reqFilterString = req.getFilter().toString();
+
+ return myFilterString.equals( reqFilterString );
+ }
+
+
+ /**
+ * Return a string the represent a SearchRequest
+ * {@inheritDoc}
+ */
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append( " SearchRequest\n" );
+ sb.append( " baseDn : '" ).append( getSearchRequest().getBase() ).append( "'\n" );
+
+ if ( currentFilter != null )
+ {
+ sb.append( " filter : '" );
+ sb.append( currentFilter.toString() );
+ sb.append( "'\n" );
+ }
+
+ sb.append( " scope : " );
+
+ switch ( getSearchRequest().getScope() )
+ {
+ case OBJECT:
+ sb.append( "base object" );
+ break;
+
+ case ONELEVEL:
+ sb.append( "single level" );
+ break;
+
+ case SUBTREE:
+ sb.append( "whole subtree" );
+ break;
+ }
+
+ sb.append( '\n' );
+
+ sb.append( " typesOnly : " ).append( getSearchRequest().getTypesOnly() ).append( '\n' );
+
+ sb.append( " Size Limit : " );
+
+ if ( getSearchRequest().getSizeLimit() == 0L )
+ {
+ sb.append( "no limit" );
+ }
+ else
+ {
+ sb.append( getSearchRequest().getSizeLimit() );
+ }
+
+ sb.append( '\n' );
+
+ sb.append( " Time Limit : " );
+
+ if ( getSearchRequest().getTimeLimit() == 0 )
+ {
+ sb.append( "no limit" );
+ }
+ else
+ {
+ sb.append( getSearchRequest().getTimeLimit() );
+ }
+
+ sb.append( '\n' );
+
+ sb.append( " Deref Aliases : " );
+
+ switch ( getSearchRequest().getDerefAliases() )
+ {
+ case NEVER_DEREF_ALIASES:
+ sb.append( "never Deref Aliases" );
+ break;
+
+ case DEREF_IN_SEARCHING:
+ sb.append( "deref In Searching" );
+ break;
+
+ case DEREF_FINDING_BASE_OBJ:
+ sb.append( "deref Finding Base Obj" );
+ break;
+
+ case DEREF_ALWAYS:
+ sb.append( "deref Always" );
+ break;
+ }
+
+ sb.append( '\n' );
+ sb.append( " attributes : " );
+
+ boolean isFirst = true;
+
+ List<String> attributes = getSearchRequest().getAttributes();
+ if ( attributes != null )
+ {
+ for ( String attribute : attributes )
+ {
+ if ( isFirst )
+ {
+ isFirst = false;
+ }
+ else
+ {
+ sb.append(", ");
+ }
+
+ sb.append('\'').append(attribute).append('\'');
+ }
+ }
+
+ sb.append( '\n' );
+
+ // The controls
+ sb.append( super.toString() );
+
+ return sb.toString();
}
}
Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/SearchRequestImpl.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/SearchRequestImpl.java?rev=1063497&r1=1063496&r2=1063497&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/SearchRequestImpl.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/message/SearchRequestImpl.java Tue Jan 25 22:42:10 2011
@@ -21,47 +21,15 @@ package org.apache.directory.shared.ldap
import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.directory.shared.asn1.DecoderException;
-import org.apache.directory.shared.asn1.ber.Asn1Container;
-import org.apache.directory.shared.asn1.ber.tlv.TLV;
-import org.apache.directory.shared.ldap.codec.AttributeValueAssertion;
-import org.apache.directory.shared.ldap.codec.LdapConstants;
-import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import java.util.*;
+
import org.apache.directory.shared.ldap.model.exception.LdapException;
import org.apache.directory.shared.ldap.model.exception.LdapProtocolErrorException;
-import org.apache.directory.shared.ldap.model.filter.*;
import org.apache.directory.shared.ldap.model.message.*;
-import org.apache.directory.shared.ldap.codec.search.AndFilter;
-import org.apache.directory.shared.ldap.codec.search.AttributeValueAssertionFilter;
-import org.apache.directory.shared.ldap.codec.search.ConnectorFilter;
-import org.apache.directory.shared.ldap.codec.search.ExtensibleMatchFilter;
-import org.apache.directory.shared.ldap.codec.search.Filter;
-import org.apache.directory.shared.ldap.codec.search.NotFilter;
-import org.apache.directory.shared.ldap.codec.search.OrFilter;
-import org.apache.directory.shared.ldap.codec.search.PresentFilter;
-import org.apache.directory.shared.ldap.codec.search.SubstringFilter;
-import org.apache.directory.shared.ldap.model.entry.Value;
-import org.apache.directory.shared.ldap.model.filter.AndNode;
-import org.apache.directory.shared.ldap.model.filter.ApproximateNode;
-import org.apache.directory.shared.ldap.model.filter.BranchNode;
import org.apache.directory.shared.ldap.model.filter.BranchNormalizedVisitor;
-import org.apache.directory.shared.ldap.model.filter.EqualityNode;
import org.apache.directory.shared.ldap.model.filter.ExprNode;
-import org.apache.directory.shared.ldap.model.filter.ExtensibleNode;
import org.apache.directory.shared.ldap.model.filter.FilterParser;
-import org.apache.directory.shared.ldap.model.filter.GreaterEqNode;
-import org.apache.directory.shared.ldap.model.filter.LessEqNode;
-import org.apache.directory.shared.ldap.model.filter.NotNode;
-import org.apache.directory.shared.ldap.model.filter.OrNode;
-import org.apache.directory.shared.ldap.model.filter.PresenceNode;
import org.apache.directory.shared.ldap.model.filter.SearchScope;
-import org.apache.directory.shared.ldap.model.filter.SimpleNode;
-import org.apache.directory.shared.ldap.model.filter.SubstringNode;
import org.apache.directory.shared.ldap.model.name.Dn;
@@ -77,21 +45,9 @@ public class SearchRequestImpl extends A
/** Search base distinguished name */
private Dn baseDn;
- /** A temporary storage for a terminal Filter */
- private Filter terminalFilter;
-
/** Search filter expression tree's root node */
private ExprNode filterNode;
- /** The current filter. This is used while decoding a PDU */
- private Filter currentFilter;
-
- /** The global filter. This is used while decoding a PDU */
- private Filter topFilter;
-
- /** The SearchRequest TLV id */
- private int tlvId;
-
/** Search scope enumeration value */
private SearchScope scope;
@@ -136,298 +92,11 @@ public class SearchRequestImpl extends A
}
- /**
- * Transform the Filter part of a SearchRequest to an ExprNode
- *
- * @param filter The filter to be transformed
- * @return An ExprNode
- */
- private ExprNode transform( Filter filter )
- {
- if ( filter != null )
- {
- // Transform OR, AND or NOT leaves
- if ( filter instanceof ConnectorFilter )
- {
- BranchNode branch = null;
-
- if ( filter instanceof AndFilter )
- {
- branch = new AndNode();
- }
- else if ( filter instanceof OrFilter )
- {
- branch = new OrNode();
- }
- else if ( filter instanceof NotFilter )
- {
- branch = new NotNode();
- }
-
- List<Filter> filtersSet = ( ( ConnectorFilter ) filter ).getFilterSet();
-
- // Loop on all AND/OR children
- if ( filtersSet != null )
- {
- for ( Filter node : filtersSet )
- {
- branch.addNode( transform( node ) );
- }
- }
-
- return branch;
- }
- else
- {
- // Transform PRESENT or ATTRIBUTE_VALUE_ASSERTION
- LeafNode branch = null;
-
- if ( filter instanceof PresentFilter )
- {
- branch = new PresenceNode( ( ( PresentFilter ) filter ).getAttributeDescription() );
- }
- else if ( filter instanceof AttributeValueAssertionFilter )
- {
- AttributeValueAssertion ava = ( ( AttributeValueAssertionFilter ) filter ).getAssertion();
-
- // Transform =, >=, <=, ~= filters
- switch ( ( ( AttributeValueAssertionFilter ) filter ).getFilterType() )
- {
- case LdapConstants.EQUALITY_MATCH_FILTER:
- branch = new EqualityNode( ava.getAttributeDesc(), ava.getAssertionValue() );
-
- break;
-
- case LdapConstants.GREATER_OR_EQUAL_FILTER:
- branch = new GreaterEqNode( ava.getAttributeDesc(), ava.getAssertionValue() );
-
- break;
-
- case LdapConstants.LESS_OR_EQUAL_FILTER:
- branch = new LessEqNode( ava.getAttributeDesc(), ava.getAssertionValue() );
-
- break;
-
- case LdapConstants.APPROX_MATCH_FILTER:
- branch = new ApproximateNode( ava.getAttributeDesc(), ava.getAssertionValue() );
-
- break;
- }
-
- }
- else if ( filter instanceof SubstringFilter )
- {
- // Transform Substring filters
- SubstringFilter substrFilter = ( SubstringFilter ) filter;
- String initialString = null;
- String finalString = null;
- List<String> anyString = null;
-
- if ( substrFilter.getInitialSubstrings() != null )
- {
- initialString = substrFilter.getInitialSubstrings();
- }
-
- if ( substrFilter.getFinalSubstrings() != null )
- {
- finalString = substrFilter.getFinalSubstrings();
- }
-
- if ( substrFilter.getAnySubstrings() != null )
- {
- anyString = new ArrayList<String>();
-
- for ( String any : substrFilter.getAnySubstrings() )
- {
- anyString.add( any );
- }
- }
-
- branch = new SubstringNode( anyString, substrFilter.getType(), initialString, finalString );
- }
- else if ( filter instanceof ExtensibleMatchFilter )
- {
- // Transform Extensible Match Filter
- ExtensibleMatchFilter extFilter = ( ExtensibleMatchFilter ) filter;
- String matchingRule = null;
-
- Value<?> value = extFilter.getMatchValue();
-
- if ( extFilter.getMatchingRule() != null )
- {
- matchingRule = extFilter.getMatchingRule();
- }
-
- branch = new ExtensibleNode( extFilter.getType(), value, matchingRule, extFilter.isDnAttributes() );
- }
-
- return branch;
- }
- }
- else
- {
- // We have found nothing to transform. Return null then.
- return null;
- }
- }
-
-
- /**
- * Transform an ExprNode filter to a Filter
- *
- * @param exprNode The filter to be transformed
- * @return A filter
- */
- private static Filter transform( ExprNode exprNode )
- {
- if ( exprNode != null )
- {
- Filter filter = null;
-
- // Transform OR, AND or NOT leaves
- if ( exprNode instanceof BranchNode )
- {
- if ( exprNode instanceof AndNode )
- {
- filter = new AndFilter();
- }
- else if ( exprNode instanceof OrNode )
- {
- filter = new OrFilter();
- }
- else if ( exprNode instanceof NotNode )
- {
- filter = new NotFilter();
- }
-
- List<ExprNode> children = ( (BranchNode) exprNode ).getChildren();
-
- // Loop on all AND/OR children
- if ( children != null )
- {
- for ( ExprNode child : children )
- {
- try
- {
- ( ( ConnectorFilter ) filter ).addFilter( transform( child ) );
- }
- catch ( DecoderException de )
- {
- return null;
- }
- }
- }
- }
- else
- {
- if ( exprNode instanceof PresenceNode )
- {
- // Transform Presence Node
- filter = new PresentFilter();
- ( ( PresentFilter ) filter ).setAttributeDescription( ( ( PresenceNode ) exprNode ).getAttribute() );
- }
- else if ( exprNode instanceof SimpleNode<?> )
- {
- if ( exprNode instanceof EqualityNode<?> )
- {
- filter = new AttributeValueAssertionFilter( LdapConstants.EQUALITY_MATCH_FILTER );
- AttributeValueAssertion assertion = new AttributeValueAssertion();
- assertion.setAttributeDesc( ( ( EqualityNode<?> ) exprNode ).getAttribute() );
- assertion.setAssertionValue( ( ( EqualityNode<?> ) exprNode ).getValue() );
- ( ( AttributeValueAssertionFilter ) filter ).setAssertion( assertion );
- }
- else if ( exprNode instanceof GreaterEqNode<?> )
- {
- filter = new AttributeValueAssertionFilter( LdapConstants.GREATER_OR_EQUAL_FILTER );
- AttributeValueAssertion assertion = new AttributeValueAssertion();
- assertion.setAttributeDesc( ( ( GreaterEqNode<?> ) exprNode ).getAttribute() );
- assertion.setAssertionValue( ( ( GreaterEqNode<?> ) exprNode ).getValue() );
- ( ( AttributeValueAssertionFilter ) filter ).setAssertion( assertion );
- }
- else if ( exprNode instanceof LessEqNode<?> )
- {
- filter = new AttributeValueAssertionFilter( LdapConstants.LESS_OR_EQUAL_FILTER );
- AttributeValueAssertion assertion = new AttributeValueAssertion();
- assertion.setAttributeDesc( ( ( LessEqNode<?> ) exprNode ).getAttribute() );
- assertion.setAssertionValue( ( ( LessEqNode<?> ) exprNode ).getValue() );
- ( ( AttributeValueAssertionFilter ) filter ).setAssertion( assertion );
- }
- else if ( exprNode instanceof ApproximateNode<?> )
- {
- filter = new AttributeValueAssertionFilter( LdapConstants.APPROX_MATCH_FILTER );
- AttributeValueAssertion assertion = new AttributeValueAssertion();
- assertion.setAttributeDesc( ( (ApproximateNode<?>) exprNode ).getAttribute() );
- assertion.setAssertionValue( ( ( ApproximateNode<?> ) exprNode ).getValue() );
- ( ( AttributeValueAssertionFilter ) filter ).setAssertion( assertion );
- }
- }
- else if ( exprNode instanceof SubstringNode )
- {
- // Transform Substring Nodes
- filter = new SubstringFilter();
-
- ( ( SubstringFilter ) filter ).setType( ( ( SubstringNode ) exprNode ).getAttribute() );
- String initialString = ( ( SubstringNode ) exprNode ).getInitial();
- String finalString = ( ( SubstringNode ) exprNode ).getFinal();
- List<String> anyStrings = ( ( SubstringNode ) exprNode ).getAny();
-
- if ( initialString != null )
- {
- ( ( SubstringFilter ) filter ).setInitialSubstrings( initialString );
- }
-
- if ( finalString != null )
- {
- ( ( SubstringFilter ) filter ).setFinalSubstrings( finalString );
- }
-
- if ( anyStrings != null )
- {
- for ( String any : anyStrings )
- {
- ( ( SubstringFilter ) filter ).addAnySubstrings( any );
- }
- }
- }
- else if ( exprNode instanceof ExtensibleNode )
- {
- // Transform Extensible Node
- filter = new ExtensibleMatchFilter();
-
- String attribute = ( ( ExtensibleNode ) exprNode ).getAttribute();
- String matchingRule = ( ( ExtensibleNode ) exprNode ).getMatchingRuleId();
- boolean dnAttributes = ( ( ExtensibleNode ) exprNode ).hasDnAttributes();
- Value<?> value = ( ( ExtensibleNode ) exprNode ).getValue();
-
- if ( attribute != null )
- {
- ( ( ExtensibleMatchFilter ) filter ).setType( attribute );
- }
-
- if ( matchingRule != null )
- {
- ( ( ExtensibleMatchFilter ) filter ).setMatchingRule( matchingRule );
- }
-
- ( ( ExtensibleMatchFilter ) filter ).setMatchValue( value );
- ( ( ExtensibleMatchFilter ) filter ).setDnAttributes( dnAttributes );
- }
- }
-
- return filter;
- }
- else
- {
- // We have found nothing to transform. Return null then.
- return null;
- }
- }
-
-
// ------------------------------------------------------------------------
// SearchRequest Interface Method Implementations
// ------------------------------------------------------------------------
+
/**
* Gets a list of the attributes to be returned from each entry which
* matches the search filter. There are two special values which may be
@@ -509,38 +178,11 @@ public class SearchRequestImpl extends A
*/
public ExprNode getFilter()
{
- if ( filterNode == null )
- {
- filterNode = transform( topFilter );
- }
-
return filterNode;
}
/**
- * Get the terminal filter
- *
- * @return Returns the terminal filter.
- */
- public Filter getTerminalFilter()
- {
- return terminalFilter;
- }
-
-
- /**
- * Set the terminal filter
- *
- * @param terminalFilter the teminalFilter.
- */
- public void setTerminalFilter( Filter terminalFilter )
- {
- this.terminalFilter = terminalFilter;
- }
-
-
- /**
* {@inheritDoc}
*/
public void setFilter( ExprNode filter )
@@ -557,7 +199,6 @@ public class SearchRequestImpl extends A
try
{
filterNode = FilterParser.parse( filter );
- this.currentFilter = transform( filterNode );
}
catch ( ParseException pe )
{
@@ -568,130 +209,6 @@ public class SearchRequestImpl extends A
/**
- * Set the current filter
- *
- * @param filter The filter to set.
- */
- public void setCurrentFilter( Filter filter )
- {
- currentFilter = filter;
- }
-
-
- /**
- * Get the parent Filter, if any
- *
- * @return The parent filter
- */
- public Filter getCurrentFilter()
- {
- return currentFilter;
- }
-
-
- /**
- * Add a current filter. We have two cases :
- * - there is no previous current filter : the filter
- * is the top level filter
- * - there is a previous current filter : the filter is added
- * to the currentFilter set, and the current filter is changed
- *
- * In any case, the previous current filter will always be a
- * ConnectorFilter when this method is called.
- *
- * @param localFilter The filter to set.
- */
- public void addCurrentFilter( Filter localFilter ) throws DecoderException
- {
- if ( currentFilter != null )
- {
- // Ok, we have a parent. The new Filter will be added to
- // this parent, and will become the currentFilter if it's a connector.
- ( ( ConnectorFilter ) currentFilter ).addFilter( localFilter );
- localFilter.setParent( currentFilter, currentFilter.getTlvId() );
-
- if ( localFilter instanceof ConnectorFilter )
- {
- currentFilter = localFilter;
- }
- }
- else
- {
- // No parent. This Filter will become the root.
- currentFilter = localFilter;
- currentFilter.setParent( null, tlvId );
- topFilter = localFilter;
- }
- }
-
-
- /**
- * This method is used to clear the filter's stack for terminated elements. An element
- * is considered as terminated either if :
- * - it's a final element (ie an element which cannot contains a Filter)
- * - its current length equals its expected length.
- *
- * @param container The container being decoded
- */
- public void unstackFilters( Asn1Container container )
- {
- LdapMessageContainer ldapMessageContainer = ( LdapMessageContainer ) container;
-
- TLV tlv = ldapMessageContainer.getCurrentTLV();
- TLV localParent = tlv.getParent();
- Filter localFilter = terminalFilter;
-
- // The parent has been completed, so fold it
- while ( ( localParent != null ) && ( localParent.getExpectedLength() == 0 ) )
- {
- int parentTlvId = localFilter.getParent() != null ? localFilter.getParent().getTlvId() : localFilter
- .getParentTlvId();
-
- if ( localParent.getId() != parentTlvId )
- {
- localParent = localParent.getParent();
-
- }
- else
- {
- Filter filterParent = localFilter.getParent();
-
- // We have a special case with PresentFilter, which has not been
- // pushed on the stack, so we need to get its parent's parent
- if ( localFilter instanceof PresentFilter )
- {
- if ( filterParent == null )
- {
- // We don't have parent, get out
- break;
- }
-
- filterParent = filterParent.getParent();
- }
- else if ( filterParent instanceof Filter )
- {
- filterParent = filterParent.getParent();
- }
-
- if ( filterParent instanceof Filter )
- {
- // The parent is a filter ; it will become the new currentFilter
- // and we will loop again.
- currentFilter = ( Filter ) filterParent;
- localFilter = currentFilter;
- localParent = localParent.getParent();
- }
- else
- {
- // We can stop the recursion, we have reached the searchResult Object
- break;
- }
- }
- }
- }
-
-
- /**
* Gets the different response types generated by a search request.
*
* @return the RESPONSE_TYPES array
@@ -812,10 +329,7 @@ public class SearchRequestImpl extends A
*/
public void addAttributes( String... attributesToAdd )
{
- for ( String attribute : attributesToAdd )
- {
- this.attributes.add( attribute );
- }
+ this.attributes.addAll( Arrays.asList( attributesToAdd ) );
}
@@ -847,16 +361,6 @@ public class SearchRequestImpl extends A
/**
- * Set the SearchRequest PDU TLV's Id
- * @param tlvId The TLV id
- */
- public void setTlvId( int tlvId )
- {
- this.tlvId = tlvId;
- }
-
-
- /**
* {@inheritDoc}
*/
@Override
@@ -888,7 +392,7 @@ public class SearchRequestImpl extends A
BranchNormalizedVisitor visitor = new BranchNormalizedVisitor();
filterNode.accept( visitor );
- hash = hash * 17 + currentFilter.toString().hashCode();
+ hash = hash * 17 + filterNode.toString().hashCode();
hash = hash * 17 + super.hashCode();
return hash;
@@ -914,7 +418,7 @@ public class SearchRequestImpl extends A
return true;
}
- if ( !super.equals( obj ) )
+ if ( ! super.equals( obj ) )
{
return false;
}
@@ -968,11 +472,9 @@ public class SearchRequestImpl extends A
return false;
}
- Iterator<String> list = attributes.iterator();
-
- while ( list.hasNext() )
+ for ( String attribute : attributes )
{
- if ( !req.getAttributes().contains( list.next() ) )
+ if ( ! req.getAttributes().contains( attribute ) )
{
return false;
}
@@ -983,7 +485,7 @@ public class SearchRequestImpl extends A
req.getFilter().accept( visitor );
filterNode.accept( visitor );
- String myFilterString = currentFilter.toString();
+ String myFilterString = filterNode.toString();
String reqFilterString = req.getFilter().toString();
return myFilterString.equals( reqFilterString );
@@ -1001,10 +503,10 @@ public class SearchRequestImpl extends A
sb.append( " SearchRequest\n" );
sb.append( " baseDn : '" ).append( baseDn ).append( "'\n" );
- if ( currentFilter != null )
+ if ( filterNode != null )
{
sb.append( " filter : '" );
- sb.append( currentFilter.toString() );
+ sb.append( filterNode.toString() );
sb.append( "'\n" );
}
@@ -1083,9 +585,7 @@ public class SearchRequestImpl extends A
if ( attributes != null )
{
- Iterator<String> it = attributes.iterator();
-
- while ( it.hasNext() )
+ for ( String attribute : attributes )
{
if ( isFirst )
{
@@ -1093,12 +593,11 @@ public class SearchRequestImpl extends A
}
else
{
- sb.append( ", " );
+ sb.append(", ");
}
- sb.append( '\'' ).append( it.next() ).append( '\'' );
+ sb.append('\'').append( attribute ).append('\'');
}
-
}
sb.append( '\n' );
Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/Request.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/Request.java?rev=1063497&r1=1063496&r2=1063497&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/Request.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/model/message/Request.java Tue Jan 25 22:42:10 2011
@@ -20,8 +20,6 @@
package org.apache.directory.shared.ldap.model.message;
-import org.apache.directory.shared.ldap.model.message.Message;
-
/**
* Ldap protocol request messages derive from this super interface.
*
Modified: directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/codec/search/SearchRequestMatchingRuleAssertionTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/codec/search/SearchRequestMatchingRuleAssertionTest.java?rev=1063497&r1=1063496&r2=1063497&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/codec/search/SearchRequestMatchingRuleAssertionTest.java (original)
+++ directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/codec/search/SearchRequestMatchingRuleAssertionTest.java Tue Jan 25 22:42:10 2011
@@ -39,6 +39,7 @@ import org.apache.directory.shared.asn1.
import org.apache.directory.shared.asn1.ber.Asn1Container;
import org.apache.directory.shared.asn1.EncoderException;
import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.decorators.SearchRequestDecorator;
import org.apache.directory.shared.ldap.model.constants.SchemaConstants;
import org.apache.directory.shared.ldap.model.filter.SearchScope;
import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
@@ -184,7 +185,8 @@ public class SearchRequestMatchingRuleAs
fail( de.getMessage() );
}
- SearchRequest searchRequest = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequest();
+ SearchRequestDecorator decorator = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequestDecorator();
+ SearchRequest searchRequest = decorator.getSearchRequest();
assertEquals( 1, searchRequest.getMessageId() );
assertEquals( "dc=example,dc=com", searchRequest.getBase().toString() );
@@ -396,7 +398,8 @@ public class SearchRequestMatchingRuleAs
fail( de.getMessage() );
}
- SearchRequest searchRequest = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequest();
+ SearchRequestDecorator decorator = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequestDecorator();
+ SearchRequest searchRequest = decorator.getSearchRequest();
assertEquals( 4, searchRequest.getMessageId() );
assertEquals( "uid=akarasulu,dc=example,dc=com", searchRequest.getBase().toString() );
@@ -407,7 +410,7 @@ public class SearchRequestMatchingRuleAs
assertEquals( true, searchRequest.getTypesOnly() );
// Extended
- Filter filter = ( ( SearchRequestImpl ) searchRequest ).getCurrentFilter();
+ Filter filter = decorator.getCurrentFilter();
ExtensibleMatchFilter extensibleMatchFilter = ( ExtensibleMatchFilter ) filter;
assertNotNull( extensibleMatchFilter );
@@ -696,7 +699,8 @@ public class SearchRequestMatchingRuleAs
fail( de.getMessage() );
}
- SearchRequest searchRequest = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequest();
+ SearchRequestDecorator decorator = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequestDecorator();
+ SearchRequest searchRequest = decorator.getSearchRequest();
assertEquals( 4, searchRequest.getMessageId() );
assertEquals( "uid=akarasulu,dc=example,dc=com", searchRequest.getBase().toString() );
@@ -707,7 +711,7 @@ public class SearchRequestMatchingRuleAs
assertEquals( true, searchRequest.getTypesOnly() );
// Extended
- Filter filter = ( ( SearchRequestImpl ) searchRequest ).getCurrentFilter();
+ Filter filter = decorator.getCurrentFilter();
ExtensibleMatchFilter extensibleMatchFilter = ( ExtensibleMatchFilter ) filter;
assertNotNull( extensibleMatchFilter );
Modified: directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/codec/search/SearchRequestSubstringTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/codec/search/SearchRequestSubstringTest.java?rev=1063497&r1=1063496&r2=1063497&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/codec/search/SearchRequestSubstringTest.java (original)
+++ directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/codec/search/SearchRequestSubstringTest.java Tue Jan 25 22:42:10 2011
@@ -20,7 +20,7 @@
package org.apache.directory.shared.ldap.codec.search;
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -37,13 +37,13 @@ import org.apache.directory.shared.asn1.
import org.apache.directory.shared.asn1.ber.Asn1Decoder;
import org.apache.directory.shared.asn1.ber.Asn1Container;
import org.apache.directory.shared.ldap.codec.LdapMessageContainer;
+import org.apache.directory.shared.ldap.codec.decorators.SearchRequestDecorator;
import org.apache.directory.shared.ldap.model.constants.SchemaConstants;
import org.apache.directory.shared.ldap.model.filter.SearchScope;
import org.apache.directory.shared.ldap.model.message.AliasDerefMode;
import org.apache.directory.shared.ldap.codec.LdapEncoder;
import org.apache.directory.shared.ldap.model.message.Control;
import org.apache.directory.shared.ldap.model.message.SearchRequest;
-import org.apache.directory.shared.ldap.message.SearchRequestImpl;
import org.apache.directory.shared.ldap.model.schema.normalizers.DeepTrimToLowerNormalizer;
import org.apache.directory.shared.ldap.model.schema.normalizers.OidNormalizer;
import org.apache.directory.shared.util.Strings;
@@ -164,7 +164,8 @@ public class SearchRequestSubstringTest
fail( de.getMessage() );
}
- SearchRequest searchRequest = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequest();
+ SearchRequestDecorator decorator = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequestDecorator();
+ SearchRequest searchRequest = decorator.getSearchRequest();
assertEquals( 1, searchRequest.getMessageId() );
assertEquals( "uid=akarasulu,dc=example,dc=com", searchRequest.getBase().toString() );
@@ -175,7 +176,7 @@ public class SearchRequestSubstringTest
assertEquals( true, searchRequest.getTypesOnly() );
// (objectclass=t*)
- Filter filter = ( ( SearchRequestImpl ) searchRequest ).getCurrentFilter();
+ Filter filter = decorator.getCurrentFilter();
SubstringFilter substringFilter = ( SubstringFilter ) filter;
assertNotNull( substringFilter );
@@ -310,7 +311,8 @@ public class SearchRequestSubstringTest
fail( de.getMessage() );
}
- SearchRequest searchRequest = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequest();
+ SearchRequestDecorator decorator = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequestDecorator();
+ SearchRequest searchRequest = decorator.getSearchRequest();
assertEquals( 1, searchRequest.getMessageId() );
assertEquals( "uid=akarasulu,dc=example,dc=com", searchRequest.getBase().toString() );
@@ -321,7 +323,7 @@ public class SearchRequestSubstringTest
assertEquals( true, searchRequest.getTypesOnly() );
// (objectclass=t*)
- Filter filter = ( ( SearchRequestImpl ) searchRequest ).getCurrentFilter();
+ Filter filter = decorator.getCurrentFilter();
SubstringFilter substringFilter = ( SubstringFilter ) filter;
assertNotNull( substringFilter );
@@ -438,7 +440,8 @@ public class SearchRequestSubstringTest
fail( de.getMessage() );
}
- SearchRequest searchRequest = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequest();
+ SearchRequestDecorator decorator = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequestDecorator();
+ SearchRequest searchRequest = decorator.getSearchRequest();
assertEquals( 1, searchRequest.getMessageId() );
assertEquals( "uid=akarasulu,dc=example,dc=com", searchRequest.getBase().toString() );
@@ -449,7 +452,7 @@ public class SearchRequestSubstringTest
assertEquals( true, searchRequest.getTypesOnly() );
// (objectclass=t*)
- Filter filter = ( ( SearchRequestImpl ) searchRequest ).getCurrentFilter();
+ Filter filter = decorator.getCurrentFilter();
SubstringFilter substringFilter = ( SubstringFilter ) filter;
assertNotNull( substringFilter );
@@ -560,7 +563,8 @@ public class SearchRequestSubstringTest
fail( de.getMessage() );
}
- SearchRequest searchRequest = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequest();
+ SearchRequestDecorator decorator = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequestDecorator();
+ SearchRequest searchRequest = decorator.getSearchRequest();
assertEquals( 1, searchRequest.getMessageId() );
assertEquals( "uid=akarasulu,dc=example,dc=com", searchRequest.getBase().toString() );
@@ -571,7 +575,7 @@ public class SearchRequestSubstringTest
assertEquals( true, searchRequest.getTypesOnly() );
// (objectclass=t*)
- Filter filter = ( ( SearchRequestImpl ) searchRequest ).getCurrentFilter();
+ Filter filter = decorator.getCurrentFilter();
SubstringFilter substringFilter = ( SubstringFilter ) filter;
assertNotNull( substringFilter );
@@ -683,7 +687,8 @@ public class SearchRequestSubstringTest
fail( de.getMessage() );
}
- SearchRequest searchRequest = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequest();
+ SearchRequestDecorator decorator = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequestDecorator();
+ SearchRequest searchRequest = decorator.getSearchRequest();
assertEquals( 1, searchRequest.getMessageId() );
assertEquals( "uid=akarasulu,dc=example,dc=com", searchRequest.getBase().toString() );
@@ -694,7 +699,7 @@ public class SearchRequestSubstringTest
assertEquals( true, searchRequest.getTypesOnly() );
// (objectclass=t*)
- Filter filter = ( ( SearchRequestImpl ) searchRequest ).getCurrentFilter();
+ Filter filter = decorator.getCurrentFilter();
SubstringFilter substringFilter = ( SubstringFilter ) filter;
assertNotNull( substringFilter );
@@ -805,7 +810,8 @@ public class SearchRequestSubstringTest
fail( de.getMessage() );
}
- SearchRequest searchRequest = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequest();
+ SearchRequestDecorator decorator = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequestDecorator();
+ SearchRequest searchRequest = decorator.getSearchRequest();
assertEquals( 1, searchRequest.getMessageId() );
assertEquals( "uid=akarasulu,dc=example,dc=com", searchRequest.getBase().toString() );
@@ -816,7 +822,7 @@ public class SearchRequestSubstringTest
assertEquals( true, searchRequest.getTypesOnly() );
// (objectclass=t*)
- Filter filter = ( ( SearchRequestImpl ) searchRequest ).getCurrentFilter();
+ Filter filter = decorator.getCurrentFilter();
SubstringFilter substringFilter = ( SubstringFilter ) filter;
assertNotNull( substringFilter );
@@ -930,7 +936,8 @@ public class SearchRequestSubstringTest
fail( de.getMessage() );
}
- SearchRequest searchRequest = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequest();
+ SearchRequestDecorator decorator = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequestDecorator();
+ SearchRequest searchRequest = decorator.getSearchRequest();
assertEquals( 1, searchRequest.getMessageId() );
assertEquals( "uid=akarasulu,dc=example,dc=com", searchRequest.getBase().toString() );
@@ -941,7 +948,7 @@ public class SearchRequestSubstringTest
assertEquals( true, searchRequest.getTypesOnly() );
// (objectclass=t*)
- Filter filter = ( ( SearchRequestImpl ) searchRequest ).getCurrentFilter();
+ Filter filter = decorator.getCurrentFilter();
SubstringFilter substringFilter = ( SubstringFilter ) filter;
assertNotNull( substringFilter );
@@ -1053,7 +1060,8 @@ public class SearchRequestSubstringTest
fail( de.getMessage() );
}
- SearchRequest searchRequest = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequest();
+ SearchRequestDecorator decorator = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequestDecorator();
+ SearchRequest searchRequest = decorator.getSearchRequest();
assertEquals( 1, searchRequest.getMessageId() );
assertEquals( "uid=akarasulu,dc=example,dc=com", searchRequest.getBase().toString() );
@@ -1064,7 +1072,7 @@ public class SearchRequestSubstringTest
assertEquals( true, searchRequest.getTypesOnly() );
// (objectclass=t*)
- Filter filter = ( ( SearchRequestImpl ) searchRequest ).getCurrentFilter();
+ Filter filter = decorator.getCurrentFilter();
SubstringFilter substringFilter = ( SubstringFilter ) filter;
assertNotNull( substringFilter );
@@ -1175,7 +1183,8 @@ public class SearchRequestSubstringTest
fail( de.getMessage() );
}
- SearchRequest searchRequest = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequest();
+ SearchRequestDecorator decorator = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequestDecorator();
+ SearchRequest searchRequest = decorator.getSearchRequest();
assertEquals( 1, searchRequest.getMessageId() );
assertEquals( "uid=akarasulu,dc=example,dc=com", searchRequest.getBase().toString() );
@@ -1186,7 +1195,7 @@ public class SearchRequestSubstringTest
assertEquals( true, searchRequest.getTypesOnly() );
// (objectclass=t*)
- Filter filter = ( ( SearchRequestImpl ) searchRequest ).getCurrentFilter();
+ Filter filter = decorator.getCurrentFilter();
SubstringFilter substringFilter = ( SubstringFilter ) filter;
assertNotNull( substringFilter );
@@ -1318,7 +1327,8 @@ public class SearchRequestSubstringTest
fail( de.getMessage() );
}
- SearchRequest searchRequest = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequest();
+ SearchRequestDecorator decorator = ( ( LdapMessageContainer ) ldapMessageContainer ).getSearchRequestDecorator();
+ SearchRequest searchRequest = decorator.getSearchRequest();
assertEquals( 1, searchRequest.getMessageId() );
assertEquals( "uid=akarasulu,dc=example,dc=com", searchRequest.getBase().toString() );
@@ -1329,7 +1339,7 @@ public class SearchRequestSubstringTest
assertEquals( true, searchRequest.getTypesOnly() );
// (objectclass=t*)
- Filter filter = ( ( SearchRequestImpl ) searchRequest ).getCurrentFilter();
+ Filter filter = decorator.getCurrentFilter();
SubstringFilter substringFilter = ( SubstringFilter ) filter;
assertNotNull( substringFilter );