Class AbstractPropertyValueDAOImpl

java.lang.Object
org.alfresco.repo.domain.propval.AbstractPropertyValueDAOImpl
All Implemented Interfaces:
PropertyValueDAO
Direct Known Subclasses:
PropertyValueDAOImpl

public abstract class AbstractPropertyValueDAOImpl extends Object implements PropertyValueDAO
Abstract implementation for Property Value DAO.

This provides basic services such as caching, but defers to the underlying implementation for CRUD operations.

Since:
3.2
Author:
Derek Hulley
  • Field Details

    • logger

      protected final org.apache.commons.logging.Log logger
    • converter

      protected PropertyTypeConverter converter
    • controlDAO

      protected ControlDAO controlDAO
  • Constructor Details

    • AbstractPropertyValueDAOImpl

      public AbstractPropertyValueDAOImpl()
      Default constructor.

      This sets up the DAO accessors to bypass any caching to handle the case where the caches are not supplied in the setters.

  • Method Details

    • setUniquenessCheckEnabled

      public void setUniquenessCheckEnabled(boolean uniquenessCheckEnabled)
      Setter for uniquenessCheckEnabled flag
    • setPropertyUniqueContextCache

      public void setPropertyUniqueContextCache(SimpleCache<AbstractPropertyValueDAOImpl.CachePucKey,PropertyUniqueContextEntity> propertyUniqueContextCache)
      Set the cache to use for unique property lookups
    • setConverter

      public void setConverter(PropertyTypeConverter converter)
      Parameters:
      converter - the converter that translates between external and persisted values
    • setControlDAO

      public void setControlDAO(ControlDAO controlDAO)
      Parameters:
      controlDAO - the DAO that provides connection control
    • setPropertyClassCache

      public void setPropertyClassCache(SimpleCache<Serializable,Object> propertyClassCache)
      Set the cache to use for alf_prop_class lookups (optional).
      Parameters:
      propertyClassCache - the cache of IDs to property classes
    • setPropertyDateValueCache

      public void setPropertyDateValueCache(SimpleCache<Serializable,Object> propertyDateValueCache)
      Set the cache to use for alf_prop_date_value lookups (optional).
      Parameters:
      propertyDateValueCache - the cache of IDs to property values
    • setPropertyStringValueCache

      public void setPropertyStringValueCache(SimpleCache<Serializable,Object> propertyStringValueCache)
      Set the cache to use for alf_prop_string_value lookups (optional).
      Parameters:
      propertyStringValueCache - the cache of IDs to property string values
    • setPropertyDoubleValueCache

      public void setPropertyDoubleValueCache(SimpleCache<Serializable,Object> propertyDoubleValueCache)
      Set the cache to use for alf_prop_double_value lookups (optional).
      Parameters:
      propertyDoubleValueCache - the cache of IDs to property values
    • setPropertySerializableValueCache

      public void setPropertySerializableValueCache(SimpleCache<Serializable,Object> propertySerializableValueCache)
      Set the cache to use for alf_prop_serializable_value lookups (optional).
      Parameters:
      propertySerializableValueCache - the cache of IDs to property values
    • setPropertyValueCache

      public void setPropertyValueCache(SimpleCache<Serializable,Object> propertyValueCache)
      Set the cache to use for alf_prop_value lookups (optional).
      Parameters:
      propertyValueCache - the cache of IDs to property values
    • setPropertyCache

      public void setPropertyCache(SimpleCache<Serializable,Object> propertyCache)
      Set the cache to use for alf_prop_root lookups (optional).
      Parameters:
      propertyCache - the cache of IDs to property values
    • getPropertyClassById

      public Pair<Long,Class<?>> getPropertyClassById(Long id)
      Description copied from interface: PropertyValueDAO
      FOR INTERNAL USE ONLY: Do not use directly; see interface comments.

      alf_prop_class accessor

      Specified by:
      getPropertyClassById in interface PropertyValueDAO
      Parameters:
      id - the ID (may not be null)
    • getPropertyClass

      public Pair<Long,Class<?>> getPropertyClass(Class<?> value)
      Description copied from interface: PropertyValueDAO
      FOR INTERNAL USE ONLY: Do not use directly; see interface comments.

      alf_prop_class accessor

      Specified by:
      getPropertyClass in interface PropertyValueDAO
      Parameters:
      value - the value to find the ID for (may not be null)
    • getOrCreatePropertyClass

      public Pair<Long,Class<?>> getOrCreatePropertyClass(Class<?> value)
      Description copied from interface: PropertyValueDAO
      FOR INTERNAL USE ONLY: Do not use directly; see interface comments.

      alf_prop_class accessor

      Specified by:
      getOrCreatePropertyClass in interface PropertyValueDAO
      Parameters:
      value - the value to find the ID for (may not be null)
    • findClassById

      protected abstract PropertyClassEntity findClassById(Long id)
    • findClassByValue

      protected abstract PropertyClassEntity findClassByValue(Class<?> value)
    • createClass

      protected abstract PropertyClassEntity createClass(Class<?> value)
    • getPropertyDateValueById

      public Pair<Long,Date> getPropertyDateValueById(Long id)
      Description copied from interface: PropertyValueDAO
      FOR INTERNAL USE ONLY: Do not use directly; see interface comments.

      alf_prop_date_value accessor

      Specified by:
      getPropertyDateValueById in interface PropertyValueDAO
      Parameters:
      id - the ID (may not be null)
    • getPropertyDateValue

      public Pair<Long,Date> getPropertyDateValue(Date value)
      Description copied from interface: PropertyValueDAO
      FOR INTERNAL USE ONLY: Do not use directly; see interface comments.

      alf_prop_date_value accessor

      Specified by:
      getPropertyDateValue in interface PropertyValueDAO
      Parameters:
      value - the value to find the ID for (may not be null)
    • getOrCreatePropertyDateValue

      public Pair<Long,Date> getOrCreatePropertyDateValue(Date value)
      Description copied from interface: PropertyValueDAO
      FOR INTERNAL USE ONLY: Do not use directly; see interface comments.

      alf_prop_date_value accessor

      Specified by:
      getOrCreatePropertyDateValue in interface PropertyValueDAO
      Parameters:
      value - the value to find the ID for (may not be null)
    • findDateValueById

      protected abstract PropertyDateValueEntity findDateValueById(Long id)
    • findDateValueByValue

      protected abstract PropertyDateValueEntity findDateValueByValue(Date value)
      Parameters:
      value - a date, accurate to the day
    • createDateValue

      protected abstract PropertyDateValueEntity createDateValue(Date value)
      Parameters:
      value - a date, accurate to the day
    • getPropertyStringCaseSensitiveSearchParameters

      public Pair<String,Long> getPropertyStringCaseSensitiveSearchParameters(String value)
      Description copied from interface: PropertyValueDAO
      Utility method to get query parameters for case-sensitive string searching
      Specified by:
      getPropertyStringCaseSensitiveSearchParameters in interface PropertyValueDAO
      See Also:
    • getPropertyStringValueById

      public Pair<Long,String> getPropertyStringValueById(Long id)
      Description copied from interface: PropertyValueDAO
      FOR INTERNAL USE ONLY: Do not use directly; see interface comments.

      alf_prop_string_value accessor

      Specified by:
      getPropertyStringValueById in interface PropertyValueDAO
      Parameters:
      id - the ID (may not be null)
    • getPropertyStringValue

      public Pair<Long,String> getPropertyStringValue(String value)
      Description copied from interface: PropertyValueDAO
      FOR INTERNAL USE ONLY: Do not use directly; see interface comments.

      alf_prop_string_value accessor

      Specified by:
      getPropertyStringValue in interface PropertyValueDAO
      Parameters:
      value - the value to find the ID for (may not be null)
    • getOrCreatePropertyStringValue

      public Pair<Long,String> getOrCreatePropertyStringValue(String value)
      Description copied from interface: PropertyValueDAO
      FOR INTERNAL USE ONLY: Do not use directly; see interface comments.

      alf_prop_string_value accessor

      Specified by:
      getOrCreatePropertyStringValue in interface PropertyValueDAO
      Parameters:
      value - the value to find the ID for (may not be null)
    • findStringValueById

      protected abstract String findStringValueById(Long id)
    • findStringValueByValue

      protected abstract Long findStringValueByValue(String value)
    • createStringValue

      protected abstract Long createStringValue(String value)
    • getPropertyDoubleValueById

      public Pair<Long,Double> getPropertyDoubleValueById(Long id)
      Description copied from interface: PropertyValueDAO
      FOR INTERNAL USE ONLY: Do not use directly; see interface comments.

      alf_prop_double_value accessor

      Specified by:
      getPropertyDoubleValueById in interface PropertyValueDAO
      Parameters:
      id - the ID (may not be null)
    • getPropertyDoubleValue

      public Pair<Long,Double> getPropertyDoubleValue(Double value)
      Description copied from interface: PropertyValueDAO
      FOR INTERNAL USE ONLY: Do not use directly; see interface comments.

      alf_prop_double_value accessor

      Specified by:
      getPropertyDoubleValue in interface PropertyValueDAO
      Parameters:
      value - the value to find the ID for (may not be null)
    • getOrCreatePropertyDoubleValue

      public Pair<Long,Double> getOrCreatePropertyDoubleValue(Double value)
      Description copied from interface: PropertyValueDAO
      FOR INTERNAL USE ONLY: Do not use directly; see interface comments.

      alf_prop_double_value accessor

      Specified by:
      getOrCreatePropertyDoubleValue in interface PropertyValueDAO
      Parameters:
      value - the value to find the ID for (may not be null)
    • findDoubleValueById

      protected abstract PropertyDoubleValueEntity findDoubleValueById(Long id)
    • findDoubleValueByValue

      protected abstract PropertyDoubleValueEntity findDoubleValueByValue(Double value)
    • createDoubleValue

      protected abstract PropertyDoubleValueEntity createDoubleValue(Double value)
    • getPropertySerializableValueById

      public Pair<Long,Serializable> getPropertySerializableValueById(Long id)
      Description copied from interface: PropertyValueDAO
      FOR INTERNAL USE ONLY: Do not use directly; see interface comments.

      alf_prop_serializable_value accessor

      Specified by:
      getPropertySerializableValueById in interface PropertyValueDAO
      Parameters:
      id - the ID (may not be null)
    • createPropertySerializableValue

      public Pair<Long,Serializable> createPropertySerializableValue(Serializable value)
      Description copied from interface: PropertyValueDAO
      FOR INTERNAL USE ONLY: Do not use directly; see interface comments.

      alf_prop_serializable_value accessor

      Specified by:
      createPropertySerializableValue in interface PropertyValueDAO
      Parameters:
      value - the value to find the ID for (may not be null)
    • findSerializableValueById

      protected abstract PropertySerializableValueEntity findSerializableValueById(Long id)
    • createSerializableValue

      protected abstract PropertySerializableValueEntity createSerializableValue(Serializable value)
    • getPropertyValueById

      public Pair<Long,Serializable> getPropertyValueById(Long id)
      Description copied from interface: PropertyValueDAO
      Use for accessing unique properties; see interface comments.

      alf_prop_value accessor: get a property based on the database ID

      Specified by:
      getPropertyValueById in interface PropertyValueDAO
      Parameters:
      id - the ID (may not be null)
    • getPropertyValue

      public Pair<Long,Serializable> getPropertyValue(Serializable value)
      Description copied from interface: PropertyValueDAO
      Use for accessing unique properties; see interface comments.

      alf_prop_value accessor: find a property based on the value

      Specified by:
      getPropertyValue in interface PropertyValueDAO
      Parameters:
      value - the value to find the ID for (may be null)
    • getOrCreatePropertyValue

      public Pair<Long,Serializable> getOrCreatePropertyValue(Serializable value)
      Description copied from interface: PropertyValueDAO
      Use for accessing unique properties; see interface comments.

      alf_prop_value accessor: find or create a property based on the value. Note: This method will not recurse into maps or collections. Use the dedicated methods if you want recursion; otherwise maps and collections will be serialized and probably stored as BLOB values.

      All collections and maps will be opened up to any depth.

      Specified by:
      getOrCreatePropertyValue in interface PropertyValueDAO
      Parameters:
      value - the value to find the ID for (may be null)
    • findPropertyValueById

      protected abstract PropertyValueEntity findPropertyValueById(Long id)
    • findPropertyValueByValue

      protected abstract PropertyValueEntity findPropertyValueByValue(Serializable value)
    • createPropertyValue

      protected abstract PropertyValueEntity createPropertyValue(Serializable value)
    • getPropertyById

      public Serializable getPropertyById(Long id)
      Description copied from interface: PropertyValueDAO
      Use for accessing non-unique, exploded properties; see interface comments.

      alf_prop_root accessor: get a property based on the database ID

      Specified by:
      getPropertyById in interface PropertyValueDAO
      Parameters:
      id - the ID (may not be null)
      Returns:
      Returns the value of the property (never null)
    • getPropertiesByIds

      public void getPropertiesByIds(List<Long> ids, PropertyValueDAO.PropertyFinderCallback callback)
      Description copied from interface: PropertyValueDAO
      Use for accessing non-unique, exploded properties; see interface comments.

      alf_prop_root accessor: get all properties based on the database IDs

      Specified by:
      getPropertiesByIds in interface PropertyValueDAO
      Parameters:
      ids - the IDs (may not be null; may be empty)
      callback - the callback to handle the results
    • createProperty

      public Long createProperty(Serializable value)
      Use for accessing non-unique, exploded properties; see interface comments.

      alf_prop_root accessor: find or create a property based on the value.

      All collections and maps will be opened up to any depth.

      Specified by:
      createProperty in interface PropertyValueDAO
      Parameters:
      value - the value to create (may be null)
      Returns:
      Returns the new property's ID
      See Also:
      • createPropertyImpl(Long, long, long, Long, Serializable)
    • updateProperty

      public void updateProperty(Long rootPropId, Serializable value)
      Description copied from interface: PropertyValueDAO
      Use for accessing non-unique, exploded properties; see interface comments.

      alf_prop_root accessor: update the property root to contain a new value.

      Specified by:
      updateProperty in interface PropertyValueDAO
      Parameters:
      rootPropId - the ID of the root property to change
      value - the new property value
    • deleteProperty

      public void deleteProperty(Long id)
      Description copied from interface: PropertyValueDAO
      Use for accessing non-unique, exploded properties; see interface comments.

      alf_prop_root accessor: delete a property root completely

      Specified by:
      deleteProperty in interface PropertyValueDAO
      Parameters:
      id - the ID of the root property to delete
    • constructEmptyContainer

      protected Serializable constructEmptyContainer(Class<?> clazz)
      Returns a reconstructable instance
      Returns:
      Returns an empty instance of the given container (map or collection), or null if it is not possible to do
    • findPropertyById

      protected abstract List<PropertyIdSearchRow> findPropertyById(Long id)
    • findPropertiesByIds

      protected abstract void findPropertiesByIds(List<Long> ids, PropertyValueDAO.PropertyFinderCallback callback)
    • createPropertyRoot

      protected abstract Long createPropertyRoot()
    • getPropertyRoot

      protected abstract PropertyRootEntity getPropertyRoot(Long id)
    • updatePropertyRoot

      protected abstract PropertyRootEntity updatePropertyRoot(PropertyRootEntity entity)
    • deletePropertyRoot

      protected abstract void deletePropertyRoot(Long id)
    • createPropertyLink

      protected abstract void createPropertyLink(Long rootPropId, Long propIndex, Long containedIn, Long keyPropId, Long valuePropId)
      Create an entry for the map or collection link.
      Parameters:
      rootPropId - the root (entry-point) property ID
      propIndex - the property number within the root property
      containedIn - the property that contains the current value
      keyPropId - the map key entity ID or collection position count
      valuePropId - the ID of the entity storing the value (may be another map or collection)
    • deletePropertyLinks

      protected abstract int deletePropertyLinks(Long rootPropId)
      Remove all property links for a given property root.
      Parameters:
      rootPropId - the root (entry-point) property ID
    • createPropertyUniqueContext

      public Pair<Long,Long> createPropertyUniqueContext(Serializable value1, Serializable value2, Serializable value3, Serializable propertyValue1)
      Description copied from interface: PropertyValueDAO
      alf_prop_unique_ctx accessor: create a unique context with an optional associated value.

      The DAO ensures that the region-context-value combination will be globally unique.

      Specified by:
      createPropertyUniqueContext in interface PropertyValueDAO
      Parameters:
      value1 - a simple key value (not a collection) (may be null)
      value2 - a simple key value (not a collection) (may be null)
      value3 - a simple key value (not a collection) (may be null)
      propertyValue1 - a value to store against the key (may be null)
      Returns:
      Returns the ID-valueId pair of the context
    • getPropertyUniqueContext

      public Pair<Long,Long> getPropertyUniqueContext(Serializable value1, Serializable value2, Serializable value3)
      Description copied from interface: PropertyValueDAO
      Get the unique context ID and associated shared property ID, or null if no such context exists. The associated property may be null even if the unique context exists.
      Specified by:
      getPropertyUniqueContext in interface PropertyValueDAO
      Parameters:
      value1 - first value
      value2 - second value
      value3 - third value
      Returns:
      Returns the ID-valueId pair or null if the context doesn't exist.
      See Also:
    • getPropertyUniqueContext

      public void getPropertyUniqueContext(PropertyValueDAO.PropertyUniqueContextCallback callback, Serializable... values)
      Description copied from interface: PropertyValueDAO
      Get unique contexts (unique context ID and associated shared property ID), if any, based on one, two or three context values. The associated property may be null even if the unique context exists.
      Specified by:
      getPropertyUniqueContext in interface PropertyValueDAO
      values - a combination of one to three values in order
      See Also:
    • updatePropertyUniqueContextKeys

      public void updatePropertyUniqueContextKeys(Long id, Serializable value1, Serializable value2, Serializable value3)
      Description copied from interface: PropertyValueDAO
      Update the unique context, preserving any associated property.
      Specified by:
      updatePropertyUniqueContextKeys in interface PropertyValueDAO
      See Also:
    • updatePropertyUniqueContext

      public void updatePropertyUniqueContext(Serializable value1, Serializable value2, Serializable value3, Serializable propertyValue)
      Description copied from interface: PropertyValueDAO
      Update the property associated with a unique context (based on one, two or three context values).
      Specified by:
      updatePropertyUniqueContext in interface PropertyValueDAO
      See Also:
    • deletePropertyUniqueContext

      public int deletePropertyUniqueContext(Serializable... values)
      Description copied from interface: PropertyValueDAO
      Delete sets of unique contexts based on one, two or three context values.
      Specified by:
      deletePropertyUniqueContext in interface PropertyValueDAO
      Parameters:
      values - a combination of one to three values in order
      Returns:
      Returns the number of unique contexts deleted
    • createPropertyUniqueContext

      protected abstract PropertyUniqueContextEntity createPropertyUniqueContext(Long valueId1, Long valueId2, Long valueId3, Long propertyId)
    • getPropertyUniqueContextById

      protected abstract PropertyUniqueContextEntity getPropertyUniqueContextById(Long id)
    • getPropertyUniqueContextByValues

      protected abstract PropertyUniqueContextEntity getPropertyUniqueContextByValues(Long valueId1, Long valueId2, Long valueId3)
    • getPropertyUniqueContextByValues

      protected abstract void getPropertyUniqueContextByValues(PropertyValueDAO.PropertyUniqueContextCallback callback, Long... valueIds)
    • updatePropertyUniqueContext

      protected abstract PropertyUniqueContextEntity updatePropertyUniqueContext(PropertyUniqueContextEntity entity)
    • deletePropertyUniqueContexts

      protected abstract int deletePropertyUniqueContexts(Long... valueIds)
    • convertPropertyIdSearchRows

      public Serializable convertPropertyIdSearchRows(List<PropertyIdSearchRow> rows)
      Description copied from interface: PropertyValueDAO
      Utility method to convert property query results into the original value. Note that the rows must all share the same root property ID.

      If the rows passed in don't constitute a valid, full property - they don't contain all the link entities for the property - then the result may be null.

      Specified by:
      convertPropertyIdSearchRows in interface PropertyValueDAO
      Parameters:
      rows - the search results for a single root property
      Returns:
      Returns the root property as originally persisted, or null if the rows don't represent a complete property
    • clearCaches

      protected void clearCaches()