package ejava.ejb.personnel.client;

import ejava.ejb.personnel.PersonHome;
import ejava.ejb.personnel.Person;
import javax.ejb.FinderException;
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 Client {
   private static final String USAGE =
      "java ejava.ejb.personnel.Client <username> <password>";
   private String user_;
   private String password_;

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

   public void listPersonnel() 
      throws NamingException, RemoteException, FinderException {
      Context ctx = getInitialContext();

      Object object = ctx.lookup("PersonHome");
      /** could not locate ioser12 library
      PersonHome pHome = (PersonHome)
          PortableRemoteObject.narrow(object, PersonHome.class);
      **/
      PersonHome pHome = (PersonHome)(object);
      Collection people = pHome.findByLikeName("","");
      for(Iterator itr=people.iterator(); itr.hasNext(); ) {
         Person person = (Person)itr.next();
	 System.out.println(person.toXML());
      }
   }

   private 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;
      switch (args.length) {
         case 1: user = args[0]; break;
	 case 2: user = args[0]; password = args[1]; break;
      }
      try {
         Client client = new Client(user, password);
	 client.listPersonnel();
	 //client.addPerson();
      }
      catch (Exception ex) {
         ex.printStackTrace();
      }
   }
}
