Package org.datanucleus.store.types
Interface TypeManager
- 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
Modifier and TypeMethodDescriptionvoid
close()
<T> SCO
<T> createSCOWrapper
(DNStateManager ownerSM, AbstractMemberMetaData mmd, Class<T> instantiatedType) Method to create a new SCO wrapper for member type.String[]
filterOutSupportedSecondClassNames
(String[] inputClassNames) Convenience method to filter out any supported classes from a list.getAutoApplyTypeConverterForType
(Class memberType) Method to return a TypeConverter that should be applied by default for the specified java (member) type.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.getDatastoreTypeForTypeConverter
(TypeConverter conv, Class memberType) Method to return the datastore type for the specified TypeConverter.getDefaultTypeConverterForType
(Class memberType) Accessor for the default type converter for the provided Java type.getMemberTypeForTypeConverter
(TypeConverter conv, Class datastoreType) Method to return the member type for the specified TypeConverter.Accessor for the supported second-class Types.getTypeConverterForName
(String converterName) Accessor for the type converter with the provided name.getTypeConverterForType
(Class memberType, Class datastoreType) Accessor for the type converter for the provided Java type and its datastore type.getTypeConvertersForType
(Class memberType) Accessor for the available type converters for the provided Java type.getTypeForSecondClassWrapper
(String className) Accessor for a java type that the supplied class is a SCO wrapper for.getWrappedTypeBackedForType
(String className) Accessor for the backing-store Second Class Wrapper class for the supplied class.getWrapperTypeForType
(String className) Accessor for the SCO wrapper for the typeboolean
Accessor for whether the type is by default embedded.boolean
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
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.
-
Method Details
-
close
void close() -
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
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
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
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
Accessor for whether the type is by default in the DFG.- Parameters:
c
- The type- Returns:
- Whether in the DFG
-
isDefaultFetchGroupForCollection
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
Accessor for whether the type is by default embedded.- Parameters:
c
- The type- Returns:
- Whether embedded
-
isSecondClassMutableType
Accessor for whether the type is SCO mutable.- Parameters:
className
- The type- Returns:
- Whether SCO mutable
-
getWrapperTypeForType
Accessor for the SCO wrapper for the type- Parameters:
className
- The type- Returns:
- SCO wrapper type
-
getWrappedTypeBackedForType
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
-
createSCOWrapper
<T> SCO<T> createSCOWrapper(DNStateManager ownerSM, AbstractMemberMetaData mmd, Class<T> instantiatedType) Method to create a new SCO wrapper for member type. Will find a wrapper suitable for the instantiated type (if provided), otherwise suitable for the member metadata type.- Type Parameters:
T
- Type of the object that we are creating a wrapper for- Parameters:
ownerSM
- StateManager for the owning objectmmd
- The MetaData for the related member.instantiatedType
- Type to instantiate the member as (if known), otherwise falls back to the type from metadata- Returns:
- The wrapper object of the required type
- Throws:
NucleusUserException
- if an error occurred when creating the SCO instance
-
isSecondClassWrapper
Accessor for whether the type is a SCO wrapper itself.- Parameters:
className
- The type- Returns:
- Whether is SCO wrapper
-
getTypeForSecondClassWrapper
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
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
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
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
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
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
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
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
Accessor for the available type converters for the provided Java type.- Parameters:
memberType
- The java type- Returns:
- The available Type Converters
-
getDatastoreTypeForTypeConverter
Method to return the datastore type for the specified TypeConverter.- Parameters:
conv
- The convertermemberType
- The member type- Returns:
- The datastore type
-
getMemberTypeForTypeConverter
Method to return the member type for the specified TypeConverter.- Parameters:
conv
- The converterdatastoreType
- The datastore type for this converter- Returns:
- The member type
-