## org.w3c.jigsaw.frames
Class NegotiatedFrame

    java.lang.Object
      |
      +--org.w3c.tools.resources.AttributeHolder
            |
            +--org.w3c.tools.resources.Resource
                  |
                  +--org.w3c.tools.resources.FramedResource
                        |
                        +--org.w3c.tools.resources.ResourceFrame
                              |
                              +--org.w3c.tools.resources.ProtocolFrame
                                    |
                                    +--org.w3c.jigsaw.frames.HTTPFrame
                                          |
                                          +--org.w3c.jigsaw.frames.NegotiatedFrame

public class NegotiatedFrame
extends HTTPFrame

Content negotiation.

Field Summary
`protected static int` | `ATTR_PUT_POLICY` Attribute index - Should the PUT needs to be strictly checked?
`protected static int` | `ATTR_VARIANTS` Attribute index - The set of names of variants.
`static java.lang.String` | `DEFAULT_NEGOTIATED_ICON` Our default Icon
`static java.lang.String` | `NEGOTIATED_ICON_P` Our Icon property.
`protected static HttpTokenList` | `VARY` The Vary header field for this resource is always the same.

Fields inherited from class org.w3c.jigsaw.frames.HTTPFrame
`_allowed, acceptRanges, allowed, ATTR_ALLOW_DEL, ATTR_BROWSABLE, ATTR_CONTENT_ENCODING, ATTR_CONTENT_LANGUAGE, ATTR_CONTENT_LENGTH, ATTR_CONTENT_TYPE, ATTR_ICON, ATTR_ICONDIR, ATTR_INDEX, ATTR_MAXAGE, ATTR_MD5, ATTR_PUTABLE, ATTR_QUALITY, ATTR_RELOCATE, ATTR_STYLE_LINK, ATTR_TITLE, browsetype, COND_FAILED, COND_OK, dresource, fresource, listing, listing_stamp, STATE_CONTENT_LOCATION`

Fields inherited from class org.w3c.tools.resources.ResourceFrame
`filterClass, frameListener, resource`

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`

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

Constructor Summary
`NegotiatedFrame()`

Method Summary
`java.lang.String` | `getIcon()`
`boolean` | `getPutPolicy()` get the "strictness" of the PUT checking
`java.lang.String[]` | `getVariantNames()` Get the variant names.
`ResourceReference[]` | `getVariantResources()` Get the variant resources.
`protected ResourceReference` | `negotiate(Request request)` Negotiate among the various variants for the Resource.
`protected boolean` | `negotiateCharsetQuality(java.util.Vector states, Request request)` Negotiate on charsets.
`protected boolean` | `negotiateContentEncoding(java.util.Vector states, Request request)` Negotiate among content encodings.
`protected boolean` | `negotiateContentType(java.util.Vector states, Request request)` Negotiate among content types.
`protected boolean` | `negotiateLanguageQuality(java.util.Vector states, Request request)` Negotiate among language qualities.
`protected ResourceReference` | `negotiatePut(Request request)` "negotiate" for a PUT, the negotiation of a PUT should be different as we just want to match the desciption of the entity and the available variants
`ReplyInterface` | `perform(RequestInterface req)` Perform an HTTP request.
`protected void` | `printNegotiationState(java.lang.String header, java.util.Vector states)` Print the current negotiation state.
`void` | `registerResource(FramedResource resource)`
`void` | `setPutPolicy(boolean strict)`
`void` | `setPutPolicy(java.lang.Boolean strict)`
`void` | `setVariants(java.lang.String[] variants)`

Methods inherited from class org.w3c.jigsaw.frames.HTTPFrame

`addStyleSheet, attributeChanged, browse, checkIfMatch, checkIfModifiedSince, checkIfNoneMatch, checkIfUnmodifiedSince, checkRequest, computeTrashDir, computeTrashFile, createDefaultReply, createFileReply, delete, deleteDirectoryResource, deleteFileResource, deleteOtherResource, extended, get, getAllowDeleteFlag, getBrowsableFlag, getBrowseType, getContentEncoding, getContentLanguage, getContentLength, getContentType, getDirectoryListing, getDirectoryResource, getDirectoryResource, getETag, getFileResource, getFileResource, getHelpURL, getHelpURL, getIconDirectory, getIndex, getMaxAge, getMD5Flag, getOtherResource, getPutableFlag, getQuality, getRelocateFlag, getStyleSheetURL, getTitle, getURL, handleRangeRequest, head, headDirectoryResource, headFileResource, headOtherResource, link, lookup, lookupDirectory, lookupFile, lookupOther, lookupResource, options, performFrames, post, put, putFileResource, putOtherResource, registerOtherResource, setValue, trace, unlink, updateCachedHeaders`

Methods inherited from class org.w3c.tools.resources.ResourceFrame
`addFrameEventListener, eventDisabled, fireFrameEvent, frameModified, getFilters, getFilters, getFrameReference, getResource, getResourceReference, getSpaceEntry, getURLPath, lookupFilters, lookupFrames, postFrameEvent, processEvent, removeFrameEventListener, unregisterResource, updateDefaultChildAttributes`

Methods inherited from class org.w3c.tools.resources.FramedResource

`addAttributeChangedListener, addStructureChangedListener, collectFramesReference, delete, disableEvent, displayEvent, enableEvent, fireAttributeChangeEvent, fireStructureChangedEvent, fireStructureChangedEvent, frameAdded, frameRemoved, getClone, getFrame, getFrame, getFrameReference, getFrameReference, getFramesReference, getOid, initialize, markModified, notifyUnload, postAttributeChangeEvent, postEvent, postStructureChangedEvent, postStructureChangedEvent, registerFrame, registerFrameIfNone, removeAttributeChangedListener, removeStructureChangedListener, unregisterFrame`

Methods inherited from class org.w3c.tools.resources.Resource
`acceptUnload, checkMultipleLock, collectFrames, getContext, getFrame, getFrames, getIdentifier, getLastModified, getParent, getServer, getSpace, getStoreEntry, getValue, getValue, isInitialized, isUnloaded, setContext, setContext, setValue, updateAttributes`

Methods inherited from class org.w3c.tools.resources.AttributeHolder
`definesAttribute, definesAttribute, getAttributes, getBoolean, getChar, getClone, getClone, getDouble, getFloat, getInt, getLong, getString, getValue, initialize, lookupAttribute, pickle, print, setBoolean, setChar, setDouble, setFloat, setInt, setLong, setString, setValue, unpickle, unpickle, unpickle, unpickleInstance, unpickleInstance`

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

Field Detail

### NEGOTIATED_ICON_P

    public static java.lang.String NEGOTIATED_ICON_P

  Our Icon property.

### DEFAULT_NEGOTIATED_ICON

    public static java.lang.String DEFAULT_NEGOTIATED_ICON

  Our default Icon

### VARY

    protected static HttpTokenList VARY

  The Vary header field for this resource is always the same.

### ATTR_VARIANTS

    protected static int ATTR_VARIANTS

  Attribute index - The set of names of variants.

### ATTR_PUT_POLICY

    protected static int ATTR_PUT_POLICY

  Attribute index - Should the PUT needs to be strictly checked?

Constructor Detail

### NegotiatedFrame

    public NegotiatedFrame()

Method Detail

### getIcon

    public java.lang.String getIcon()

  Overrides:
    getIcon in class HTTPFrame

### getVariantNames

    public java.lang.String[] getVariantNames()

  Get the variant names.

### setVariants

    public void setVariants(java.lang.String[] variants)

### getPutPolicy

    public boolean getPutPolicy()

  get the "strictness" of the PUT checking

### setPutPolicy

    public void setPutPolicy(java.lang.Boolean strict)

### setPutPolicy

    public void setPutPolicy(boolean strict)

### getVariantResources

    public ResourceReference[] getVariantResources()
                                            throws ProtocolException

  Get the variant resources. This is somehow broken, it shouldn't allocate the array of variants on each call. However, don't forget that the list of variants can be dynamically edited, this means that if we are to keep a cache of it (as would be the case if we kept the array of variants as instance var) we should also take care of editing of attributes (possible, but I just don't have enough lifes).
  Returns:
    An array of ResourceReference, or null.
  Throws:
    ProtocolException - If one of the variants doesn't exist.

### printNegotiationState

    protected void printNegotiationState(java.lang.String header,
                                         java.util.Vector states)

  Print the current negotiation state.
  Parameters:
    `header` - The header to print first.
    `states` - The current negotiation states.

### negotiateContentEncoding

    protected boolean negotiateContentEncoding(java.util.Vector states,
                                               Request request)
                                        throws ProtocolException

  Negotiate among content encodings.

  BUG: This will work only for single encoded variants.

  Parameters:
    `states` - The current negotiation states.
    `request` - The request to handle.
  Returns:
    a boolean.
  Throws:
    ProtocolException - If one of the variants doesn't exist.

### negotiateCharsetQuality

    protected boolean negotiateCharsetQuality(java.util.Vector states,
                                              Request request)

  Negotiate on charsets. The algorithm is described in RFC2616 (Obsoletes RFC2068)
  Parameters:
    `states` - The current states of negotiation.
    `request` - The request to handle.

### negotiateLanguageQuality

    protected boolean negotiateLanguageQuality(java.util.Vector states,
                                               Request request)
                                        throws ProtocolException

  Negotiate among language qualities.

  BUG: This will only work for variants that have one language tag.

  Parameters:
    `states` - The current states of negotiation.
    `request` - The request to handle.
  Returns:
    a boolean.
  Throws:
    ProtocolException - If one of the variants doesn't exist.

### negotiateContentType

    protected boolean negotiateContentType(java.util.Vector states,
                                           Request request)
                                    throws ProtocolException

  Negotiate among content types.
  Parameters:
    `states` - The current states of negotiation.
    `request` - The request to handle.
  Returns:
    a boolean.
  Throws:
    ProtocolException - If one of the variants doesn't exist.

### negotiate

    protected ResourceReference negotiate(Request request)
                                   throws ProtocolException

  Negotiate among the various variants for the Resource. We made our best efforts to be as compliant as possible to the HTTP/1.0 content negotiation algorithm.
  Parameters:
    `request` - the incomming request.
  Returns:
    a RefourceReference instance.
  Throws:
    ProtocolException - If one of the variants doesn't exist.

### negotiatePut

    protected ResourceReference negotiatePut(Request request)
                                      throws ProtocolException,
                                             ResourceException

  "negotiate" for a PUT, the negotiation of a PUT should be different as we just want to match the desciption of the entity and the available variants
  Parameters:
    `request,` - the request to handle
  Returns:
    a ResourceReference instance
  Throws:
    ProtocolException - If negotiating among the resource variants failed.
    ResourceException - If the resource got a fatal error.

### registerResource

    public void registerResource(FramedResource resource)

  Overrides:
    registerResource in class HTTPFrame

### perform

    public ReplyInterface perform(RequestInterface req)
                           throws ProtocolException,
                                  ResourceException

  Perform an HTTP request. Negotiate among the variants, the best variant according to the request fields, and make this elected variant serve the request.
  Parameters:
    `request` - The request to handle.
  Throws:
    ProtocolException - If negotiating among the resource variants failed.
    ResourceException - If the resource got a fatal error.
  Overrides:
    perform in class HTTPFrame