package tc.oc.pgm.map.inject; import com.google.inject.Provides; import com.google.inject.assistedinject.FactoryModuleBuilder; import org.jdom2.Document; import org.jdom2.JDOMFactory; import org.jdom2.input.SAXBuilder; import org.jdom2.input.sax.SAXHandler; import org.jdom2.input.sax.SAXHandlerFactory; import tc.oc.api.docs.SemanticVersion; import tc.oc.api.docs.virtual.MapDoc; import tc.oc.commons.core.inject.HybridManifest; import tc.oc.pgm.MapModulesManifest; import tc.oc.pgm.features.FeatureDefinitionContext; import tc.oc.pgm.map.MapConfiguration; import tc.oc.pgm.map.MapDefinition; import tc.oc.pgm.map.MapDocument; import tc.oc.pgm.map.MapFilePreprocessor; import tc.oc.pgm.map.MapFolder; import tc.oc.pgm.map.MapLogger; import tc.oc.pgm.map.MapModule; import tc.oc.pgm.map.MapModuleContext; import tc.oc.pgm.map.MapProto; import tc.oc.pgm.map.MapRootParser; import tc.oc.pgm.map.PGMMap; import tc.oc.pgm.map.PGMMapConfiguration; import tc.oc.pgm.module.ModuleExceptionHandler; import tc.oc.pgm.utils.XMLUtils; import tc.oc.pgm.xml.BoundedJDOMFactory; import tc.oc.pgm.xml.BoundedSAXHandler; import tc.oc.pgm.xml.validate.ValidationContext; /** * Configuration related to {@link MapDefinition}s, {@link MapModule}s, and other map stuff. * * @see MapModulesManifest */ public class MapManifest extends HybridManifest { @Override protected void configure() { // Setup @MapScoped and bind MapDefinition as a seed object install(new MapInjectionScope().new Manifest()); final FactoryModuleBuilder fmb = new FactoryModuleBuilder(); install(fmb.build(MapFilePreprocessor.Factory.class)); install(fmb.build(MapLogger.Factory.class)); bind(SAXHandler.class).to(BoundedSAXHandler.class); bind(SAXHandlerFactory.class).toInstance(BoundedSAXHandler::new); bind(JDOMFactory.class).to(BoundedJDOMFactory.class); bind(PGMMap.Factory.class); bind(MapConfiguration.class).to(PGMMapConfiguration.class); bind(MapDoc.class).to(MapDocument.class); inSet(MapRootParser.class); bind(ValidationContext.class).to(FeatureDefinitionContext.class); bind(MapModuleContext.class).in(MapScoped.class); bind(ModuleExceptionHandler.class).to(MapModuleContext.class); expose(MapDefinition.class); expose(PGMMap.class); requestStaticInjection(XMLUtils.class); } @Provides SAXBuilder saxBuilder(SAXHandlerFactory saxHandlerFactory, JDOMFactory jdomFactory) { return new SAXBuilder(null, saxHandlerFactory, jdomFactory); } @Provides @MapScoped PGMMap pgmMap(MapDefinition map) { return (PGMMap) map; } @Provides @MapScoped MapFolder mapFolder(MapDefinition map) { return map.getFolder(); } @Provides @MapScoped MapLogger mapLogger(MapDefinition map) { return map.getLogger(); } @Provides @MapScoped @MapProto SemanticVersion mapProto(MapModuleContext context) { return context.getProto(); } @Provides @MapScoped Document xmlDocument(MapModuleContext context) { return context.xmlDocument(); } }