|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.glassfish.hk2.utilities.DescriptorImpl
com.sun.hk2.component.AbstractInhabitantImpl<T>
com.sun.hk2.component.EventPublishingInhabitant<T>
com.sun.hk2.component.LazyInhabitant
org.jvnet.hk2.config.Dom
public class Dom
Inhabitant
that loads configuration from XML.
This object also captures all the configuration values in a typeless way, so that the loading of the actual classes can be deferred as much as possible.
This is the Inhabitant
that gets registered into Habitat
,
so one can access this object by Habitat.getInhabitant(Class, String)
family
of methods.
Nested Class Summary |
---|
Nested classes/interfaces inherited from interface com.sun.hk2.component.Holder |
---|
Holder.Impl<T> |
Field Summary | |
---|---|
DomDocument |
document
Owner of the DOM tree. |
ConfigModel |
model
Model drives the interpretation of this DOM. |
Fields inherited from class com.sun.hk2.component.EventPublishingInhabitant |
---|
real |
Fields inherited from class com.sun.hk2.component.AbstractInhabitantImpl |
---|
descriptor, logger |
Constructor Summary | |
---|---|
Dom(Dom source,
Dom parent)
Copy constructor, used to get a deep copy of the passed instance |
|
Dom(Habitat habitat,
DomDocument document,
Dom parent,
ConfigModel model)
|
|
Dom(Habitat habitat,
DomDocument document,
Dom parent,
ConfigModel model,
XMLStreamReader in)
|
Method Summary | ||
---|---|---|
void |
addDefaultChildren()
When a new Dom object is created, ensures that all @NotNull annotated elements have a value. |
|
boolean |
addLeafElement(String xmlName,
String value)
|
|
void |
addListener(ConfigListener listener)
Add a new listener to configuration changes. |
|
String |
attribute(String name)
Obtains the attribute value, after variable expansion. |
|
void |
attribute(String name,
String value)
Updates the attribute value. |
|
List<String> |
attributes(String name)
Obtains the plural attribute value. |
|
boolean |
changeLeafElement(String xmlName,
String oldValue,
String newValue)
|
|
static String |
convertName(String name)
|
|
protected
|
copy(T parent)
Returns a copy of itself providing the parent for the new copy. |
|
Object |
create(ServiceHandle root)
Creates an instance of the ActiveDescriptor. |
|
protected Creator |
createCreator(Class c)
This is how we inject the configuration into the created object. |
|
|
createProxy()
Creates a strongly-typed proxy to access values in this Dom object, |
|
|
createProxy(Class<T> proxyType)
Creates a strongly-typed proxy to access values in this Dom object,
by using the specified interface type as the proxy type. |
|
static
|
digAnnotation(Class<?> target,
Class<T> annotationType)
|
|
static
|
digAnnotation(Class<?> target,
Class<T> annotationType,
List<Class<? extends Annotation>> visited)
|
|
List<Dom> |
domNodeByTypeElements(Class baseType)
Picks up all node elements that are assignable to the given type, except those who are matched by other named elements in the model. |
|
Dom |
element(String name)
Returns the child element by name |
|
Object |
get(Inhabitant onBehalfOf)
Returns the instance of this inhabitant. |
|
Set<String> |
getAttributeNames()
Returns the list of attributes with a value on this config instance. |
|
BaseServiceLocator |
getBaseServiceLocator()
|
|
Object |
getCache()
This can be used for scopes that will only every be created once. |
|
Set<Type> |
getContractTypes()
The set of types that this ActiveDescriptor must produce. |
|
Set<String> |
getElementNames()
Returns the children name associated with this config instance. |
|
Long |
getFactoryLocatorId()
If this ActiveDescriptor has DescriptorType of PROVIDE_METHOD then this field will return the ServiceId of its associated Factory service. |
|
Long |
getFactoryServiceId()
If this ActiveDescriptor has DescriptorType of PROVIDE_METHOD then this field will return the ServiceId of its associated Factory service. |
|
Habitat |
getHabitat()
|
|
Class<?> |
getImplementationClass()
The implementation class that should be used to generate new instances of this descriptor. |
|
List<Injectee> |
getInjectees()
Returns the full list of Injectees this class has. |
|
ConfigInjector |
getInjector()
Gets the ConfigInjector instance that can be used to inject
this DOM to a bean. |
|
String |
getKey()
Obtains the actual key value from this Dom . |
|
Location |
getLocation()
Where was this Dom loaded from? |
|
|
getProxyType()
Returns the proxy type for this configuration object |
|
Set<Annotation> |
getQualifierAnnotations()
The full set of qualifiers that this ActiveDescriptor provides |
|
Class<? extends Annotation> |
getScopeAnnotation()
Returns the scope that this ActiveDescriptor belongs to |
|
Dom |
getSymbolSpaceRoot(String typeName)
Locates the DOM that serves as the symbol space root. |
|
protected Object |
getter(ConfigModel.Property target,
Type t)
|
|
void |
initializationCompleted()
|
|
void |
inject(Object target)
Performs injection to the given object. |
|
protected void |
injectInto(Dom injectable,
Object target)
|
|
void |
insertAfter(Dom reference,
String name,
Dom newNode)
Inserts a new Dom node right after the given DOM element. |
|
Object |
invoke(Object proxy,
Method method,
Object[] args)
InvocationHandler implementation that allows strongly-typed access
to the configuration. |
|
Object |
invoke(Object proxy,
String methodName,
Class[] argTypes,
Object[] args)
Another version of the invoke(Object, Method, Object[]) ,
but instead of Method object, it takes the method name and argument types. |
|
boolean |
isCacheSet()
Returns true if this cache has been set |
|
boolean |
isReified()
This ensures no-one tried to reify this descriptor, which has an impl class the interface |
|
String |
leafElement(String name)
Picks up one leaf-element value. |
|
List<String> |
leafElements(String name)
Picks up all leaf-element values of the given name. |
|
|
nodeByTypeElement(Class<T> baseType)
|
|
|
nodeByTypeElements(Class<T> baseType)
|
|
Dom |
nodeElement(String name)
Picks up one node-element value. |
|
List<Dom> |
nodeElements(String elementName)
Picks up all node-elements that have the given element name. |
|
Dom |
parent()
If this DOM is a child of another DOM, the parent pointer. |
|
String |
rawAttribute(String name)
Obtians the attribute value without variable expansion. |
|
String |
rawLeafElement(String name)
Picks up one leaf-element value without variable expansion. |
|
List<String> |
rawLeafElements(String name)
Picks up all leaf-element values of the given name, without variable expansion. |
|
void |
release()
Called to orderly shutdown ServiceLocator . |
|
void |
releaseCache()
Removes the cached value and makes it such that this cache has not been set |
|
void |
removeChild(Dom reference)
Removes an existing NodeChild |
|
boolean |
removeLeafElement(String xmlName,
String element)
|
|
boolean |
removeListener(ConfigListener listener)
Remove a listener |
|
void |
replaceChild(Dom reference,
String name,
Dom newNode)
Replaces an existing NodeChild with another one. |
|
Dom |
resolveReference(String key,
String typeName)
Recursively decends the DOM tree and finds a DOM that has the given key and the type name. |
|
void |
setCache(Object cacheMe)
Sets the value into the cache |
|
void |
setLeafElements(String name,
String... values)
Updates leaf-element values. |
|
void |
setNodeElements(String name,
Dom... values)
Updates node-element values. |
|
protected void |
setter(ConfigModel.Property target,
Object value)
|
|
static Dom |
unwrap(ConfigBeanProxy proxy)
Unwraps the proxy and returns the underlying Dom object. |
|
void |
writeTo(String tagName,
XMLStreamWriter w)
Writes back this element. |
Methods inherited from class com.sun.hk2.component.LazyInhabitant |
---|
fetch, getClassLoader, lead, loadClass, metadata, type, type, typeName |
Methods inherited from class com.sun.hk2.component.EventPublishingInhabitant |
---|
addInhabitantListener, equals, getServiceLocator, hashCode, isActive, notify, removeInhabitantListener, toString |
Methods inherited from class com.sun.hk2.component.AbstractInhabitantImpl |
---|
companions, dispose, get, getAnnotation, getAnnotation, getAnnotations, getByType, getDescriptor, getDescriptorFor, getProvider, getProvider, getSerializedMetadata, getSerializedMetadata, matches, setCompanions |
Methods inherited from class org.glassfish.hk2.utilities.DescriptorImpl |
---|
addAdvertisedContract, addMetadata, addQualifier, getAdvertisedContracts, getBaseDescriptor, getDescriptorType, getImplementation, getLoader, getLocatorId, getMetadata, getName, getQualifiers, getRanking, getScope, getServiceId, pretty, readObject, removeAdvertisedContract, removeAllMetadata, removeMetadata, removeQualifier, setBaseDescriptor, setDescriptorType, setImplementation, setLoader, setLocatorId, setName, setRanking, setScope, setServiceId, writeObject |
Methods inherited from class java.lang.Object |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
Methods inherited from interface org.glassfish.hk2.api.ActiveDescriptor |
---|
dispose |
Methods inherited from interface org.glassfish.hk2.api.Descriptor |
---|
getAdvertisedContracts, getBaseDescriptor, getDescriptorType, getImplementation, getLoader, getLocatorId, getMetadata, getName, getQualifiers, getRanking, getScope, getServiceId, setRanking |
Field Detail |
---|
public final ConfigModel model
public final DomDocument document
Constructor Detail |
---|
public Dom(Habitat habitat, DomDocument document, Dom parent, ConfigModel model, XMLStreamReader in)
in
- If provided, this is used to record the source location where this DOM object is loaded from.
Otherwise this can be null.public Dom(Habitat habitat, DomDocument document, Dom parent, ConfigModel model)
public Dom(Dom source, Dom parent)
source
- the instance to copyMethod Detail |
---|
public void initializationCompleted()
public void addDefaultChildren()
public Habitat getHabitat()
protected <T extends Dom> T copy(T parent)
parent
- the parent instance for the cloned copy
public static Dom unwrap(ConfigBeanProxy proxy)
Dom
object.
public String getKey()
Dom
.
public Dom parent()
public Location getLocation()
Dom
loaded from?
public Set<String> getAttributeNames()
ConfigModel.getAttributeNames
.
public Set<String> getElementNames()
public String attribute(String name)
public String rawAttribute(String name)
public List<String> attributes(String name)
public void attribute(String name, String value)
public Dom element(String name)
name
- of the element
public String leafElement(String name)
public void insertAfter(Dom reference, String name, Dom newNode)
Dom
node right after the given DOM element.
reference
- If null, the new element will be inserted at the very beginning.name
- The element name of the newly inserted item. "*" to indicate that the element
name be determined by the model of the new node.public void replaceChild(Dom reference, String name, Dom newNode)
NodeChild
with another one.
insertAfter(Dom, String, Dom)
public void removeChild(Dom reference)
NodeChild
public boolean addLeafElement(String xmlName, String value)
public boolean removeLeafElement(String xmlName, String element)
public boolean changeLeafElement(String xmlName, String oldValue, String newValue)
public String rawLeafElement(String name)
public void setLeafElements(String name, String... values)
Synchronized so that concurrenct modifications will work correctly.
public List<String> leafElements(String name)
public List<String> rawLeafElements(String name)
public Dom nodeElement(String name)
public void setNodeElements(String name, Dom... values)
Synchronized so that concurrenct modifications will work correctly.
public List<Dom> nodeElements(String elementName)
public List<Dom> domNodeByTypeElements(Class baseType)
FromElement("*")
.
public <T> List<T> nodeByTypeElements(Class<T> baseType)
public <T> T nodeByTypeElement(Class<T> baseType)
public void inject(Object target)
public ConfigInjector getInjector()
ConfigInjector
instance that can be used to inject
this DOM to a bean.
public Dom getSymbolSpaceRoot(String typeName)
public Dom resolveReference(String key, String typeName)
TODO: the current algorithm does a full tree scan. Expand the model so that we can detect deadends that are statically known not to contain the kind we are looking for, and use that to cut the search space.
public <T extends ConfigBeanProxy> T createProxy(Class<T> proxyType)
Dom
object,
by using the specified interface type as the proxy type.
public <T extends ConfigBeanProxy> T createProxy()
Dom
object,
public <T extends ConfigBeanProxy> Class<T> getProxyType()
T
- the proxy type
public boolean isReified()
isReified
in interface ActiveDescriptor
public Class<?> getImplementationClass()
ActiveDescriptor
If the class returned is a Factory, then the factory is used to create instances. In this case the system will get an instance of the factory and use it to create the instances
getImplementationClass
in interface ActiveDescriptor
public Set<Type> getContractTypes()
ActiveDescriptor
getContractTypes
in interface ActiveDescriptor
public Class<? extends Annotation> getScopeAnnotation()
ActiveDescriptor
getScopeAnnotation
in interface ActiveDescriptor
public Set<Annotation> getQualifierAnnotations()
ActiveDescriptor
getQualifierAnnotations
in interface ActiveDescriptor
public List<Injectee> getInjectees()
ActiveDescriptor
If this descriptor is describing a factory created type then this list must have zero length
getInjectees
in interface ActiveDescriptor
public Long getFactoryServiceId()
ActiveDescriptor
getFactoryServiceId
in interface ActiveDescriptor
public Long getFactoryLocatorId()
ActiveDescriptor
getFactoryLocatorId
in interface ActiveDescriptor
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
InvocationHandler
implementation that allows strongly-typed access
to the configuration.
TODO: it might be a great performance improvement to have APT generate code that does this during the development time by looking at the interface.
invoke
in interface InvocationHandler
Throwable
public BaseServiceLocator getBaseServiceLocator()
public Object invoke(Object proxy, String methodName, Class[] argTypes, Object[] args) throws Throwable
invoke(Object, Method, Object[])
,
but instead of Method
object, it takes the method name and argument types.
Throwable
protected Object getter(ConfigModel.Property target, Type t)
protected void setter(ConfigModel.Property target, Object value) throws Exception
Exception
public static String convertName(String name)
protected Creator createCreator(Class c)
There are two kinds — one where @Configured
is put on
a bean and that is placedinto Habitat, and the other is
where @Configured
is on ConfigBeanProxy
subtype,
in which case the proxy to Dom
will be placed into the habitat.
createCreator
in class LazyInhabitant
public static <T extends Annotation> T digAnnotation(Class<?> target, Class<T> annotationType)
public static <T extends Annotation> T digAnnotation(Class<?> target, Class<T> annotationType, List<Class<? extends Annotation>> visited)
public void writeTo(String tagName, XMLStreamWriter w) throws XMLStreamException
tagName
- The tag name of this element to be written. If null, this DOM node
must be a global element and its tag name will be used.w
- Receives XML infoset stream.
XMLStreamException
protected void injectInto(Dom injectable, Object target)
public void release()
Inhabitant
ServiceLocator
.
The expected behavior is for objects to get its PreDestroy
callback invoked, and its reference released. For singleton
objects, this method is expected to dispose that object.
For scoped objects, those are released when ScopeInstance.release()
is invoked.
release
in interface Releasable
release
in interface Inhabitant
release
in class LazyInhabitant
public void addListener(ConfigListener listener)
ObservableBean
addListener
in interface ObservableBean
listener
- new listenerpublic boolean removeListener(ConfigListener listener)
ObservableBean
removeListener
in interface ObservableBean
listener
- to remove
public Object getCache()
SingleCache
getCache
in interface SingleCache
public boolean isCacheSet()
SingleCache
isCacheSet
in interface SingleCache
public void setCache(Object cacheMe)
SingleCache
setCache
in interface SingleCache
cacheMe
- A single value that can be cached in this
active descriptorpublic void releaseCache()
SingleCache
releaseCache
in interface SingleCache
public Object create(ServiceHandle root)
ActiveDescriptor
create
in interface ActiveDescriptor
root
- The root service handle, which can be used
to associated all the PerLookup objects with this creation
public Object get(Inhabitant onBehalfOf)
Inhabitant
THIS METHOD SHOULD BE ONLY USED BY HK2 IMPLEMENTATION.
Inhabitant
s are often used with the decorator pattern
(see AbstractCreatorInhabitantImpl
for example), yet during
the object initializtion inside the Inhabitant.get()
method, we often
need the reference to the outer-most Inhabitant
registered to
the ServiceLocator
(for example so that we can request the injection
of {link Inhabita} that represents itself, or to inject companions.)
So this overloaded version of the get method takes the outer-most
Inhabitant
. This method is only invoked from within HK2
where the decorator pattern is used.
get
in interface Inhabitant
get
in class EventPublishingInhabitant
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |