protected String createInfoMessage() { return "Madvoc configured in " + elapsed + " ms. Total actions: " + actionsManager.getActionsCount(); }
/** * Collects all action runtime configurations. */ protected void collectActionRuntimes() { actions = actionsManager.getAllActionRuntimes(); actions.sort(Comparator.comparing(ActionRuntime::getActionPath)); }
/** * Lookups value as an alias and, if not found, as a default alias. */ protected String lookupAlias(final String alias) { String value = actionsManager.lookupPathAlias(alias); if (value == null) { ActionRuntime cfg = actionsManager.lookup(alias); if (cfg != null) { value = cfg.getActionPath(); } } return value; }
/** * Registers action with provided action class and method name. * @see #registerAction(Class, Method, ActionDefinition) */ public ActionRuntime registerAction(final Class actionClass, final String actionMethodName, final ActionDefinition actionDefinition) { Method actionMethod = resolveActionMethod(actionClass, actionMethodName); return registerAction(actionClass, actionMethod, actionDefinition); }
public ActionRuntime lookup(final String method, final String[] pathChunks) { while (true) { final ActionRuntime actionRuntime = _lookup(method, pathChunks); if (actionRuntime != null) { return actionRuntime; } if (actionsManager.isStrictRoutePaths()) { return null; } // special case final String lastPath = pathChunks[pathChunks.length - 1]; final int lastNdx = lastPath.lastIndexOf('.'); if (lastNdx == -1) { return null; } final String pathExtension = lastPath.substring(lastNdx + 1); if (StringUtil.equalsOne(pathExtension, actionsManager.getPathExtensionsToStrip()) == -1) { return null; } pathChunks[pathChunks.length - 1] = lastPath.substring(0, lastNdx); } }
rootPackages.addRootPackageOf(this.getClass()); actionsManager.registerAction(ReAction.class, "wild1", null); actionsManager.registerAction(ReAction.class, "wild2", null); ActionRuntime cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/ild123cat")); assertNull(cfg); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/wild123ca")); assertNull(cfg); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/wild123cat.html")); assertNotNull(cfg); assertEquals(ReAction.class, cfg.getActionClass()); assertEquals("id", chunk.pathMacros().names()[0]); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/wild123dog.html")); assertNull(cfg); cfg = actionsManager.lookup("POST", MadvocUtil.splitPathToChunks("/re/wild123dog.html")); assertNotNull(cfg); assertEquals(ReAction.class, cfg.getActionClass()); assertEquals("id", chunk.pathMacros().names()[0]); assertEquals(2, actionsManager.getActionsCount());
@Test void testMacrosDups() { WebApp webapp = new WebApp(); webapp.start(); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); webapp.madvocContainer().lookupComponent(RootPackages.class).addRootPackageOf(this.getClass()); actionsManager.setPathMacroClass(RegExpPathMacros.class); actionsManager.registerAction(ReAction.class, "duplo2", null); actionsManager.registerAction(ReAction.class, "duplo1", null); ActionRuntime cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/duplo/123")); assertNotNull(cfg); assertEquals(ReAction.class, cfg.getActionClass()); assertEquals("/re/duplo/{id:^[0-9]+}", cfg.getActionPath()); RouteChunk chunk = cfg.getRouteChunk(); assertEquals(1, chunk.pathMacros().macrosCount()); assertEquals("id", chunk.pathMacros().names()[0]); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/duplo/aaa")); assertNotNull(cfg); assertEquals(ReAction.class, cfg.getActionClass()); assertEquals("/re/duplo/{sid}", cfg.getActionPath()); chunk = cfg.getRouteChunk(); assertEquals(1, chunk.pathMacros().macrosCount()); assertEquals("sid", chunk.pathMacros().names()[0]); assertEquals(2, actionsManager.getActionsCount()); }
@Test void testAlias3() { WebApp webapp = new WebApp(); webapp.start(); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); actionsManager.registerAction(BooAction.class, "foo2", null); assertEquals("/boo.foo2.xxx", actionsManager.lookup(BooAction.class.getName() + "#foo2").getActionPath()); }
public synchronized ActionRuntime registerAction(Class actionClass, final Method actionMethod, ActionDefinition actionDefinition) { if (proxettaSupplier == null) { return super.registerAction(actionClass, actionMethod, actionDefinition); return super.registerAction(actionClass, actionMethod, actionDefinition);
@Test void testManualAction_asComponent() { WebApp webApp = WebApp .createWebApp() .registerComponent(ManualRegistration.class) .start(); ActionsManager actionsManager = webApp.madvocContainer().requestComponent(ActionsManager.class); assertEquals(2, actionsManager.getActionsCount()); ActionRuntime actionRuntime = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/hello")); assertNotNull(actionRuntime); assertEquals(BooAction.class, actionRuntime.getActionClass()); assertEquals("foo1", actionRuntime.getActionClassMethod().getName()); actionRuntime = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/world")); assertNotNull(actionRuntime); assertEquals(BooAction.class, actionRuntime.getActionClass()); assertEquals("foo2", actionRuntime.getActionClassMethod().getName()); }
@Test void testAlias2() { WebApp webapp = new WebApp(); webapp.start(); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); actionsManager.registerAction(BooAction.class, "foo2", null); actionsManager.registerPathAlias("/boo.foo2.xxx", "/aliased"); ResultMapper resultMapper = webapp.madvocContainer().lookupComponent(ResultMapper.class); ActionMethodParser actionMethodParser = webapp.madvocContainer().lookupComponent(ActionMethodParser.class); ActionRuntime cfg = parse(actionMethodParser, "fixtures.tst.BooAction#foo2"); String path = cfg.getActionPath(); String resultPath = resultMapper.resolveResultPathString(path, null); assertEquals("/aliased", resultPath); }
final List<ActionRuntime> actions = actionsManager.getAllActionRuntimes(); final Map<String, String> aliases = actionsManager.getAllAliases();
@Test void testActionPathMacros3() { WebApp webapp = new WebApp(); webapp.start(); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); actionsManager.registerAction(FooAction.class, "one", new ActionDefinition("/yyy-{one}")); actionsManager.registerAction(FooAction.class, "two", new ActionDefinition("/xxx-{two}")); assertEquals(2, actionsManager.getActionsCount()); ActionRuntime actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/foo")); assertNull(actionRuntime); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/yyy-111")); assertEquals("one", actionRuntime.getActionClassMethod().getName()); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/xxx-222")); assertEquals("two", actionRuntime.getActionClassMethod().getName()); try { actionsManager.registerAction(FooAction.class, "two", new ActionDefinition("/xxx-{two}")); fail("error"); } catch (Exception ex) { // ignore } }
@Test void testActionPathMacrosRegexp() { WebApp webapp = new WebApp(); webapp.start(); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); actionsManager.setPathMacroClass(RegExpPathMacros.class); actionsManager.registerAction(FooAction.class, "one", new ActionDefinition("/{one:[ab]+}")); ActionRuntime actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/a")); assertNotNull(actionRuntime); actionRuntime = actionsManager.routes.lookup(null, MadvocUtil.splitPathToChunks("/ac")); assertNull(actionRuntime); }
actionClassMethod = actionsManager.resolveActionMethod(actionClass, actionMethodString); ); actionsManager.registerActionRuntime(actionRuntime); actionsManager.registerPathAlias(alias, actionPath);
ActionRuntime actionRuntime = actionsManager.lookup(httpMethod, actionPathChunks); actionPath = actionPath.substring(0, actionPath.length() - (welcomeFile.length() - 1)); actionPathChunks = MadvocUtil.splitPathToChunks(actionPath); actionRuntime = actionsManager.lookup(httpMethod, actionPathChunks);
/** * Detects if alias is defined in annotation and registers it if so. */ protected void detectAndRegisterAlias(final ActionAnnotationValues annotationValues, final ActionDefinition actionDefinition) { final String alias = parseMethodAlias(annotationValues); if (alias != null) { String aliasPath = StringUtil.cutToIndexOf(actionDefinition.actionPath(), StringPool.HASH); actionsManager.registerPathAlias(alias, aliasPath); } }
@Test void testMethod() { WebApp webapp = new WebApp(); webapp.start(); ActionMethodParser actionMethodParser = webapp.madvocContainer().lookupComponent(ActionMethodParser.class); ActionRuntime cfg = parse(actionMethodParser, "fixtures.tst.BooAction#foo"); assertNotNull(cfg); assertEquals(BooAction.class, cfg.getActionClass()); assertEquals("/boo.foo", cfg.getActionPath()); cfg = parse(actionMethodParser, "fixtures.tst.BooAction#foo1"); assertEquals("/boo.xxx", cfg.getActionPath()); cfg = parse(actionMethodParser, "fixtures.tst.BooAction#foo2"); assertEquals("/boo.foo2.xxx", cfg.getActionPath()); cfg = parse(actionMethodParser, "fixtures.tst.BooAction#foo3"); assertEquals("/boo", cfg.getActionPath()); cfg = parse(actionMethodParser, "fixtures.tst.BooAction#foo4"); assertEquals("/xxx", cfg.getActionPath()); assertNull(cfg.getActionMethod()); cfg = parse(actionMethodParser, "fixtures.tst.BooAction#foo41"); assertEquals("/xxx", cfg.getActionPath()); assertEquals("DELETE", cfg.getActionMethod()); cfg = parse(actionMethodParser, "fixtures.tst.BooAction#foo5"); assertEquals("/xxx.html", cfg.getActionPath()); assertEquals("POST", cfg.getActionMethod()); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); assertEquals("/xxx.html", actionsManager.lookupPathAlias("dude")); }
protected void collectActionConfigs() { actions = actionsManager.getAllActionConfigurations(); Collections.sort(actions, new Comparator<ActionConfig>() { public int compare(ActionConfig a1, ActionConfig a2) { return a1.actionPath.compareTo(a2.actionPath); } }); }
rootPackages.addRootPackageOf(this.getClass()); actionsManager.registerAction(ReAction.class, "macro", null); ActionRuntime cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/user/173/macro.html")); actionsManager.registerAction(ReAction.class, "macro2", null); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/user/image/173/png/macro2.html")); assertNull(chunk.pathMacros()); actionsManager.registerAction(ReAction.class, "macro3", null); cfg = actionsManager.lookup("POST", MadvocUtil.splitPathToChunks("/re/users/173/macro3")); assertEquals("id", chunk.pathMacros().names()[0]); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/user/index.html")); assertNull(cfg); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/user/index/reindex/macro.html")); assertNull(cfg); cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/re/users/173/macro3")); assertNull(cfg); assertEquals(3, actionsManager.getActionsCount());