package tc.oc.pgm.match.inject; import java.util.Optional; import javax.annotation.Nullable; import com.google.inject.TypeLiteral; import tc.oc.commons.core.inject.InjectingFactory; import tc.oc.pgm.match.MatchModule; /** * Configures a {@link MatchModule} that loads for every match. * * The transforms bound in the superclass manifests can still * prevent the module from loading under certain conditions. */ public abstract class MatchModuleFixtureManifest<M extends MatchModule> extends MatchModuleManifest<M> { protected MatchModuleFixtureManifest() { this(null); } public MatchModuleFixtureManifest(@Nullable TypeLiteral<M> type) { super(type); } @Override protected void configure() { super.configure(); factory = new InjectingFactory<>(binder(), type); } private InjectingFactory<M> factory; protected boolean shouldLoad() { return true; } @Override protected Optional<M> provisionModuleWithoutFiltering() { return shouldLoad() ? Optional.of(factory.get()) : Optional.empty(); } }