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
      • 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 object
        memberNumber - The member number in the owner
        newValue - The value to initialise the wrapper with (if any) for this member
        oldValue - The previous value that we are replacing with this value
        replaceFieldIfChanged - 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 instance
        mmd - Metadata for the member in question
        instantiatedType - The instantiated type
        value - The value to wrap
        replaceField - 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 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