Include Page | ||||
---|---|---|---|---|
|
HTML |
---|
<div class="content">
|
How to use iPOJO Manipulation Metadata
During the manipulation process, iPOJO gathers information about the manipulated classes. These metadata are stored inside the bundle manifest and are used to avoid reflection on the manipulated class. By using these metadata, your handler can check that the implementation class contains required fields, methods, interface ...check implemented interfaces.
Div | ||||||
---|---|---|---|---|---|---|
| ||||||
|
Contained information
Manipulation metadata contains:
...
Field Metadata contains field name and type. Method Metadata contains method name, the sorted list of argument types and return type.
Building Manipulation Metadata
Manipulation (i.e. PojoMetadata) can be obtained from the component metadata. Component Metadata are obtained in argument of the 'configure' method of your handler.form the factory of a (primitive) component type such as in:
Code Block |
---|
public void configure(InstanceManager im, Element metadata, Dictionary configuration) { ... ManipulationMetadata manip PojoMetadata manipulation = new ManipulationMetadata(metadatagetFactory().getPojoMetadata(); ... } |
Getting Metadata
From the manipulation metadata, you can query manipulation information by using following methods:
MethodMetadata\[\] getMethods() : Get all methodsWiki Markup Wiki Markup - FieldMetadata\[\] getFields() : Get all fields
String\[\] getInterfaces() : Get all implemented interfacesWiki Markup - FieldMetadata getField(String name) : Look for the field with the given name. Returns null if not found.
- FieldMetadata getField(String name, String type): Look for the field with the given name and type. Returns null if not found.
- boolean isInterfaceImplemented(String itf) : Is the given interface name implemented by the manipulated class.
- MethodMetadata getMethod(String name) : Look for the method with the given name. Returns null if not found. Returns the first found if several method match.
MethodMetadata\[\] getMethods(String name) : Look for all methods with the given name. Returns an empty array if not found.Wiki Markup MethodMetadata getMethod(String name, String\[\] types) : : Look for the method with the given name and argument type list. Returns null if not found.Wiki Markup
From a Field Metadata object, you can obtain the field name, type, and 'reflective' type. From a Method Metadata object, you can obtain the method name, the argument type array, and the returned type ('void' for void method).
Creating Callback from Manipulation Metadata
You often need to invoke method on the POJO objects. iPOJO provides an helper class, named Callback, allow you to manage this invocation easily. You can obtain a Callback object from the Method Metadata. By this way, you are sure that the method exists in the implementation. To create the callback, use the following code:
Code Block |
---|
ManipulationMetadata PojoMetadata manip = new ManipulationMetadata(metadatagetFactory().getPojoMetadata(); MethodMetadata method = manip.getMethod("your_method_name"); Callback cb = new Callback(method, im); |
Then you can directly invoke your method:
Code Block |
---|
... Object[] args = ...; // Build your argument array cb.call(args); ... |
Types & Reflective Types
When querying field (or a method argument) type, the API will return returns following code identifieridentifiers:
- For primitive types : int, long, short, byte, char, double, float, booleanunmigrated-wiki-markup
- For primitives type arrays : int\[\], long\[\], short\[\], byte\[\], char\[\], double\[\], float\[\], boolean\[\]
- For object : qualified class name as java.lang.String
For object arrays : the qualified class name of the content type followed by \ [\] as java.lang.String\[\]Wiki Markup
Array types are different from Java internal/reflective array types. To get the internal/reflective array type for field type you can use the getReflectiveType
method.
Include Page | ||||
---|---|---|---|---|
|