
package st.fr.cuellar.ldaptest;

import java.util.Enumeration;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;


public class Search {

		public static void main(String [] args){
			// Configuration Contexte + serveur + port
			Hashtable env = new Hashtable(5, 0.75f);
			env.put(Context.INITIAL_CONTEXT_FACTORY, Env.INITCTX);
			env.put(Context.PROVIDER_URL, Env.HOST);
			
			try {
				// Initialisation du contexte et connexion au serveur
				DirContext ctx = new InitialDirContext(env);
				 SearchControls constraints = new SearchControls();
			     constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
			     
			     NamingEnumeration results = ctx.search("o=univ-mlv, c=fr","(uid=gcuellar)", constraints);
			     
			     while (results != null && results.hasMore()) {
		            SearchResult si = (SearchResult)results.next();
		            
		            System.out.println("name: " + si.getName());
		            Attributes attrs = si.getAttributes();
		            if (attrs == null) {
		                System.out.println("No attributes");
		            } else {
		                for (NamingEnumeration ae = attrs.getAll();
		                     ae.hasMoreElements();) {
		                    Attribute attr = (Attribute)ae.next();
		                    String attrId = attr.getID();
		                    for (Enumeration vals = attr.getAll();
		                         vals.hasMoreElements();
		                         System.out.println(attrId + ": " + vals.nextElement()))
		                            ;
		                }
		            }
		            System.out.println();
		        }
			} catch (NamingException e) {
				e.printStackTrace();
			}
		}
}
