/** * Copyright (c) 2013-2016, The SeedStack authors <http://seedstack.org> * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.seedstack.io.internal; import com.google.inject.AbstractModule; import com.google.inject.matcher.Matchers; import com.google.inject.name.Names; import org.seedstack.io.Parser; import org.seedstack.io.Parsers; import org.seedstack.io.Renderer; import org.seedstack.io.Renderers; import org.seedstack.io.spi.TemplateLoader; import java.util.List; import java.util.Map; import java.util.Map.Entry; class IOModule extends AbstractModule { private final List<TemplateLoader<?>> templateLoaders; private final Map<String, Class<Renderer>> mapRenderer; private final Map<String, Class<Parser>> mapParser; IOModule(List<TemplateLoader<?>> templateLoaders, Map<String, Class<Renderer>> mapRenderer, Map<String, Class<Parser>> mapParser) { this.templateLoaders = templateLoaders; this.mapRenderer = mapRenderer; this.mapParser = mapParser; } @Override protected void configure() { //--- RENDERERS // Bind the Renderers class Renderers renderers = new RenderersInternal(templateLoaders, mapRenderer); bind(Renderers.class).toInstance(renderers); // Bind all renderers for (Entry<String, Class<Renderer>> renderer : mapRenderer.entrySet()) { bind(Renderer.class).annotatedWith(Names.named(renderer.getKey())).to(renderer.getValue()); } // Bind the TypeListener for Render bindListener(Matchers.any(), new RendererTypeListener(renderers)); //--- PARSERS // Bind the Parsers class Parsers parsers = new ParsersInternal(templateLoaders, mapParser); bind(Parsers.class).toInstance(parsers); // Bind all parsers for (Entry<String, Class<Parser>> parser : mapParser.entrySet()) { bind(Parser.class).annotatedWith(Names.named(parser.getKey())).to(parser.getValue()); } // Bind the TypeListener for Parser bindListener(Matchers.any(), new ParserTypeListener(parsers)); } }