package samples.bidbuy; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; public class RegistryService { private static Hashtable registry = new Hashtable(); /** * Find a named service in a list * @param list of services * @param name to search for * @return service found (or null) */ public RegistryService() { load(); } public void load() { try { FileInputStream fis = new FileInputStream("bid.reg"); ObjectInputStream ois = new ObjectInputStream( fis ); registry = (Hashtable) ois.readObject(); ois.close(); fis.close(); } catch(java.io.FileNotFoundException fnfe){ // nop } catch(Exception e){ e.printStackTrace(); } } public void save() { try { FileOutputStream fos = new FileOutputStream("bid.reg"); ObjectOutputStream oos = new ObjectOutputStream( fos ); oos.writeObject( registry ); oos.close(); fos.close(); } catch(Exception e){ e.printStackTrace(); } } private Service find(Vector list, String name) { Enumeration e = list.elements(); while (e.hasMoreElements()) { Service s = (Service) e.nextElement(); if (s.getServiceName().equals(name)) return s; } return null; } /** * Unregister a serivce * @param server name */ public void Unregister(String name) { Enumeration e1 = registry.keys(); while (e1.hasMoreElements()) { Vector list = (Vector) registry.get(e1.nextElement()); Enumeration e2 = list.elements(); while (e2.hasMoreElements()) { Service s = (Service) e2.nextElement(); if (s.getServiceName().equals(name)) { list.remove(s); save(); } } } } /** * Register a new serivce * @param server name * @param url of endpoint * @param stype * @param wsdl */ public void Register(String name, String url, String stype, String wsdl) { Vector list = (Vector)registry.get(stype); if (list == null) registry.put(stype, list=new Vector()); Service service = find(list, name); if (service==null) list.add(service=new Service()); service.setServiceName(name); service.setServiceUrl(url); service.setServiceType(stype); service.setServiceWsdl(wsdl); save(); } /** * Return the current list of services as an array * @param Service Name * @return List of servers that implement that service */ public Service[] Lookup(String stype) { if (!registry.containsKey(stype)) return new Service[] {}; Vector list = (Vector)registry.get(stype); Service[] result = new Service[list.size()]; list.copyInto(result); return result; } /* * Return the current list of services as a string */ public String LookupAsString(String stype) { Service[] services = Lookup(stype); String result = ""; for (int i=0; i<services.length; i++) { Service service = services[i]; result += service.getServiceName() + "\t" + service.getServiceUrl() + "\t" + service.getServiceType() + "\t" + service.getServiceWsdl() + "\n"; } return result; } }