/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.eclipse.webdav;
import java.util.Enumeration;
/**
* The <code>IContext</code> interface provides access methods
* for most HTTP and WebDAV message header fields. Those that are
* not explicitly enumerated can be accessed using <code>
* Context#get(String)</code> and <code>Context#put(String,String)
* </code>. All context keys are available with <code>
* Context#keys()</code>.
* <p>
* <b>Note:</b> This class/interface is part of an interim API that is still under
* development and expected to change significantly before reaching stability.
* It is being made available at this early stage to solicit feedback from pioneering
* adopters on the understanding that any code that uses this API will almost
* certainly be broken (repeatedly) as the API evolves.
* </p>
*/
public interface IContext {
// Depth directive header values.
/** Depth constant indicating apply the method to the target resource.
* @see #getDepth()
*/
public static final String DEPTH_ZERO = "0"; //$NON-NLS-1$
/** Depth constant indicating apply the method to the target resource.
* and (where the resource is a collection) its immediate members.
* @see #getDepth()
*/
public static final String DEPTH_ONE = "1"; //$NON-NLS-1$
/** Depth constant indicating apply the method to the target resource.
* and (where the resource is a collection) recursively to all
* its members.
* @see #getDepth()
*/
public static final String DEPTH_INFINITY = "infinity"; //$NON-NLS-1$
// Locking constants
/** Lock type constant indicating an exclusive lock.
* Only one exclusive lock can be granted at any time on a resource.
*/
public static final String EXCLUSIVE_LOCK = "exclusive"; //$NON-NLS-1$
/** Lock type constant indicating a shared lock.
* A resource may have many concurrent shared locks which indicate an
* intention to change the resource in some way. It is the responsibilty
* of the shared lock owners to coordinate their updates appropriately
* through other means.
*/
public static final String SHARED_LOCK = "shared"; //$NON-NLS-1$
/** Lock type constant indicating a write lock.
* Write locks allow a resource to be updated or deleted.
*/
public static final String WRITE_LOCK = "write"; //$NON-NLS-1$
/** Constant indicating an indefinite timeout period.
*/
public static final int NO_EXPIRY_LOCK = -1;
/** Constant used in the Cache-Control header indicating that clients and
* proxies MUST not cache the response of a method since it has
* non-idempotent semantics.
*/
public static final String NO_CACHE = "no-cache"; //$NON-NLS-1$
/**
* Collapse teh receiver by copying all the keys and values from the
* default context into the receiver. This effectively makes the Context
* stand-alone so that subsequent changes to shared contexts are no
* longer seen by the receiver.
*/
public void collapse();
/**
* Returns the value for the given key, or <code>null</code>
* if the given key has no value.
* @param key the key to look up
* @return the value for the key
*/
public String get(String key);
/**
* Returns the media types that are acceptable for a response.
* @return the value for <code>"Accept"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getAccept();
/**
* Returns the character sets that are acceptable for a response.
* @return the value for <code>"Accept-Charset"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getAcceptCharset();
/**
* Retruns what content-encoding values are acceptable for a response.
* @return the value for <code>"Accept-Encoding"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getAcceptEncoding();
/**
* Returns the natural languages that are acceptable for a response.
* @return the value for <code>"Accept-Language"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getAcceptLanguage();
/**
* Returns the range requests acceptable to a server.
* @return the value for <code>"Accept-Ranges"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getAcceptRanges();
/**
* Returns the integer value of sender's estimate of the time since the
* response was generated, or -1 if the value is not set.
* @return the integer value for <code>"Age"</code> key,
* or -1 if not set.
*/
public int getAge();
/**
* Returns the string value for the ALL_BINDINGS key.
* @return the value for <code>"All-Bindings"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getAllBindings();
/**
* Returns the methods allowed on a resource
* @return the value for <code>"Allow"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getAllow();
/**
* Returns the user's credentials for the realm of the resource being requested.
* @return the value for <code>"Authorization"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getAuthorization();
/**
* Returns the cache control directives that must be obeyed.
* @return the value for <code>"Cache-Control"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getCacheControl();
/**
* Returns the sender connection options.
* @return the value for <code>"Connection"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getConnection();
/**
* Returns the URL string value for the CONTENT_BASE key.
* @return the value for <code>"Content-Base"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getContentBase();
/**
* Returns what additional content encodings have been applied to the entity body.
* @return the value for <code>"Content-Encoding"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getContentEncoding();
/**
* Returns the natural language of the intended audience for the entity body.
* @return the value for <code>"Content-Language"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getContentLanguage();
/**
* Returns the content length in bytes of the entity body.
* @return the value for <code>"Content-Length"</code> key,
* or -1 if that key has no value.
*/
public long getContentLength();
/**
* Returns the URL that locates the content.
* @return the value for <code>"Content-Location"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getContentLocation();
/**
* Returns the string value for the CONTENT_MD5 key.
* @return the value for <code>"Content-MD5"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getContentMD5();
/**
* Returns the string value for the CONTENT_RANGE key.
* @return the value for <code>"Content-Range"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getContentRange();
/**
* Returns the MIME type for the response contents.
* @return the value for <code>"Content-Type"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getContentType();
/**
* Returns the date the request was made.
* @return the value for <code>"Date"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getDate();
/**
* Returns the DAV level supported by the server.
* [missing: what are these values]
*/
public String getDAV();
/**
* Returns the string value for the "Depth" key.
* @return one of <code>DEPTH_ZERO</code>,
* <code>DEPTH_ONE</code>, or <code>DEPTH_INFINITY</code>
* @see #DEPTH_ZERO
* @see #DEPTH_ONE
* @see #DEPTH_INFINITY
*/
public String getDepth();
/**
* Returns the destination URL for a copy or move operation.
* @return the value for <code>"Destination"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getDestination();
/**
* Returns the entity tag for the associated entity.
* @return the value for <code>"ETag"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getETag();
/**
* Returns the date/time after which the response should be
* considered stale.
* @return the value for <code>"Expires"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getExpires();
/**
* Returns the string value for the FROM key.
* @return the value for <code>"From"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getFrom();
/**
* Returns the Internet host and port of the resource being requested.
* @return the value for <code>"Host"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getHost();
/**
* Returns the string value for the IF key.
* @return the value for <code>"If"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getIfKey();
/**
* Returns the string value for the IF_MATCH key.
* @return the value for <code>"If-Match"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getIfMatch();
/**
* Returns the string value for the IF_MODIFIED_SINCE key.
* @return the value for <code>"If-Modified-Since"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getIfModifiedSince();
/**
* Returns the string value for the IF_NONE_MATCH key.
* @return the value for <code>"If-None-Match"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getIfNoneMatch();
/**
* Returns the string value for the IF_RANGE key.
* @return the value for <code>"If-Range"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getIfRange();
/**
* Returns the string value for the IF_UNMODIFIED_SINCE key.
* @return the value for <code>"If-Unmodified-Since"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getIfUnmodifiedSince();
/**
* Returns the label header value.
* @return the value for <code>"Label"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getLabel();
/**
* Returns when the resource was last modified.
* @return the value for <code>"Last-Modified"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getLastModified();
/**
* Returns the URI of the redirect location.
* @return the value for <code>"Location"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getLocation();
/**
* Returns the lock token for the resource, or null if it is not set.
* @return the value for <code>"Lock-Token"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getLockToken();
/**
* Returns the integer value for the MAX_FORWARDS key.
* @return the value for <code>"Max-Forwards"</code> key,
* or <code>null</code> if that key has no value.
*/
public int getMaxForwards();
/**
* Returns the string value for the ORDERED key.
* @return the value for <code>"Ordered"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getOrdered();
/**
* Returns the flag that indicates if copy or move should overwrite
* an existing destination.
* @return the value for <code>"Overwrite"</code> key,
* or <code>false</code> if that key has no value.
*/
public boolean getOverwrite();
/**
* Returns the boolean value for the PASSTHROUGH key.
* @return the value for <code>"Passthrough"</code> key,
* or <code>null</code> if that key has no value.
*/
public boolean getPassthrough();
/**
* Returns the string value for the POSITION key.
* @return the value for <code>"Position"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getPosition();
/**
* Returns the string value for the PRAGMA key.
* @return the value for <code>"Pragma"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getPragma();
/**
* Returns the string value for the PROXY_AUTHENTICATE key.
* @return the value for <code>"Proxy-Authenticate"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getProxyAuthenticate();
/**
* Returns the string value for the PROXY_AUTHORIZATION key.
* @return the value for <code>"Proxy-Authorization"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getProxyAuthorization();
/**
* Returns the string value for the PUBLIC_KEY key.
* @return the value for <code>"Public-Key"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getPublicKey();
/**
* Returns the string value for the RANGE key.
* @return the value for <code>"Range"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getRange();
/**
* Returns the URI string of the resource from which the request was obtained.
* @return the value for <code>"Referer"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getReferer();
/**
* Returns the URI string for the REF_TARGET key.
* @return the value for <code>"Ref-Target"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getRefTarget();
/**
* Returns the string value for the RESOURCE_TYPE key.
* @return the value for <code>"Resource-Type"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getResourceType();
/**
* Returns the string value for the RETRY_AFTER key.
* @return the value for <code>"Retry-After"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getRetryAfter();
/**
* Returns information about the software used by the origin server
* to handle the request.
* @return the value for <code>"Server"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getServer();
/**
* Returns the URI string of the resource whose method is in process.
* @return the value for <code>"Status-URI"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getStatusURI();
/**
* Returns the lock timeout value.
* @return the integer value for <code>"Timeout"</code> key,
* where -1 means that the value was not set, and -2 means
* that the value was infinity.
*/
public int getTimeout();
/**
* Returns the string value for the TRANSFER_ENCODING key.
* @return the value for <code>"Transfer-Encoding"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getTransferEncoding();
/**
* Returns the string value for the UPGRADE key.
* @return the value for <code>"Upgrade"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getUpgrade();
/**
* Returns information about the user agent originating the request.
* @return the value for <code>"User-Agent"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getUserAgent();
/**
* Returns the string value for the VARY key.
* @return the value for <code>"Vary"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getVary();
/**
* Returns the string value for the VIA key.
* @return the value for <code>"Via"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getVia();
/**
* Returns the string value for the WARNING key.
* @return the value for <code>"Warning"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getWarning();
/**
* Returns the string value for the WWW_AUTHENTICATE key.
* @return the value for <code>"WWW-Authenticate"</code> key,
* or <code>null</code> if that key has no value.
*/
public String getWWWAuthenticate();
/**
* Returns keys of the context, as an enumeration
*
* @return an enumeration over the context keys
* (<code>String</code>s).
*/
public Enumeration keys();
/**
* Adds or replaces the given key-value pair into the context.
*
* @param key the key
* @param value its associated value
*/
public void put(String key, String value);
/**
* Removes the given key from this context. Does nothing if the
* given key is not set.
*
* @param key the key to remove
*/
public void removeKey(String key);
/**
* Sets what media types are acceptable for a response.
* Sets the string value for the ACCEPT key.
*
* @param value the value for ACCEPT
*/
public void setAccept(String value);
/**
* Sets which character sets are acceptable for a response.
* Sets the string value for the ACCEPT_CHARSET key.
*
* @param value the value for ACCEPT_CHARSET
*/
public void setAcceptCharset(String value);
/**
* Sets the content-encoding values which are acceptable for a response.
* Sets the string value for the ACCEPT_ENCODING key.
*
* @param value the value for ACCEPT_ENCODING
*/
public void setAcceptEncoding(String value);
/**
* Sets which natural languages are acceptable for a response.
* Sets the string value for the ACCEPT_LANGUAGE key.
*
* @param value the value for ACCEPT_LANGUAGE
*/
public void setAcceptLanguage(String value);
/**
* Sets the range requests acceptable to a server.
* Sets the string value for the ACCEPT_RANGES key.
*
* @param value the value for ACCEPT_RANGES
*/
public void setAcceptRanges(String value);
/**
* Sets the sender's estimate of the time since the response was generated.
* Sets the int value for the AGE key. Set the value to -1 to remove the key.
*
* @param seconds the value for AGE
*/
public void setAge(int seconds);
/**
* Sets the string value for the ALL_BINDINGS key.
*
* @param value the value for ALL_BINDINGS
*/
public void setAllBindings(String value);
/**
* Sets methods allowed on a resource
* Sets the string value for the ALLOW key.
*
* @param value the value for ALLOW
*/
public void setAllow(String value);
/**
* Sets the user's credentials for the realm of the resource being requested.
* Sets the string value for the AUTHORIZATION key.
*
* @param value the value for AUTHORIZATION
*/
public void setAuthorization(String value);
/**
* Sets the cache control directives that must be obeyed.
* Sets the string value for the CACHE_CONTROL key.
*
* @param value the value for CACHE_CONTROL
*/
public void setCacheControl(String value);
/**
* Sets sender connection options.
* Sets the string value for the CONNECTION key.
*
* @param value the value for CONNECTION
*/
public void setConnection(String value);
/**
* Sets the URL string value for the CONTENT_BASE key.
*
* @param stringURL the value for CONTENT_BASE
*/
public void setContentBase(String stringURL);
/**
* Sets the additional content encodings that have been applied to the entity body.
* Sets the string value for the CONTENT_ENCODING key.
*
* @param value the value for CONTENT_ENCODING
*/
public void setContentEncoding(String value);
/**
* Sets the natural language of the intended audience for the entity body.
* Sets the string value for the CONTENT_LANGUAGE key.
*
* @param value the value for CONTENT_LANGUAGE
*/
public void setContentLanguage(String value);
/**
* Sets the content length in bytes of the entity body.
* Sets the value for the CONTENT_LENGTH key.
* Passes the value -1 to remove the key.
*
* @param value the value for CONTENT_LENGTH
*/
public void setContentLength(long value);
/**
* Sets the URL string value for the CONTENT_LOCATION key.
*
* @param stringURL the value for CONTENT_LOCATION
*/
public void setContentLocation(String stringURL);
/**
* Sets the string value for the CONTENT_MD5 key.
*
* @param value the value for CONTENT_MD5
*/
public void setContentMD5(String value);
/**
* Sets the string value for the CONTENT_RANGE key.
*
* @param value the value for CONTENT_RANGE
*/
public void setContentRange(String value);
/**
* Sets the MIME type for the response contents.
* Sets the string value for the CONTENT_TYPE key.
*
* @param value the value for CONTENT_TYPE
*/
public void setContentType(String value);
/**
* Sets the date the request was made.
* Sets the string value for the DATE key.
*
* @param value the value for DATE
*/
public void setDate(String value);
/**
* Sets the DAV level supported by the server.
* Sets the string value for the DAV key.
*
* @param value the value for DAV
*/
public void setDAV(String value);
/**
* Sets the string value for the DEPTH key.
* @param depth one of <code>DEPTH_ZERO</code>,
* <code>DEPTH_ONE</code>, or <code>DEPTH_INFINITY</code>
* @see #DEPTH_ZERO
* @see #DEPTH_ONE
* @see #DEPTH_INFINITY
*/
public void setDepth(String depth);
/**
* Sets the destination URI for a copy or move operation.
* Sets the URI value for the DESTINATION key.
*
* @param stringURL the value for DESTINATION
*/
public void setDestination(String stringURL);
/**
* Sets the entity tag for the associated entity.
* Sets the string value for the ETAG key.
*
* @param value the value for ETAG
*/
public void setETag(String value);
/**
* Sets the date/time after which the response should be considered stale.
* Sets the string value for the EXPIRES key.
*
* @param value the value for EXPIRES
*/
public void setExpires(String value);
/**
* Sets the string value for the FROM key.
*
* @param value the value for FROM
*/
public void setFrom(String value);
/**
* Sets the Internet host and port of the resource being requested.
* Sets the string value for the HOST key.
*
* @param value the value for HOST
*/
public void setHost(String value);
/**
* Sets the string value for the IF key.
*
* @param value the value for IF
*/
public void setIfKey(String value);
/**
* Sets the string value for the IF_MATCH key.
*
* @param value the value for IF_MATCH
*/
public void setIfMatch(String value);
/**
* Sets the string value for the IF_MODIFIED_SINCE key.
*
* @param value the value for IF_MODIFIED_SINCE
*/
public void setIfModifiedSince(String value);
/**
* Sets the string value for the IF_NONE_MATCH key.
*
* @param value the value for IF_NONE_MATCH
*/
public void setIfNoneMatch(String value);
/**
* Sets the string value for the IF_RANGE key.
*
* @param value the value for IF_RANGE
*/
public void setIfRange(String value);
/**
* Sets the string value for the IF_UNMODIFIED_SINCE key.
*
* @param value the value for IF_UNMODIFIED_SINCE
*/
public void setIfUnmodifiedSince(String value);
/**
* Sets when the label header value.
* Sets the string value for the LABEL key.
*
* @param value the value for LABEL
*/
public void setLabel(String value);
/**
* Sets when the resource was last modified.
* Sets the string value for the LAST_MODIFIED key.
*
* @param value the value for LAST_MODIFIED
*/
public void setLastModified(String value);
/**
* Sets the redirect location.
* Sets the URI value for the LOCATION key.
*
* @param stringURL the value for LOCATION
*/
public void setLocation(String stringURL);
/**
* Sets the lock token for the resource.
* Sets the lock token value for the LOCK_TOKEN key.
*
* @param lockToken the value for LOCK_TOKEN
*/
public void setLockToken(String lockToken);
/**
* Sets the integer value for the MAX_FORWARDS key.
*
* @param value the value for MAX_FORWARDS
*/
public void setMaxForwards(int value);
/**
* Sets the string value for the ORDERED key.
*
* @param value the value for ORDERED
*/
public void setOrdered(String value);
/**
* Sets if copy or move should overwrite an existing destination.
* Sets the boolean value for the OVERWRITE key.
*
* @param value the value for OVERWRITE
*/
public void setOverwrite(boolean value);
/**
* Sets the boolean value for the PASSTHROUGH key.
*
* @param value the value for PASSTHROUGH
*/
public void setPassthrough(boolean value);
/**
* Sets the string value for the POSITION key.
*
* @param value the value for POSITION
*/
public void setPosition(String value);
/**
* Sets the string value for the PRAGMA key.
*
* @param value the value for PRAGMA
*/
public void setPragma(String value);
/**
* Sets the string value for the PROXY_AUTHENTICATE key.
*
* @param value the value for PROXY_AUTHENTICATE
*/
public void setProxyAuthenticate(String value);
/**
* Sets the string value for the PROXY_AUTHORIZATION key.
*
* @param value the value for PROXY_AUTHORIZATION
*/
public void setProxyAuthorization(String value);
/**
* Sets the string value for the PUBLIC_KEY key.
*
* @param value the value for PUBLIC_KEY
*/
public void setPublicKey(String value);
/**
* Sets the string value for the RANGE key.
*
* @param value the value for RANGE
*/
public void setRange(String value);
/**
* Sets the URI of the resource from which the request was obtained.
* Sets the URI value for the REFERER key.
*
* @param stringURL the value for REFERER
*/
public void setReferer(String stringURL);
/**
* Sets the URI value for the REF_TARGET key.
*
* @param stringURL the value for REF_TARGET
*/
public void setRefTarget(String stringURL);
/**
* Sets the string value for the RESOURCE_TYPE key.
*
* @param value the value for RESOURCE_TYPE
*/
public void setResourceType(String value);
/**
* Sets the string value for the RETRY_AFTER key.
*
* @param value the value for RETRY_AFTER
*/
public void setRetryAfter(String value);
/**
* Sets information about the software used by the origin server
* to handle the request. Sets the string value for the SERVER key.
*
* @param value the value for SERVER
*/
public void setServer(String value);
/**
* Sets the URI of the resource whose method is in process.
* Sets the URI value for the STATUS_URI key.
*
* @param statusURI the value for STATUS_URI
*/
public void setStatusURI(String statusURI);
/**
* Sets the lock timeout value in seconds. Pass -1 to clear the
* value, pass -2 to set "Infinity". Sets the integer value for the
* TIMEOUT key.
*
* @param value the value for TIMEOUT
*/
public void setTimeout(int value);
/**
* Sets the string value for the TRANSFER_ENCODING key.
*
* @param value the value for TRANSFER_ENCODING
*/
public void setTransferEncoding(String value);
/**
* Sets the string value for the UPGRADE key.
*
* @param value the value for UPGRADE
*/
public void setUpgrade(String value);
/**
* Sets information about the user agent originating the request.
* Sets the string value for the USER_AGENT key.
*
* @param value the value for USER_AGENT
*/
public void setUserAgent(String value);
/**
* Sets the string value for the VARY key.
*
* @param value the value for VARY
*/
public void setVary(String value);
/**
* Sets the string value for the VIA key.
*
* @param value the value for VIA
*/
public void setVia(String value);
/**
* Sets the string value for the WARNING key.
*
* @param value the value for WARNING
*/
public void setWarning(String value);
/**
* Sets the string value for the WWW_AUTHENTICATE key.
*
* @param value the value for WWW_AUTHENTICATE
*/
public void setWWWAuthenticate(String value);
}