package ejava.ejb.personnel.client;

import ejava.ejb.personnel.PersonHome;
import ejava.ejb.personnel.Person;
import javax.ejb.FinderException;
import javax.ejb.CreateException;
import javax.naming.InitialContext;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import java.rmi.RemoteException;
import java.util.Properties;
import java.util.Collection;
import java.util.Iterator;

public class PersonClient {
   private static final String USAGE =
      "java ejava.ejb.personnel.PersonClient " +
         "[-user <username> " +
	 "[-password <password>] " +
	 "<-add|-list>";
   private String user_;
   private String password_;

   public PersonClient(String user, String password) {
      user_ = user;
      password_ = password;
   }

   public void listPersonnel() 
      throws NamingException, RemoteException, 
             FinderException, CreateException {

      PersonHome pHome = getPersonHome();

      Collection people = pHome.findByLikeName("%","%");
      for(Iterator itr=people.iterator(); itr.hasNext(); ) {
         Person person = (Person)itr.next();
	 System.out.println(person.toXML());
      }
   }

   public void addPerson(
      String id, String firstName, String lastName,
      String address, String phoneNumber) 
      throws NamingException, RemoteException, CreateException {

      PersonHome pHome = getPersonHome();

      Person newPerson = pHome.create(id, firstName, lastName,
                                      address, phoneNumber);
   }

   protected PersonHome getPersonHome() 
      throws NamingException {

      Context ctx = getInitialContext();
      Object object = ctx.lookup("PersonHome");
      PersonHome pHome = (PersonHome)
         PortableRemoteObject.narrow(object, PersonHome.class);

      return pHome;
   }

   protected Context getInitialContext() throws NamingException {
      Properties props = new Properties();
      props.put(Context.INITIAL_CONTEXT_FACTORY,
                "weblogic.jndi.WLInitialContextFactory");
      props.put(Context.PROVIDER_URL,
                "t3://localhost:7001");
      if (user_ != null) {
         props.put(Context.SECURITY_PRINCIPAL, user_);
      }
      if (password_ != null) {
         props.put(Context.SECURITY_CREDENTIALS, password_);
      }

      return new InitialContext(props);
   }

   public static void main(String args[]) {
      String user = null;
      String password = null;
      String option = "list";
      String id = null;
      String firstName = null;
      String lastName = null;
      String address = null;
      String phoneNumber = null;

      for(int i=0; i<args.length; i++) {
         if (args[i].equals("-user")) {
	    user = args[i+1];
	 }
	 else if (args[i].equals("-password")) {
	    password = args[i+1];
	 }
	 else if (args[i].equals("-list")) {
	    option = "list";
	 }
	 else if (args[i].equals("-add")) {
	    option = "add";
	    id = args[i+1];
	    firstName = args[i+2];
	    lastName = args[i+3];
	    address = args[i+4];
	    phoneNumber = args[i+5];
	 }
      }

      try {
         PersonClient client = new PersonClient(user, password);
         if (option.equals("list")) {
	    System.out.println("listing Persons...");
	    client.listPersonnel();
         }
	 else if (option.equals("add")) {
	    System.out.println("adding Person...");
	    client.addPerson(id, firstName, lastName,
	                     address, phoneNumber);
	 }
	 else {
	    System.out.println("unknown option");
	 }
      }
      catch (Exception ex) {
         ex.printStackTrace();
      }
   }
}
