/** * Returns existing component. Throws an exception if component is not registered. */ public <T> T requestComponent(final Class<T> component) { T existingComponent = lookupComponent(component); if (existingComponent == null) { throw new MadvocException("Madvoc component not found: " + component.getName()); } return existingComponent; }
/** * Filter initialization. */ @Override public void init(final FilterConfig filterConfig) throws ServletException { final ServletContext servletContext = filterConfig.getServletContext(); madvoc = Madvoc.get(servletContext); if (madvoc != null) { log = LoggerFactory.getLogger(this.getClass()); madvocController = madvoc.webapp().madvocContainer().requestComponent(MadvocController.class); return; } final WebApp webApp = WebApp.get(servletContext); if (webApp != null) { log = LoggerFactory.getLogger(this.getClass()); madvocController = webApp.madvocContainer().requestComponent(MadvocController.class); return; } throw new ServletException("Neither Madvoc or WebApp found! Use MadvocContextListener to create Madvoc or " + "WebApp#withServletContext() to make it available."); }
public WebApp() { madvocContainer = new MadvocContainer(); madvocContainer.registerComponentInstance(madvocContainer); }
/** * Registers component using its {@link #resolveBaseComponentName(Class) base name}. * Previously defined component will be removed. * * @see #registerComponentInstance(Object) */ public void registerComponent(final Class component) { String name = resolveBaseComponentName(component); registerComponent(name, component); }
@Override protected void registerMadvocComponents() { super.registerMadvocComponents(); madvocContainer.registerComponentInstance(PETITE_CONTAINER_NAME, petiteContainer); madvocContainer.registerComponent(PetiteMadvocController.class); madvocContainer.registerComponent(PetiteFilterManager.class); madvocContainer.registerComponent(PetiteInterceptorManager.class); madvocContainer.registerComponent(PetiteResultsManager.class); }
madvocContainer.defineParams(params); madvocContainer.defineParams(props); madvocComponent -> madvocContainer.registerComponent(madvocComponent.type(), madvocComponent.consumer())); madvocComponents = null; madvocContainer.fireEvent(Init.class); madvocContainer.fireEvent(Start.class); madvocContainer.registerComponentInstance(madvocRouter); madvocContainer.fireEvent(Ready.class);
/** * Shutdows the web application. Triggers the STOP event. * @see MadvocComponentLifecycle */ public void shutdown() { log.info("Madvoc shutting down..."); madvocContainer.fireEvent(MadvocComponentLifecycle.Stop.class); }
/** * Registers new Madvoc component. */ protected void acceptMadvocComponentClass(final Class componentClass) { if (componentClass == null) { return; } if (!checkClass(componentClass)) { return; } madvocComponents.add(() -> madvocContainer.registerComponent(componentClass)); }
@Test void testInjection() { WebApp webapp = new WebApp(); webapp.start(); PetiteContainer madpc = webapp.madvocContainer().getPetiteContainer(); String baseName = StringUtil.uncapitalize(FooBean.class.getSimpleName()); madpc.defineParameter("foo", "1"); madpc.defineParameter(baseName + ".integer", "173"); madpc.defineParameter(baseName + ".string", "jodd"); madpc.defineParameter(baseName, "huh"); ParamsScope paramsScope = new ParamsScope(); BeanUtil.declared.setProperty(paramsScope, "madpc", madpc); FooBean fooBean = new FooBean(); paramsScope.inject(new Targets(fooBean, null)); assertEquals(173, fooBean.getInteger().intValue()); assertEquals("jodd", fooBean.getString()); } }
/** * Registers default Madvoc components. */ protected void registerMadvocComponents() { if (madvocContainer == null) { throw new MadvocException("Madvoc WebApp not initialized."); } log.debug("Registering Madvoc WebApp components"); madvocContainer.registerComponent(MadvocEncoding.class); madvocContainer.registerComponentInstance(new ServletContextProvider(servletContext)); madvocContainer.registerComponent(ActionConfigManager.class); madvocContainer.registerComponent(ActionMethodParamNameResolver.class); madvocContainer.registerComponent(ActionMethodParser.class); madvocContainer.registerComponent(ActionPathRewriter.class); madvocContainer.registerComponent(ActionsManager.class); madvocContainer.registerComponent(ContextInjectorComponent.class); madvocContainer.registerComponent(InterceptorsManager.class); madvocContainer.registerComponent(FiltersManager.class); madvocContainer.registerComponent(MadvocController.class); madvocContainer.registerComponent(RootPackages.class); madvocContainer.registerComponent(ResultsManager.class); madvocContainer.registerComponent(ResultMapper.class); madvocContainer.registerComponent(ScopeResolver.class); madvocContainer.registerComponent(ScopeDataInspector.class); madvocContainer.registerComponent(AsyncActionExecutor.class); madvocContainer.registerComponent(FileUploader.class); }
public <T> void registerComponent(final Class<T> component, final Consumer<T> consumer) { String name = resolveBaseComponentName(component); registerComponent(name, component, consumer); }
/** * Returns existing component. Throws an exception if component is not registered. */ public <T> T requestComponent(final String componentName) { T existingComponent = (T) lookupComponent(componentName); if (existingComponent == null) { throw new MadvocException("Madvoc component not found: " + componentName); } return existingComponent; }
@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()); }
/** * Configure defaults. */ protected void configureDefaults() { final ActionConfigManager actionConfigManager = madvocContainer.lookupComponent(ActionConfigManager.class); actionConfigManager.registerAnnotation(Action.class); actionConfigManager.registerAnnotation(RestAction.class); }
ActionsManager actionsManager = webApp.madvocContainer().requestComponent(ActionsManager.class);
/** * Configures a component. While the signature is the same as for {@link #registerComponent(Class, Consumer)} * this method does not register component, just operates on an already registered one. */ public <T> WebApp withRegisteredComponent(final Class<T> madvocComponent, final Consumer<T> componentConsumer) { if (componentConfigs == null) { // component is already configured final T component = madvocContainer.lookupComponent(madvocComponent); if (component == null) { throw new MadvocException("Component not found: " + madvocComponent.getName()); } componentConsumer.accept(component); } else { componentConfigs.add(madvocContainer -> { final T component = madvocContainer.lookupComponent(madvocComponent); if (component == null) { throw new MadvocException("Component not found: " + madvocComponent.getName()); } componentConsumer.accept(component); }); } return this; }
/** * Fires the Madvoc event. * Warning: since event handlers may register more handlers, we * must collect first the list of components that matches the type * and then to execute. */ public void fireEvent(final Class listenerType) { final Set<String> existing = new HashSet<>(); while (true) { MutableInteger newCount = MutableInteger.of(0); madpc.forEachBeanType(listenerType, name -> { if (existing.add(name)) { // name not found, fire! newCount.value++; Object listener = lookupComponent(name); if (listener != null) { MadvocComponentLifecycle.invoke(listener, listenerType); } } }); if (newCount.value == 0) { break; } } }
final ActionsManager actionsManager = webApp.madvocContainer().lookupComponent(ActionsManager.class); final List<ActionRuntime> actions = actionsManager.getAllActionRuntimes(); final Map<String, String> aliases = actionsManager.getAllAliases();
@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); }
@Test void testZqq() { WebApp webapp = new WebApp(); webapp.start(); ActionsManager actionsManager = webapp.madvocContainer().lookupComponent(ActionsManager.class); RootPackages rootPackages = webapp.madvocContainer().lookupComponent(RootPackages.class); rootPackages.addRootPackageOf(this.getClass()); actionsManager.registerAction(ReAction.class, "zqq1", null); actionsManager.registerAction(ReAction.class, "zqq2", null); ActionRuntime cfg = actionsManager.lookup("GET", MadvocUtil.splitPathToChunks("/config/dba.delete_multi.do")); assertNotNull(cfg); assertEquals("/{entityName}/dba.delete_multi.do", cfg.getActionPath()); }