webwork/src/main/webwork/view/taglib/vui AbstractVUITag.java,NONE,1.1 AudioTag.java,NONE,1.1 BrowserSupport.java,NONE,1.1 FieldTag.java,NONE,1.1 FilledTag.java,NONE,1.1 GrammarTag.java,NONE,1.1 LogTag.java,NONE,1.1 PromptTag.java,NONE,1.1
[email protected] Mon, 20 May 2002 22:27:01 -0700
| Newsgroups | gmane.comp.java.webwork.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/webwork/webwork/src/main/webwork/view/taglib/vui In directory usw-pr-cvs1:/tmp/cvs-serv11834/main/webwork/view/taglib/vui Added Files: AbstractVUITag.java AudioTag.java BrowserSupport.java FieldTag.java FilledTag.java GrammarTag.java LogTag.java PromptTag.java Log Message: -added support for VoiceXML JSP tags -added support for SOAP JSP tags -updated documentation --- NEW FILE: AbstractVUITag.java --- /* * WebWork, Web Application Framework * * Distributable under Apache license. * See terms of license at opensource.org */ package webwork.view.taglib.vui; import org.apache.log4j.Category; import webwork.config.Configuration; import webwork.util.ContainUtil; import webwork.view.taglib.IncludeTag; import webwork.view.taglib.ParamTag; import webwork.view.taglib.WebWorkBodyTagSupport; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import java.util.HashMap; import java.util.Map; import java.io.IOException; /** * Abstract VUI tag * * @author Jeff Haynie ([email protected]) * @version $Revision: 1.1 $ */ public abstract class AbstractVUITag extends WebWorkBodyTagSupport implements ParamTag.Parametric { // Attributes ---------------------------------------------------- private static Category log = Category.getInstance(AbstractVUITag.class); protected String themeAttr; protected String theme; protected String templateHeaderAttr; protected String templateFooterAttr; protected Map params = new HashMap(); // Public -------------------------------------------------------- public abstract String getHeaderTemplate(); public abstract String getFooterTemplate(); public String getTheme() { // If theme set is not explicitly given, // try to find attribute which states the theme set to use if ((theme == null) || (theme == "")) { theme = (String) pageContext.findAttribute("theme"); } // Default template set if ((theme == null) || (theme == "")) { theme = Configuration.getString("webwork.ui.theme"); } return theme; } public void setTheme(String aName) { themeAttr = aName; } public void setTemplateHeader(String aName) { templateHeaderAttr = aName; } public void setTemplateFooter(String aName) { templateFooterAttr = aName; } public void addParameter(String name, Object value) { addParameterInternal(name, value); } private void addParameterInternal(String name, Object value) { params.put(name, value); } public Map getParameters() { return params; } public boolean memberOf(Object obj1, Object obj2) { return ContainUtil.contains(obj1, obj2); } protected void getSetParameter(String a, String n) { if (a!=null) { Object value = findValue(a); if (value!=null) { addParameterInternal(n,value); } } } protected abstract void initializeAttributes(); // FieldTag overrides ------------------------------------------ public int doStartTag() { if (themeAttr != null) theme = (String) findValue(themeAttr); initializeAttributes(); getStack().pushValue(this); try { // header String template = templateHeaderAttr; if (template == null) template = getHeaderTemplate(); IncludeTag.include(getTemplateDirectory() + template, pageContext); } catch (Exception ex) { ex.printStackTrace(); return SKIP_BODY; } finally { getStack().popValue(); } return EVAL_BODY_INCLUDE; } public int doAfterBody() throws JspException { if (bodyContent != null) { try { JspWriter out = getPreviousOut(); out.print(bodyContent.getString()); bodyContent.clearBody(); } catch (Exception ex) { ex.printStackTrace(); throw new JspTagException("Exception:: "+toString(ex)); } return (EVAL_BODY_BUFFERED); } return (SKIP_BODY); } public int doEndTag() throws JspException { if (themeAttr != null) theme = (String) findValue(themeAttr); getStack().pushValue(this); try { // footer String template = templateFooterAttr; if (template == null) template = getFooterTemplate(); IncludeTag.include(getTemplateDirectory() + template, pageContext); } catch (Exception ex) { ex.printStackTrace(); throw new JspTagException("Exception including footer: "+toString(ex)); } return EVAL_PAGE; } public void release() { super.release(); getStack().popValue(); params = new HashMap(); } public String getBrowserUserAgent () { HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String ua = request.getHeader("User-Agent"); if (ua==null) { ua=request.getHeader("user-agent"); } return (ua==null ? "": ua); } /** * get the template directory for a specific voice browser */ protected String getTemplateDirectory () { String ua = getBrowserUserAgent(); return BrowserSupport.getBrowserTemplateDirectory(ua); } protected String constructURL (String value) { // this was taken from URLTag HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); StringBuffer link = new StringBuffer(); if (value != null) { // Check if context path needs to be added // Add path to absolute links if (value.startsWith("/")) { link.append(request.getContextPath()); } // Add page link.append(value); } else { // Go to "same page" String requestURI = (String) request.getAttribute("webwork.request_uri"); // String contextPath=(String)request.getAttribute("webwork.context_path"); if (requestURI == null) requestURI = request.getRequestURI(); // if(contextPath==null) contextPath=request.getContextPath(); link.append(requestURI); } String result; try { //Category.getInstance(this.getClass().getName()).debug(link.toString()); result = response.encodeURL(link.toString()); } catch (Exception e) { // Could not encode URL for some reason // Use it unchanged result = link.toString(); } return result; } } --- NEW FILE: AudioTag.java --- /* * WebWork, Web Application Framework * * Distributable under Apache license. * See terms of license at opensource.org */ package webwork.view.taglib.vui; import org.apache.log4j.Category; import webwork.config.Configuration; import webwork.util.ContainUtil; import webwork.view.taglib.IncludeTag; import webwork.view.taglib.ParamTag; import webwork.view.taglib.WebWorkBodyTagSupport; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import java.util.HashMap; import java.util.Map; import java.io.IOException; /** * Voice UI for grammar tag * * @author Jeff Haynie ([email protected]) * @version $Revision: 1.1 $ */ public class AudioTag extends AbstractVUITag { // Attributes ---------------------------------------------------- protected static Category log = Category.getInstance(AudioTag.class); protected String srcAttr; protected String exprAttr; protected String ttsAttr; protected String personaAttr; protected String fetchhintAttr; protected String fetchtimeoutAttr; protected String maxageAttr; protected String maxstaleAttr; // Public -------------------------------------------------------- public String getHeaderTemplate() { return "audio-header.jsp"; } public String getFooterTemplate() { return "audio-footer.jsp"; } public void setSrc(String aName) { srcAttr = aName; } public String getSrc () { return srcAttr; } public void setTts(String aName) { ttsAttr = aName; } public String getTts () { return ttsAttr; } public void setPersona(String aName) { personaAttr = aName; } public String getPersona () { return personaAttr; } public void setExpr(String aName) { exprAttr = aName; } public String getExpr () { return exprAttr; } public void setFetchhint(String aName) { fetchhintAttr = aName; } public String getFetchhint () { return fetchhintAttr; } public void setFetchtimeout(String aName) { fetchtimeoutAttr = aName; } public String getFetchtimeout () { return fetchtimeoutAttr; } public void setMaxage(String aName) { maxageAttr = aName; } public String getMaxage () { return maxageAttr; } public void setMaxstale (String aName) { maxstaleAttr = aName; } public String getMaxstale() { return maxstaleAttr; } protected void initializeAttributes() { getSetParameter(srcAttr,"src"); getSetParameter(exprAttr,"expr"); getSetParameter(ttsAttr,"tts"); getSetParameter(personaAttr,"persona"); getSetParameter(fetchhintAttr,"fetchhint"); getSetParameter(fetchtimeoutAttr,"fetchtimeout"); getSetParameter(maxageAttr,"maxage"); getSetParameter(maxstaleAttr,"maxstale"); } } --- NEW FILE: BrowserSupport.java --- /* * WebWork, Web Application Framework * * Distributable under Apache license. * See terms of license at opensource.org */ package webwork.view.taglib.vui; import java.io.InputStream; import java.io.FileInputStream; import java.util.Properties; import java.util.Collections; import java.util.Map; import java.util.List; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.StringTokenizer; import org.apache.log4j.Category; /** * Utility class for handling multiple types of voice browsers * * @author Jeff Haynie ([email protected]) * @version $Revision: 1.1 $ */ public final class BrowserSupport { static Category log = Category.getInstance(BrowserSupport.class); static Properties properties; static Map browserMap = Collections.synchronizedMap(new HashMap(2)); static List browserMatch = Collections.synchronizedList(new ArrayList(2)); static { InputStream in = null; Properties p = new Properties(); try { in = Thread.currentThread().getContextClassLoader().getResourceAsStream("/vxml.properties"); if ( in!=null ) { p.load(in); loadBrowserInfo(p); } } catch (Exception ex) { ex.printStackTrace(); } finally { if (in!=null) { try { in.close(); } catch (Exception ignore){} in=null; } } } static final class Match { String match; String userAgent; String templateDirectory; } /** * add a browser match pattern to use when trying to match a user-agent if the * exact user agent string is specified. the uaString can contain a * wildcard, such as <tt>VocalOS/*</tt> which will match up to <tt>VocalOS/</tt> */ public static void addBrowserMatch (String uaString, String templateDir) { int w = uaString.indexOf("*"); Match m = new Match(); m.userAgent=uaString; if ( w>0 ) { m.match = uaString.substring(0,w); } else { m.match = null; // * - all/default } m.templateDirectory=templateDir; if (log.isDebugEnabled()) { log.debug("Loading useragent match: "+m.match+" ["+uaString+"] directory: "+templateDir); } browserMatch.add(m); } /** * load browser settings from properties file */ public static void loadBrowserInfo (Properties p) { properties = p; String browsers = p.getProperty("browsers"); if ( browsers!=null ) { StringTokenizer tok=new StringTokenizer(browsers,","); while (tok.hasMoreTokens()) { String token=tok.nextToken(); String ua = p.getProperty(token+".useragent"); if ( ua!=null ) { String template = p.getProperty(token+".templatedirectory"); if ( template!=null ) { if (log.isDebugEnabled()) { log.debug("Loading useragent: "+token+" ["+ua+"] directory: "+template); } browserMap.put(ua,template); if ( ua.indexOf("*")>-1 ) { addBrowserMatch(ua,template); } } } } } } /** * for a given user agent, return a near match if any */ public static String getTemplateDirectoryFromMatch (String userAgent) { Iterator i = browserMatch.iterator(); Match dm = null; while (i.hasNext()) { Match m=(Match)i.next(); if (m.match==null) { dm=m; // default continue; } if ( userAgent.startsWith(m.match) ) { return m.templateDirectory; } } return (dm==null ? null : dm.templateDirectory); } /** * for a given user agent, return a vxml browser template directory */ public static String getBrowserTemplateDirectory (String userAgent) { String tempDir = (String)browserMap.get(userAgent); if ( tempDir==null ) { tempDir = getTemplateDirectoryFromMatch (userAgent); if ( tempDir==null ) { } } return (tempDir==null ? "/template/standard/vxml/" : tempDir); } } --- NEW FILE: FieldTag.java --- /* * WebWork, Web Application Framework * * Distributable under Apache license. * See terms of license at opensource.org */ package webwork.view.taglib.vui; import org.apache.log4j.Category; import webwork.config.Configuration; import webwork.util.ContainUtil; import webwork.view.taglib.IncludeTag; import webwork.view.taglib.ParamTag; import webwork.view.taglib.WebWorkBodyTagSupport; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import java.util.HashMap; import java.util.Map; import java.io.IOException; /** * Voice UI for field tag * * @author Jeff Haynie ([email protected]) * @version $Revision: 1.1 $ */ public class FieldTag extends AbstractVUITag { // Attributes ---------------------------------------------------- protected static Category log = Category.getInstance(FieldTag.class); protected String nameAttr; protected String slotAttr; protected String modalAttr; protected String condAttr; protected String typeAttr; // Public -------------------------------------------------------- public String getHeaderTemplate() { return "field-header.jsp"; } public String getFooterTemplate() { return "field-footer.jsp"; } public void setName(String aName) { nameAttr = aName; } public void setModal (String aName) { modalAttr = aName; } public String getModal () { return modalAttr; } public void setSlot (String aName) { slotAttr = aName; } public String getSlot () { return slotAttr; } public void setCond (String aName) { condAttr = aName; } public String getCond () { return condAttr; } public void setType (String aName) { typeAttr = aName; } public String getType () { return typeAttr; } protected void initializeAttributes() { getSetParameter(nameAttr,"name"); getSetParameter(condAttr,"cond"); getSetParameter(modalAttr,"modal"); getSetParameter(slotAttr,"slot"); getSetParameter(typeAttr,"type"); } } --- NEW FILE: FilledTag.java --- /* * WebWork, Web Application Framework * * Distributable under Apache license. * See terms of license at opensource.org */ package webwork.view.taglib.vui; import org.apache.log4j.Category; import webwork.config.Configuration; import webwork.util.ContainUtil; import webwork.view.taglib.IncludeTag; import webwork.view.taglib.ParamTag; import webwork.view.taglib.WebWorkBodyTagSupport; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import java.util.HashMap; import java.util.Map; import java.io.IOException; /** * Voice UI for filled tag * * @author Jeff Haynie ([email protected]) * @version $Revision: 1.1 $ */ public class FilledTag extends AbstractVUITag { // Attributes ---------------------------------------------------- protected static Category log = Category.getInstance(FilledTag.class); protected String actionAttr; protected String actionaudioAttr; protected String modeAttr; protected String namelistAttr; // Public -------------------------------------------------------- public String getHeaderTemplate() { return "filled-header.jsp"; } public String getFooterTemplate() { return "filled-footer.jsp"; } public void setAction(String aName) { actionAttr = aName; } public String getAction () { return actionAttr; } public void setActionaudio(String aName) { actionaudioAttr = aName; } public String getActionaudio () { return actionaudioAttr; } public void setMode(String aName) { modeAttr = aName; } public String getMode () { return modeAttr; } public void setNamelist (String aName) { namelistAttr = aName; } public String getNamelist () { return namelistAttr; } protected void initializeAttributes() { String url = (actionAttr!=null ? constructURL((String)findValue(actionAttr)) : null); if (url!=null) { addParameter("action",url); url = (actionaudioAttr!=null ? constructURL((String)findValue(actionaudioAttr)) : null); if (url!=null) { addParameter("actionaudio",url); } } getSetParameter(namelistAttr,"namelist"); getSetParameter(modeAttr,"mode"); } } --- NEW FILE: GrammarTag.java --- /* * WebWork, Web Application Framework * * Distributable under Apache license. * See terms of license at opensource.org */ package webwork.view.taglib.vui; import org.apache.log4j.Category; import webwork.config.Configuration; import webwork.util.ContainUtil; import webwork.view.taglib.IncludeTag; import webwork.view.taglib.ParamTag; import webwork.view.taglib.WebWorkBodyTagSupport; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import java.util.HashMap; import java.util.Map; import java.io.IOException; /** * Voice UI for grammar tag * * @author Jeff Haynie ([email protected]) * @version $Revision: 1.1 $ */ public class GrammarTag extends AbstractVUITag { // Attributes ---------------------------------------------------- protected static Category log = Category.getInstance(GrammarTag.class); protected String nameAttr; protected String langAttr; protected String modelAttr; protected String modeAttr; protected String weightAttr; // Public -------------------------------------------------------- public String getHeaderTemplate() { return "grammar-header.jsp"; } public String getFooterTemplate() { return "grammar-footer.jsp"; } public void setName(String aName) { nameAttr = aName; } public String getName () { return nameAttr; } public void setLang(String aName) { langAttr = aName; } public String getLang () { return langAttr; } public void setModel(String aName) { modelAttr = aName; } public String getModel () { return modelAttr; } public void setMode(String aName) { modeAttr = aName; } public String getMode () { return modeAttr; } public void setWeight(String aName) { weightAttr = aName; } public String getWeight () { return weightAttr; } protected void initializeAttributes() { getSetParameter(nameAttr,"name"); getSetParameter(langAttr,"lang"); getSetParameter(modelAttr,"model"); getSetParameter(modeAttr,"mode"); getSetParameter(weightAttr,"weight"); } } --- NEW FILE: LogTag.java --- /* * WebWork, Web Application Framework * * Distributable under Apache license. * See terms of license at opensource.org */ package webwork.view.taglib.vui; import org.apache.log4j.Category; import webwork.config.Configuration; import webwork.util.ContainUtil; import webwork.view.taglib.IncludeTag; import webwork.view.taglib.ParamTag; import webwork.view.taglib.WebWorkBodyTagSupport; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import java.util.HashMap; import java.util.Map; import java.io.IOException; /** * Voice UI for log tag * * @author Jeff Haynie ([email protected]) * @version $Revision: 1.1 $ */ public class LogTag extends AbstractVUITag { // Attributes ---------------------------------------------------- protected static Category log = Category.getInstance(LogTag.class); protected String labelAttr; protected String exprAttr; // Public -------------------------------------------------------- public String getHeaderTemplate() { return "log-header.jsp"; } public String getFooterTemplate() { return "log-footer.jsp"; } public void setLabel(String aName) { labelAttr = aName; } public String getLabel () { return labelAttr; } public void setExpr(String aName) { exprAttr = aName; } public String getExpr () { return exprAttr; } protected void initializeAttributes() { getSetParameter(labelAttr,"label"); getSetParameter(exprAttr,"expr"); } } --- NEW FILE: PromptTag.java --- /* * WebWork, Web Application Framework * * Distributable under Apache license. * See terms of license at opensource.org */ package webwork.view.taglib.vui; import org.apache.log4j.Category; import webwork.config.Configuration; import webwork.util.ContainUtil; import webwork.view.taglib.IncludeTag; import webwork.view.taglib.ParamTag; import webwork.view.taglib.WebWorkBodyTagSupport; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import java.util.HashMap; import java.util.Map; import java.io.IOException; /** * Voice UI for prompt tag * * @author Jeff Haynie ([email protected]) * @version $Revision: 1.1 $ */ public class PromptTag extends AbstractVUITag { // Attributes ---------------------------------------------------- protected static Category log = Category.getInstance(PromptTag.class); protected String bargeinAttr; protected String timeoutAttr; protected String langAttr; protected String condAttr; // Public -------------------------------------------------------- public String getHeaderTemplate() { return "prompt-header.jsp"; } public String getFooterTemplate() { return "prompt-footer.jsp"; } public void setBargein(String aName) { bargeinAttr = aName; } public String getBargein () { return bargeinAttr; } public void setTimeout(String aName) { timeoutAttr = aName; } public String getTimeout () { return timeoutAttr; } public void setLang(String aName) { langAttr = aName; } public String getLang () { return langAttr; } public void setCond(String aName) { condAttr = aName; } public String getCond () { return condAttr; } protected void initializeAttributes() { getSetParameter(bargeinAttr,"bargein"); getSetParameter(timeoutAttr,"timeout"); getSetParameter(langAttr,"lang"); getSetParameter(condAttr,"cond"); } } _______________________________________________________________ Don't miss the 2002 Sprint PCS Application Developer's Conference August 25-28 in Las Vegas -- http://devcon.sprintpcs.com/adp/index.cfm