module addressbook;

import  java.util.Hashtable;
import  java.util.Enumeration;

//  Address book implementation taken from CORBA examples 
//  in Sun's Java CORBA Tutorial.
//
//
// AddressBook
//
// This behavior is responsible for implementing
// three message handlers
//
//   * String getEmail ( String email );
//   * String getName ( String name  );
//   * boolean addUser ( String name, String email ); 
//
//

behavior AddressBook implements ActorService {
	private Hashtable name2email;

	AddressBook() {
		// Create a new hashtable to store name & email
		name2email = new Hashtable();
	}

	// Get the name of this email user
	String getName(String email) {
		System.err.println("getting name by email: " + email);

		if (name2email.contains(email)) {
			// Begin search for that name
			Enumeration e = name2email.keys();
 
			while(e.hasMoreElements()) {
				String name = (String) e.nextElement();
				String e_mail = (String) name2email.get(name);

				// Match on email?
				if (email.compareTo(e_mail) == 0) {
					return name;
				}
			}
		}
		return new String("Unknown user");
	}

	// Get the email of this person
	String getEmail(String name) {
		System.err.println("Getting email by name: " + name);

		// If user exists
		if (name2email.containsKey(name)) {
			// Return email address
			return (String) name2email.get(name);
		}

		// User doesn't exist
		return new String("Unknown user");
	}

	// Add a new user to the system, returns success
	boolean addUser (String name, String email) {
		System.err.println("added user: " + name + ", " + email);

		// Is the user already listed
		if (name2email.containsKey(name) || name2email.contains(email)) {
			// If so, return false
			return false;
		}

		// Add to our hash table
		name2email.put(name, email);
		return true;
	}

	void act(String args[]) {
		try{
		  if (args.length != 0) {
			standardOutput<-println( "Usage: salsa -Duan=<UAN> -Dual=<UAL> addressbook.AddressBook" );
			return;
		  }
		  // standardOutput<-println("AddressBook at: ") @
		  // standardOutput<-println("\tuan: " + this.getUAN()) @
		  // standardOutput<-println("\tual: " + this.getUAL());
		} catch (Exception e) {
		    standardError<-println(e);
		}
	}
}
