org.jvoicexml.xml.ccxml.Fetch Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.jvoicexml.xml Show documentation
Show all versions of org.jvoicexml.xml Show documentation
The Open Source Voice Browser
The newest version!
/*
* JVoiceXML - A free VoiceXML implementation.
*
* Copyright (C) 2005-2018 JVoiceXML group - http://jvoicexml.sourceforge.net
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Library General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option) any
* later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
* details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.jvoicexml.xml.ccxml;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Set;
import org.jvoicexml.xml.XmlNode;
import org.jvoicexml.xml.XmlNodeFactory;
import org.w3c.dom.Node;
/**
* <fetch>
is used to asynchronously fetch content
* identified by the attributes of the <fetch>
. The
* fetched content may either be a CCXML document, or script content. Content
* that has been acquired using <fetch>
is accessible
* through other elements defined by CCXML. Execution returns from the element
* immediately, and the CCXML application can continue on while the platform
* works to fetch the identified resource. When the fetch request has been
* completed, an event is generated against the session that initiated the
* fetch. The event is one of fetch.done, which indicates that the identified
* content was fetched successfully, or error.fetch, indicative of a failure to
* fetch the requested content. Note that even if content is successfully
* fetched, errors in processing fetched content (for instance, a CCXML document
* with a syntax error) may result in an error.fetch being thrown.
*
* The fetch request is local to the session that initiated the
* <fetch>
, and is referenced through a unique identifier
* generated by the CCXML platform. The application may obtain the unique
* identifier for a fetch request by providing an ECMAScript left-hand-side
* expression in the fetchid attribute when the fetch is performed. The fetch
* identifier can also be obtained as a property of the fetch.done event. The
* application uses the fetch identifier in any CCXML elements that reference
* fetched content, currently <goto>
and
* <script>
.
*
* Fetched content has a lifetime that is limited to that of the document in
* which it is fetched. Therefore, following a transition to a new CCXML
* document using <goto>
, content fetched in the scope of
* the current document is no longer accessible. Note that this should not be
* taken to preclude platform-level optimizations or caching of resources that
* are fetched multiple times.
*
* The use of <fetch>
to obtain content does not compel the
* application to make use of that content. However, it is wasteful of system
* resources to fetch resources that are not used. Platforms are responsible for
* clearing out unused fetch resources, and may impose limits on the resources
* that can be fetched by a single session.
*
*
* @author Steve Doyle
*/
public final class Fetch
extends AbstractCcxmlNode {
/** Name of the tag. */
public static final String TAG_NAME = "fetch";
/**
* An ECMAScript expression which returns a character string that indicates
* the media encoding type of the submitted document (when the value of the
* method is "post").
*/
public static final String ATTRIBUTE_ENCTYPE = "enctype";
/**
* An ECMAScript left hand side expression evaluating to a previously
* defined variable. The value of the attribute will receive an internally
* generated unique string identifier to be associated with the completion
* event. This identifier can be tested by the fetch completion event
* handler to distinguish among several outstanding fetch requests. If this
* attribute is not specified, the fetch identifier can be acquired from the
* fetch completion event. Every fetch request will receive a unique fetch
* identifier, even if the request if for the same URL.
*/
public static final String ATTRIBUTE_FETCHID = "fetchid";
/**
* The character string returned is interpreted as a time interval. This
* indicates that the document is willing to use content whose age is no
* greater than the specified time in seconds (cf. 'max-age' in HTTP 1.1
* [RFC2616]). The document is not willing to use stale content, unless
* maxstale is also provided.
*/
public static final String ATTRIBUTE_MAXAGE = "maxage";
/**
* The character string returned is interpreted as a time interval. This
* indicates that the document is willing to use content that has exceeded
* its expiration time (cf. 'max-age' in HTTP 1.1 [RFC2616]). If maxstale is
* assigned a value, then the document is willing to accept content that has
* exceeded its expiration time by no more than the specified number of
* seconds.
*/
public static final String ATTRIBUTE_MAXSTALE = "maxstale";
/**
* An ECMAScript expression which returns a character string that indicates
* the HTTP method to use.
*/
public static final String ATTRIBUTE_METHOD = "method";
/**
* A list of zero or more whitespace separated CCXML variable names. These
* variables will be submitted to the server, with the same qualification as
* used in the namelist. When an ECMAscript variable is submitted to the
* server, its value is first converted into a string before being
* submitted. If the variable is an ECMAScript Object, the mechanism by
* which it is submitted is not currently defined. Instead of submitting
* ECMAScript Objects directly, the application developer may explicitly
* submit the properties of an Object. e.g. "date.month date.year".
*/
public static final String ATTRIBUTE_NAMELIST = "namelist";
/**
* An ECMAScript expression which returns the URI of the resource to be
* fetched.
*/
public static final String ATTRIBUTE_NEXT = "next";
/**
* The character string returned is interpreted as a time interval. This
* interval begins when the fetch is executed. The fetch will fail if not
* completed at the end of this interval. A failed fetch will return the
* error.fetch event.
*/
public static final String ATTRIBUTE_TIMEOUT = "timeout";
/**
* An ECMAScript expression which returns a character string that specifies
* the MIME type of the fetched content.
*/
public static final String ATTRIBUTE_TYPE = "type";
/**
* Supported attribute names for this node.
*/
protected static final ArrayList ATTRIBUTE_NAMES;
/**
* Set the valid attributes for this node.
*/
static {
ATTRIBUTE_NAMES = new java.util.ArrayList();
ATTRIBUTE_NAMES.add(ATTRIBUTE_ENCTYPE);
ATTRIBUTE_NAMES.add(ATTRIBUTE_FETCHID);
ATTRIBUTE_NAMES.add(ATTRIBUTE_MAXAGE);
ATTRIBUTE_NAMES.add(ATTRIBUTE_MAXSTALE);
ATTRIBUTE_NAMES.add(ATTRIBUTE_METHOD);
ATTRIBUTE_NAMES.add(ATTRIBUTE_NAMELIST);
ATTRIBUTE_NAMES.add(ATTRIBUTE_NEXT);
ATTRIBUTE_NAMES.add(ATTRIBUTE_TIMEOUT);
ATTRIBUTE_NAMES.add(ATTRIBUTE_TYPE);
}
/**
* Valid child tags for this node.
*/
private static final Set CHILD_TAGS;
/**
* Set the valid child tags for this node.
*/
static {
CHILD_TAGS = new java.util.HashSet();
}
/**
* Construct a new fetch object without a node.
*
* This is necessary for the node factory.
*
*
* @see CcxmlNodeFactory
*/
public Fetch() {
super(null);
}
/**
* Construct a new fetch object.
* @param node The encapsulated node.
*/
Fetch(final Node node) {
super(node);
}
/**
* Constructs a new node.
*
* @param n
* The encapsulated node.
* @param factory
* The node factory to use.
*/
private Fetch(final Node n,
final XmlNodeFactory extends XmlNode> factory) {
super(n, factory);
}
/**
* Get the name of the tag for the derived node.
*
* @return name of the tag.
*/
public String getTagName() {
return TAG_NAME;
}
/**
* {@inheritDoc}
*/
public XmlNode newInstance(final Node n,
final XmlNodeFactory extends XmlNode> factory) {
return new Fetch(n, factory);
}
/**
* Retrieve the enctype attribute.
* @return Value of the enctype attribute.
* @see #ATTRIBUTE_ENCTYPE
*/
public String getEnctype() {
return getAttribute(ATTRIBUTE_ENCTYPE);
}
/**
* Set the enctype attribute.
* @param enctype Value of the enctype attribute.
* @see #ATTRIBUTE_ENCTYPE
*/
public void setEnctype(final String enctype) {
setAttribute(ATTRIBUTE_ENCTYPE, enctype);
}
/**
* Retrieve the fetchid attribute.
* @return Value of the fetchid attribute.
* @see #ATTRIBUTE_FETCHID
*/
public String getFetchid() {
return getAttribute(ATTRIBUTE_FETCHID);
}
/**
* Set the fetchid attribute.
* @param fetchid Value of the fetchid attribute.
* @see #ATTRIBUTE_FETCHID
*/
public void setFetchid(final String fetchid) {
setAttribute(ATTRIBUTE_FETCHID, fetchid);
}
/**
* Retrieve the maxage attribute.
* @return Value of the maxage attribute.
* @see #ATTRIBUTE_MAXAGE
*/
public String getMaxage() {
return getAttribute(ATTRIBUTE_MAXAGE);
}
/**
* Set the maxage attribute.
* @param maxage Value of the maxage attribute.
* @see #ATTRIBUTE_MAXAGE
*/
public void setMaxage(final String maxage) {
setAttribute(ATTRIBUTE_MAXAGE, maxage);
}
/**
* Retrieve the maxstale attribute.
* @return Value of the maxstale attribute.
* @see #ATTRIBUTE_MAXSTALE
*/
public String getMaxstale() {
return getAttribute(ATTRIBUTE_MAXSTALE);
}
/**
* Set the maxstale attribute.
* @param maxstale Value of the maxstale attribute.
* @see #ATTRIBUTE_MAXSTALE
*/
public void setMaxstale(final String maxstale) {
setAttribute(ATTRIBUTE_MAXSTALE, maxstale);
}
/**
* Retrieve the method attribute.
* @return Value of the method attribute.
* @see #ATTRIBUTE_METHOD
*/
public String getMethod() {
return getAttribute(ATTRIBUTE_METHOD);
}
/**
* Set the method attribute.
* @param method Value of the method attribute.
* @see #ATTRIBUTE_METHOD
*/
public void setMethod(final String method) {
setAttribute(ATTRIBUTE_METHOD, method);
}
/**
* Retrieve the namelist attribute.
* @return Value of the namelist attribute.
* @see #ATTRIBUTE_NAMELIST
*/
public String getNamelist() {
return getAttribute(ATTRIBUTE_NAMELIST);
}
/**
* Set the namelist attribute.
* @param namelist Value of the namelist attribute.
* @see #ATTRIBUTE_NAMELIST
*/
public void setNamelist(final String namelist) {
setAttribute(ATTRIBUTE_NAMELIST, namelist);
}
/**
* Retrieve the next attribute.
* @return Value of the next attribute.
* @see #ATTRIBUTE_NEXT
*/
public String getNext() {
return getAttribute(ATTRIBUTE_NEXT);
}
/**
* Set the next attribute.
* @param next Value of the next attribute.
* @see #ATTRIBUTE_NEXT
*/
public void setNext(final String next) {
setAttribute(ATTRIBUTE_NEXT, next);
}
/**
* Retrieve the timeout attribute.
* @return Value of the timeout attribute.
* @see #ATTRIBUTE_TIMEOUT
*/
public String getTimeout() {
return getAttribute(ATTRIBUTE_TIMEOUT);
}
/**
* Set the timeout attribute.
* @param timeout Value of the timeout attribute.
* @see #ATTRIBUTE_TIMEOUT
*/
public void setTimeout(final String timeout) {
setAttribute(ATTRIBUTE_TIMEOUT, timeout);
}
/**
* Retrieve the type attribute.
* @return Value of the type attribute.
* @see #ATTRIBUTE_TYPE
*/
public String getType() {
return getAttribute(ATTRIBUTE_TYPE);
}
/**
* Set the type attribute.
* @param type Value of the type attribute.
* @see #ATTRIBUTE_TYPE
*/
public void setType(final String type) {
setAttribute(ATTRIBUTE_TYPE, type);
}
/**
*{@inheritDoc}
*/
@Override
protected boolean canContainChild(final String tagName) {
return CHILD_TAGS.contains(tagName);
}
/**
* {@inheritDoc}
*/
@Override
public Collection getAttributeNames() {
return ATTRIBUTE_NAMES;
}
}