//Warning: This code has been marked up for HTML

/**************************************************************************
*  Novell Software Developer Kit
*
*  Copyright (C) 2002-2003 Novell, Inc. All Rights Reserved.
*
*  THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND TREATIES.
*  USE AND REDISTRIBUTION OF THIS WORK IS SUBJECT TO THE LICENSE AGREEMENT
*  ACCOMPANYING THE SOFTWARE DEVELOPER KIT (SDK) THAT CONTAINS THIS WORK.
*  PURSUANT TO THE SDK LICENSE AGREEMENT, NOVELL HEREBY GRANTS TO DEVELOPER A
*  ROYALTY-FREE, NON-EXCLUSIVE LICENSE TO INCLUDE NOVELL'S SAMPLE CODE IN ITS
*  PRODUCT. NOVELL GRANTS DEVELOPER WORLDWIDE DISTRIBUTION RIGHTS TO MARKET,
*  DISTRIBUTE, OR SELL NOVELL'S SAMPLE CODE AS A COMPONENT OF DEVELOPER'S
*  PRODUCTS. NOVELL SHALL HAVE NO OBLIGATIONS TO DEVELOPER OR DEVELOPER'S
*  CUSTOMERS WITH RESPECT TO THIS CODE.
*
* $name:         ListSchema.java
* $description:  ListSchema.java shows how to get individual schema items.
******************************************************************************/
import java.util.Hashtable;
import javax.naming.NamingException;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NameClassPair;
import javax.naming.directory.DirContext;
import javax.naming.ldap.InitialLdapContext;

public class ListSchema {
    public static void main(String[] args) {

        if (args.length != 1) {
             usage();
        }

        String hostURL = args[0];

        try {
            /* Setup environment properties */
            Hashtable env = new Hashtable(5, 0.75f);
            env.put(Context.INITIAL_CONTEXT_FACTORY,
                                          "com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, hostURL);


            /* Construct an initial DirContext object */
            DirContext ctx = new InitialLdapContext( env, null );
            DirContext schema  = ctx.getSchema( "" );

            NamingEnumeration schemaList = schema.list( "" );

            while ( schemaList != null && schemaList.hasMore()) {

                NameClassPair nameClassPairs = (NameClassPair )schemaList.next();
                System.out.println( nameClassPairs.getClassName());
                System.out.println( nameClassPairs.getName());
            }

            System.out.println(schema.getAttributes("AttributeDefinition/sn"));
            System.out.println(schema.getAttributes("AttributeDefinition/cn"));
            System.out.println(schema.getAttributes("AttributeDefinition/mail"));
            System.out.println(schema.getAttributes("ClassDefinition/top"));
            System.out.println(schema.getAttributes("ClassDefinition/person"));
        }
        catch (NamingException e) {
            System.err.println("ListSchema example failed.");
            e.printStackTrace();
        }
        finally {
            System.exit(0);
        }
    }

    public static void usage() {
       System.out.println("\n Usage:   java ListSchema <host URL>"
           + "\n\n Example: java ListSchema ldap://acme.com:389");
       System.exit(1);
    }
}