-
- All Known Implementing Classes:
TypeManagerImpl
public interface TypeManager
Registry of java type support. Provides information applicable to all datastores for how a field of a class is treated; whether it is by default persistent, whether it is by default embedded, whether it is in the DFG, and if it has a wrapper for SCO operations. Also stores whether the type can be converted to/from a String (for datastores that don't provide storage natively). Uses the plugin mechanism extension-point "org.datanucleus.java_type".
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description void
close()
SCO
createSCOInstance(DNStateManager ownerSM, AbstractMemberMetaData mmd, Class instantiatedType, Object value, boolean replaceField)
Method to create a new SCO wrapper for the specified member.String[]
filterOutSupportedSecondClassNames(String[] inputClassNames)
Convenience method to filter out any supported classes from a list.TypeConverter
getAutoApplyTypeConverterForType(Class memberType)
Method to return a TypeConverter that should be applied by default for the specified java (member) type.ContainerAdapter
getContainerAdapter(Object container)
Convenience method to obtain the ContainerAdapter using the container object instance<H extends ContainerHandler>
HgetContainerHandler(Class containerClass)
Obtains the registered ContainerHandler for the given containerClass.Class
getDatastoreTypeForTypeConverter(TypeConverter conv, Class memberType)
Method to return the datastore type for the specified TypeConverter.TypeConverter
getDefaultTypeConverterForType(Class memberType)
Accessor for the default type converter for the provided Java type.Class
getMemberTypeForTypeConverter(TypeConverter conv, Class datastoreType)
Method to return the member type for the specified TypeConverter.Set<String>
getSupportedSecondClassTypes()
Accessor for the supported second-class Types.TypeConverter
getTypeConverterForName(String converterName)
Accessor for the type converter with the provided name.TypeConverter
getTypeConverterForType(Class memberType, Class datastoreType)
Accessor for the type converter for the provided Java type and its datastore type.Collection<TypeConverter>
getTypeConvertersForType(Class memberType)
Accessor for the available type converters for the provided Java type.Class
getTypeForSecondClassWrapper(String className)
Accessor for a java type that the supplied class is a SCO wrapper for.Class
getWrappedTypeBackedForType(String className)
Accessor for the backing-store Second Class Wrapper class for the supplied class.Class<? extends SCO>
getWrapperTypeForType(String className)
Accessor for the SCO wrapper for the typeboolean
isDefaultEmbeddedType(Class c)
Accessor for whether the type is by default embedded.boolean
isDefaultFetchGroup(Class c)
Accessor for whether the type is by default in the DFG.boolean
isDefaultFetchGroupForCollection(Class c, Class genericType)
Accessor for whether the generic collection type is by default in the DFG.boolean
isDefaultPersistent(Class c)
Accessor for whether the type is by default persistent.boolean
isSecondClassMutableType(String className)
Accessor for whether the type is SCO mutable.boolean
isSecondClassWrapper(String className)
Accessor for whether the type is a SCO wrapper itself.boolean
isSupportedSecondClassType(String className)
Accessor for whether a class is supported as being second class.void
registerConverter(String name, TypeConverter converter, Class memberType, Class dbType, boolean autoApply, String autoApplyType)
Register a TypeConverter with the TypeManager process for specific attribute/db types.void
setDefaultTypeConverterForType(Class memberType, String converterName)
Method providing the ability for a datastore plugin to override the default converter type for the specified java type.Object
wrapAndReplaceSCOField(DNStateManager ownerSM, int memberNumber, Object newValue, Object oldValue, boolean replaceFieldIfChanged)
Method to create a new SCO wrapper for the specified field replacing the old value with the new value.
-
-
-
Method Detail
-
close
void close()
-
getSupportedSecondClassTypes
Set<String> getSupportedSecondClassTypes()
Accessor for the supported second-class Types. This may or may not be a complete list, just that it provides the principal ones.- Returns:
- Set of supported types (fully qualified class names).
-
isSupportedSecondClassType
boolean isSupportedSecondClassType(String className)
Accessor for whether a class is supported as being second class.- Parameters:
className
- The class name- Returns:
- Whether the class is supported (to some degree)
-
filterOutSupportedSecondClassNames
String[] filterOutSupportedSecondClassNames(String[] inputClassNames)
Convenience method to filter out any supported classes from a list.- Parameters:
inputClassNames
- Names of the classes- Returns:
- Names of the classes (omitting supported types)
-
isDefaultPersistent
boolean isDefaultPersistent(Class c)
Accessor for whether the type is by default persistent. TODO Support use of apiAdapter.isMemberDefaultPersistent to get strict JDO/JPA behaviour.- Parameters:
c
- The type- Returns:
- Whether persistent
-
isDefaultFetchGroup
boolean isDefaultFetchGroup(Class c)
Accessor for whether the type is by default in the DFG.- Parameters:
c
- The type- Returns:
- Whether in the DFG
-
isDefaultFetchGroupForCollection
boolean isDefaultFetchGroupForCollection(Class c, Class genericType)
Accessor for whether the generic collection type is by default in the DFG.- Parameters:
c
- The typegenericType
- The element generic type- Returns:
- Whether in the DFG
-
isDefaultEmbeddedType
boolean isDefaultEmbeddedType(Class c)
Accessor for whether the type is by default embedded.- Parameters:
c
- The type- Returns:
- Whether embedded
-
isSecondClassMutableType
boolean isSecondClassMutableType(String className)
Accessor for whether the type is SCO mutable.- Parameters:
className
- The type- Returns:
- Whether SCO mutable
-
getWrapperTypeForType
Class<? extends SCO> getWrapperTypeForType(String className)
Accessor for the SCO wrapper for the type- Parameters:
className
- The type- Returns:
- SCO wrapper type
-
getWrappedTypeBackedForType
Class getWrappedTypeBackedForType(String className)
Accessor for the backing-store Second Class Wrapper class for the supplied class. A type will have a SCO wrapper if it is SCO supported and is mutable. If there is no backed wrapper provided returns the simple wrapper.- Parameters:
className
- The class name- Returns:
- The second class wrapper
-
wrapAndReplaceSCOField
Object wrapAndReplaceSCOField(DNStateManager ownerSM, int memberNumber, Object newValue, Object oldValue, boolean replaceFieldIfChanged)
Method to create a new SCO wrapper for the specified field replacing the old value with the new value. If the member value is a SCO already will just return the (new) value.- Parameters:
ownerSM
- StateManager of the owner objectmemberNumber
- The member number in the ownernewValue
- The value to initialise the wrapper with (if any) for this memberoldValue
- The previous value that we are replacing with this valuereplaceFieldIfChanged
- Whether to replace the member in the object if wrapping the value- Returns:
- The wrapper (or original value if not wrappable)
-
createSCOInstance
SCO createSCOInstance(DNStateManager ownerSM, AbstractMemberMetaData mmd, Class instantiatedType, Object value, boolean replaceField)
Method to create a new SCO wrapper for the specified member. The SCO wrapper will be appropriate for the passed value (which represents the instantiated type of the field) unless it is null when the wrapper will be appropriate for the declared type of the field. While the "instantiated type" and the type of "value" should be the same when value is non-null, there are situations where we need to create a List based collection yet have no value so pass in the declaredType as Collection, instantiatedType as ArrayList, and value as null.- Parameters:
ownerSM
- StateManager managing the instancemmd
- Metadata for the member in questioninstantiatedType
- The instantiated typevalue
- The value to wrapreplaceField
- Whether to replace the field in the owner object- Returns:
- The SCO wrapper
-
isSecondClassWrapper
boolean isSecondClassWrapper(String className)
Accessor for whether the type is a SCO wrapper itself.- Parameters:
className
- The type- Returns:
- Whether is SCO wrapper
-
getTypeForSecondClassWrapper
Class getTypeForSecondClassWrapper(String className)
Accessor for a java type that the supplied class is a SCO wrapper for. If the supplied class is not a SCO wrapper for anything then returns null.- Parameters:
className
- Name of the class- Returns:
- The java class that this is a wrapper for (or null)
-
getContainerHandler
<H extends ContainerHandler> H getContainerHandler(Class containerClass)
Obtains the registered ContainerHandler for the given containerClass. ContainerHandler are specified via the plugin mechanism using the container-handler attribute of the java-type element.- Type Parameters:
H
- Handler type- Parameters:
containerClass
- The class of the container.- Returns:
- The respective ContainerHandler if registered or null if no ContainerHandler is found for the containerClass.
-
getContainerAdapter
ContainerAdapter getContainerAdapter(Object container)
Convenience method to obtain the ContainerAdapter using the container object instance- Parameters:
container
- The container instance- Returns:
- The ContainerAdapter for the respective container or null if it's not a supported container
-
getTypeConverterForName
TypeConverter getTypeConverterForName(String converterName)
Accessor for the type converter with the provided name. This is used when the user has specified metadata for a field to use a particular named converter.- Parameters:
converterName
- Name of the converter- Returns:
- The converter
-
registerConverter
void registerConverter(String name, TypeConverter converter, Class memberType, Class dbType, boolean autoApply, String autoApplyType)
Register a TypeConverter with the TypeManager process for specific attribute/db types. TypeConverters are registered either from the contents of "plugin.xml" (i.e the builtin types) where the name is of the form "dn.*", or from user-registered metadata (e.g JPA Annotations) where the name is the class name of the converter or a user supplied name.- Parameters:
name
- The name to register the converter underconverter
- The convertermemberType
- Type of the java memberdbType
- Type of the database columnautoApply
- Whether this should be used as an auto-apply converterautoApplyType
- Java type to auto apply this for
-
getAutoApplyTypeConverterForType
TypeConverter getAutoApplyTypeConverterForType(Class memberType)
Method to return a TypeConverter that should be applied by default for the specified java (member) type. Will return null if the java type has no autoApply type defined for it (the default).- Parameters:
memberType
- The java (member) type- Returns:
- The converter to use by default
-
getDefaultTypeConverterForType
TypeConverter getDefaultTypeConverterForType(Class memberType)
Accessor for the default type converter for the provided Java type.- Parameters:
memberType
- Java type for the member- Returns:
- The default converter (if any)
-
setDefaultTypeConverterForType
void setDefaultTypeConverterForType(Class memberType, String converterName)
Method providing the ability for a datastore plugin to override the default converter type for the specified java type.- Parameters:
memberType
- Member typeconverterName
- The converter to use by default. This is assumed to exist.
-
getTypeConverterForType
TypeConverter getTypeConverterForType(Class memberType, Class datastoreType)
Accessor for the type converter for the provided Java type and its datastore type.- Parameters:
memberType
- Java type for the memberdatastoreType
- Java type for the datastore- Returns:
- The converter (if any)
-
getTypeConvertersForType
Collection<TypeConverter> getTypeConvertersForType(Class memberType)
Accessor for the available type converters for the provided Java type.- Parameters:
memberType
- The java type- Returns:
- The available Type Converters
-
getDatastoreTypeForTypeConverter
Class getDatastoreTypeForTypeConverter(TypeConverter conv, Class memberType)
Method to return the datastore type for the specified TypeConverter.- Parameters:
conv
- The convertermemberType
- The member type- Returns:
- The datastore type
-
getMemberTypeForTypeConverter
Class getMemberTypeForTypeConverter(TypeConverter conv, Class datastoreType)
Method to return the member type for the specified TypeConverter.- Parameters:
conv
- The converterdatastoreType
- The datastore type for this converter- Returns:
- The member type
-
-