/** * */ package de.devsurf.injection.guice.annotations.features; import java.lang.annotation.Annotation; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.inject.Singleton; import com.google.inject.Module; import de.devsurf.injection.guice.annotations.GuiceModule; import de.devsurf.injection.guice.install.BindingStage; import de.devsurf.injection.guice.install.bindjob.BindingJob; import de.devsurf.injection.guice.install.bindjob.ModuleBindingJob; import de.devsurf.injection.guice.scanner.features.BindingScannerFeature; @Singleton public class ModuleBindingFeature extends BindingScannerFeature { private Logger _logger = Logger.getLogger(ModuleBindingFeature.class.getName()); @Override public BindingStage accept(Class<Object> annotatedClass, Map<String, Annotation> annotations) { if (annotations.containsKey(GuiceModule.class.getName())) { GuiceModule module = (GuiceModule) annotations.get(GuiceModule.class.getName()); return module.stage(); } return BindingStage.IGNORE; } @Override public void process(final Class<Object> annotatedClass, Map<String, Annotation> annotations) { BindingJob job = new ModuleBindingJob(annotatedClass.getName()); if(!tracer.contains(job)){ if (_logger.isLoggable(Level.INFO)) { _logger.info("Installing Module: " + annotatedClass.getName()); } synchronized (_binder) { _binder.install((Module) injector.getInstance(annotatedClass)); } }else { if (_logger.isLoggable(Level.FINE)) { _logger.log(Level.FINE, "Ignoring BindingJob \"" + job.toString() + "\", because it was already bound.", new Exception("Ignoring BindingJob \"" + job.toString() + "\", because it was already bound.")); } else if (_logger.isLoggable(Level.INFO)) { _logger.log(Level.INFO, "Ignoring BindingJob \"" + job.toString() + "\", because it was already bound."); } } } }