/* * Copyright (c) 2008,2009 Declarative Engineering LLC. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Declarative Engineering LLC * verson 1 which accompanies this distribution, and is available at * http://declarativeengineering.com/legal/DE_Developer_License_v1.txt */ package com.foundation.web.interfaces; import java.io.InputStream; import java.nio.ByteBuffer; import java.util.Date; public interface IRequest { public static final int TYPE_GET = 0; public static final int TYPE_POST = 1; public static final int TYPE_PUT = 2; public static final int TYPE_HEAD = 3; //HEAD is the same as GET, but the caller is requesting header only info. The response shouldn't contain a message body - so no content is sent.// public static final int TYPE_OPTIONS = 4; //Can find info on web dav protocol at http://en.wikipedia.org/wiki/PROPFIND.// public static final int TYPE_WEBDAV_PROPFIND = 5; public static final int TYPE_WEBDAV_PROPPATCH = 6; public static final int TYPE_WEBDAV_MKCOL = 7; public static final int TYPE_WEBDAV_COPY = 8; public static final int TYPE_WEBDAV_MOVE = 9; public static final int TYPE_WEBDAV_LOCK = 10; public static final int TYPE_WEBDAV_UNLOCK = 11; /** The content type code for application/x-www-form-urlencoded. */ public static final int CONTENT_TYPE_URL_ENCODED = 0; /** The content type code for multipart/form-data. */ public static final int CONTENT_TYPE_MULTI_PART_FORM_DATA = 1; /** The content type code for application/xml or text/xml. */ public static final int CONTENT_TYPE_XML = 2; /** The content type code for customized content such as application/pdf. */ public static final int CONTENT_TYPE_CUSTOM = 3; /** * Defines the metadata interface for a single part of a multi part request. */ public interface IContentPart { /** * Gets the content dispositon type. * @return The type of content disposition (expect "form-data"). */ public String getContentDisposition(); /** * Gets the name if provided in the content disposition attributes. * @return The name of the part (usually the form input's name). */ public String getName(); /** * Gets the set of parameter keys. * @return The parameter keys. */ public String[] getParameterKeys(); /** * Gets the value for the associated key. * @param key The key of the parameter whose value is to be retrieved. * @return The value, or null if the parameter was not part of the request. The result if non-null will be a String if the contentTypeCode == CONTENT_TYPE_URL_ENCODED, otherwise it will be an IContentPart instance. */ public String getParameter(String key); /** * Gets the content type. * @return The type of the content. */ public String getContentType(); /** * Gets the part's data length. * @return The number of data bytes for this part within the request's data. */ public long getContentSize(); /** * Gets the content of the message. * @return The content stream. The formatting depends on the content type. */ public InputStream getContent(); }//IContentPart// /** * Gets the header text as received by the server. * @return The exact text for the request header. */ public String getHeaderText(); /** * Gets the web application associated with the request. *
Note for web server internal use: This should not be called outside the increment and decrement counter calls on the application container.
* @return The web application associated with the request. */ public IWebApplication getWebApplication(); /** * Gets the first line in the header which is the request sent by the client. * @return The request line as received by the server. */ public String getHeaderRequest(); /** * Gets the ordered list of header field names. * @return The list of field names used in the header in order received. */ public String[] getHeaderFieldNames(); /** * Gets the header field value for the given name. * @param fieldName The field name. See getHeaderFieldNames(). * @return The field value for the given field name, or null if the key is not used. */ public String getHeaderFieldValue(String fieldName); /** * Gets the IP address of the requesting machine. * @return The requester's IP address. */ public String getAddress(); /** * Gets the set of cookie keys. * @return The cookie keys. */ public String[] getCookieKeys(); /** * Gets the value for the associated key. * @param key The key of the cookie whose value is to be retrieved. * @return The cookie value, or null if the cookie was not part of the request. */ public String getCookie(String key); /** * Gets the set of parameter keys. * @return The parameter keys. */ public String[] getParameterKeys(); /** * Gets the value for the associated key. * @param key The key of the parameter whose value is to be retrieved. * @return The value, or null if the parameter was not part of the request. The result if non-null will be a String or IList if the contentTypeCode == CONTENT_TYPE_URL_ENCODED, otherwise it will be an IContentPart instance. IList instances will be used to hold multiple values with the same key. */ public Object getParameter(String key); /** * Gets the value for the associated key as a string. * @param key The key of the parameter whose value is to be retrieved. * @param defaultValue The value to use if the parameter doesn't exist, or if there is a conversion error. * @return The value. */ public String getParameterAsString(String key, String defaultValue); /** * Gets the value for the associated key as a string. * @param key The key of the parameter whose value is to be retrieved. * @param defaultValue The value to use if the parameter doesn't exist, or if there is a conversion error. * @param emptySameAsNull Whether an empty string is the same as null. * @param trim Whether the value should be trimed prior to being returned or checked for being empty. * @return The value. */ public String getParameterAsString(String key, String defaultValue, boolean emptySameAsNull, boolean trim); /** * Gets the value for the associated key as an integer. * @param key The key of the parameter whose value is to be retrieved. * @param defaultValue The value to use if the parameter doesn't exist, or if there is a conversion error. * @return The value. */ public Integer getParameterAsInteger(String key, Integer defaultValue); /** * Gets the value for the associated key as a long number. * @param key The key of the parameter whose value is to be retrieved. * @param defaultValue The value to use if the parameter doesn't exist, or if there is a conversion error. * @return The value. */ public Long getParameterAsLong(String key, Long defaultValue); /** * Gets the value for the associated key as a string. * @param key The key of the parameter whose value is to be retrieved. * @param defaultValue The value to use if the parameter doesn't exist, or if there is a conversion error. * @return The value. */ public Boolean getParameterAsBoolean(String key, Boolean defaultValue); /** * Determines whether the parameter with the given key exists in the request. * @param key The key for the parameter. * @return Whether the parameter is specified in the request. */ public boolean hasParameter(String key); /** * Gets the parameter string that was part of the URI request including the question mark. * @return The parameter string portion of the client's request. This will be null if there were no parameters or if the parameters were encoded. */ public String getParameterString(); /** * Gets the client's cached response timestamp useable by the server to send a not modified message if the resource has not changed. * @return The cached response date that the client passed indicating that a 304 Not Modified message should be sent if the resource hasn't changed since the date. */ public Date getCacheDate(); /** * Gets the textual range requested. * @return */ public String getRange(); /** * Gets the lower value of the range for a download. If not set then the download should start at the beginning of the content. * @return */ public Long getLowerRange(); /** * Gets the upper value of the range for a download. If not set then the download should end at the last byte of the content. * @return */ public Long getUpperRange(); /** * Gets the date associated with the byte range. The byte range will only be valid (for resumed downloads) if the file modification date is older than the unmodified-since date. * @return */ public Date getUnmodifiedSinceDate(); /** * Gets the content buffer. * @return The buffer used for temporary storage of the content. This will be null if a file channel is provided, or if there is no content to the request. */ public ByteBuffer getContent(); /** * Gets the length of the message content. * @return The message content byte count. */ public int getContentLength(); /** * Gets the mime type for the content. * @return The mime type name that identifies the encoding of the content, or null if there isn't any content (including any encoded in the uri). */ public String getContentType(); /** * Gets the mime type code for the content. * @return The mime type code that identifies the encoding of the content. One of the CONTENT_TYPE_xxx identifiers. */ public int getContentTypeCode(); /** * Gets the character set name used to encode the parameters of the request (used with POST type requests that use the application/x-www-form-urlencoded encoding. * @return The character set specificed, otherwise UTF-8. This value will never be null. */ public String getParameterCharacterSet(); /** * Gets the input stream that can be used to access the content regardless of whether it is stored in a file or a memory buffer. *Note that a request that contains binary data may have properties for the data as well, but the properties will only house metadata. This method must be called to access the actual data.
* @return The stream containing the content bytes. * @throws java.io.IOException */ public InputStream getContentStream() throws java.io.IOException; /** * Gets the URL of the page that made the request if available. * @return The full URL of the requesting page. */ public String getReferer(); /** * Gets the URI which is the path to the requested resource. * @return The requested resource's univeral resource identifier. */ public String getUri(); /** * Whether the request was made over an SSL connection. * @return Whether an SSL socket was used for the request. */ public boolean getIsSsl(); /** * Gets the host ip or domain used to access the server. * @return The host name used by the client. */ public String getHost(); /** * Gets the version of HTTP being used by the client - most likely HTTP/1.1 or HTTP/1.0. * @return The http version string passed by the client. */ public String getHttpVersion(); /** * Gets the type code for the request. * @return One of the TYPE_xxx identifiers. */ public int getRequestType(); /** * Gets the identifier supplied by the browser that describes its self. * @return The browser identifier string. */ public String getBrowser(); /** * Gets the ISO language code for the language the client is using. * @return The language used by the client. */ public String getLanguage(); /** * Gets the message encodings used by the client. * @return The transfer encodings used on the message (in order of application). */ public String getTransferEncoding(); /** * Determines whether the CLIENT thought it was logged in at the time of the request. * @return Whether the client thought it had logged in at the time of the request - useful in determining what to do if the session was stale. */ public boolean isLoggedIn(); /** * Gets the session id that is derived from a cookie set in a previous response. * @return The session id passed in the request. */ public String getSessionId(); /** * Gets the secure session id that is derived from a cookie set in a previous response. * @return The secure session id passed in the request. */ public String getSecureSessionId(); /** * Gets the session object that the request is operating within. * @return The session for this request. This may be null if one was not assigned. */ public ISession getSession(); /** * Gets the exact bytes sent by the client that form this request. * @return The bytes for the request as sent by the client. Will be null if the web application did not request the bytes be saved. See com.foundation.web.ISessionLifecycleAware and com.foundation.web.WebOptions. */ public ByteBuffer getRequestBytes(); }//IRequest//