use of org.webpieces.router.impl.routers.MatchInfo in project webpieces by deanhiller.
the class ScopedRouteBuilderImpl method addStreamRoute.
@Override
public void addStreamRoute(Port port, HttpMethod method, String path, String controllerMethod, RouteId routeId) {
UrlPath p = new UrlPath(routerInfo, path);
RouteModuleInfo moduleInfo = CurrentRoutes.get();
RouteInfo routeInfo = new RouteInfo(moduleInfo, controllerMethod);
// MUST DO loadControllerIntoMeta HERE so stack trace has customer's line in it so he knows EXACTLY what
// he did wrong when reading the exception!!
MethodMetaAndController container = holder.getFinder().loadGenericController(resettingLogic.getInjector(), routeInfo);
MatchInfo matchInfo = createMatchInfo(p, port, method, holder.getUrlEncoding());
FStreamingRouter router = new FStreamingRouter(holder.getRouteInvoker2(), container.getLoadedController(), moduleInfo.getI18nBundleName(), matchInfo);
SvcProxyForContent svc = new SvcProxyForContent(holder.getSvcProxyLogic(), futureUtil);
RouterAndInfo routerAndInfo = new RouterAndInfo(router, routeInfo, container, svc);
newDynamicRoutes.add(routerAndInfo);
if (// if there is a routeId, then add the reverse mapping
routeId != null)
resettingLogic.getReverseRoutes().addRoute(routeId, router);
log.info("scope:'" + routerInfo + "' added content route=" + matchInfo + " method=" + routeInfo.getControllerMethodString());
}
use of org.webpieces.router.impl.routers.MatchInfo in project webpieces by deanhiller.
the class ContentTypeBuilderImpl method addRoute.
@Override
public void addRoute(String path, String controllerMethod) {
if (!controllerMethod.contains("."))
throw new IllegalArgumentException("controllerMethod must contain a . for the form Controller.method");
UrlPath p = new UrlPath(routerInfo, path);
RouteModuleInfo moduleInfo = CurrentRoutes.get();
RouteInfo routeInfo = new RouteInfo(moduleInfo, controllerMethod);
// MUST DO loadControllerIntoMeta HERE so stack trace has customer's line in it so he knows EXACTLY what
// he did wrong when reading the exception!!
BinderAndLoader container = holder.getFinder().loadContentController(resettingLogic.getInjector(), routeInfo);
MatchInfo matchInfo = createMatchInfo(p, Port.HTTPS, HttpMethod.POST, holder.getUrlEncoding());
LoadedController loadedController = container.getMetaAndController().getLoadedController();
FContentRouter router = new FContentRouter(holder.getRouteInvoker2(), loadedController, moduleInfo, matchInfo, container.getBinder());
SvcProxyForContent svc = new SvcProxyForContent(holder.getSvcProxyLogic(), futureUtil);
RouterAndInfo routerAndInfo = new RouterAndInfo(router, routeInfo, container.getMetaAndController(), svc);
newDynamicRoutes.add(routerAndInfo);
// There is no routeId...
// if(routeId != null) //if there is a routeId, then add the reverse mapping
// resettingLogic.getReverseRoutes().addRoute(routeId, router);
log.info("scope:'" + routerInfo + "' added content route=" + matchInfo + " method=" + routeInfo.getControllerMethodString());
}
use of org.webpieces.router.impl.routers.MatchInfo in project webpieces by deanhiller.
the class ContentTypeBuilderImpl method createMatchInfo.
private MatchInfo createMatchInfo(UrlPath urlPath, Port exposedPort, HttpMethod httpMethod, Charset urlEncoding) {
RegExResult result = RegExUtil.parsePath(urlPath.getSubPath());
Pattern patternToMatch = Pattern.compile(result.regExToMatch);
List<String> pathParamNames = result.argNames;
return new MatchInfo(urlPath, exposedPort, httpMethod, urlEncoding, patternToMatch, pathParamNames);
}
use of org.webpieces.router.impl.routers.MatchInfo in project webpieces by deanhiller.
the class ReverseRoutes method routeToUrl.
// for redirects
public UrlInfo routeToUrl(RouteId routeId, Method method, Map<String, Object> args, RequestContext ctx, HttpPort requestedPort) {
ReversableRouter routeMeta = get(routeId);
if (routeMeta == null)
throw new IllegalReturnValueException("Route=" + routeId + " returned from method='" + method + "' was not added in the RouterModules");
MatchInfo matchInfo = routeMeta.getMatchInfo();
if (!matchInfo.matchesMethod(HttpMethod.GET))
throw new IllegalReturnValueException("method='" + method + "' is trying to redirect to routeid=" + routeId + " but that route is not a GET method route and must be");
Map<String, String> keysToValues = reverseTranslator.formMap(method, matchInfo.getPathParamNames(), args);
Set<String> keySet = keysToValues.keySet();
List<String> argNames = matchInfo.getPathParamNames();
if (keySet.size() != argNames.size()) {
throw new IllegalReturnValueException("Method='" + method + "' returns a Redirect action with wrong number of arguments. args=" + keySet.size() + " when it should be size=" + argNames.size());
}
String path = matchInfo.getFullPath();
for (String name : argNames) {
String value = keysToValues.get(name);
if (value == null)
throw new IllegalArgumentException("Method='" + method + "' returns a Redirect that is missing argument key=" + name + " to form the url on the redirect");
path = path.replace("{" + name + "}", value);
}
PortAndIsSecure info = redirectFormation.calculateInfo(matchInfo, requestedPort, ctx.getRequest());
boolean isSecure = info.isSecure();
int port = info.getPort();
return new UrlInfo(isSecure, port, path);
}
Aggregations