Class AutoNumServiceImpl

java.lang.Object
fr.becpg.repo.entity.impl.AutoNumServiceImpl
All Implemented Interfaces:
AutoNumService

@Service("autoNumService") public class AutoNumServiceImpl extends Object implements AutoNumService
Enhanced implementation of AutoNumService with improved thread safety, error handling, and performance optimizations.
Version:
$Id: $Id
Author:
querephi
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    private static class 
     
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
     
    private static final String
    Constant CACHE_KEY_SEPARATOR="-"
    private static final Long
    Constant DEFAULT_AUTO_NUM
    private static final Pattern
    Constant DEFAULT_PATTERN
    private static final String
    Constant DEFAULT_PREFIX=""
    private org.alfresco.service.cmr.dictionary.DictionaryService
     
     
    private static final org.apache.commons.logging.Log
    Constant logger
    private static final String
    Constant NAME_TEMPLATE="%s - %s"
    private org.alfresco.service.cmr.repository.NodeService
     
    private org.alfresco.repo.policy.BehaviourFilter
     
    private static final String
    Constant PREFIX_MSG_PREFIX="autonum.prefix."
    private RepoService
     
    private org.alfresco.repo.model.Repository
     
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    private String
    buildPrefixPattern(org.alfresco.service.namespace.QName type, org.alfresco.service.namespace.QName propertyName)
    buildPrefixPattern.
    private Long
    createAutoNum(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName, Long autoNumValue, String autoNumPrefix)
    createAutoNum.
    private Map<org.alfresco.service.namespace.QName,Serializable>
    createAutoNumProperties(String name, org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName, Long autoNumValue, String autoNumPrefix)
    createAutoNumProperties.
    private String
    createCacheKey(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)
    createCacheKey.
    private String
    createLockKey(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)
    createLockKey.
    private String
    createMatchPattern.
    private String
    createNewAutoNum(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)
    createNewAutoNum.
    private void
    createOrUpdateAutoNumValue(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName, String autoNumCode)
    createOrUpdateAutoNumValue.
    void
    deleteAutoNumValue(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)
    Delete auto num value.
    private Optional<org.alfresco.service.cmr.repository.NodeRef>
    findAutoNumNodeRef(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)
    findAutoNumNodeRef.
    private String
    formatCode(String prefix, Long autoNumValue)
    formatCode.
    private String
    generateAndSetNewCode(org.alfresco.service.cmr.repository.NodeRef nodeRef, org.alfresco.service.namespace.QName typeQName, org.alfresco.service.namespace.QName codeQName)
    generateAndSetNewCode.
    private String
    generateNextAutoNumValue(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)
    generateNextAutoNumValue.
    getAutoNumMatchPattern(org.alfresco.service.namespace.QName type, org.alfresco.service.namespace.QName propertyName)
    getAutoNumMatchPattern.
    org.alfresco.service.cmr.repository.NodeRef
    getAutoNumNodeRef(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)
    getAutoNumNodeRef.
    private String
    getAutoNumPrefix(org.alfresco.service.namespace.QName type, org.alfresco.service.namespace.QName propertyName)
    getAutoNumPrefix.
    getAutoNumValue(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)
    Gets the auto num value.
    private String
    getDefaultPrefix(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)
    getDefaultPrefix.
    getOrCreateBeCPGCode(org.alfresco.service.cmr.repository.NodeRef nodeRef)
    getOrCreateBeCPGCode.
    getOrCreateCode(org.alfresco.service.cmr.repository.NodeRef nodeRef, org.alfresco.service.namespace.QName codeQName)
    getOrCreateCode.
    private String
    getPrefix(org.alfresco.service.cmr.repository.NodeRef autoNumNodeRef, String defaultPrefix)
    getPrefix.
    getPrefixedCode(org.alfresco.service.namespace.QName type, org.alfresco.service.namespace.QName propertyName, Long autoNumValue)
    getPrefixedCode.
    private String
    incrementExistingAutoNum(org.alfresco.service.cmr.repository.NodeRef autoNumNodeRef)
    incrementExistingAutoNum.
    private boolean
    isCodeAlreadyUsed(org.alfresco.service.namespace.QName typeQName, org.alfresco.service.namespace.QName codeQName, String code, org.alfresco.service.cmr.repository.NodeRef excludeNodeRef)
    isCodeAlreadyUsed.
    parseAutoNumCode(String autoNumCode, org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)
    parseAutoNumCode.
    private String
    processNodeCode(org.alfresco.service.cmr.repository.NodeRef nodeRef, org.alfresco.service.namespace.QName codeQName)
    processNodeCode.
    boolean
    setAutoNumValue(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName, Long counter)
    setAutoNumValue.
    private void
    updateExistingAutoNumIfNecessary(org.alfresco.service.cmr.repository.NodeRef autoNumNodeRef, Long newValue)
    updateExistingAutoNumIfNecessary.
    private void
    validateInputs(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)
    validateInputs.

    Methods inherited from class java.lang.Object

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

    • NAME_TEMPLATE

      private static final String NAME_TEMPLATE
      Constant NAME_TEMPLATE="%s - %s"
      See Also:
    • DEFAULT_AUTO_NUM

      private static final Long DEFAULT_AUTO_NUM
      Constant DEFAULT_AUTO_NUM
    • PREFIX_MSG_PREFIX

      private static final String PREFIX_MSG_PREFIX
      Constant PREFIX_MSG_PREFIX="autonum.prefix."
      See Also:
    • DEFAULT_PREFIX

      private static final String DEFAULT_PREFIX
      Constant DEFAULT_PREFIX=""
      See Also:
    • DEFAULT_PATTERN

      private static final Pattern DEFAULT_PATTERN
      Constant DEFAULT_PATTERN
    • CACHE_KEY_SEPARATOR

      private static final String CACHE_KEY_SEPARATOR
      Constant CACHE_KEY_SEPARATOR="-"
      See Also:
    • logger

      private static final org.apache.commons.logging.Log logger
      Constant logger
    • lockMap

      private final ConcurrentHashMap<String,ReentrantLock> lockMap
    • nodeService

      @Autowired private org.alfresco.service.cmr.repository.NodeService nodeService
    • repoService

      @Autowired private RepoService repoService
    • repositoryHelper

      @Autowired private org.alfresco.repo.model.Repository repositoryHelper
    • dictionaryService

      @Autowired private org.alfresco.service.cmr.dictionary.DictionaryService dictionaryService
    • beCPGCacheService

      @Autowired private BeCPGCacheService beCPGCacheService
    • policyBehaviourFilter

      @Autowired private org.alfresco.repo.policy.BehaviourFilter policyBehaviourFilter
  • Constructor Details

    • AutoNumServiceImpl

      public AutoNumServiceImpl()
  • Method Details

    • getAutoNumValue

      public String getAutoNumValue(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)
      Gets the auto num value.
      Specified by:
      getAutoNumValue in interface AutoNumService
      Parameters:
      className - the class name
      propertyName - the property name
      Returns:
      the auto num value
    • setAutoNumValue

      public boolean setAutoNumValue(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName, Long counter)

      setAutoNumValue.

      Specified by:
      setAutoNumValue in interface AutoNumService
      Parameters:
      className - a QName object
      propertyName - a QName object
      counter - a Long object
      Returns:
      a boolean
    • deleteAutoNumValue

      public void deleteAutoNumValue(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)
      Delete auto num value.
      Specified by:
      deleteAutoNumValue in interface AutoNumService
      Parameters:
      className - the class name
      propertyName - the property name
    • getAutoNumMatchPattern

      public String getAutoNumMatchPattern(org.alfresco.service.namespace.QName type, org.alfresco.service.namespace.QName propertyName)

      getAutoNumMatchPattern.

      Specified by:
      getAutoNumMatchPattern in interface AutoNumService
      Parameters:
      type - a QName object.
      propertyName - a QName object.
      Returns:
      the pattern string for the corresponding code
    • getPrefixedCode

      public String getPrefixedCode(org.alfresco.service.namespace.QName type, org.alfresco.service.namespace.QName propertyName, Long autoNumValue)

      getPrefixedCode.

      Specified by:
      getPrefixedCode in interface AutoNumService
      Parameters:
      type - a QName object.
      propertyName - a QName object.
      autoNumValue - a Long object.
      Returns:
      the prefixed String for the given type
    • getOrCreateCode

      public String getOrCreateCode(org.alfresco.service.cmr.repository.NodeRef nodeRef, org.alfresco.service.namespace.QName codeQName)

      getOrCreateCode.

      Specified by:
      getOrCreateCode in interface AutoNumService
      Parameters:
      nodeRef - a NodeRef object.
      codeQName - a QName object.
      Returns:
      a String object.
    • getOrCreateBeCPGCode

      public String getOrCreateBeCPGCode(org.alfresco.service.cmr.repository.NodeRef nodeRef)

      getOrCreateBeCPGCode.

      Specified by:
      getOrCreateBeCPGCode in interface AutoNumService
      Parameters:
      nodeRef - a NodeRef object.
      Returns:
      a String object.
    • getAutoNumNodeRef

      public org.alfresco.service.cmr.repository.NodeRef getAutoNumNodeRef(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)

      getAutoNumNodeRef.

      Specified by:
      getAutoNumNodeRef in interface AutoNumService
      Parameters:
      className - a QName object
      propertyName - a QName object
      Returns:
      the NodeRef of the AutoNum value
    • validateInputs

      private void validateInputs(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)

      validateInputs.

      Parameters:
      className - a QName object
      propertyName - a QName object
    • createLockKey

      private String createLockKey(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)

      createLockKey.

      Parameters:
      className - a QName object
      propertyName - a QName object
      Returns:
      a String object
    • createCacheKey

      private String createCacheKey(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)

      createCacheKey.

      Parameters:
      className - a QName object
      propertyName - a QName object
      Returns:
      a String object
    • generateNextAutoNumValue

      private String generateNextAutoNumValue(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)

      generateNextAutoNumValue.

      Parameters:
      className - a QName object
      propertyName - a QName object
      Returns:
      a String object
    • incrementExistingAutoNum

      private String incrementExistingAutoNum(org.alfresco.service.cmr.repository.NodeRef autoNumNodeRef)

      incrementExistingAutoNum.

      Parameters:
      autoNumNodeRef - a NodeRef object
      Returns:
      a String object
    • createNewAutoNum

      private String createNewAutoNum(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)

      createNewAutoNum.

      Parameters:
      className - a QName object
      propertyName - a QName object
      Returns:
      a String object
    • findAutoNumNodeRef

      private Optional<org.alfresco.service.cmr.repository.NodeRef> findAutoNumNodeRef(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)

      findAutoNumNodeRef.

      Parameters:
      className - a QName object
      propertyName - a QName object
      Returns:
      a Optional object
    • buildPrefixPattern

      private String buildPrefixPattern(org.alfresco.service.namespace.QName type, org.alfresco.service.namespace.QName propertyName)

      buildPrefixPattern.

      Parameters:
      type - a QName object
      propertyName - a QName object
      Returns:
      a String object
    • createMatchPattern

      private String createMatchPattern(String prefix)

      createMatchPattern.

      Parameters:
      prefix - a String object
      Returns:
      a String object
    • getAutoNumPrefix

      private String getAutoNumPrefix(org.alfresco.service.namespace.QName type, org.alfresco.service.namespace.QName propertyName)

      getAutoNumPrefix.

      Parameters:
      type - a QName object
      propertyName - a QName object
      Returns:
      a String object
    • processNodeCode

      private String processNodeCode(org.alfresco.service.cmr.repository.NodeRef nodeRef, org.alfresco.service.namespace.QName codeQName)

      processNodeCode.

      Parameters:
      nodeRef - a NodeRef object
      codeQName - a QName object
      Returns:
      a String object
    • isCodeAlreadyUsed

      private boolean isCodeAlreadyUsed(org.alfresco.service.namespace.QName typeQName, org.alfresco.service.namespace.QName codeQName, String code, org.alfresco.service.cmr.repository.NodeRef excludeNodeRef)

      isCodeAlreadyUsed.

      Parameters:
      typeQName - a QName object
      codeQName - a QName object
      code - a String object
      excludeNodeRef - a NodeRef object
      Returns:
      a boolean
    • generateAndSetNewCode

      private String generateAndSetNewCode(org.alfresco.service.cmr.repository.NodeRef nodeRef, org.alfresco.service.namespace.QName typeQName, org.alfresco.service.namespace.QName codeQName)

      generateAndSetNewCode.

      Parameters:
      nodeRef - a NodeRef object
      typeQName - a QName object
      codeQName - a QName object
      Returns:
      a String object
    • createOrUpdateAutoNumValue

      private void createOrUpdateAutoNumValue(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName, String autoNumCode)

      createOrUpdateAutoNumValue.

      Parameters:
      className - a QName object
      propertyName - a QName object
      autoNumCode - a String object
    • parseAutoNumCode

      private AutoNumServiceImpl.AutoNumInfo parseAutoNumCode(String autoNumCode, org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)

      parseAutoNumCode.

      Parameters:
      autoNumCode - a String object
      className - a QName object
      propertyName - a QName object
      Returns:
      a AutoNumServiceImpl.AutoNumInfo object
    • updateExistingAutoNumIfNecessary

      private void updateExistingAutoNumIfNecessary(org.alfresco.service.cmr.repository.NodeRef autoNumNodeRef, Long newValue)

      updateExistingAutoNumIfNecessary.

      Parameters:
      autoNumNodeRef - a NodeRef object
      newValue - a Long object
    • getDefaultPrefix

      private String getDefaultPrefix(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName)

      getDefaultPrefix.

      Parameters:
      className - a QName object
      propertyName - a QName object
      Returns:
      a String object
    • createAutoNum

      private Long createAutoNum(org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName, Long autoNumValue, String autoNumPrefix)

      createAutoNum.

      Parameters:
      className - a QName object
      propertyName - a QName object
      autoNumValue - a Long object
      autoNumPrefix - a String object
      Returns:
      a Long object
    • createAutoNumProperties

      private Map<org.alfresco.service.namespace.QName,Serializable> createAutoNumProperties(String name, org.alfresco.service.namespace.QName className, org.alfresco.service.namespace.QName propertyName, Long autoNumValue, String autoNumPrefix)

      createAutoNumProperties.

      Parameters:
      name - a String object
      className - a QName object
      propertyName - a QName object
      autoNumValue - a Long object
      autoNumPrefix - a String object
      Returns:
      a Map object
    • getPrefix

      private String getPrefix(org.alfresco.service.cmr.repository.NodeRef autoNumNodeRef, String defaultPrefix)

      getPrefix.

      Parameters:
      autoNumNodeRef - a NodeRef object
      defaultPrefix - a String object
      Returns:
      a String object
    • formatCode

      private String formatCode(String prefix, Long autoNumValue)

      formatCode.

      Parameters:
      prefix - a String object
      autoNumValue - a Long object
      Returns:
      a String object