public abstract class DynamicPropertyGetterBase extends java.lang.Object implements BeanEventPropertyGetter
Constructor and Description |
---|
DynamicPropertyGetterBase(EventAdapterService eventAdapterService) |
Modifier and Type | Method and Description |
---|---|
static java.lang.Object |
cacheAndCall(java.util.concurrent.CopyOnWriteArrayList<DynamicPropertyDescriptor> cache,
DynamicPropertyGetterBase getter,
java.lang.Object object,
EventAdapterService eventAdapterService)
NOTE: Code-generation-invoked method, method name and parameter order matters
|
static boolean |
cacheAndExists(java.util.concurrent.CopyOnWriteArrayList<DynamicPropertyDescriptor> cache,
DynamicPropertyGetterBase getter,
java.lang.Object object,
EventAdapterService eventAdapterService)
NOTE: Code-generation-invoked method, method name and parameter order matters
|
protected abstract java.lang.Object |
call(DynamicPropertyDescriptor descriptor,
java.lang.Object underlying)
Call the getter to obtains the return result object, or null if no such method exists.
|
protected abstract java.lang.reflect.Method |
determineMethod(java.lang.Class clazz)
To be implemented to return the method required, or null to indicate an appropriate method could not be found.
|
CodegenExpression |
eventBeanExistsCodegen(CodegenExpression beanExpression,
CodegenMethodScope codegenMethodScope,
CodegenClassScope codegenClassScope) |
CodegenExpression |
eventBeanFragmentCodegen(CodegenExpression beanExpression,
CodegenMethodScope codegenMethodScope,
CodegenClassScope codegenClassScope) |
CodegenExpression |
eventBeanGetCodegen(CodegenExpression beanExpression,
CodegenMethodScope codegenMethodScope,
CodegenClassScope codegenClassScope) |
java.lang.Object |
get(EventBean event)
Return the value for the property in the event object specified when the instance was obtained.
|
java.lang.Object |
getBeanProp(java.lang.Object object)
Returns the property as an object.
|
java.lang.Class |
getBeanPropType() |
java.lang.Object |
getFragment(EventBean eventBean)
|
java.lang.Class |
getTargetType() |
boolean |
isBeanExistsProperty(java.lang.Object object)
Returns true if the dynamic property exists.
|
boolean |
isExistsProperty(EventBean eventBean)
Returns true if the property exists, or false if the type does not have such a property.
|
CodegenExpression |
underlyingExistsCodegen(CodegenExpression underlyingExpression,
CodegenMethodScope codegenMethodScope,
CodegenClassScope codegenClassScope) |
CodegenExpression |
underlyingFragmentCodegen(CodegenExpression underlyingExpression,
CodegenMethodScope codegenMethodScope,
CodegenClassScope codegenClassScope) |
CodegenExpression |
underlyingGetCodegen(CodegenExpression underlyingExpression,
CodegenMethodScope codegenMethodScope,
CodegenClassScope codegenClassScope) |
public DynamicPropertyGetterBase(EventAdapterService eventAdapterService)
protected abstract java.lang.reflect.Method determineMethod(java.lang.Class clazz)
clazz
- to search for a matching methodprotected abstract java.lang.Object call(DynamicPropertyDescriptor descriptor, java.lang.Object underlying)
descriptor
- provides method information for the classunderlying
- is the underlying object to ask for the property valuepublic static java.lang.Object cacheAndCall(java.util.concurrent.CopyOnWriteArrayList<DynamicPropertyDescriptor> cache, DynamicPropertyGetterBase getter, java.lang.Object object, EventAdapterService eventAdapterService)
cache
- cachegetter
- getterobject
- objecteventAdapterService
- event serverpublic static boolean cacheAndExists(java.util.concurrent.CopyOnWriteArrayList<DynamicPropertyDescriptor> cache, DynamicPropertyGetterBase getter, java.lang.Object object, EventAdapterService eventAdapterService)
cache
- cachegetter
- getterobject
- objecteventAdapterService
- event serverpublic java.lang.Object getBeanProp(java.lang.Object object) throws PropertyAccessException
BeanEventPropertyGetter
getBeanProp
in interface BeanEventPropertyGetter
object
- to evaluatePropertyAccessException
- if access failedpublic java.lang.Class getTargetType()
getTargetType
in interface BeanEventPropertyGetter
public boolean isBeanExistsProperty(java.lang.Object object)
BeanEventPropertyGetter
isBeanExistsProperty
in interface BeanEventPropertyGetter
object
- to evaluatepublic final java.lang.Object get(EventBean event) throws PropertyAccessException
EventPropertyGetter
get
in interface EventPropertyGetter
event
- is the event to get the value of a property fromPropertyAccessException
- to indicate that property access failedpublic boolean isExistsProperty(EventBean eventBean)
EventPropertyGetter
Useful for dynamic properties of the syntax "property?" and the dynamic nested/indexed/mapped versions. Dynamic nested properties follow the syntax "property?.nested" which is equivalent to "property?.nested?". If any of the properties in the path of a dynamic nested property return null, the dynamic nested property does not exists and the method returns false.
For non-dynamic properties, this method always returns true since a getter would not be available unless
isExistsProperty
in interface EventPropertyGetter
eventBean
- is the event to check if the dynamic property existspublic java.lang.Class getBeanPropType()
getBeanPropType
in interface BeanEventPropertyGetter
public CodegenExpression eventBeanGetCodegen(CodegenExpression beanExpression, CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope)
eventBeanGetCodegen
in interface EventPropertyGetterSPI
public CodegenExpression eventBeanExistsCodegen(CodegenExpression beanExpression, CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope)
eventBeanExistsCodegen
in interface EventPropertyGetterSPI
public CodegenExpression eventBeanFragmentCodegen(CodegenExpression beanExpression, CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope)
eventBeanFragmentCodegen
in interface EventPropertyGetterSPI
public CodegenExpression underlyingGetCodegen(CodegenExpression underlyingExpression, CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope)
underlyingGetCodegen
in interface EventPropertyGetterSPI
public CodegenExpression underlyingExistsCodegen(CodegenExpression underlyingExpression, CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope)
underlyingExistsCodegen
in interface EventPropertyGetterSPI
public CodegenExpression underlyingFragmentCodegen(CodegenExpression underlyingExpression, CodegenMethodScope codegenMethodScope, CodegenClassScope codegenClassScope)
underlyingFragmentCodegen
in interface EventPropertyGetterSPI
public java.lang.Object getFragment(EventBean eventBean)
EventPropertyGetter
EventBean
or array of EventBean
for a property name or property expression.
For use with properties whose value is itself an event or whose value can be represented as an event by the underlying event representation.
The EventType
of the EventBean
instance(s) returned by this method can be determined by
EventType.getFragmentType(String)
. Use EventPropertyDescriptor
to
obtain a list of properties that return fragments from an event type.
Returns null if the property value is null or the property value cannot be represented as a fragment by the underlying representation.
getFragment
in interface EventPropertyGetter
eventBean
- is the event to get the fragment value of a property