## org.w3c.tools.resources
Class Resource

    java.lang.Object
      |
      +--org.w3c.tools.resources.AttributeHolder
            |
            +--org.w3c.tools.resources.Resource

Direct Known Subclasses:
  AuthUser, FramedResource, PropertySet, SampleResourceIndexer

public class Resource
extends AttributeHolder

The resource class describes an object, accessible through the server. Resource objects are required to have the following properties:

- They must be persistent (their life-time can span multiple server life-time).
- They must be editable, so that one can change some of their aspects (such as any associated attribute).
- They must be self-described: each resource must now what kind of attribute it understands.
- They must be able to update themselves: some of the meta-information associated with a resource may require lot of CPU to compute.
- They must implement some name-service policy.

These resource objects do not define how they are accessed. See the sub-classes for specific accesses.

Field Summary
`protected static int` `ATTR_CONTEXT` Attribute index - The hierarchical context of the resource.
`protected static int` `ATTR_HELP_URL` Attribute index - The help URL for this resource (Ref doc)
`protected static int` `ATTR_IDENTIFIER` Attribute index - The index for the identifier attribute.
`protected static int` `ATTR_LAST_MODIFIED` Attribute index - The index for the last-modified attribute.
`protected static int` `ATTR_PARENT` Attribute index - The index for our parent attribute.
`protected static int` `ATTR_RESOURCE_FRAMES` Attribute index - Associated resource frames
`protected static int` `ATTR_STORE_ENTRY` Attribute index - The index of the resource store entry attribute.
`protected static int` `ATTR_URL` Attribute index - The index for our URL attribute.
`static java.lang.String` `co`
`static java.lang.String` `id`

Fields inherited from class org.w3c.tools.resources.AttributeHolder
`attributes, values`

Constructor Summary
`Resource()` Create an empty resource instance.

Method Summary
`boolean` `acceptUnload()` Is that resource willing to be unloaded.
`protected void` `checkMultipleLock(ResourceReference rr)` Check if this resource is loked more than one time.
`ResourceFrame[]` `collectFrames(java.lang.Class c)` Collect any frame that's an instance of the given class.
`void` `delete()` Delete this Resource instance, and remove it from its store.
`java.lang.Object` `getClone(java.lang.Object[] values)` Clone this attribute holder, and init it with the given attributes.
`protected ResourceContext` `getContext()` Get the hierarchical context for that resource.
`ResourceFrame` `getFrame(java.lang.Class c)` Get the first occurence of a frame of the given class.
`ResourceFrame[]` `getFrames()` Collect all frames.
`java.lang.String` `getHelpURL()` Get this resource's help url.
`java.lang.String` `getHelpURL(java.lang.String topics)` Get the help URL for that resource's topic.
`java.lang.String` `getIdentifier()` Get this resource identifier.
`long` `getLastModified()` Get this resource last modification time.
`ResourceReference` `getParent()` Get this resource parent resource.
`ResourceReference` `getResourceReference()` Get the ResourceReference of that resource.
`ServerInterface` `getServer()` Get the server this resource is served by.
`protected ResourceSpace` `getSpace()` Get the ResourceSpace where this resource is stored.
`protected SpaceEntry` `getSpaceEntry()` Get the space entry for that resource.
`java.lang.Object` `getStoreEntry()` Get the store entry for that resource.
`java.lang.String` `getURLPath()` Get the file part of the URL this resource is attached to.
`java.lang.Object` `getValue(java.lang.Class c, int idx, java.lang.Object def)` Get an attached frame attribute value.
`java.lang.Object` `getValue(int idx, java.lang.Object def)` Generic get of an attribute value.
`void` `initialize(java.util.Hashtable defs)` Initialization method for attribute holders.
`void` `initialize(java.lang.Object[] values)` Initialization method for attribute holders.
`boolean` `isInitialized()`
`boolean` `isUnloaded()` unloaded?
`void` `markModified()` Mark this resource as having been modified.
`void` `notifyUnload()` This resource is being unloaded.
`void` `pickleValues(java.util.Hashtable defs)` Set the values.
`void` `registerFrame(ResourceFrame frame, java.util.Hashtable defs)` Initialize and attach a new ResourceFrame to that resource.
`protected void` `setContext(ResourceContext context)` Set the given context as the current context of this resource.
`protected void` `setContext(ResourceContext context, boolean keepmodules)` Set the given context as the current context of this resource.
`void` `setValue(java.lang.Class c, int idx, java.lang.Object val)` Set an attached frame attribute value.
`void` `setValue(int idx, java.lang.Object value)` We overide setValue, to mark the resource as modified.
`void` `unregisterFrame(ResourceFrame frame)` Unregister a resource frame from the given resource.
`protected ResourceContext` `unsafeGetContext()`
`java.lang.String` `unsafeGetIdentifier()` Get this resource identifier.
`java.lang.Object` `unsafeGetValue(int idx, java.lang.Object def)` Generic get of an attribute value.
`void` `updateAttributes()` The web admin wants us to update any out of date attribute.

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, unsafeGetString`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### ATTR_STORE_ENTRY

    protected static int ATTR_STORE_ENTRY

  Attribute index - The index of the resource store entry attribute.

### ATTR_IDENTIFIER

    protected static int ATTR_IDENTIFIER

  Attribute index - The index for the identifier attribute.

### ATTR_RESOURCE_FRAMES

    protected static int ATTR_RESOURCE_FRAMES

  Attribute index - Associated resource frames

### ATTR_PARENT

    protected static int ATTR_PARENT

  Attribute index - The index for our parent attribute.

### ATTR_CONTEXT

    protected static int ATTR_CONTEXT

  Attribute index - The hierarchical context of the resource.

### ATTR_URL

    protected static int ATTR_URL

  Attribute index - The index for our URL attribute.

### ATTR_LAST_MODIFIED

    protected static int ATTR_LAST_MODIFIED

  Attribute index - The index for the last-modified attribute.

### ATTR_HELP_URL

    protected static int ATTR_HELP_URL

  Attribute index - The help URL for this resource (Ref doc)

### id

    public static java.lang.String id

### co

    public static java.lang.String co

Constructor Detail

### Resource

    public Resource()

  Create an empty resource instance. Initialize the instance attributes description, and its values.

Method Detail

### getClone

    public java.lang.Object getClone(java.lang.Object[] values)

  Description copied from class: AttributeHolder
  Clone this attribute holder, and init it with the given attributes.
  Overrides:
    getClone in class AttributeHolder
  Tags copied from class: AttributeHolder
  Parameters:
    `values` - Attribute values to overide in the clone.
  Returns:
    A clone of this resource.

### getParent

    public ResourceReference getParent()

  Get this resource parent resource. The parent of a resource can be either null if it is the server root resource, or any Resource.
  Returns:
    An instance of ResourceReference, or null

### getURLPath

    public java.lang.String getURLPath()

  Get the file part of the URL this resource is attached to.
  Returns:
    An URL object specifying the location in the information space of this resource.

### getServer

    public ServerInterface getServer()

  Get the server this resource is served by.
  Returns:
    The first instance of Jigsaw this resource was attached to.

### getHelpURL

    public java.lang.String getHelpURL()

  Get this resource's help url.
  Returns:
    An URL, encoded as a String, or null if not available.

### getValue

    public java.lang.Object getValue(int idx,
                                     java.lang.Object def)

  Description copied from class: AttributeHolder
  Generic get of an attribute value. Retreive an attribute value from its index in the resource's attribute list.
  Overrides:
    getValue in class AttributeHolder
  Tags copied from class: AttributeHolder
  Parameters:
    `idx` - The index of the attribute whose value is queried.
    `def` - The default value (if the attribute isn't defined).
  Returns:
    An object, giving the attribute value, or the provided default if this attribute isn't currently define for the resource.
  Throws:
    IllegalAttributeAccess - if the given index doesn't match any of the resource's attributes.

### unsafeGetValue

    public java.lang.Object unsafeGetValue(int idx,
                                           java.lang.Object def)

  Description copied from class: AttributeHolder
  Generic get of an attribute value. Retreive an attribute value from its index in the resource's attribute list. THIS VERSION IS NOT SYNCHRONIZED AND THEREFORE SHOULD BE USED ONLY WHEN YOU ARE SURE YOU SHOULD USE THIS, WHICH MEANS ALMOST NEVER!
  Overrides:
    unsafeGetValue in class AttributeHolder
  Tags copied from class: AttributeHolder
  Parameters:
    `idx` - The index of the attribute whose value is queried.
    `def` - The default value (if the attribute isn't defined).
  Returns:
    An object, giving the attribute value, or the provided default if this attribute isn't currently define for the resource.
  Throws:
    IllegalAttributeAccess - if the given index doesn't match any of the resource's attributes.

### getHelpURL

    public java.lang.String getHelpURL(java.lang.String topics)

  Get the help URL for that resource's topic.
  Parameters:
    `topic` - The topic you want help for.
  Returns:
    A String encoded URL, or null if none was found.

### getContext

    protected ResourceContext getContext()

  Get the hierarchical context for that resource.
  Returns:
    A ResourceContext instance, guaranteed not to be null

### unsafeGetContext

    protected ResourceContext unsafeGetContext()

### setContext

    protected void setContext(ResourceContext context)

  Set the given context as the current context of this resource.
  Parameters:
    `context` - The new context.

### setContext

    protected void setContext(ResourceContext context,
                              boolean keepmodules)

  Set the given context as the current context of this resource.
  Parameters:
    `context` - The new context.
    `keepmodules` - If true the new context will have the same modules than the old one.

### getStoreEntry

    public java.lang.Object getStoreEntry()

  Get the store entry for that resource. Only the resource store in charge of this resource knows about the type of the resulting object. Buy declaring the class of that object private, the resource store can assume some private access to it.
  Returns:
    A java Object instance, or null if no store entry is attached to that resource.

### getIdentifier

    public java.lang.String getIdentifier()

  Get this resource identifier.
  Returns:
    The String value for the identifier.

### unsafeGetIdentifier

    public java.lang.String unsafeGetIdentifier()

  Get this resource identifier.
  Returns:
    The String value for the identifier.

### getSpaceEntry

    protected SpaceEntry getSpaceEntry()

  Get the space entry for that resource. This Object is use to retrieve the resource in the resource space.
  Returns:
    A spaceEntry instance.

### getSpace

    protected ResourceSpace getSpace()

  Get the ResourceSpace where this resource is stored.
  Returns:
    A ResourceSpace instance.

### getResourceReference

    public ResourceReference getResourceReference()

  Get the ResourceReference of that resource. ResourceReference is the only public way to access a resource.
  Returns:
    a ResourceReference instance.

### registerFrame

    public void registerFrame(ResourceFrame frame,
                              java.util.Hashtable defs)

  Initialize and attach a new ResourceFrame to that resource.
  Parameters:
    `frame` - An uninitialized ResourceFrame instance.
    `defs` - A default set of attribute values.

### unregisterFrame

    public void unregisterFrame(ResourceFrame frame)

  Unregister a resource frame from the given resource.
  Parameters:
    `frame` - The frame to unregister from the resource.

### getFrames

    public ResourceFrame[] getFrames()

  Collect all frames.
  Returns:
    An array of ResourceFrame, containing a set of frames instances or null if no resource frame is available.

### collectFrames

    public ResourceFrame[] collectFrames(java.lang.Class c)

  Collect any frame that's an instance of the given class.
  Parameters:
    `cls` - The class of frames we are looking for.
  Returns:
    An array of ResourceFrame, containing a set of frames instances of the given class, or null if no resource frame is available.

### getFrame

    public ResourceFrame getFrame(java.lang.Class c)

  Get the first occurence of a frame of the given class.
  Parameters:
    `cls` - The class of te frame to look for.
  Returns:
    A ResourceFrame instance, or null.

### getValue

    public java.lang.Object getValue(java.lang.Class c,
                                     int idx,
                                     java.lang.Object def)

  Get an attached frame attribute value. This method really is a short-hand that combines a `getFrame` and `getValue` method call.
  Parameters:
    `cls` - The class of the frame we want the value of.
    `idx` - The attribute index.
    `def` - The default value (if the attribute value isn't defined).
  Returns:
    The attribute value as an Object instance, or the provided default value if the attribute value isn't defined.

### setValue

    public void setValue(java.lang.Class c,
                         int idx,
                         java.lang.Object val)

  Set an attached frame attribute value. This method really is a short-hand that combines a `getFrame` and a `setValue` method call.
  Parameters:
    `cls` - The class of the frame we want to modify.
    `idx` - The attribute to modify.
    `val` - The new attribute value.

### getLastModified

    public long getLastModified()

  Get this resource last modification time.
  Returns:
    A long giving the date of the last modification time, or -1 if undefined.

### markModified

    public void markModified()

  Mark this resource as having been modified.

### setValue

    public void setValue(int idx,
                         java.lang.Object value)

  We overide setValue, to mark the resource as modified.
  Overrides:
    setValue in class AttributeHolder
  Parameters:
    `idx` - The index of the attribute to modify.
    `value` - The new attribute value.

### acceptUnload

    public boolean acceptUnload()

  Is that resource willing to be unloaded. This method is a bit tricky to implement. The guideline is that you should not dynamically change the returned value (since you can't control what happens between a call to that method and a call to the `notifyUnload` method).

  Returning false should never be needed, except for very strange resources.

  Returns:
    A boolean true if the resource can be unloaded false otherwise.

### notifyUnload

    public void notifyUnload()

  This resource is being unloaded. The resource is being unloaded from memory, perform any additional cleanup required.

### isUnloaded

    public boolean isUnloaded()

  unloaded?
  Returns:
    true if the resource has been unloaded.

### updateAttributes

    public void updateAttributes()

  The web admin wants us to update any out of date attribute.

### checkMultipleLock

    protected void checkMultipleLock(ResourceReference rr)
                              throws MultipleLockException

  Check if this resource is loked more than one time.
  Throws:
    MultipleLockException - is thrown if true.

### delete

    public void delete()
                throws MultipleLockException

  Delete this Resource instance, and remove it from its store. This method will erase definitely this resource, for ever, by removing it from its resource store (when doable).
  Throws:
    MultipleLockException - if someone else has locked this resource

### isInitialized

    public boolean isInitialized()

### pickleValues

    public void pickleValues(java.util.Hashtable defs)

  Set the values. (MUST be called before initialize).
  Overrides:
    pickleValues in class AttributeHolder
  Parameters:
    `defs` - The Hashtable containing the values.

### initialize

    public void initialize(java.util.Hashtable defs)

  Initialization method for attribute holders. This method allows to initialize an attribute holder by providing its attributes values through a Hashtable mapping attribute names to attribute values.
  Overrides:
    initialize in class AttributeHolder
  Parameters:
    `defs` - The Hashtable containing the default values.

### initialize

    public void initialize(java.lang.Object[] values)

  Description copied from class: AttributeHolder
  Initialization method for attribute holders. Each time an attribute holder get restored, its `initialize` method gets called. The holder should initialize itself with the set of provided values and perform any additional startup code.
  Overrides:
    initialize in class AttributeHolder
  Tags copied from class: AttributeHolder
  Parameters:
    `values` - The attribute values the holder should initialize from.