package com.oreilly.jent.jndi;

/**
 * In general, you may use the code in this book in your programs and 
 * documentation. You do not need to contact us for permission unless 
 * you're reproducing a significant portion of the code. For example, 
 * writing a program that uses several chunks of code from this book does 
 * not require permission. Selling or distributing a CD-ROM of examples 
 * from O'Reilly books does require permission. Answering a question by 
 * citing this book and quoting example code does not require permission. 
 * Incorporating a significant amount of example code from this book into 
 * your product's documentation does require permission.
 * 
 * We appreciate, but do not require, attribution. An attribution usually 
 * includes the title, author, publisher, and ISBN. For example: 
 * 
 *   "Java Enterprise in a Nutshell, Third Edition, 
 *    by Jim Farley and William Crawford 
 *    with Prakash Malani, John G. Norman, and Justin Gehtland. 
 *    Copyright 2006 O'Reilly Media, Inc., 0-596-10142-2."
 *  
 *  If you feel your use of code examples falls outside fair use or the 
 *  permission given above, feel free to contact us at 
 *  permissions@oreilly.com.
 */

/**
 * Lookup: Bind to a JNDI context and lookup a given object.
 */

import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class Lookup {
  public static void main(String[] args) {
    String name = "";
    if (args.length > 0)
      name = args[0];

    try {
      // Create a Properties object and set default properties
      Properties props = new Properties();
      props.put(Context.INITIAL_CONTEXT_FACTORY,
                "com.sun.jndi.fscontext.RefFSContextFactory");
      props.put(Context.PROVIDER_URL, "file:///");
      
      // Optional command-line args to specify alternate factory and URL
      if (args.length > 1) {
        props.put(Context.INITIAL_CONTEXT_FACTORY, args[1]);
      }
      if (args.length > 2) {
        props.put(Context.PROVIDER_URL, args[2]);
      }

      // Create the initial context from the properties we just created
      Context initialContext = new InitialContext(props);

      // Look up the named object provided on the command-line
      Object obj = initialContext.lookup(name);
      if (name.equals(""))
        System.out.println("Looked up the initial context");
      else {
        System.out.println(name + " is bound to: " + obj
                           + " of type " + obj.getClass().getName());
        if (obj instanceof java.io.File) {
          System.out.println("It's a file");
        }
      }
    }
    catch (NamingException ne) {
      System.out.println("Encountered a naming exception");
      ne.printStackTrace();
    }
  }
}
