//============================================================================== // Registry.java //============================================================================== package sample.resource; import java.util.Map; import java.util.HashMap; /** * Responsibilities:

* * @author Copyright 2003 Nikolas S. Boyd. */ public class Registry { /** Contains the registered resources. */ private Map contents; /** Maintains the resource registry. */ private Registrar registrar; /** Manages the resource backing store. */ private StorageManager manager; /** * Returns the resouce named (resourceName). * @param resourceName identifies a registered resource. * @return null if no such resource exists. */ public Resource getResourceNamed(String resourceName) { if (resourceName == null) return null; return (Resource) this.contents.get(resourceName); } /** * Returns the registered resource names. */ public String[] getResourceNames() { String[] empty = {}; return (String[]) this.contents.keySet().toArray(empty); } /** * Stores the registered resources in the backing store. */ public void storeResources() { this.manager.storeResources(this); } /** * Constructs a new Registry. */ protected Registry() { this.contents = this.createContents(); this.registrar = this.createRegistrar(); this.accept(this.createStorageManager()); this.registerShutdownHook(); } /** * Accepts the (storageManager) for resource loading. * @param storageManager loads the configured resources. */ protected void accept(StorageManager storageManager) { this.manager = storageManager; storageManager.loadResources(registrar); } /** * Returns a new contents map. */ protected Map createContents() { return new HashMap(); } /** * Returns a new registrar. */ protected Registrar createRegistrar() { return new Registrar(); } /** * Returns a new storage manager. */ protected StorageManager createStorageManager() { return new StorageManager(); } /** * Registers a shutdown hook. */ protected void registerShutdownHook() { Runtime.getRuntime() .addShutdownHook(this.createShutdownHook()); } /** * Returns a new shutdown hook. */ protected Thread createShutdownHook() { return new Thread() { public void run() { manager.storeResources(Registry.this); } }; } /** * Responsibilities:

* * @author Copyright 2003 Nikolas S. Boyd. */ protected class Registrar { /** * Registers the supplied (resource). * @param resource identifies a resource to be registered. */ public void register(Resource resource) { contents.put(resource.getName(), resource); } } // Registrar } // ResourceRegistry