Class ObjectTypeConverter

  • All Implemented Interfaces:
    java.io.Serializable, CoreConverter<DatabaseMapping,​Session>, org.eclipse.persistence.internal.descriptors.ClassNameConversionRequired, Converter
    Direct Known Subclasses:
    EnumTypeConverter, JAXBEnumTypeConverter

    public class ObjectTypeConverter
    extends java.lang.Object
    implements Converter, org.eclipse.persistence.internal.descriptors.ClassNameConversionRequired
    Purpose: Object type converter is used to match a fixed number of database data values to Java object value. It can be used when the values on the database and in the Java differ. To create an object type converter, simply specify the set of conversion value pairs. A default value and one-way conversion are also supported for legacy data situations.
    See Also:
    Serialized Form
    Author:
    James Sutherland
    Since:
    Toplink 10
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addConversionValue​(java.lang.Object fieldValue, java.lang.Object attributeValue)
      PUBLIC: A type conversion value is a two-way mapping from the database to the object.
      void addConversionValueStrings​(java.lang.String dataValue, java.lang.String objectValue)
      INTERNAL: Set from JPA processing where we deal with strings only to avoid class loader conflicts.
      void addToAttributeOnlyConversionValue​(java.lang.Object fieldValue, java.lang.Object attributeValue)
      PUBLIC: An attribute only conversion value is a one-way mapping from the database to the object.
      void addToAttributeOnlyConversionValueStrings​(java.lang.String dataValue, java.lang.String objectValue)
      INTERNAL: Set from JPA processing where we deal with strings only to avoid class loader conflicts.
      void convertClassNamesToClasses​(java.lang.ClassLoader classLoader)
      INTERNAL: Convert all the class-name-based settings in this converter to actual class-based settings.
      java.lang.Object convertDataValueToObjectValue​(java.lang.Object fieldValue, Session session)
      INTERNAL: Returns the corresponding attribute value for the specified field value.
      java.lang.Object convertObjectValueToDataValue​(java.lang.Object attributeValue, Session session)
      INTERNAL: Convert to the data value.
      java.util.Map getAttributeToFieldValues()
      INTERNAL: Get the attribute to field mapping.
      java.lang.Object getDefaultAttributeValue()
      PUBLIC: The default value can be used if the database can possibly store additional values then those that have been mapped.
      java.lang.Class getFieldClassification()
      INTERNAL: Get the type of the field value to allow conversion from the database.
      java.lang.Class getFieldClassification​(org.eclipse.persistence.internal.helper.DatabaseField fieldToClassify)
      INTERNAL: Return the classifiction for the field contained in the mapping.
      java.lang.String getFieldClassificationName()  
      java.util.Vector getFieldToAttributeValueAssociations()
      INTERNAL: Return a collection of the field to attribute value associations.
      java.util.Map getFieldToAttributeValues()
      INTERNAL: Get the field to attribute mapping.
      protected DatabaseMapping getMapping()
      INTERNAL: Return the mapping.
      void initialize​(DatabaseMapping mapping, Session session)
      INTERNAL: Set the mapping.
      void initializeFieldClassification​(Session session)
      INTERNAL: Set the field classification through searching the fields map.
      boolean isMutable()
      INTERNAL: If the converter converts the value to a non-atomic value, i.e.
      protected java.lang.Class loadClass​(java.lang.String className, java.lang.ClassLoader classLoader)
      Load the given class name with the given loader.
      void mapBooleans()
      PUBLIC: This is a very specific protocol which maps fieldValues "T" and "F" to true and false respectively.
      void mapGenders()
      PUBLIC: This is a very specific protocol which maps fieldValues "F" and "M" to "Female" and "Male" respectively.
      void mapResponses()
      PUBLIC: This is a very specific protocol which maps fieldValues "Y" and "N" to "Yes" and "No" respectively.
      void setAttributeToFieldValues​(java.util.Map attributeToFieldValues)
      INTERNAL: Set the attribute to field mapping.
      void setConverterName​(java.lang.String converterName)
      INTERNAL: Set from JPA processing where we deal with strings only to avoid class loader conflicts.
      void setDataTypeName​(java.lang.String dataTypeName)
      INTERNAL: Set from JPA processing where we deal with strings only to avoid class loader conflicts.
      void setDefaultAttributeValue​(java.lang.Object defaultAttributeValue)
      PUBLIC: The default value can be used if the database can possibly store additional values then those that have been mapped.
      void setDefaultAttributeValueString​(java.lang.String defaultAttributeValueString)
      INTERNAL: Set from JPA processing where we deal with strings only to avoid class loader conflicts.
      void setFieldClassification​(java.lang.Class fieldClassification)
      INTERNAL: Set the type of the field value to allow conversion from the database.
      void setFieldClassificationName​(java.lang.String fieldClassificationName)  
      void setFieldToAttributeValueAssociations​(java.util.Vector fieldToAttributeValueAssociations)
      INTERNAL: Set a collection of the field to attribute value associations.
      void setFieldToAttributeValues​(java.util.Map fieldToAttributeValues)
      INTERNAL: Set the field to attribute mapping.
      protected void setMapping​(DatabaseMapping mapping)
      INTERNAL: Set the mapping.
      void setObjectTypeName​(java.lang.String objectTypeName)
      INTERNAL: Set from JPA processing where we deal with strings only to avoid class loader conflicts.
      protected void throwInitObjectException​(java.lang.Exception exception, java.lang.Class type, java.lang.String value, boolean isData)
      INTERNAL:
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • converterName

        protected java.lang.String converterName
      • dataType

        protected java.lang.Class dataType
      • dataTypeName

        protected java.lang.String dataTypeName
      • objectType

        protected java.lang.Class objectType
      • objectTypeName

        protected java.lang.String objectTypeName
      • conversionValueStrings

        protected java.util.Map<java.lang.String,​java.lang.String> conversionValueStrings
      • addToAttributeOnlyConversionValueStrings

        protected java.util.Map<java.lang.String,​java.lang.String> addToAttributeOnlyConversionValueStrings
      • fieldToAttributeValues

        protected transient java.util.Map fieldToAttributeValues
      • attributeToFieldValues

        protected java.util.Map attributeToFieldValues
      • defaultAttributeValue

        protected transient java.lang.Object defaultAttributeValue
      • defaultAttributeValueString

        protected java.lang.String defaultAttributeValueString
      • fieldClassification

        protected transient java.lang.Class fieldClassification
      • fieldClassificationName

        protected transient java.lang.String fieldClassificationName
    • Constructor Detail

      • ObjectTypeConverter

        public ObjectTypeConverter()
        PUBLIC: Default constructor.
      • ObjectTypeConverter

        public ObjectTypeConverter​(DatabaseMapping mapping)
        PUBLIC: Default constructor.
    • Method Detail

      • addConversionValue

        public void addConversionValue​(java.lang.Object fieldValue,
                                       java.lang.Object attributeValue)
        PUBLIC: A type conversion value is a two-way mapping from the database to the object. The database value will be substituted for the object value when read, and the object value will be substituted for database value when written. Note that each field/attribute value must have one and only one attribute/field value to maintain a two-way mapping.
      • addConversionValueStrings

        public void addConversionValueStrings​(java.lang.String dataValue,
                                              java.lang.String objectValue)
        INTERNAL: Set from JPA processing where we deal with strings only to avoid class loader conflicts.
      • addToAttributeOnlyConversionValue

        public void addToAttributeOnlyConversionValue​(java.lang.Object fieldValue,
                                                      java.lang.Object attributeValue)
        PUBLIC: An attribute only conversion value is a one-way mapping from the database to the object. This can be used if multiple database values are desired to be mapped to the same object value. Note that when written only the default value will be used for the attribute, not this value.
      • addToAttributeOnlyConversionValueStrings

        public void addToAttributeOnlyConversionValueStrings​(java.lang.String dataValue,
                                                             java.lang.String objectValue)
        INTERNAL: Set from JPA processing where we deal with strings only to avoid class loader conflicts.
      • getAttributeToFieldValues

        public java.util.Map getAttributeToFieldValues()
        INTERNAL: Get the attribute to field mapping.
      • convertClassNamesToClasses

        public void convertClassNamesToClasses​(java.lang.ClassLoader classLoader)
        INTERNAL: Convert all the class-name-based settings in this converter to actual class-based settings. This method is used when converting a project that has been built with class names to a project with classes.
        Specified by:
        convertClassNamesToClasses in interface org.eclipse.persistence.internal.descriptors.ClassNameConversionRequired
        Parameters:
        classLoader -
      • loadClass

        protected java.lang.Class loadClass​(java.lang.String className,
                                            java.lang.ClassLoader classLoader)
        Load the given class name with the given loader.
      • getDefaultAttributeValue

        public java.lang.Object getDefaultAttributeValue()
        PUBLIC: The default value can be used if the database can possibly store additional values then those that have been mapped. Any value retreived from the database that is not mapped will be substitued for the default value.
      • getMapping

        protected DatabaseMapping getMapping()
        INTERNAL: Return the mapping.
      • setMapping

        protected void setMapping​(DatabaseMapping mapping)
        INTERNAL: Set the mapping.
      • setObjectTypeName

        public void setObjectTypeName​(java.lang.String objectTypeName)
        INTERNAL: Set from JPA processing where we deal with strings only to avoid class loader conflicts.
      • getFieldClassification

        public java.lang.Class getFieldClassification()
        INTERNAL: Get the type of the field value to allow conversion from the database.
      • getFieldClassificationName

        public java.lang.String getFieldClassificationName()
      • getFieldClassification

        public java.lang.Class getFieldClassification​(org.eclipse.persistence.internal.helper.DatabaseField fieldToClassify)
        INTERNAL: Return the classifiction for the field contained in the mapping. This is used to convert the row value to a consistent java value. By default this is null which means unknown.
      • getFieldToAttributeValueAssociations

        public java.util.Vector getFieldToAttributeValueAssociations()
        INTERNAL: Return a collection of the field to attribute value associations.
      • getFieldToAttributeValues

        public java.util.Map getFieldToAttributeValues()
        INTERNAL: Get the field to attribute mapping.
      • mapBooleans

        public void mapBooleans()
        PUBLIC: This is a very specific protocol which maps fieldValues "T" and "F" to true and false respectively.
      • mapGenders

        public void mapGenders()
        PUBLIC: This is a very specific protocol which maps fieldValues "F" and "M" to "Female" and "Male" respectively.
      • mapResponses

        public void mapResponses()
        PUBLIC: This is a very specific protocol which maps fieldValues "Y" and "N" to "Yes" and "No" respectively.
      • setAttributeToFieldValues

        public void setAttributeToFieldValues​(java.util.Map attributeToFieldValues)
        INTERNAL: Set the attribute to field mapping.
      • setConverterName

        public void setConverterName​(java.lang.String converterName)
        INTERNAL: Set from JPA processing where we deal with strings only to avoid class loader conflicts.
      • setDataTypeName

        public void setDataTypeName​(java.lang.String dataTypeName)
        INTERNAL: Set from JPA processing where we deal with strings only to avoid class loader conflicts.
      • setDefaultAttributeValue

        public void setDefaultAttributeValue​(java.lang.Object defaultAttributeValue)
        PUBLIC: The default value can be used if the database can possibly store additional values then those that have been mapped. Any value retreived from the database that is not mapped will be substitued for the default value.
      • setDefaultAttributeValueString

        public void setDefaultAttributeValueString​(java.lang.String defaultAttributeValueString)
        INTERNAL: Set from JPA processing where we deal with strings only to avoid class loader conflicts.
      • setFieldClassification

        public void setFieldClassification​(java.lang.Class fieldClassification)
        INTERNAL: Set the type of the field value to allow conversion from the database.
      • setFieldClassificationName

        public void setFieldClassificationName​(java.lang.String fieldClassificationName)
      • setFieldToAttributeValueAssociations

        public void setFieldToAttributeValueAssociations​(java.util.Vector fieldToAttributeValueAssociations)
        INTERNAL: Set a collection of the field to attribute value associations.
      • setFieldToAttributeValues

        public void setFieldToAttributeValues​(java.util.Map fieldToAttributeValues)
        INTERNAL: Set the field to attribute mapping.
      • isMutable

        public boolean isMutable()
        INTERNAL: If the converter converts the value to a non-atomic value, i.e. a value that can have its' parts changed without being replaced, then it must return false, serialization can be non-atomic.
        Specified by:
        isMutable in interface Converter
      • throwInitObjectException

        protected void throwInitObjectException​(java.lang.Exception exception,
                                                java.lang.Class type,
                                                java.lang.String value,
                                                boolean isData)
        INTERNAL: