You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2010/10/15 16:57:25 UTC
svn commit: r1022958 -
/directory/studio/branches/studio-connection-refactoring/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/DirectoryApiConnectionWrapper.java
Author: pamarcelot
Date: Fri Oct 15 14:57:25 2010
New Revision: 1022958
URL: http://svn.apache.org/viewvc?rev=1022958&view=rev
Log:
Cleaning and improvement on the search operation.
Modified:
directory/studio/branches/studio-connection-refactoring/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/DirectoryApiConnectionWrapper.java
Modified: directory/studio/branches/studio-connection-refactoring/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/DirectoryApiConnectionWrapper.java
URL: http://svn.apache.org/viewvc/directory/studio/branches/studio-connection-refactoring/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/DirectoryApiConnectionWrapper.java?rev=1022958&r1=1022957&r2=1022958&view=diff
==============================================================================
--- directory/studio/branches/studio-connection-refactoring/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/DirectoryApiConnectionWrapper.java (original)
+++ directory/studio/branches/studio-connection-refactoring/plugins/connection.core/src/main/java/org/apache/directory/studio/connection/core/io/DirectoryApiConnectionWrapper.java Fri Oct 15 14:57:25 2010
@@ -20,36 +20,37 @@
package org.apache.directory.studio.connection.core.io;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.ModificationItem;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.Control;
-import javax.naming.ldap.LdapContext;
import org.apache.directory.ldap.client.api.LdapConnectionConfig;
import org.apache.directory.ldap.client.api.LdapNetworkConnection;
+import org.apache.directory.shared.ldap.codec.controls.ControlImpl;
import org.apache.directory.shared.ldap.cursor.Cursor;
import org.apache.directory.shared.ldap.exception.LdapException;
-import org.apache.directory.shared.ldap.exception.LdapInvalidDnException;
import org.apache.directory.shared.ldap.filter.SearchScope;
+import org.apache.directory.shared.ldap.message.AliasDerefMode;
import org.apache.directory.shared.ldap.message.ArrayNamingEnumeration;
import org.apache.directory.shared.ldap.message.Response;
+import org.apache.directory.shared.ldap.message.SearchRequest;
+import org.apache.directory.shared.ldap.message.SearchRequestImpl;
import org.apache.directory.shared.ldap.message.SearchResultEntry;
+import org.apache.directory.shared.ldap.message.SearchResultReference;
import org.apache.directory.shared.ldap.name.DN;
import org.apache.directory.shared.ldap.util.AttributeUtils;
-import org.apache.directory.shared.ldap.util.JndiUtils;
import org.apache.directory.studio.common.core.jobs.StudioProgressMonitor;
import org.apache.directory.studio.connection.core.Connection;
import org.apache.directory.studio.connection.core.Connection.AliasDereferencingMethod;
import org.apache.directory.studio.connection.core.Connection.ReferralHandlingMethod;
+import org.apache.directory.studio.connection.core.ConnectionParameter.EncryptionMethod;
import org.apache.directory.studio.connection.core.io.jndi.ReferralsInfo;
import org.apache.directory.studio.connection.core.io.jndi.StudioNamingEnumeration;
@@ -61,8 +62,10 @@ import org.apache.directory.studio.conne
*/
public class DirectoryApiConnectionWrapper implements ConnectionWrapper
{
+ /** The connection*/
private Connection connection;
+ /** The LDAP Connection */
private LdapNetworkConnection ldapConnection;
@@ -77,6 +80,12 @@ public class DirectoryApiConnectionWrapp
}
+ /**
+ * Gets the associated LDAP Connection.
+ *
+ * @return
+ * the associated LDAP Connection
+ */
private LdapNetworkConnection getLdapConnection()
{
if ( ldapConnection != null )
@@ -89,6 +98,7 @@ public class DirectoryApiConnectionWrapp
config.setLdapPort( connection.getPort() );
config.setName( connection.getBindPrincipal() );
config.setCredentials( connection.getBindPassword() );
+ config.setUseSsl( connection.getEncryptionMethod() == EncryptionMethod.LDAPS );
ldapConnection = new LdapNetworkConnection( config );
@@ -97,33 +107,23 @@ public class DirectoryApiConnectionWrapp
/**
- * Connects to the directory server.
- *
- * @param monitor the progres monitor
+ * {@inheritDoc}
*/
public void connect( StudioProgressMonitor monitor )
{
try
{
- System.out.println( "connect" );
- boolean bool = getLdapConnection().connect();
- System.out.println( "connect done " + bool );
+ getLdapConnection().connect();
}
- catch ( LdapException e )
+ catch ( Exception e )
{
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- catch ( IOException e )
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ monitor.reportError( e );
}
}
/**
- * Disconnects from the directory server.
+ * {@inheritDoc}
*/
public void disconnect()
{
@@ -131,7 +131,7 @@ public class DirectoryApiConnectionWrapp
{
getLdapConnection().close();
}
- catch ( IOException e )
+ catch ( Exception e )
{
// TODO Auto-generated catch block
e.printStackTrace();
@@ -140,34 +140,24 @@ public class DirectoryApiConnectionWrapp
/**
- * Binds to the directory server.
- *
- * @param monitor the progress monitor
+ * {@inheritDoc}
*/
public void bind( StudioProgressMonitor monitor )
{
try
{
- System.out.println( "Bind" );
getLdapConnection().bind( getLdapConnection().getConfig().getName(),
getLdapConnection().getConfig().getCredentials() );
- System.out.println( "Bind done" );
}
- catch ( LdapException e )
+ catch ( Exception e )
{
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- catch ( IOException e )
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ monitor.reportError( e );
}
}
- /**
- * Unbinds from the directory server.
+ /***
+ * {@inheritDoc}
*/
public void unbind()
{
@@ -184,9 +174,7 @@ public class DirectoryApiConnectionWrapp
/**
- * Checks if is connected.
- *
- * @return true, if is connected
+ * {@inheritDoc}
*/
public boolean isConnected()
{
@@ -195,9 +183,7 @@ public class DirectoryApiConnectionWrapp
/**
- * Sets the binary attributes.
- *
- * @param binaryAttributes the binary attributes
+ * {@inheritDoc}
*/
public void setBinaryAttributes( Collection<String> binaryAttributes )
{
@@ -205,40 +191,35 @@ public class DirectoryApiConnectionWrapp
/**
- * Search.
- *
- * @param searchBase the search base
- * @param filter the filter
- * @param searchControls the controls
- * @param aliasesDereferencingMethod the aliases dereferencing method
- * @param referralsHandlingMethod the referrals handling method
- * @param controls the LDAP controls
- * @param monitor the progress monitor
- * @param referralsInfo the referrals info
- *
- * @return the naming enumeration or null if an exception occurs.
+ * {@inheritDoc}
*/
public StudioNamingEnumeration search( final String searchBase, final String filter,
final SearchControls searchControls, final AliasDereferencingMethod aliasesDereferencingMethod,
final ReferralHandlingMethod referralsHandlingMethod, final Control[] controls,
final StudioProgressMonitor monitor, final ReferralsInfo referralsInfo )
{
- System.out.println( "search" );
-
try
{
- Cursor<Response> cursor = getLdapConnection().search( new DN( searchBase ), filter,
- getSearchScope( searchControls ), searchControls.getReturningAttributes() );
+ // Preparing the search request
+ SearchRequest request = new SearchRequestImpl();
+ request.setBase( new DN( searchBase ) );
+ request.setFilter( filter );
+ request.setScope( convertSearchScope( searchControls ) );
+ request.addAttributes( searchControls.getReturningAttributes() );
+ request.addAllControls( convertControls( controls ) );
+ request.setSizeLimit( searchControls.getCountLimit() );
+ request.setTimeLimit( searchControls.getTimeLimit() );
+ request.setDerefAliases( convertAliasDerefMode( aliasesDereferencingMethod ) );
- List<SearchResult> searchResults = new ArrayList<SearchResult>();
+ // Performing the search operation
+ Cursor<Response> cursor = getLdapConnection().search( request );
- System.out.println( "base: " + searchBase );
- System.out.println( "filter: " + filter );
- System.out.println( "searchControls: " + searchControls );
+ // Creating the list of search results
+ List<SearchResult> searchResults = new ArrayList<SearchResult>();
+ // Converting each response as a search result
while ( cursor.next() )
{
- System.out.println( "cursor.next()" );
Response response = cursor.get();
if ( response instanceof SearchResultEntry )
{
@@ -248,36 +229,38 @@ public class DirectoryApiConnectionWrapp
sr.setNameInNamespace( sre.getObjectName().toString() );
searchResults.add( sr );
}
+ else if ( response instanceof SearchResultReference )
+ {
+ // TODO Add support for referrals
+ }
}
+ // Creating the naming enumeration with the list of search results
NamingEnumeration<SearchResult> ne = new ArrayNamingEnumeration<SearchResult>(
searchResults.toArray( new SearchResult[0] ) );
+ // Returning the result of the search
return new StudioNamingEnumeration( connection, null, ne, null, searchBase, filter, searchControls,
aliasesDereferencingMethod, referralsHandlingMethod, controls, 1, monitor, referralsInfo );
}
- catch ( LdapInvalidDnException e )
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- catch ( LdapException e )
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
catch ( Exception e )
{
- // TODO Auto-generated catch block
- e.printStackTrace();
+ monitor.reportError( e );
+ return null;
}
-
- return null;
}
- private SearchScope getSearchScope( SearchControls searchControls )
+ /**
+ * Converts the search scope.
+ *
+ * @param searchControls
+ * the search controls
+ * @return
+ * the associated search scope
+ */
+ private SearchScope convertSearchScope( SearchControls searchControls )
{
int scope = searchControls.getSearchScope();
if ( scope == SearchControls.OBJECT_SCOPE )
@@ -300,13 +283,67 @@ public class DirectoryApiConnectionWrapp
/**
- * Modifies attributes of an entry.
- *
- * @param dn the DN
- * @param modificationItems the modification items
- * @param controls the controls
- * @param monitor the progress monitor
- * @param referralsInfo the referrals info
+ * Converts the controls.
+ *
+ * @param controls
+ * an array of controls
+ * @return
+ * an array of converted controls
+ */
+ private org.apache.directory.shared.ldap.message.control.Control[] convertControls( Control[] controls )
+ {
+ if ( controls != null )
+ {
+ org.apache.directory.shared.ldap.message.control.Control[] returningControls = new org.apache.directory.shared.ldap.message.control.Control[controls.length];
+
+ for ( int i = 0; i < controls.length; i++ )
+ {
+ Control control = controls[i];
+ org.apache.directory.shared.ldap.message.control.Control returningControl = new ControlImpl(
+ control.getID() );
+ returningControl.setValue( control.getEncodedValue() );
+ returningControl.setCritical( control.isCritical() );
+
+ returningControls[i] = returningControl;
+ }
+
+ return returningControls;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
+ /**
+ * Converts the Alias Dereferencing method.
+ *
+ * @param aliasesDereferencingMethod
+ * the Alias Dereferencing method.
+ * @return
+ * the converted Alias Dereferencing method.
+ */
+ private AliasDerefMode convertAliasDerefMode( AliasDereferencingMethod aliasesDereferencingMethod )
+ {
+ switch ( aliasesDereferencingMethod )
+ {
+ case ALWAYS:
+ return AliasDerefMode.DEREF_ALWAYS;
+ case FINDING:
+ return AliasDerefMode.DEREF_FINDING_BASE_OBJ;
+ case NEVER:
+ return AliasDerefMode.NEVER_DEREF_ALIASES;
+ case SEARCH:
+ return AliasDerefMode.DEREF_IN_SEARCHING;
+ default:
+ return AliasDerefMode.DEREF_ALWAYS;
+ }
+ }
+
+
+ /**
+ * {@inheritDoc}
*/
public void modifyEntry( final String dn, final ModificationItem[] modificationItems, final Control[] controls,
final StudioProgressMonitor monitor, final ReferralsInfo referralsInfo )
@@ -315,14 +352,7 @@ public class DirectoryApiConnectionWrapp
/**
- * Renames an entry.
- *
- * @param oldDn the old DN
- * @param newDn the new DN
- * @param deleteOldRdn true to delete the old RDN
- * @param controls the controls
- * @param monitor the progress monitor
- * @param referralsInfo the referrals info
+ * {@inheritDoc}
*/
public void renameEntry( final String oldDn, final String newDn, final boolean deleteOldRdn,
final Control[] controls, final StudioProgressMonitor monitor, final ReferralsInfo referralsInfo )
@@ -331,13 +361,7 @@ public class DirectoryApiConnectionWrapp
/**
- * Creates an entry.
- *
- * @param dn the entry's DN
- * @param attributes the entry's attributes
- * @param controls the controls
- * @param monitor the progress monitor
- * @param referralsInfo the referrals info
+ * {@inheritDoc}
*/
public void createEntry( final String dn, final Attributes attributes, final Control[] controls,
final StudioProgressMonitor monitor, final ReferralsInfo referralsInfo )
@@ -346,12 +370,7 @@ public class DirectoryApiConnectionWrapp
/**
- * Deletes an entry.
- *
- * @param dn the DN of the entry to delete
- * @param controls the controls
- * @param monitor the progress monitor
- * @param referralsInfo the referrals info
+ * {@inheritDoc}
*/
public void deleteEntry( final String dn, final Control[] controls, final StudioProgressMonitor monitor,
final ReferralsInfo referralsInfo )