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, waittransformprivate 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)
ObjectProvidergetFilteringObject 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.