[Asterisk-java-cvs] CVS: asterisk-java/src/java/net/sf/asterisk/fastagi/impl RequestBuilderImpl.java
Brought to you by:
srt
From: Stefan R. <sr...@us...> - 2005-04-06 18:59:08
|
Update of /cvsroot/asterisk-java/asterisk-java/src/java/net/sf/asterisk/fastagi/impl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31695/src/java/net/sf/asterisk/fastagi/impl Modified Files: RequestBuilderImpl.java AGIRequestImpl.java Log Message: Added parameters to AGIRequest Index: RequestBuilderImpl.java =================================================================== RCS file: /cvsroot/asterisk-java/asterisk-java/src/java/net/sf/asterisk/fastagi/impl/RequestBuilderImpl.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -p -r1.1 -r1.2 --- RequestBuilderImpl.java 11 Mar 2005 15:20:50 -0000 1.1 +++ RequestBuilderImpl.java 6 Apr 2005 18:58:59 -0000 1.2 @@ -16,10 +16,16 @@ */ package net.sf.asterisk.fastagi.impl; +import java.net.URLDecoder; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; +import java.util.StringTokenizer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import net.sf.asterisk.fastagi.AGIRequest; import net.sf.asterisk.fastagi.RequestBuilder; @@ -32,6 +38,11 @@ import net.sf.asterisk.fastagi.RequestBu */ public class RequestBuilderImpl implements RequestBuilder { + private static final Pattern SCRIPT_PATTERN = Pattern + .compile("^([^\\?]*)\\?(.*)$"); + private static final Pattern PARAMETER_PATTERN = Pattern + .compile("^(.*)=(.*)$"); + /** * Creates a new AGIRequestBuilderImpl. */ @@ -44,6 +55,8 @@ public class RequestBuilderImpl implemen { AGIRequestImpl request; Map map; + Matcher scriptMatcher; + String script; if (lines == null) { @@ -54,7 +67,24 @@ public class RequestBuilderImpl implemen map = buildMap(lines); - request.setScript((String) map.get("network_script")); + script = (String) map.get("network_script"); + if (script != null) + { + scriptMatcher = SCRIPT_PATTERN.matcher(script); + if (scriptMatcher.matches()) + { + String parameters; + Map parameterMap; + + script = scriptMatcher.group(1); + parameters = scriptMatcher.group(2); + parameterMap = parseParameters(parameters); + request.setParameterMap(parameterMap); + } + } + + request.setScript(script); + request.setRequestURL((String) map.get("request")); request.setChannel((String) map.get("channel")); request.setUniqueId((String) map.get("uniqueid")); @@ -191,4 +221,65 @@ public class RequestBuilderImpl implemen return callerIdName; } } + + private Map parseParameters(String s) + { + Map parameterMap; + Map result; + Iterator parameterIterator; + StringTokenizer st; + + parameterMap = new HashMap(); + st = new StringTokenizer(s, "&"); + while (st.hasMoreTokens()) + { + String parameter; + Matcher parameterMatcher; + String name; + String value; + List values; + + parameter = st.nextToken(); + parameterMatcher = PARAMETER_PATTERN.matcher(parameter); + if (parameterMatcher.matches()) + { + name = URLDecoder.decode(parameterMatcher.group(1)); + value = URLDecoder.decode(parameterMatcher.group(2)); + } + else + { + name = URLDecoder.decode(parameter); + value = ""; + } + + if (parameterMap.get(name) == null) + { + values = new ArrayList(); + values.add(value); + parameterMap.put(name, values); + } + else + { + values = (List) parameterMap.get(name); + values.add(value); + } + } + + result = new HashMap(); + parameterIterator = parameterMap.keySet().iterator(); + while (parameterIterator.hasNext()) + { + String name; + List values; + String[] valueArray; + + name = (String) parameterIterator.next(); + values = (List) parameterMap.get(name); + + valueArray = new String[values.size()]; + result.put(name, values.toArray(valueArray)); + } + + return result; + } } Index: AGIRequestImpl.java =================================================================== RCS file: /cvsroot/asterisk-java/asterisk-java/src/java/net/sf/asterisk/fastagi/impl/AGIRequestImpl.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -p -r1.2 -r1.3 --- AGIRequestImpl.java 13 Mar 2005 11:26:50 -0000 1.2 +++ AGIRequestImpl.java 6 Apr 2005 18:58:59 -0000 1.3 @@ -17,6 +17,8 @@ package net.sf.asterisk.fastagi.impl; import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; import net.sf.asterisk.fastagi.AGIRequest; @@ -104,6 +106,12 @@ public class AGIRequestImpl implements S private String accountCode; /** + * A map assigning the values of a parameter (an array of Strings) to the + * name of the parameter. + */ + private Map parameterMap; + + /** * Creates a new AGIRequestImpl. */ public AGIRequestImpl() @@ -406,10 +414,49 @@ public class AGIRequestImpl implements S this.accountCode = accountCode; } + public String getParameter(String name) + { + String[] values; + + values = getParameterValues(name); + + if (values == null || values.length == 0) + { + return null; + } + + return values[0]; + } + + public String[] getParameterValues(String name) + { + if (parameterMap == null) + { + return null; + } + + return (String[]) parameterMap.get(name); + } + + public Map getParameterMap() + { + if (parameterMap == null) + { + parameterMap = new HashMap(); + } + + return parameterMap; + } + + public void setParameterMap(Map parameterMap) + { + this.parameterMap = parameterMap; + } + public String toString() { StringBuffer sb; - + sb = new StringBuffer(getClass().getName() + ": "); sb.append("script='" + getScript() + "'; "); sb.append("requestURL='" + getRequestURL() + "'; "); |