You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2008/10/30 00:44:01 UTC
svn commit: r709045 -
/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java
Author: elecharny
Date: Wed Oct 29 16:44:01 2008
New Revision: 709045
URL: http://svn.apache.org/viewvc?rev=709045&view=rev
Log:
o Switched from log to LOG
o Added a transformer for ExprNode to Filters
Modified:
directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java
Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java?rev=709045&r1=709044&r2=709045&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/codec/TwixTransformer.java Wed Oct 29 16:44:01 2008
@@ -76,6 +76,7 @@
import org.apache.directory.shared.ldap.filter.NotNode;
import org.apache.directory.shared.ldap.filter.OrNode;
import org.apache.directory.shared.ldap.filter.PresenceNode;
+import org.apache.directory.shared.ldap.filter.SimpleNode;
import org.apache.directory.shared.ldap.filter.SubstringNode;
import org.apache.directory.shared.ldap.message.AbandonRequestImpl;
import org.apache.directory.shared.ldap.message.AddRequestImpl;
@@ -123,10 +124,10 @@
public class TwixTransformer
{
/** The logger */
- private static Logger log = LoggerFactory.getLogger( TwixTransformer.class );
+ private static Logger LOG = LoggerFactory.getLogger( TwixTransformer.class );
/** A speedup for logger */
- private static final boolean IS_DEBUG = log.isDebugEnabled();
+ private static final boolean IS_DEBUG = LOG.isDebugEnabled();
/**
@@ -252,7 +253,7 @@
}
catch ( InvalidNameException e )
{
- log.error( "Could not parse matchedDN while transforming twix value to snickers: {}",
+ LOG.error( "Could not parse matchedDN while transforming twix value to snickers: {}",
twixResult.getMatchedDN() );
snickersResult.setMatchedDn( new LdapDN() );
}
@@ -580,6 +581,158 @@
/**
+ * Transform an ExprNode filter to a TwixFilter
+ *
+ * @param exprNode The filter to be transformed
+ * @return A Twix filter
+ */
+ public static Filter transformFilter( 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( transformFilter( child ) );
+ }
+ catch ( DecoderException de )
+ {
+ LOG.error( "Error while transforming a ExprNode : " + de.getMessage() );
+ 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).getAssertionType().name() );
+ 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( ((EqualityNode<?>)exprNode).getAssertionType().name() );
+ assertion.setAssertionValue( ((EqualityNode<?>)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( ((EqualityNode<?>)exprNode).getAssertionType().name() );
+ assertion.setAssertionValue( ((EqualityNode<?>)exprNode).getValue() );
+ ((AttributeValueAssertionFilter)filter).setAssertion( assertion );
+ }
+ else if ( exprNode instanceof ApproximateNode<?> )
+ {
+ filter = new AttributeValueAssertionFilter( LdapConstants.APPROX_MATCH_FILTER );
+ AttributeValueAssertion assertion = new AttributeValueAssertion();
+ assertion.setAttributeDesc( ((EqualityNode<?>)exprNode).getAssertionType().name() );
+ assertion.setAssertionValue( ((EqualityNode<?>)exprNode).getValue() );
+ ((AttributeValueAssertionFilter)filter).setAssertion( assertion );
+ }
+ }
+ else if ( exprNode instanceof SubstringNode )
+ {
+ // Transform Substring Nodes
+ filter = new SubstringFilter();
+
+ 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();
+ Object 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;
+ }
+ }
+
+
+ /**
* Transform a SearchRequest message from a TwixMessage to a SnickersMessage
*
* @param twixMessage The message to transform
@@ -679,7 +832,7 @@
if ( IS_DEBUG )
{
- log.debug( "Transforming LdapMessage <" + messageId + ", " + twixMessage.getMessageTypeName()
+ LOG.debug( "Transforming LdapMessage <" + messageId + ", " + twixMessage.getMessageTypeName()
+ "> from Twix to Snickers." );
}
@@ -863,7 +1016,7 @@
}
catch ( LdapURLEncodingException lude )
{
- log.warn( "The referral " + referral + " is invalid : " + lude.getMessage() );
+ LOG.warn( "The referral " + referral + " is invalid : " + lude.getMessage() );
twixLdapResult.addReferral( LdapURL.EMPTY_URL );
}
}
@@ -1016,7 +1169,7 @@
}
catch ( DecoderException de )
{
- log.warn( "The OID " + snickersExtendedResponse.getResponseName() + " is invalid : " + de.getMessage() );
+ LOG.warn( "The OID " + snickersExtendedResponse.getResponseName() + " is invalid : " + de.getMessage() );
extendedResponse.setResponseName( null );
}
@@ -1147,7 +1300,7 @@
}
catch ( LdapURLEncodingException luee )
{
- log.warn( "The LdapURL " + url + " is incorrect : " + luee.getMessage() );
+ LOG.warn( "The LdapURL " + url + " is incorrect : " + luee.getMessage() );
}
}
}
@@ -1168,7 +1321,7 @@
{
if ( IS_DEBUG )
{
- log.debug( "Transforming message type " + msg.getType() );
+ LOG.debug( "Transforming message type " + msg.getType() );
}
LdapMessage twixMessage = new LdapMessage();
@@ -1231,7 +1384,7 @@
if ( IS_DEBUG )
{
- log.debug( "Transformed message : " + twixMessage );
+ LOG.debug( "Transformed message : " + twixMessage );
}
return twixMessage;
@@ -1254,7 +1407,7 @@
for ( Control control:twixMessage.getControls() )
{
- log.debug( "Not decoding response control: {}", control );
+ LOG.debug( "Not decoding response control: {}", control );
}
}