ProjectAres/PGM/src/main/java/tc/oc/pgm/map/ProvisionAtParseTime.java

51 lines
1.4 KiB
Java

package tc.oc.pgm.map;
import javax.inject.Provider;
import javax.inject.Singleton;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;
import com.google.inject.binder.ScopedBindingBuilder;
import tc.oc.commons.core.inject.Injection;
import tc.oc.commons.core.inject.KeyedManifest;
import tc.oc.pgm.map.inject.MapBinders;
import tc.oc.pgm.map.inject.MapScoped;
import tc.oc.pgm.xml.InvalidXMLException;
/**
* Registers a {@link MapRootParser} that just provisions the given {@link Key}
* in its {@link MapRootParser#parse()} method.
*
* This is roughly equivalent to {@link ScopedBindingBuilder#asEagerSingleton()},
* but for {@link MapScoped} instead of {@link Singleton}.
*/
public class ProvisionAtParseTime<T> extends KeyedManifest implements MapBinders {
private final Key<T> key;
public ProvisionAtParseTime(Class<T> type) {
this(Key.get(type));
}
public ProvisionAtParseTime(TypeLiteral<T> type) {
this(Key.get(type));
}
public ProvisionAtParseTime(Key<T> key) {
this.key = key;
}
@Override
protected Object manifestKey() {
return key;
}
@Override
protected void configure() {
final Provider<T> provider = getProvider(key);
rootParsers().addBinding().toInstance(
() -> Injection.unwrappingExceptions(InvalidXMLException.class, provider)
);
}
}