package javacodebook.net.rmi.simpleserver;

import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.UnicastRemoteObject;
import java.net.MalformedURLException;
import java.util.*;

/**
 * @author benjamin_rusch
 *
 * Dieser Server beinhaltet Addressdaten. Kennt der Client den Nachnamen, 
 * kann er auch weitere Informationen über diese Person erlangen. 
 * Zusätzlich hat er noch Zugriff auf die Anzahl gespeicherter Adressen.
 * 
 * Achtung: Bevor der Server laufen kann müssen Stub und Skeleton generiert 
 * werden: 
 * 	   rmic javacodebook.net.rmi.simpleserver.AddressBookServer
 */
public class AddressBookServer implements AddressBook {

	// Adressen werden in eine HashTable abgelegt
	private Hashtable content = new Hashtable();
		
	public int getSize() throws RemoteException {
		return content.size();
	}
	
	public String getAddressByName(String name) throws RemoteException {
		return (String)content.get(name);
	}
	
	public AddressBookServer(int port)throws Exception
	{
		// AdressBuch wird mit Daten gefüllt
		fillHashTable();
		// Der Namensdienst wird vom Programm aus gestartet
		LocateRegistry.createRegistry(port);
		// Dieses Server-Objekt wird exportiert
		UnicastRemoteObject.exportObject(this,port);
		
		// Das exportierte Objekt wird an der registry mit definierter
		// URL angemeldet
  		Naming.rebind("//localhost:"+port+"/"+AddressBook.NAMING, this);
	}
	
	/**
	 * Füllt Adressbuch mit Daten.
	 */
	private void fillHashTable() {
		content.put("Arbeit","Andi Arbeit, Terlindenweg 50, 59594 Soest");
		content.put("Einstellbar","Manuel Einstellbar, Kaiserallee 4711, 76133 Karlsruhe" );
		content.put("Sörwis","Sigrid Sörwis, Winsstrasse 00, 10405 Berlin");
		content.put("Mutig","Miss Mutig, Kungshamra 2000, 1234 Stockholm");
	}
	
	// Server wird gestartet.
	public static void main(String[] args) throws Exception{
			new AddressBookServer(1099);
			
	}
}
