public class ConfigurationBuilderImpl extends Object implements ConfigurationBuilder
Modifier and Type | Field and Description |
---|---|
static String |
IMPORT |
static String |
INIT |
Modifier and Type | Method and Description |
---|---|
void |
addConfiguration(Configuration conf)
Add all configuration parameters from the given Configuration object.
|
void |
bind(Node key,
Node value)
Bind classes to each other, based on their full class names; alternatively,
bound a NamedParameter configuration option to a configuration value.
|
<T> void |
bind(String key,
String value)
Bind classes to each other, based on their full class names; alternatively,
bound a NamedParameter configuration option to a configuration value.
|
<T> void |
bindConstructor(ClassNode<T> k,
ClassNode<? extends ExternalConstructor<? extends T>> v)
Register an ExternalConstructor implementation with Tang.
|
<T> void |
bindImplementation(ClassNode<T> n,
ClassNode<? extends T> m) |
<T> void |
bindList(NamedParameterNode<List<T>> iface,
List implList)
Bind an list of implementations(Class or String) to an given NamedParameter.
|
void |
bindList(String iface,
List implList) |
<T> void |
bindParameter(NamedParameterNode<T> name,
String value) |
<T> void |
bindSetEntry(NamedParameterNode<Set<T>> iface,
Node impl) |
<T> void |
bindSetEntry(NamedParameterNode<Set<T>> iface,
String impl) |
void |
bindSetEntry(String iface,
Node impl) |
void |
bindSetEntry(String iface,
String impl) |
ConfigurationImpl |
build()
Produce an immutable Configuration object that contains the current
bindings and ClassHierarchy of this ConfigurationBuilder.
|
String |
classPrettyDefaultString(String longName)
Pretty print the default implementation / value of the provided class / NamedParameter.
|
String |
classPrettyDescriptionString(String fullName)
Pretty print the human readable documentation of the provided class / NamedParameter.
|
boolean |
equals(Object o) |
ClassHierarchy |
getClassHierarchy()
Each ConfigurationBuilder instance is associated with a ClassHierarchy.
|
int |
hashCode() |
void |
registerLegacyConstructor(ClassNode<?> cn,
ClassNode<?>... args)
Force Tang to treat the specified constructor as though it had an @Inject
annotation.
|
void |
registerLegacyConstructor(ClassNode<?> c,
ConstructorArg... args)
Force Tang to treat the specified constructor as though it had an @Inject
annotation.
|
void |
registerLegacyConstructor(String s,
String... args)
Force Tang to treat the specified constructor as though it had an @Inject
annotation.
|
public static final String IMPORT
public static final String INIT
public void addConfiguration(Configuration conf) throws BindException
ConfigurationBuilder
addConfiguration
in interface ConfigurationBuilder
conf
- the configuration to be addedBindException
public ClassHierarchy getClassHierarchy()
ConfigurationBuilder
getClassHierarchy
in interface ConfigurationBuilder
public void registerLegacyConstructor(ClassNode<?> c, ConstructorArg... args) throws BindException
ConfigurationBuilder
This method takes ClassNode and ConstructorArg objects. Like all of the methods in this API, these objects must come from the ClassHierarchy instance returned by getClassHierarchy().
registerLegacyConstructor
in interface ConfigurationBuilder
c
- The class the constructor instantiates.args
- The parsed ConstructorArg objects corresponding to the types of the arguments taken by the constructor,
in declaration order.BindException
- if the constructor does not exist, or if it has already been bound as a legacy constructor.public void registerLegacyConstructor(String s, String... args) throws BindException
ConfigurationBuilder
registerLegacyConstructor
in interface ConfigurationBuilder
s
- The full name of the class the constructor instantiates.args
- The full names of the types of the arguments taken by the constructor, in declaration order.BindException
- if the constructor does not exist, or if it has already been bound as a legacy constructor.public void registerLegacyConstructor(ClassNode<?> cn, ClassNode<?>... args) throws BindException
ConfigurationBuilder
This method takes ClassNode objects. Like all of the methods in this API, the ClassNode objects must come from the ClassHierarchy instance returned by getClassHierarchy().
registerLegacyConstructor
in interface ConfigurationBuilder
cn
- The class the constructor instantiates.args
- The types of the arguments taken by the constructor, in declaration order.BindException
- if the constructor does not exist, or if it has already been bound as a legacy constructor.public <T> void bind(String key, String value) throws BindException
ConfigurationBuilder
bind
in interface ConfigurationBuilder
T
- a typekey
- The full name of the interface that should resolve to impl,
or the NamedParameter to be set.value
- The full name of the implementation that will be used in
place of impl, or the value the NamedParameter should be set to.BindException
- If (In the case of interfaces and implementations)
the underlying ClassHierarchy does not recognise iface and
impl as known, valid classes, or if impl is not a in
implementation of iface, or (in the case of NamedParameters
and values) if iface is not a NamedParameter, or if impl
fails to parse as the type the iface expects.public void bind(Node key, Node value) throws BindException
ConfigurationBuilder
This method takes Node objects. Like all of the methods in this API, these objects must come from the ClassHierarchy instance returned by getClassHierarchy().
bind
in interface ConfigurationBuilder
key
- The interface / NamedParameter to be bound.value
- The implementation / value iface should be set to.BindException
- if there is a type checking error
See bind(String,String)
for a more complete description.public <T> void bindImplementation(ClassNode<T> n, ClassNode<? extends T> m) throws BindException
BindException
public <T> void bindParameter(NamedParameterNode<T> name, String value) throws BindException
BindException
public void bindSetEntry(String iface, String impl) throws BindException
bindSetEntry
in interface ConfigurationBuilder
BindException
public void bindSetEntry(String iface, Node impl) throws BindException
bindSetEntry
in interface ConfigurationBuilder
BindException
public <T> void bindSetEntry(NamedParameterNode<Set<T>> iface, String impl) throws BindException
bindSetEntry
in interface ConfigurationBuilder
BindException
public <T> void bindSetEntry(NamedParameterNode<Set<T>> iface, Node impl) throws BindException
bindSetEntry
in interface ConfigurationBuilder
BindException
public <T> void bindList(NamedParameterNode<List<T>> iface, List implList)
ConfigurationBuilder
Since ordering of the list is important, list binding cannot be repeated or merged unlike set binding. If the elements of the list are Classes, the objects created by the Classes will be injected. If the elements are Strings, the values will be injected directly to a given list parameter.
bindList
in interface ConfigurationBuilder
T
- a typeiface
- The list named parameter to be instantiatedimplList
- The list of class or value will be used to instantiated the named parameterpublic void bindList(String iface, List implList)
bindList
in interface ConfigurationBuilder
public <T> void bindConstructor(ClassNode<T> k, ClassNode<? extends ExternalConstructor<? extends T>> v)
ConfigurationBuilder
To see how the second use case could be useful, consider a implementing a URI interface with a distinct subclass for each valid URI prefix (e.g., http://, ssh://, etc...). An ExternalConstructor could examine the prefix and delegate to a constructor of the correct implementation (e.g, HttpURL, SshURL, etc...) which would validate the remainder of the provided string. URI's external constructor would return the validated subclass of URI that corresponds to the provided string, allowing instanceof and downcasts to behave as expected in the code that invoked Tang.
Both use cases should be avoided when possible, since they can unnecessarily complicate object injections and undermine Tang's ability to statically check a given configuration.
This method takes ClassNode objects. Like all of the methods in this API, these objects must come from the ClassHierarchy instance returned by getClassHierarchy().
bindConstructor
in interface ConfigurationBuilder
T
- a typek
- The class or interface to be instantiated.v
- The ExternalConstructor class that will be used to instantiate iface.public ConfigurationImpl build()
ConfigurationBuilder
Since Tang eagerly checks for configuration errors, this method does not perform any additional validation, and does not throw any checkable exceptions.
build
in interface ConfigurationBuilder
public String classPrettyDefaultString(String longName) throws NameResolutionException
ConfigurationBuilder
classPrettyDefaultString
in interface ConfigurationBuilder
longName
- a name of class or parameterNameResolutionException
public String classPrettyDescriptionString(String fullName) throws NameResolutionException
ConfigurationBuilder
classPrettyDescriptionString
in interface ConfigurationBuilder
fullName
- a name of class or parameterNameResolutionException
Copyright © 2016 The Apache Software Foundation. All rights reserved.