import java.util.Enumeration;
import java.util.Iterator;
import java.io.UnsupportedEncodingException;
import com.novell.ldap.*;
import com.novell.ldap.controls.*;
public class AsyncSortControl
{
public static void main( String[] args )
{
if (args.length != 4) {
System.out.println("Usage: java AsyncSortControl <host name> "
+ "<login dn> <password> <container>");
System.out.println("Example: java AsyncSortControl Acme.com"
+ " \"cn=admin,o=Acme\" secret \"ou=Sales,o=Acme\"");
System.exit(0);
}
String ldapHost = args[0];
String loginDN = args[1];
String password = args[2];
String searchBase = args[3];
int MY_PORT = 389;
int ldapVersion = LDAPConnection.LDAP_V3;
try {
LDAPConnection lc = new LDAPConnection();
lc.connect( ldapHost, MY_PORT);
lc.bind(ldapVersion, loginDN, password.getBytes("UTF8") );
System.out.println( "Login succeeded");
String MY_FILTER = "(objectClass=*)";
String[] attrs = new String[2];
attrs[0] = "givenname";
attrs[1] = "cn";
LDAPSortKey[] keys = new LDAPSortKey[1];
keys[0] = new LDAPSortKey( "cn" );
LDAPSortControl sort = new LDAPSortControl( keys, true );
LDAPSearchConstraints cons = lc.getSearchConstraints();
cons.setControls( sort );
lc.setConstraints(cons);
System.out.println( "Calling search request");
LDAPSearchQueue queue = lc.search( searchBase,
LDAPConnection.SCOPE_SUB,
MY_FILTER,
attrs,
false,
(LDAPSearchQueue)null,
(LDAPSearchConstraints) null );
LDAPMessage message;
while (( message = queue.getResponse()) != null ) {
if ( message instanceof LDAPSearchResultReference ) {
String urls[]=((LDAPSearchResultReference)message).getReferrals();
System.out.println("Search result references:");
for ( int i = 0; i < urls.length; i++ )
System.out.println(urls[i]);
}
else if ( message instanceof LDAPSearchResult ) {
LDAPEntry entry = ((LDAPSearchResult)message).getEntry();
System.out.println("\n" + entry.getDN());
System.out.println("\tAttributes: ");
LDAPAttributeSet attributeSet = entry.getAttributeSet();
Iterator allAttributes = attributeSet.iterator();
while(allAttributes.hasNext()) {
LDAPAttribute attribute = (LDAPAttribute)allAttributes.next();
String attributeName = attribute.getName();
System.out.println("\t\t" + attributeName);
Enumeration allValues = attribute.getStringValues();
if( allValues != null) {
while(allValues.hasMoreElements()) {
String Value = (String) allValues.nextElement();
System.out.println("\t\t\t" + Value);
}
}
}
}
else {
LDAPResponse response = (LDAPResponse)message;
int status = response.getResultCode();
if ( status == LDAPException.SUCCESS ) {
System.out.println("Asynchronous search succeeded.");
}
else if ( status == LDAPException.REFERRAL ) {
String urls[]=((LDAPResponse)message).getReferrals();
System.out.println("Referrals:");
for ( int i = 0; i < urls.length; i++ )
System.out.println(urls[i]);
}
else {
System.out.println("Asynchronous search failed.");
System.out.println( response.getErrorMessage());
}
LDAPControl[] controls = response.getControls();
if ( controls != null ) {
for( int i = 0; i < controls.length; i++ ) {
if ( controls[i] instanceof LDAPSortResponse ) {
System.out.println("Received LDAP Sort Control fromserver");
String bad = ((LDAPSortResponse)controls[i]).getFailedAttribute();
int result = ((LDAPSortResponse)controls[i]).getResultCode();
System.out.println( "Error code: " + result );
if ( bad != null )
System.out.println( "Offending " + "attribute: " + bad );
else
System.out.println( "No offending " + "attribute " + "returned" );
}
}
}
}
}
if ( lc.isConnected() )
lc.disconnect();
}
catch( LDAPException e ) {
System.out.println( e.toString() );
}
catch( UnsupportedEncodingException e ) {
System.out.println( "Error: " + e.toString() );
}
}
}