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 2004/06/25 06:11:19 UTC

svn commit: rev 22098 - in incubator/directory/eve/branches/start: . src/java/org/apache/eve/protocol src/java/org/apache/eve/schema

Author: akarasulu
Date: Thu Jun 24 21:11:17 2004
New Revision: 22098

Modified:
   incubator/directory/eve/branches/start/   (props changed)
   incubator/directory/eve/branches/start/src/java/org/apache/eve/protocol/CompareHandler.java
   incubator/directory/eve/branches/start/src/java/org/apache/eve/schema/   (props changed)
Log:
added compare functionality without JNDI

Modified: incubator/directory/eve/branches/start/src/java/org/apache/eve/protocol/CompareHandler.java
==============================================================================
--- incubator/directory/eve/branches/start/src/java/org/apache/eve/protocol/CompareHandler.java	(original)
+++ incubator/directory/eve/branches/start/src/java/org/apache/eve/protocol/CompareHandler.java	Thu Jun 24 21:11:17 2004
@@ -10,11 +10,20 @@
 package org.apache.eve.protocol ;
 
 
-import org.apache.ldap.common.message.ResultResponse ;
-import org.apache.ldap.common.message.CompareRequest ;
-import org.apache.ldap.common.message.MessageTypeEnum ;
 import org.apache.ldap.common.NotImplementedException ;
-import org.apache.ldap.common.message.SingleReplyRequest ;
+import org.apache.ldap.common.message.*;
+import org.apache.eve.backend.LdapEntry;
+import org.apache.eve.backend.Backend;
+import org.apache.eve.backend.BackendException;
+import org.apache.eve.schema.Schema;
+import org.apache.avalon.framework.logger.Logger;
+import org.apache.avalon.framework.CascadingRuntimeException;
+
+import javax.naming.Name;
+import javax.naming.NamingException;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
 
 
 /**
@@ -100,7 +109,112 @@
      */
     public ResultResponse handle( SingleReplyRequest a_request )
     {
-        CompareRequest l_request = ( CompareRequest ) a_request ;
-        throw new NotImplementedException() ;
+        Name dn = null;
+        Schema schema = null;
+        LdapEntry entry = null;
+        Backend be = null;
+        Logger log = m_module.getLogger();
+        CompareRequest req = ( CompareRequest ) a_request;
+        CompareResponseImpl resp;
+        resp = new CompareResponseImpl( req.getMessageId() );
+        LdapResultImpl result = new LdapResultImpl( resp );
+        resp.setLdapResult( result );
+        result.setResultCode( ResultCodeEnum.COMPAREFALSE );
+
+        try
+        {
+            dn = m_module.getNexus().getNormalizedName( req.getName() );
+        }
+        catch ( NamingException e )
+        {
+            String msg = "failed to parse dn " + req.getName();
+
+            if ( log.isErrorEnabled() )
+            {
+                log.error( msg, e );
+            }
+
+            throw new CascadingRuntimeException( msg, e );
+        }
+
+        try
+        {
+            schema = m_module.getNexus().getSchema( dn );
+        }
+        catch ( NamingException e )
+        {
+            String msg = "failed to lookup schema for dn " + req.getName();
+
+            if ( log.isErrorEnabled() )
+            {
+                log.error( msg, e );
+            }
+
+            throw new CascadingRuntimeException( msg, e );
+        }
+
+        try
+        {
+            be = m_module.getNexus().getBackend( dn ) ;
+        }
+        catch ( NamingException e )
+        {
+            String msg = "failed to resolve backend for " + req.getName();
+
+            if ( log.isErrorEnabled() )
+            {
+                log.error( msg, e );
+            }
+
+            throw new CascadingRuntimeException( msg, e );
+        }
+
+        try
+        {
+            entry = be.read( dn );
+        }
+        catch ( Exception e )
+        {
+            String msg = "failed to read entry for " + req.getName();
+
+            if ( log.isErrorEnabled() )
+            {
+                log.error( msg, e );
+            }
+
+            throw new CascadingRuntimeException( msg, e );
+        }
+
+        Iterator list;
+        list = entry.getMultiValue( req.getAttributeId() ).iterator();
+        String compareTo = req.getAssertionValue();
+
+        try
+        {
+            while( list.hasNext() )
+            {
+                String value = ( String ) list.next();
+                value = schema.normalize( req.getAttributeId(), value );
+                if ( value.equals( compareTo ) )
+                {
+                    result.setResultCode( ResultCodeEnum.COMPARETRUE );
+                    break;
+                }
+            }
+        }
+        catch( NamingException e )
+        {
+            String msg = "failed to normalize entry value for " + req.getName();
+
+            if ( log.isErrorEnabled() )
+            {
+                log.error( msg, e );
+            }
+
+            throw new CascadingRuntimeException( msg, e );
+        }
+
+        result.setMatchedDn( entry.getEntryDN() );
+        return resp ;
     }
 }