package javacodebook.net.rmi.objectreference;

import java.rmi.*;
import java.rmi.registry.*;


/**
 * @author benjamin_rusch
 *
 * Dieser Client sucht ein entferntes Objekt im Netz, und ruft zwei seiner
 * Methoden auf. 
 * Es können der Applikation beim Start zwei Strings übergeben werden, der 
 * erste gibt den "Host" der zweite den "Port" des Namensdienstes an.
 */
public class AddressBookClient {

	public static String host = "localhost";
	public static int port = 1099;
	
	public static void main(String[] args) throws Exception {
		
		// Werden zwei Strings beim Program-Start übergeben, wird der erste
		// als URL und der zweite als Port des Namensdienstes interpretiert.  
		// Wird nichts übergeben werden Default-Einstellungen verwendet.
		if(args.length==2) {
			host=args[0];
			port=Integer.parseInt(args[1]);
		}
		
		// Anhand der Namensdienst URL und des Ports wird der Lookup-String
		// zusammengebaut. 
		String mLookup = "//"+host+":"+port+"/"+AddressBook.NAMING;
   		
   		// Remote-Objekt wird referenziert, und zum AddressBook Objekt 
   		// gecastet
   		AddressBook book = (AddressBook)Naming.lookup(mLookup);
		
		// Aufruf der Methode getAddressByName("Arbeit") liefert ein Objekt
		// einer selbstgeschrieben Klasse
		Address a1=  book.getAddressByName("Arbeit");
		
		// Methoden des Remote-Objekts, sowie des übertragenen 
		// Objects werden aufgerufen
		System.out.println("Das Adressbuch hat "+book.getSize()+" Eintraege.");
		System.out.println("Arbeit hat folgende Anschrift:\n"
				+a1.getStringRepresentation()+"\n");
		
		// Werte des Objektes werden geändert und ausgegeben
		a1.setCity("Muenchen");
		a1.setStreet("Landshuter Allee"); 
		System.out.println("Arbeit hat geaenderte Anschrift:\n"
				+a1.getStringRepresentation()+"\n");
		
		// Objekt wird neu abgefragt und ausgegeben
		System.out.println("Adresse von Arbeit wird neu abgefragt...");
		Address a2=  book.getAddressByName("Arbeit");
		System.out.println("Arbeit hat folgende Anschrift:\n"
				+a2.getStringRepresentation()+"\n");	
	}
}
