Author: julien_viet
Date: 2010-09-13 04:08:14 -0400 (Mon, 13 Sep 2010)
New Revision: 4164
Added:
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/metadata/RequestParamDescriptor.java
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/RequestParamDef.java
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestRequestParam.java
Modified:
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/WebAppController.java
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/metadata/RouteDescriptor.java
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/PatternBuilder.java
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/Route.java
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/Router.java
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestHierarchy.java
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestMatch.java
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestPortalConfiguration.java
Log:
start to implement request parameter matching
Modified:
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/WebAppController.java
===================================================================
---
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/WebAppController.java 2010-09-13
06:48:21 UTC (rev 4163)
+++
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/WebAppController.java 2010-09-13
08:08:14 UTC (rev 4164)
@@ -151,7 +151,7 @@
log.info("Portal path: " + portalPath);
//
- Map<QualifiedName, String> parameters = router.process(portalPath);
+ Map<QualifiedName, String> parameters = router.route(portalPath);
log.info("Decoded parameters: " + parameters);
//
Added:
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/metadata/RequestParamDescriptor.java
===================================================================
---
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/metadata/RequestParamDescriptor.java
(rev 0)
+++
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/metadata/RequestParamDescriptor.java 2010-09-13
08:08:14 UTC (rev 4164)
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.exoplatform.web.controller.metadata;
+
+import org.exoplatform.web.controller.QualifiedName;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
+ * @version $Revision$
+ */
+public class RequestParamDescriptor
+{
+
+ /** . */
+ private QualifiedName name;
+
+ /** . */
+ private String matchName;
+
+ /** . */
+ private String matchValue;
+
+ public RequestParamDescriptor(QualifiedName name, String matchName, String
matchValue)
+ {
+ if (name == null)
+ {
+ throw new NullPointerException("No null name accepted");
+ }
+ if (matchName == null)
+ {
+ throw new NullPointerException("No null match name accepted");
+ }
+ if (matchValue == null)
+ {
+ throw new NullPointerException("No null match value accepted");
+ }
+
+ //
+ this.name = name;
+ this.matchName = matchName;
+ this.matchValue = matchValue;
+ }
+
+ public QualifiedName getName()
+ {
+ return name;
+ }
+
+ public String getMatchName()
+ {
+ return matchName;
+ }
+
+ public String getMatchValue()
+ {
+ return matchValue;
+ }
+}
Modified:
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/metadata/RouteDescriptor.java
===================================================================
---
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/metadata/RouteDescriptor.java 2010-09-13
06:48:21 UTC (rev 4163)
+++
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/metadata/RouteDescriptor.java 2010-09-13
08:08:14 UTC (rev 4164)
@@ -40,7 +40,7 @@
private final Map<QualifiedName, String> parameters;
/** . */
- private final Map<QualifiedName, String> queryParams;
+ private final Map<String, RequestParamDescriptor> requestParams;
/** . */
private final List<RouteDescriptor> children;
@@ -49,7 +49,7 @@
{
this.path = path;
this.parameters = new HashMap<QualifiedName, String>();
- this.queryParams = new HashMap<QualifiedName, String>();
+ this.requestParams = new HashMap<String, RequestParamDescriptor>();
this.children = new ArrayList<RouteDescriptor>();
}
@@ -66,7 +66,7 @@
public RouteDescriptor addParameter(String name, String value)
{
- return addParameter(new QualifiedName(name), value);
+ return addParameter(QualifiedName.parse(name), value);
}
public Map<QualifiedName, String> getParameters()
@@ -74,22 +74,26 @@
return parameters;
}
- public RouteDescriptor addQueryParam(QualifiedName name, String value)
+ public RouteDescriptor addRequestParam(QualifiedName name, String matchName, String
matchValue)
{
- queryParams.put(name, value);
- return this;
+ return addRequestParam(new RequestParamDescriptor(name, matchName, matchValue));
}
- public RouteDescriptor addQueryParam(String name, String value)
+ public RouteDescriptor addRequestParam(String name, String matchName, String
matchValue)
{
- return addQueryParam(new QualifiedName(name), value);
+ return addRequestParam(QualifiedName.parse(name), matchName, matchValue);
}
- public Map<QualifiedName, String> getQueryParams()
+ public RouteDescriptor addRequestParam(RequestParamDescriptor requestParam)
{
- return queryParams;
+ requestParams.put(requestParam.getMatchName(), requestParam);
+ return this;
}
+ public Map<String, RequestParamDescriptor> getRequestParams()
+ {
+ return requestParams;
+ }
public RouteDescriptor addChild(RouteDescriptor child)
{
Modified:
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/PatternBuilder.java
===================================================================
---
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/PatternBuilder.java 2010-09-13
06:48:21 UTC (rev 4163)
+++
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/PatternBuilder.java 2010-09-13
08:08:14 UTC (rev 4164)
@@ -34,32 +34,46 @@
/** . */
private final StringBuilder buffer = new StringBuilder();
- public void appendExpression(String s)
+ public PatternBuilder expr(String s)
{
buffer.append(s);
+ return this;
}
- public void append(String s, int from, int to)
+ public PatternBuilder expr(char s)
{
+ buffer.append(s);
+ return this;
+ }
+
+ public PatternBuilder litteral(String s, int from, int to)
+ {
for (int i = from;i < to;i++)
{
char c = s.charAt(i);
- append(c);
+ litteral(c);
}
+ return this;
}
- public void append(String s, int from)
+ public PatternBuilder litteral(String s, int from)
{
- append(s, from, s.length());
+ return litteral(s, from, s.length());
}
- public void append(char c)
+ public PatternBuilder litteral(String s)
{
+ return litteral(s, 0, s.length());
+ }
+
+ public PatternBuilder litteral(char c)
+ {
buffer.append("\\u");
buffer.append(TABLE[(c & 0xF000) >> 12]);
buffer.append(TABLE[(c & 0x0F00) >> 8]);
buffer.append(TABLE[(c & 0x00F0) >> 4]);
buffer.append(TABLE[c & 0x000F]);
+ return this;
}
public Pattern build()
Added:
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/RequestParamDef.java
===================================================================
---
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/RequestParamDef.java
(rev 0)
+++
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/RequestParamDef.java 2010-09-13
08:08:14 UTC (rev 4164)
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.exoplatform.web.controller.router;
+
+import org.exoplatform.web.controller.QualifiedName;
+import org.exoplatform.web.controller.metadata.RequestParamDescriptor;
+
+import java.util.regex.Pattern;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
+ * @version $Revision$
+ */
+class RequestParamDef
+{
+
+ /** . */
+ final QualifiedName name;
+
+ /** . */
+ final String matchName;
+
+ /** . */
+ final Pattern matchValue;
+
+ RequestParamDef(RequestParamDescriptor descriptor)
+ {
+ if (descriptor == null)
+ {
+ throw new NullPointerException("No null descriptor accepted");
+ }
+
+ //
+ PatternBuilder matchValue = new PatternBuilder();
+ matchValue.expr("^");
+ boolean litteral = true;
+ for (char c : descriptor.getMatchValue().toCharArray())
+ {
+ switch (c)
+ {
+ case '{':
+ if (litteral)
+ {
+ litteral = false;
+ }
+ else
+ {
+ matchValue.expr('{');
+ }
+ break;
+ case '}':
+ if (litteral)
+ {
+ litteral = true;
+ }
+ else
+ {
+ matchValue.expr('}');
+ }
+ break;
+ default:
+ if (litteral)
+ {
+ matchValue.litteral(c);
+ }
+ else
+ {
+ matchValue.expr(c);
+ }
+ break;
+ }
+ }
+ matchValue.expr("$");
+
+ //
+ this.name = descriptor.getName();
+ this.matchName = descriptor.getMatchName();
+ this.matchValue = matchValue.build();
+ }
+
+ RequestParamDef(QualifiedName name, String matchName, Pattern matchValue)
+ {
+ if (name == null)
+ {
+ throw new NullPointerException("No null name accepted");
+ }
+ if (matchName == null)
+ {
+ throw new NullPointerException("No null match name accepted");
+ }
+ if (matchValue == null)
+ {
+ throw new NullPointerException("No null match value accepted");
+ }
+
+ //
+ this.name = name;
+ this.matchName = matchName;
+ this.matchValue = matchValue;
+ }
+
+ public QualifiedName getName()
+ {
+ return name;
+ }
+
+ public String getMatchName()
+ {
+ return matchName;
+ }
+
+ public Pattern getMatchValue()
+ {
+ return matchValue;
+ }
+}
Modified:
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/Route.java
===================================================================
---
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/Route.java 2010-09-13
06:48:21 UTC (rev 4163)
+++
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/Route.java 2010-09-13
08:08:14 UTC (rev 4164)
@@ -20,9 +20,11 @@
package org.exoplatform.web.controller.router;
import org.exoplatform.web.controller.QualifiedName;
+import org.exoplatform.web.controller.metadata.RequestParamDescriptor;
import org.exoplatform.web.controller.metadata.RouteDescriptor;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
@@ -56,7 +58,7 @@
private final Map<QualifiedName, String> routeParameters;
/** . */
- private final Map<QualifiedName, String> queryParams;
+ private final Map<String, RequestParamDef> requestParamDefs;
Route()
{
@@ -65,7 +67,7 @@
this.segments = new LinkedHashMap<String, List<SegmentRoute>>();
this.patterns = new ArrayList<PatternRoute>();
this.routeParameters = new HashMap<QualifiedName, String>();
- this.queryParams = new HashMap<QualifiedName, String>();
+ this.requestParamDefs = new HashMap<String, RequestParamDef>();
}
/**
@@ -195,12 +197,41 @@
/**
* @param path the path
+ * @param requestParams the query parameters
* @return null or the parameters when it matches
*/
- final Map<QualifiedName, String> route(String path)
+ final Map<QualifiedName, String> route(String path, Map<String, String[]>
requestParams)
{
Map<QualifiedName, String> ret = null;
+ // Check request parameters
+ Map<QualifiedName, String> routeRequestParams = Collections.emptyMap();
+ if (requestParamDefs.size() > 0)
+ {
+ for (RequestParamDef requestParamDef : requestParamDefs.values())
+ {
+ String[] values = requestParams.get(requestParamDef.getMatchName());
+ if (values != null && values.length > 0)
+ {
+ String value = values[0];
+ if (value != null)
+ {
+ Matcher matcher = requestParamDef.matchValue.matcher(value);
+ if (matcher.matches())
+ {
+ if (routeRequestParams.isEmpty())
+ {
+ routeRequestParams = new HashMap<QualifiedName, String>();
+ }
+ routeRequestParams.put(requestParamDef.getName(), value);
+ continue;
+ }
+ }
+ }
+ return null;
+ }
+ }
+
// Anything that does not begin with '/' returns null
if (path.length() > 0 && path.charAt(0) == '/')
{
@@ -242,7 +273,7 @@
for (SegmentRoute route : routes)
{
// Delegate the process to the next route
- Map<QualifiedName, String> response = route.route(nextPath);
+ Map<QualifiedName, String> response = route.route(nextPath,
requestParams);
// If we do have a response we return it
if (response != null)
@@ -277,7 +308,7 @@
}
// Delegate to next route
- Map<QualifiedName, String> response = route.route(nextPath);
+ Map<QualifiedName, String> response = route.route(nextPath,
requestParams);
// If we do have a response we return it
if (response != null)
@@ -310,6 +341,16 @@
}
}
}
+ if (routeRequestParams.size() > 0)
+ {
+ for (Map.Entry<QualifiedName, String> entry :
routeRequestParams.entrySet())
+ {
+ if (!ret.containsKey(entry.getKey()))
+ {
+ ret.put(entry.getKey(), entry.getValue());
+ }
+ }
+ }
}
}
@@ -389,6 +430,11 @@
//
route.terminal = true;
route.routeParameters.putAll(descriptor.getParameters());
+ for (RequestParamDescriptor requestParamDescriptor :
descriptor.getRequestParams().values())
+ {
+ RequestParamDef requestParamDef = new RequestParamDef(requestParamDescriptor);
+ route.requestParamDefs.put(requestParamDef.getMatchName(), requestParamDef);
+ }
//
for (RouteDescriptor childDescriptor : descriptor.getChildren())
@@ -471,13 +517,13 @@
{
List<QualifiedName> parameterNames = new
ArrayList<QualifiedName>();
PatternBuilder builder = new PatternBuilder();
- builder.appendExpression("^");
+ builder.expr("^");
List<String> chunks = new ArrayList<String>();
List<Pattern> parameterPatterns = new ArrayList<Pattern>();
int previous = 0;
for (int i = 0;i < start.size();i++)
{
- builder.append(path, previous, start.get(i));
+ builder.litteral(path, previous, start.get(i));
chunks.add(path.substring(previous, start.get(i)));
String parameterDef = path.substring(start.get(i) + 1, end.get(i));
int colon = parameterDef.indexOf(':');
@@ -510,14 +556,14 @@
//
- builder.appendExpression("(");
- builder.appendExpression(regex);
- builder.appendExpression(")");
+ builder.expr("(");
+ builder.expr(regex);
+ builder.expr(")");
parameterNames.add(parameterQName);
parameterPatterns.add(Pattern.compile("^" + regex +
"$"));
previous = end.get(i) + 1;
}
- builder.append(path, previous, pos);
+ builder.litteral(path, previous, pos);
chunks.add(path.substring(previous, pos));
// Julien : should the pattern end with a $ ?????? I don't see that for
now
// we need to figure out clearly
Modified:
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/Router.java
===================================================================
---
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/Router.java 2010-09-13
06:48:21 UTC (rev 4163)
+++
portal/branches/navcontroller/component/web/controller/src/main/java/org/exoplatform/web/controller/router/Router.java 2010-09-13
08:08:14 UTC (rev 4164)
@@ -24,7 +24,7 @@
import org.exoplatform.web.controller.metadata.RouterDescriptor;
import java.io.IOException;
-import java.util.HashMap;
+import java.util.Collections;
import java.util.Map;
/**
@@ -58,8 +58,13 @@
return root.render(parameters);
}
- public Map<QualifiedName, String> process(String path) throws IOException
+ public Map<QualifiedName, String> route(String path) throws IOException
{
- return root.route(path);
+ return route(path, Collections.<String, String[]>emptyMap());
}
+
+ public Map<QualifiedName, String> route(String path, Map<String, String[]>
queryParams) throws IOException
+ {
+ return root.route(path, queryParams);
+ }
}
Modified:
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestHierarchy.java
===================================================================
---
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestHierarchy.java 2010-09-13
06:48:21 UTC (rev 4163)
+++
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestHierarchy.java 2010-09-13
08:08:14 UTC (rev 4164)
@@ -45,12 +45,12 @@
Router router = new Router(new RouterDescriptor().addRoute(descriptor));
//
- assertEquals(Collections.singletonMap(new QualifiedName("foo"),
"bar"), router.process("/a"));
+ assertEquals(Collections.singletonMap(new QualifiedName("foo"),
"bar"), router.route("/a"));
//
Map<QualifiedName, String> expected = new HashMap<QualifiedName,
String>();
expected.put(new QualifiedName("foo"), "bar");
expected.put(new QualifiedName("juu"), "daa");
- assertEquals(expected, router.process("/a/b"));
+ assertEquals(expected, router.route("/a/b"));
}
}
Modified:
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestMatch.java
===================================================================
---
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestMatch.java 2010-09-13
06:48:21 UTC (rev 4163)
+++
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestMatch.java 2010-09-13
08:08:14 UTC (rev 4164)
@@ -41,16 +41,16 @@
Router router = new Router(routerMD);
//
- assertNull(router.process(""));
+ assertNull(router.route(""));
//
- assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.process("/"));
+ assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.route("/"));
//
- assertNull(router.process("/a"));
+ assertNull(router.route("/a"));
//
- assertNull(router.process("a"));
+ assertNull(router.route("a"));
}
public void testA() throws Exception
@@ -60,31 +60,31 @@
Router router = new Router(routerMD);
//
- assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.process("/a"));
+ assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.route("/a"));
//
- assertNull(router.process("a"));
+ assertNull(router.route("a"));
//
- assertNull(router.process("a/"));
+ assertNull(router.route("a/"));
//
- assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.process("/a/"));
+ assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.route("/a/"));
//
- assertNull(router.process(""));
+ assertNull(router.route(""));
//
- assertNull(router.process("/"));
+ assertNull(router.route("/"));
//
- assertNull(router.process("/b"));
+ assertNull(router.route("/b"));
//
- assertNull(router.process("b"));
+ assertNull(router.route("b"));
//
- assertNull(router.process("/a/b"));
+ assertNull(router.route("/a/b"));
}
public void testAB() throws Exception
@@ -94,31 +94,31 @@
Router router = new Router( routerMD);
//
- assertNull(router.process("a/b"));
+ assertNull(router.route("a/b"));
//
- assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.process("/a/b"));
+ assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.route("/a/b"));
//
- assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.process("/a/b/"));
+ assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.route("/a/b/"));
//
- assertNull(router.process("a/b/"));
+ assertNull(router.route("a/b/"));
//
- assertNull(router.process(""));
+ assertNull(router.route(""));
//
- assertNull(router.process("/"));
+ assertNull(router.route("/"));
//
- assertNull(router.process("/b"));
+ assertNull(router.route("/b"));
//
- assertNull(router.process("b"));
+ assertNull(router.route("b"));
//
- assertNull(router.process("/a/b/c"));
+ assertNull(router.route("/a/b/c"));
}
public void testParameter() throws Exception
@@ -126,7 +126,7 @@
RouterDescriptor routerMD = new RouterDescriptor();
routerMD.addRoute(new RouteDescriptor("/{p}"));
Router router = new Router(routerMD);
- assertEquals(Collections.singletonMap(new QualifiedName("p"),
"a"), router.process(("/a")));
+ assertEquals(Collections.singletonMap(new QualifiedName("p"),
"a"), router.route(("/a")));
}
public void testParameterPropagationToDescendants() throws Exception
@@ -135,7 +135,7 @@
routerMD.addRoute(new RouteDescriptor("/").addParameter("p",
"a"));
routerMD.addRoute(new RouteDescriptor("/a"));
Router router = new Router(routerMD);
- assertEquals(Collections.singletonMap(new QualifiedName("p"),
"a"), router.process(("/a")));
+ assertEquals(Collections.singletonMap(new QualifiedName("p"),
"a"), router.route(("/a")));
}
public void testWildcardPattern() throws Exception
@@ -145,16 +145,16 @@
Router router = new Router(routerMD);
//
- assertEquals(Collections.singletonMap(new QualifiedName("p"),
""), router.process("/"));
+ assertEquals(Collections.singletonMap(new QualifiedName("p"),
""), router.route("/"));
//
- assertEquals(Collections.singletonMap(new QualifiedName("p"),
"a"), router.process("/a"));
+ assertEquals(Collections.singletonMap(new QualifiedName("p"),
"a"), router.route("/a"));
//
- assertNull(router.process(("a")));
+ assertNull(router.route(("a")));
//
- assertEquals(Collections.singletonMap(new QualifiedName("p"),
"a/b"), router.process("/a/b"));
+ assertEquals(Collections.singletonMap(new QualifiedName("p"),
"a/b"), router.route("/a/b"));
}
public void testSimplePattern() throws Exception
@@ -164,16 +164,16 @@
Router router = new Router(routerMD);
//
- assertEquals(Collections.singletonMap(new QualifiedName("p"),
"a"), router.process("/a"));
+ assertEquals(Collections.singletonMap(new QualifiedName("p"),
"a"), router.route("/a"));
//
- assertNull(router.process("a"));
+ assertNull(router.route("a"));
//
- assertNull(router.process("/ab"));
+ assertNull(router.route("/ab"));
//
- assertNull(router.process("ab"));
+ assertNull(router.route("ab"));
}
public void testPrecedence() throws Exception
@@ -184,16 +184,16 @@
Router router = new Router(routerMD);
//
- assertNull(router.process(("a")));
+ assertNull(router.route(("a")));
//
- assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.process("/a"));
+ assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.route("/a"));
//
- assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.process("/a/"));
+ assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.route("/a/"));
//
- assertEquals(Collections.singletonMap(new QualifiedName("p"),
"a"), router.process("/a/b"));
+ assertEquals(Collections.singletonMap(new QualifiedName("p"),
"a"), router.route("/a/b"));
}
public void testTwoRules1() throws Exception
@@ -204,8 +204,8 @@
Router router = new Router(routerMD);
//
- assertEquals(Collections.singletonMap(new QualifiedName("b"),
"b"), router.process("/a"));
- assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.process("/a/b"));
+ assertEquals(Collections.singletonMap(new QualifiedName("b"),
"b"), router.route("/a"));
+ assertEquals(Collections.<QualifiedName, String>emptyMap(),
router.route("/a/b"));
}
public void testTwoRules2() throws Exception
@@ -219,7 +219,7 @@
Map<QualifiedName, String> expectedParameters = new HashMap<QualifiedName,
String>();
expectedParameters.put(new QualifiedName("a"), "a");
expectedParameters.put(new QualifiedName("b"), "b");
- assertEquals(expectedParameters, router.process("/a"));
- assertEquals(Collections.singletonMap(new QualifiedName("a"),
"a"), router.process("/a/b"));
+ assertEquals(expectedParameters, router.route("/a"));
+ assertEquals(Collections.singletonMap(new QualifiedName("a"),
"a"), router.route("/a/b"));
}
}
Modified:
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestPortalConfiguration.java
===================================================================
---
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestPortalConfiguration.java 2010-09-13
06:48:21 UTC (rev 4163)
+++
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestPortalConfiguration.java 2010-09-13
08:08:14 UTC (rev 4164)
@@ -72,13 +72,13 @@
expectedParameters.put(new QualifiedName("gtn", "path"),
"");
//
- assertEquals(expectedParameters, router.process("/private/classic"));
+ assertEquals(expectedParameters, router.route("/private/classic"));
assertEquals("/private/classic", router.render(expectedParameters));
}
public void testPrivateClassicSlash() throws Exception
{
- router.process("/private/classic/");
+ router.route("/private/classic/");
Map<QualifiedName, String> expectedParameters = new HashMap<QualifiedName,
String>();
expectedParameters.put(new QualifiedName("gtn", "controller"),
"site");
expectedParameters.put(new QualifiedName("gtn", "sitename"),
"classic");
@@ -86,7 +86,7 @@
expectedParameters.put(new QualifiedName("gtn", "path"),
"/");
//
- assertEquals(expectedParameters, router.process("/private/classic/"));
+ assertEquals(expectedParameters, router.route("/private/classic/"));
assertEquals("/private/classic/", router.render(expectedParameters));
}
@@ -99,7 +99,7 @@
expectedParameters.put(new QualifiedName("gtn", "path"),
"/home");
//
- assertEquals(expectedParameters,
router.process("/private/classic/home"));
+ assertEquals(expectedParameters, router.route("/private/classic/home"));
assertEquals("/private/classic/home",
router.render(expectedParameters));
}
}
Added:
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestRequestParam.java
===================================================================
---
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestRequestParam.java
(rev 0)
+++
portal/branches/navcontroller/component/web/controller/src/test/java/org/exoplatform/web/controller/router/TestRequestParam.java 2010-09-13
08:08:14 UTC (rev 4164)
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.exoplatform.web.controller.router;
+
+import org.exoplatform.web.controller.QualifiedName;
+import org.exoplatform.web.controller.metadata.RouteDescriptor;
+import org.exoplatform.web.controller.metadata.RouterDescriptor;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
+ * @version $Revision$
+ */
+public class TestRequestParam extends AbstractTestController
+{
+
+ public void testRoot() throws Exception
+ {
+ RouterDescriptor descriptor = new RouterDescriptor();
+ descriptor.addRoute(new
RouteDescriptor("/").addRequestParam("foo", "a",
"a"));
+ Router router = new Router(descriptor);
+ assertNull(router.route("/"));
+ assertEquals(Collections.singletonMap(QualifiedName.parse("foo"),
"a"), router.route("/", Collections.singletonMap("a", new
String[]{"a"})));
+ }
+
+ public void testSegment() throws Exception
+ {
+ RouterDescriptor descriptor = new RouterDescriptor();
+ descriptor.addRoute(new
RouteDescriptor("/a").addRequestParam("foo", "a",
"a"));
+ Router router = new Router(descriptor);
+ assertNull(router.route("/a"));
+ assertEquals(Collections.singletonMap(QualifiedName.parse("foo"),
"a"), router.route("/a", Collections.singletonMap("a", new
String[]{"a"})));
+ }
+
+ public void testPrecedence() throws Exception
+ {
+ RouterDescriptor descriptor = new RouterDescriptor();
+ descriptor.addRoute(new
RouteDescriptor("/a").addRequestParam("foo", "a",
"a"));
+ descriptor.addRoute(new
RouteDescriptor("/a").addRequestParam("bar", "b",
"b"));
+ Router router = new Router(descriptor);
+ assertNull(router.route("/a"));
+ assertEquals(Collections.singletonMap(QualifiedName.parse("foo"),
"a"), router.route("/a", Collections.singletonMap("a", new
String[]{"a"})));
+ assertEquals(Collections.singletonMap(QualifiedName.parse("bar"),
"b"), router.route("/a", Collections.singletonMap("b", new
String[]{"b"})));
+ }
+
+ public void testInheritance() throws Exception
+ {
+ RouterDescriptor descriptor = new RouterDescriptor();
+ descriptor.addRoute(new
RouteDescriptor("/a").addRequestParam("foo", "a",
"a").addChild(new
RouteDescriptor("/b").addRequestParam("bar", "b",
"b")));
+ Router router = new Router(descriptor);
+ assertNull(router.route("/a"));
+ assertEquals(Collections.singletonMap(QualifiedName.parse("foo"),
"a"), router.route("/a", Collections.singletonMap("a", new
String[]{"a"})));
+ assertNull(router.route("/a/b"));
+ Map<String, String[]> requestParameters = new HashMap<String,
String[]>();
+ requestParameters.put("a", new String[]{"a"});
+ requestParameters.put("b", new String[]{"b"});
+ Map<QualifiedName, String> expectedParameters = new HashMap<QualifiedName,
String>();
+ expectedParameters.put(QualifiedName.parse("foo"), "a");
+ expectedParameters.put(QualifiedName.parse("bar"), "b");
+ assertEquals(expectedParameters, router.route("/a/b",
requestParameters));
+ }
+
+}