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 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 type
        genericType - 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
      • createSCOWrapper

        SCO createSCOWrapper​(DNStateManager ownerSM,
                             AbstractMemberMetaData mmd,
                             Class 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.
        Parameters:
        ownerSM - StateManager for the owning object
        mmd - 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

        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 under
        converter - The converter
        memberType - Type of the java member
        dbType - Type of the database column
        autoApply - Whether this should be used as an auto-apply converter
        autoApplyType - 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 type
        converterName - 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 member
        datastoreType - 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 converter
        memberType - 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 converter
        datastoreType - The datastore type for this converter
        Returns:
        The member type