org.ops4j.pax.reflector
Interface ReflectorService

All Known Implementing Classes:
ReflectorImpl, RemoteDelegatingReflectorImpl

public interface ReflectorService

The ReflectorService allows you to traverse object instances in a running application.

The ReflectorService operates with a cascaded dot-notation to identify object instances in running memory. That means that by providing a name such as "abc.Def.Rst.Name" the equivalent of (provided no special TypeHandlers kick in);

  abc.getDef().getRst().getName()
 
is called, if the JavaBeans-styled accessor methods are found. Also, public member fields will also be looked for (higer priority) and accessed when possible.

Examples of syntaxes, and equivalents in direct Java code.

dot notationJavaComment
someRoot.AbcsomeRoot.getAbc()
someRoot.Abc.DefsomeRoot.getAbc().getDef()
someRoot.Abc['0']someRoot.getAbc()[0]If getAbc() returns an Array.
someRoot.Abc['0']someRoot.getAbc().getAt(0)If getAbc() returns a Collection
someRoot.Abc['Def']someRoot.getAbc().get("Def")If getAbc() returns a Map or Dictionary.
someRoot.Abc['0'].RstsomeRoot.getAbc().getAt(0).getRst()If getAbc() returns a Collection
someRoot.Abc['Def'].RstsomeRoot.getAbc().get("Def").getRst()If getAbc() returns a Map or Dictionary.
empty stringOnly valid for getMemberNames() which will return all root object names.


Method Summary
 void addRootObject(String name, Object object)
          Adds a Root Object to the Reflector instance.
 String append(Object container, String containerpart, String namepart)
          Appends the name to the container name.
 String extractContainerPart(String objectname)
          Returns the container part of the objectname.
 String extractNamePart(String objectname)
          Returns the Name part of the objectname.
 String getMember(String membername)
          Returns the human readable form of the object instance traversed from the objectname argument.
 Class getMemberClass(Object container, String memberName)
          Returns the Class of the member identified by the membername in the provided container.
 Class getMemberClass(String objectname)
          Returns the Class of the member identified by the membername argument.
 String getMemberClassName(Object container, String objectname)
          Returns the name of the Class of the member identified by the membername in the provided container.
 String getMemberClassName(String objectname)
          Returns the name of the Class of the member identified by the objectname argument.
 String[] getMemberNames(Object object)
          Returns all the membernames found in the object.
 String[] getMemberNames(String membername)
          Returns all the membernames found in the member identified by membername argument.
 Object getMemberObject(Object container, String memberName)
          Returns the object of the member by the given membername, starting at the provided container.
 Object getMemberObject(String membername)
          Returns the object of the member by the given membername.
 boolean isMemberSettable(Object container, String membername)
          Checks with the member of the given membername can be set to a value.
 boolean isMemberSettable(String objectname)
          Checks with the member of the given objectname can be set to a value.
 void removeRootObject(String name)
          Removes the root object with registered under the provided name.
 void setMember(String membername, String value)
          Assigns the value to the member identified by the membername argument.
 void setMemberObject(Object container, String memberName, Object value)
          Assigns the value to the member identified by the membername starting at the container object.
 void setMemberObject(String membername, Object value)
          Assigns the value to the member identified by the membername argument.
 

Method Detail

getMember

String getMember(String membername)
                 throws ReflectionException
Returns the human readable form of the object instance traversed from the objectname argument.

Parameters:
membername - The name of the object of interested.
Returns:
The toString() value of the member value object.
Throws:
ReflectionException - if the member does not exist.

getMemberObject

Object getMemberObject(String membername)
                       throws ReflectionException
Returns the object of the member by the given membername.

Parameters:
membername - The name of the object to traverse to and return.
Returns:
The object that is returned as the value of the member, either by getter, fields or special handling, such as the value of entries of Maps and Collections.
Throws:
ReflectionException - if the member does not exist.

getMemberObject

Object getMemberObject(Object container,
                       String memberName)
                       throws ReflectionException
Returns the object of the member by the given membername, starting at the provided container.

Parameters:
container - The object which has a member of the memberName.
memberName - The name of the object to traverse to and return.
Returns:
The object that is returned as the value of the member, either by getter, fields or special handling, such as the value of entries of Maps and Collections.
Throws:
ReflectionException - if the member does not exist.

setMember

void setMember(String membername,
               String value)
               throws ReflectionException
Assigns the value to the member identified by the membername argument.

Parameters:
membername - The name of the member to be assigned a value.
value - The value to be assigned to the member. For primitives, the value is converted according to normal Java rules, but additionally a fully-qualified classname can be given, in which case the reflector will try to instantiate such class through the default constructor, and if successful assign the instance to the member.
Throws:
ReflectionException - If the value is not assignable to the member type or the member does not exist.

setMemberObject

void setMemberObject(String membername,
                     Object value)
                     throws ReflectionException
Assigns the value to the member identified by the membername argument.

Parameters:
membername - The name of the member to be assigned a value.
value - The value to be assigned to the member.
Throws:
ReflectionException - If the value is not assignable to the member type.

setMemberObject

void setMemberObject(Object container,
                     String memberName,
                     Object value)
                     throws ReflectionException
Assigns the value to the member identified by the membername starting at the container object.

Parameters:
container - The object which has a member of the memberName.
memberName - The name of the member to be assigned a value.
value - The value to be assigned to the member.
Throws:
ReflectionException - If the value is not assignable to the member type.

getMemberNames

String[] getMemberNames(String membername)
                        throws ReflectionException
Returns all the membernames found in the member identified by membername argument.

If the membername is an empty string, all root object names are returned.

Parameters:
membername - The name of the member to query for its members.
Returns:
The members that are found in the object identified by membername.
Throws:
ReflectionException - If the member identified by the membername does not exist.

getMemberNames

String[] getMemberNames(Object object)
Returns all the membernames found in the object.

Parameters:
object - The Java instance to query for its members.
Returns:
The members that are found in the object.

getMemberClass

Class getMemberClass(String objectname)
                     throws ReflectionException
Returns the Class of the member identified by the membername argument.

Parameters:
objectname - The name of the object to query for its Class.
Returns:
The class of the named object.
Throws:
ReflectionException - if the named object does not exist.

getMemberClass

Class getMemberClass(Object container,
                     String memberName)
                     throws ReflectionException
Returns the Class of the member identified by the membername in the provided container.

Parameters:
container - The object which has a member of the memberName.
memberName - The name of the member of the container to query for its Class.
Returns:
The class of the named object.
Throws:
ReflectionException - if the named object does not exist.

getMemberClassName

String getMemberClassName(String objectname)
                          throws ReflectionException
Returns the name of the Class of the member identified by the objectname argument.

Parameters:
objectname - The name of the member to query for its Class.
Returns:
The name of the Class of the named object.
Throws:
ReflectionException - if the named object does not exist.

getMemberClassName

String getMemberClassName(Object container,
                          String objectname)
                          throws ReflectionException
Returns the name of the Class of the member identified by the membername in the provided container.

Parameters:
container - The object which has a member of the memberName.
objectname - The name of the member of the container to query for its Class.
Returns:
The name of the Class of the object instance identified by the objectname in the container.
Throws:
ReflectionException - if the objectname does not exist as a member in the container.

isMemberSettable

boolean isMemberSettable(String objectname)
                         throws ReflectionException
Checks with the member of the given objectname can be set to a value.

Parameters:
objectname - The member to be tested if it can be set by a setMemberObject() method call.
Returns:
true if the object identified by the objectname can be set.
Throws:
ReflectionException - if the objectname does not identify an existing object reference.

isMemberSettable

boolean isMemberSettable(Object container,
                         String membername)
                         throws ReflectionException
Checks with the member of the given membername can be set to a value.

Parameters:
container - The container from where we should test if a member can be set to a value, by calling the setMemberObject() method.
membername - The member in the provided container to be tested if it can be set by a setMemberObject() method call.
Returns:
true if the object identified by the membername can be set in the container.
Throws:
ReflectionException - if the membername does not exist as a member in the container.

extractContainerPart

String extractContainerPart(String objectname)
Returns the container part of the objectname.

This method must correctly return the container part of the full objectname. For instance; getContainerPart( "someRoot.Abc.Def" ), must return "someRoot.Abc", getContainerPart( "someRoot.Abc['Def']" ), must return "someRoot.Abc", and getContainerPart( "someRoot.Abc['Def'].Rst" ), must return "someRoot.Abc['Def']".

Parameters:
objectname - The objectname to be worked upon.
Returns:
The container part of the objectname.

extractNamePart

String extractNamePart(String objectname)
Returns the Name part of the objectname.

This method must correctly return the Name part of the full objectname. For instance; getContainerPart( "someRoot.Abc.Def" ), must return "Def", getContainerPart( "someRoot.Abc['Def']" ), must return "['Def']", and getContainerPart( "someRoot.Abc['Def'].Rst" ), must return "Rst".

Parameters:
objectname - The objectname to be worked upon.
Returns:
The name part of the objectname.

append

String append(Object container,
              String containerpart,
              String namepart)
Appends the name to the container name.

Parameters:
container - The actual container so that the type can be determined.
containerpart - The name of the container.
namepart - The name part to append to the containerpart.
Returns:
The container+containerpart+namepart appended together in a safe manner.

addRootObject

void addRootObject(String name,
                   Object object)
                   throws IllegalArgumentException
Adds a Root Object to the Reflector instance.

The name must also be unique and no other root object may have been registered with the same name. The ReflectorService will hold on to the root objects with a hard reference, so it is imperative that objects are removed explicitly with a removeRootObject() method call.

Parameters:
name - The name of the Root Object. The name may only contain valid Java characters, as reported by Character.isJavaIdentifierPart(char ch).
object - The object instance to be registered at the provided name.
Throws:
IllegalArgumentException - if the name is not valid, or if there has already been a root object registered with the same name previously.

removeRootObject

void removeRootObject(String name)
Removes the root object with registered under the provided name.

If there is no root object registered under the provided name, this method will simply return.

Parameters:
name - The name under which the root object was previously registered.


Copyright © 2006-2012 OPS4J - Open Participation Software for Java. All Rights Reserved.