@Override public TemplateLibrary templateLibrary() { return this.manager.templateLibrary(); }
@Override public <T extends ResourceHandler> T getHandler(Class<? extends T> handlerClass) { ResourceTemplate template=templateLibrary().findByHandler(handlerClass); return this.manager.getHandler(handlerClass, template); }
@Override public void configure(List<Class<?>> handlerClasses,List<ResourceHandler> handlers) throws TemplateManagementServiceConfigurationException { TemplateManager manager= TemplateManager. builder(). withHandlerClasses(handlerClasses). withHandlers(handlers). build(); TemplateManagementService.this.updateState(manager); }
TemplateManager build() throws TemplateManagementServiceConfigurationException { try { MutableTemplateLibrary newLibrary=new MutableTemplateLibrary(); for(Class<?> handlerClass:handlerClasses) { if(!newLibrary.isHandlerRegistered(handlerClass)) { newLibrary.registerHandler(handlerClass); } } Builder<HandlerId, ResourceHandler> builder = ImmutableMap.<HandlerId, ResourceHandler>builder(); newLibrary.accept(new HandlerMapBuilder(builder,this.handlers)); return new TemplateManager(new ImmutableTemplateLibrary(newLibrary), builder.build()); } catch (TemplateCreationException e) { throw new TemplateManagementServiceConfigurationException(e); } catch (ResourceHandlerInstantiationException e) { throw new TemplateManagementServiceConfigurationException(e); } }
private void updateState(TemplateManager manager) { if(!this.state.compareAndSet(this.state.get(),new ConfiguredServiceState(manager))) { throw new IllegalStateException("Template management service is already configured"); } this.resourceFactory.useTemplates(manager.templateLibrary()); }