org.w3c.tools.resources
Class DirectoryResource

java.lang.Object
  extended by org.w3c.tools.resources.AttributeHolder
      extended by org.w3c.tools.resources.Resource
          extended by org.w3c.tools.resources.FramedResource
              extended by org.w3c.tools.resources.AbstractContainer
                  extended by org.w3c.tools.resources.ContainerResource
                      extended by org.w3c.tools.resources.DirectoryResource
All Implemented Interfaces:
java.lang.Cloneable, java.util.EventListener, ContainerInterface, AttributeChangedListener, FrameEventListener, StructureChangedListener
Direct Known Subclasses:
DirectoryResource, PassDirectory, ZipDirectoryResource

public class DirectoryResource
extends ContainerResource

A simple, and reasonably efficient directory resource.


Field Summary
protected static int ATTR_DIRECTORY
          Attribute index - The index for our directory attribute.
protected static int ATTR_DIRSTAMP
          Attribute index - The last time we physically visited the directory.
protected static int ATTR_EXTENSIBLE
          Attribute index - The index of wether we are extensible.
protected static int ATTR_INDEXER
          Attribute index - The indexer to use for that directory, if any.
protected static int ATTR_SHRINKABLE
          Attribute index - The index of wether we can be shrinked.
 
Fields inherited from class org.w3c.tools.resources.ContainerResource
acquired, ATTR_KEY, debug
 
Fields inherited from class org.w3c.tools.resources.AbstractContainer
ur
 
Fields inherited from class org.w3c.tools.resources.FramedResource
ATTR_OID, attrListener, debugEvent, event_disabled, framesRef, structListener
 
Fields inherited from class org.w3c.tools.resources.Resource
ATTR_CONTEXT, ATTR_HELP_URL, ATTR_IDENTIFIER, ATTR_LAST_MODIFIED, ATTR_PARENT, ATTR_RESOURCE_FRAMES, ATTR_STORE_ENTRY, ATTR_URL, co, id
 
Fields inherited from class org.w3c.tools.resources.AttributeHolder
attributes, values
 
Constructor Summary
DirectoryResource()
           
 
Method Summary
 ResourceReference createDefaultResource(java.lang.String name)
          Create a default child resource in that container.
protected  ResourceReference createDefaultResource(java.lang.String name, RequestInterface req)
          Try creating a default resource having the given name.
 ResourceReference createDirectoryResource(java.lang.String name)
          Create a DirectoryResource and the physical directory too.
 ResourceReference createResource(java.lang.String name)
          Create a Resource and the physical file too.
 ResourceReference createResource(java.lang.String name, RequestInterface req)
          Create a Resource and the physical file too.
 void delete()
          Delete this directory resource, for ever.
protected  java.util.Enumeration enumerateAllResourceIdentifiers()
          Enumerate all available children resource identifiers.
 java.util.Enumeration enumerateResourceIdentifiers(boolean all)
          Enumerate all available children resource identifiers.
 java.io.File getDirectory()
          Get the physical directory exported by this resource.
 long getDirStamp()
          Get the absolute time at which we examined the physicall directory.
 boolean getExtensibleFlag()
          Get the extensible flag value.
protected  java.lang.String getIndexedName(java.lang.String name)
          Get the name of the resource relative to the given filename.
protected  ResourceReference getIndexer(ResourceContext c)
          Get the indexer out of the given context.
 boolean getShrinkableFlag()
          Get the extensible flag value.
protected  Resource index(java.lang.String name, java.util.Hashtable defs, RequestInterface req)
          Index a Resource.
 void initialize(java.lang.Object[] values)
          Initialize this directory resource with the given set of attributes.
 ResourceReference lookup(java.lang.String name)
          Lookup the resource having the given name in this directory.
 void reindex(boolean rec)
          Reindex recursivly all the resources from this DirectoryResource.
 void resourceRemoved(StructureChangedEvent evt)
          A resource is about to be removed This handles the RESOURCE_REMOVED kind of events.
 void setValue(int idx, java.lang.Object value)
          Set some of this resource attribute.
 java.io.File unsafeGetDirectory()
          Get the physical directory exported by this resource.
 boolean unsafeGetShrinkableFlag()
          Get the extensible flag value.
protected  ResourceContext updateDefaultChildAttributes(java.util.Hashtable attrs)
          Initialize and register a new resource into this directory.
 boolean verify()
          Was return false (don't khow why)
 
Methods inherited from class org.w3c.tools.resources.ContainerResource
acquireChildren, addResource, delete, deleteChildren, getChildrenSpaceEntry, getClone, getKey, getMatchingCharsCount, getSpaceEntry, internalLookup, lookup, notifyUnload, registerResource, replace, resourceCreated, resourceModified
 
Methods inherited from class org.w3c.tools.resources.AbstractContainer
attributeChanged, enumerateResourceIdentifiers, resourceUnloaded
 
Methods inherited from class org.w3c.tools.resources.FramedResource
addAttributeChangedListener, addStructureChangedListener, collectFramesReference, disableEvent, displayEvent, enableEvent, eventDisabled, fireAttributeChangeEvent, fireStructureChangedEvent, fireStructureChangedEvent, frameAdded, frameModified, frameRemoved, getFrame, getFrame, getFrameReference, getFrameReference, getFramesReference, getOid, markModified, perform, performFrames, postAttributeChangeEvent, postEvent, postStructureChangedEvent, postStructureChangedEvent, processEvent, registerFrame, registerFrameIfNone, removeAttributeChangedListener, removeStructureChangedListener, setSilentValue, setSilentValue, unregisterFrame
 
Methods inherited from class org.w3c.tools.resources.Resource
acceptUnload, checkMultipleLock, collectFrames, getContext, getFrame, getFrames, getHelpURL, getHelpURL, getIdentifier, getLastModified, getParent, getResourceReference, getServer, getSpace, getStoreEntry, getURLPath, getValue, getValue, initialize, isInitialized, isUnloaded, pickleValues, setContext, setContext, setValue, unsafeGetContext, unsafeGetFrame, unsafeGetFrames, unsafeGetIdentifier, unsafeGetResourceReference, unsafeGetURLPath, unsafeGetValue, updateAttributes
 
Methods inherited from class org.w3c.tools.resources.AttributeHolder
definesAttribute, definesAttribute, getAttributes, getBoolean, getChar, getClone, getClone, getDouble, getFloat, getInt, getLong, getString, getValue, lookupAttribute, print, setBoolean, setChar, setDouble, setFloat, setInt, setLong, setString, setValue, unsafeDefinesAttribute, unsafeGetDouble, unsafeGetString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ATTR_DIRECTORY

protected static int ATTR_DIRECTORY
Attribute index - The index for our directory attribute.


ATTR_DIRSTAMP

protected static int ATTR_DIRSTAMP
Attribute index - The last time we physically visited the directory.


ATTR_INDEXER

protected static int ATTR_INDEXER
Attribute index - The indexer to use for that directory, if any.


ATTR_EXTENSIBLE

protected static int ATTR_EXTENSIBLE
Attribute index - The index of wether we are extensible.


ATTR_SHRINKABLE

protected static int ATTR_SHRINKABLE
Attribute index - The index of wether we can be shrinked.

Constructor Detail

DirectoryResource

public DirectoryResource()
Method Detail

getIndexer

protected ResourceReference getIndexer(ResourceContext c)
Get the indexer out of the given context.

Returns:
A ResourceIndexer instance, guaranteeed not to be null.

setValue

public void setValue(int idx,
                     java.lang.Object value)
Description copied from class: FramedResource
Set some of this resource attribute. We overide setValue to post events.

Overrides:
setValue in class FramedResource
Parameters:
idx - The index of the attribute to modify.
value - The new attribute value.

getDirectory

public java.io.File getDirectory()
Get the physical directory exported by this resource.

Returns:
A non-null File object giving the directory of this resource.

unsafeGetDirectory

public java.io.File unsafeGetDirectory()
Get the physical directory exported by this resource.

Returns:
A non-null File object giving the directory of this resource.

getDirStamp

public long getDirStamp()
Get the absolute time at which we examined the physicall directory.

Returns:
The date (as a long number of ms since Java epoch), or -1 if we never examined it before.

getExtensibleFlag

public boolean getExtensibleFlag()
Get the extensible flag value. A DirectoryResource is extensible, if it is allowed to create new resources out of the file system knowledge on the fly.

Setting this flag might slow down the server. It unfortunatelly defaults to true until I have a decent admin program.

Returns:
A boolean true if the directory is extensible.

getShrinkableFlag

public boolean getShrinkableFlag()
Get the extensible flag value. A DirectoryResource is extensible, if it is allowed to create new resources out of the file system knowledge on the fly.

Setting this flag might slow down the server. It unfortunatelly defaults to true until I have a decent admin program.

Returns:
A boolean true if the directory is extensible.

unsafeGetShrinkableFlag

public boolean unsafeGetShrinkableFlag()
Get the extensible flag value. A DirectoryResource is extensible, if it is allowed to create new resources out of the file system knowledge on the fly.

Setting this flag might slow down the server. It unfortunatelly defaults to true until I have a decent admin program.

Returns:
A boolean true if the directory is extensible.

resourceRemoved

public void resourceRemoved(StructureChangedEvent evt)
A resource is about to be removed This handles the RESOURCE_REMOVED kind of events.

Specified by:
resourceRemoved in interface StructureChangedListener
Overrides:
resourceRemoved in class ContainerResource
Parameters:
evt - The event describing the change.

createDirectoryResource

public ResourceReference createDirectoryResource(java.lang.String name)
Create a DirectoryResource and the physical directory too.

Parameters:
name - the name of the resource.
Returns:
A ResourceReference instance.

createResource

public ResourceReference createResource(java.lang.String name)
Create a Resource and the physical file too.

Parameters:
name - the name of the resource.
Returns:
A ResourceReference instance.

createResource

public ResourceReference createResource(java.lang.String name,
                                        RequestInterface req)
Create a Resource and the physical file too.

Parameters:
name - the name of the resource.
req - the protocol request.
Returns:
A ResourceReference instance.

index

protected Resource index(java.lang.String name,
                         java.util.Hashtable defs,
                         RequestInterface req)
Index a Resource. Call the indexer.

Parameters:
name - The name of the resource to index.
defs - The defaults attributes.
req - The protocol request.
Returns:
A resource instance.
See Also:
SampleResourceIndexer

getIndexedName

protected java.lang.String getIndexedName(java.lang.String name)
Get the name of the resource relative to the given filename.

Parameters:
name - The name of the file.
Returns:
a String, the resource name.
See Also:
SampleResourceIndexer

createDefaultResource

public ResourceReference createDefaultResource(java.lang.String name)
Description copied from class: ContainerResource
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 default is left up to the container here.

Overrides:
createDefaultResource in class ContainerResource
Parameters:
name - The identifier for the new resource.

createDefaultResource

protected ResourceReference createDefaultResource(java.lang.String name,
                                                  RequestInterface req)
Try creating a default resource having the given name. This method will make its best effort to create a default resource having this name in the directory. If a file with this name exists, it will check the pre-defined admin extensions and look for a match. If a directory with this name exists, and admin allows to do so, it will create a sub-directory resource.

Parameters:
name - The name of the resource to try to create.
req - The incomming request
Returns:
A Resource instance, if possible, null otherwise.

updateDefaultChildAttributes

protected ResourceContext updateDefaultChildAttributes(java.util.Hashtable attrs)
Initialize and register a new resource into this directory.

Overrides:
updateDefaultChildAttributes in class ContainerResource
Parameters:
resource - The uninitialized resource to be added.

reindex

public void reindex(boolean rec)
Reindex recursivly all the resources from this DirectoryResource.

Parameters:
rec - recursivly?

enumerateAllResourceIdentifiers

protected java.util.Enumeration enumerateAllResourceIdentifiers()
Enumerate all available children resource identifiers. This method requires that we create all our pending resources.

Returns:
An enumeration of all our resources.

enumerateResourceIdentifiers

public java.util.Enumeration enumerateResourceIdentifiers(boolean all)
Enumerate all available children resource identifiers. This method requires that we create all our pending resources if we are in the extensible mode...too bad !

Specified by:
enumerateResourceIdentifiers in interface ContainerInterface
Overrides:
enumerateResourceIdentifiers in class ContainerResource
Parameters:
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).
Returns:
An enumeration of all our resources.

lookup

public ResourceReference lookup(java.lang.String name)
Lookup the resource having the given name in this directory.

Specified by:
lookup in interface ContainerInterface
Overrides:
lookup in class ContainerResource
Parameters:
name - The name of the resource.
Returns:
A resource instance, or null.

delete

public void delete()
            throws MultipleLockException
Delete this directory resource, for ever. This method will delete the directory resource, and its associated store, along with any of the sub-resources it contains. Deleting the root directory of your server might take sometime...

Once the resource is deleted, it isx1 removed from its inital store and will not be unpickleable any more.

Overrides:
delete in class ContainerResource
Throws:
MultipleLockException - if someone has locked this resource.

verify

public boolean verify()
Was return false (don't khow why)


initialize

public void initialize(java.lang.Object[] values)
Initialize this directory resource with the given set of attributes.

Overrides:
initialize in class ContainerResource
Parameters:
values - The attribute values.