// ContainerInterfaceImpl.java // $Id: AbstractContainer.html,v 1.2 1999/10/27 22:10:33 ylafon Exp $ // (c) COPYRIGHT MIT and INRIA, 1996. // Please first read the full copyright statement in file COPYRIGHT.html package org.w3c.tools.resources ; import java.util.*; import org.w3c.tools.resources.event.*; /** * The top level class for Resource Container. */ public abstract class AbstractContainer extends FramedResource implements ContainerInterface, StructureChangedListener, AttributeChangedListener { /** * This handles the <code>RESOURCE_MODIFIED</code> kind of events. * @param evt The StructureChangeEvent. */ public void resourceModified(StructureChangedEvent evt) { displayEvent( this, evt ); } /** * A new resource has been created in some space. * This handles the <code>RESOURCE_CREATED</code> kind of events. * @param evt The event describing the change. */ public void resourceCreated(StructureChangedEvent evt) { displayEvent( this, evt ); } /** * A resource is about to be removed * This handles the <code>RESOURCE_REMOVED</code> kind of events. * @param evt The event describing the change. */ public void resourceRemoved(StructureChangedEvent evt) { displayEvent( this, evt ); } /** * A resource is about to be unloaded * This handles the <code>RESOURCE_UNLOADED</code> kind of events. * @param evt The event describing the change. */ public void resourceUnloaded(StructureChangedEvent evt){ // don't display event here, because the resource is about // to be unloaded. } /** * Gets called when a property changes. * @param evt The AttributeChangeEvent describing the change. */ public void attributeChanged(AttributeChangedEvent evt) { displayEvent( this, evt ); } /** * Enumerate children resource identifiers. * @param all Should all resources be enumerated ? Resources are often * created on demand only, this flag allows the caller to tell the * container about wether it is interested only in already created * resources, or in all resources (even the one that have not yet been * created). * @return An String enumeration, one element per child. */ abstract public Enumeration enumerateResourceIdentifiers(boolean all); public Enumeration enumerateResourceIdentifiers() { return enumerateResourceIdentifiers(true); } /** * Ask our frames to update default child attributes. * @param attrs A hashtable. */ protected ResourceContext updateDefaultChildAttributes(Hashtable attrs) { ResourceFrame frames[] = getFrames(); if ( frames != null ) { for (int i = 0 ; i < frames.length ; i++) { if ( frames[i] == null ) continue; frames[i].updateDefaultChildAttributes(attrs); } } return (ResourceContext)attrs.get("context"); } /** * Lookup a children in the container. * @param name The name of the children to lookup. * @exception InvalidResourceException If the container could not restore * the resource from its store. */ abstract public ResourceReference lookup(String name); /** * Remove a child resource from that container. * @param name The name of the child to remove. * @exception MultipleLockException If someone else * has locked the resource. */ abstract public void delete(String name) throws MultipleLockException; /** * Create a default child resource in that container. * This method is called by the editor to add a default resource * in the container under the given name. The meaning of <em>default</em> * is left up to the container here. * @param name The identifier for the new resource. */ abstract public ResourceReference createDefaultResource(String name); /** * Initialize and register the given resource within that container. * @param name The identifier for the resource. * @param resource An unitialized resource instance. * @param defs A default set of init attribute values (may be * <strong>null</strong>). * @exception InvalidResourceException If an error occurs during the * registration. */ abstract public void registerResource(String name, Resource resource, Hashtable defs) throws InvalidResourceException; }