T
- representation of entity data filtering requested by provider.public abstract class AbstractObjectProvider<T> extends java.lang.Object implements ObjectProvider<T>, ObjectGraphTransformer<T>
object provider
and object graph transformer
.
Extensions of this class must provide a type of entity-filtering object (via generic type parameter) the requesting provider
(e.g. message body worker) is familiar with and an implementation of
ObjectGraphTransformer.transform(ObjectGraph)
method for this type.
Modifier and Type | Class and Description |
---|---|
private static class |
AbstractObjectProvider.EntityContext
Class to be used as a key in cache (
EntityContext -> filtering object) when processing similar requests. |
Modifier and Type | Field and Description |
---|---|
private EntityInspector |
entityInspector |
private com.google.common.cache.Cache<AbstractObjectProvider.EntityContext,T> |
filteringObjects |
private EntityGraphProvider |
graphProvider |
private static int |
PROVIDER_CACHE_SIZE |
private ScopeProvider |
scopeProvider |
Constructor and Description |
---|
AbstractObjectProvider() |
Modifier and Type | Method and Description |
---|---|
private T |
createFilteringObject(java.lang.Class<?> entityClass,
java.util.Set<java.lang.String> filteringScopes,
boolean forWriter)
Create entity-filtering object after this object has not been found in the cache.
|
private java.lang.annotation.Annotation[] |
getEntityAnnotations(java.lang.annotation.Annotation[] annotations)
Get entity annotations passed to request/response.
|
private T |
getFilteringObject(java.lang.Class<?> entityClass,
boolean forWriter,
java.lang.annotation.Annotation... annotations) |
T |
getFilteringObject(java.lang.reflect.Type genericType,
boolean forWriter,
java.lang.annotation.Annotation... annotations)
Get reader/writer entity-filtering object for given type.
|
protected java.util.Set<java.lang.String> |
immutableSetOf(java.util.Set<java.lang.String> set,
java.lang.String item)
A helper method for a creation of an immutable set based on a provided set together with a given item.
|
protected java.lang.String |
subgraphIdentifier(java.lang.Class<?> parent,
java.lang.String field,
java.lang.Class<?> fieldClass)
Creates a string identifier of a sub-graph.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
transform
private static final int PROVIDER_CACHE_SIZE
private final com.google.common.cache.Cache<AbstractObjectProvider.EntityContext,T> filteringObjects
@Inject private ScopeProvider scopeProvider
@Inject private EntityInspector entityInspector
@Inject private EntityGraphProvider graphProvider
public final T getFilteringObject(java.lang.reflect.Type genericType, boolean forWriter, java.lang.annotation.Annotation... annotations)
ObjectProvider
getFilteringObject
in interface ObjectProvider<T>
genericType
- type for which the object is requested.forWriter
- flag to determine whether to create object for reading/writing purposes.annotations
- entity annotations to determine the runtime scope.private T getFilteringObject(java.lang.Class<?> entityClass, boolean forWriter, java.lang.annotation.Annotation... annotations)
private java.lang.annotation.Annotation[] getEntityAnnotations(java.lang.annotation.Annotation[] annotations)
annotations
- annotations obtained from provider.private T createFilteringObject(java.lang.Class<?> entityClass, java.util.Set<java.lang.String> filteringScopes, boolean forWriter)
entityClass
- entity class the entity-filtering object should be created for.filteringScopes
- entity-filtering scopes to create the entity-filtering object for.forWriter
- flag determining whether the class should be examined for reader or writer.protected java.util.Set<java.lang.String> immutableSetOf(java.util.Set<java.lang.String> set, java.lang.String item)
set
- The set to create the immutable set from.item
- The item to add to the set before it's made immutable.protected java.lang.String subgraphIdentifier(java.lang.Class<?> parent, java.lang.String field, java.lang.Class<?> fieldClass)
parent
- The parent class.field
- The field name.fieldClass
- The class of the field.