Class ProductConfigurationServiceImpl

java.lang.Object
de.hybris.platform.sap.productconfig.services.impl.ProductConfigurationServiceImpl
All Implemented Interfaces:
ProductConfigurationService
Direct Known Subclasses:
ProductConfigurationRuleAwareServiceImpl

public class ProductConfigurationServiceImpl extends Object implements ProductConfigurationService
Default implementation of the ProductConfigurationService.
This implementation will synchronize access to the ConfigurationProvider, so that it is guaranteed that only exactly one thread will access the configuration provider for a given configuration session. Furthermore a simple session based read cache ensures that subsequent calls to read the same configuration result only into exactly one read request to the configuration engine.
See Also:
  • Field Details

  • Constructor Details

    • ProductConfigurationServiceImpl

      public ProductConfigurationServiceImpl()
  • Method Details

    • createDefaultConfiguration

      public ConfigModel createDefaultConfiguration(KBKey kbKey)
      Description copied from interface: ProductConfigurationService
      Based on the hybris product code, provided via the KBKey.productCode, the configuration engine will provide a default configuration for the requested product.
      Specified by:
      createDefaultConfiguration in interface ProductConfigurationService
      Parameters:
      kbKey - The product code for the configurable product
      Returns:
      The configurable product with default configuration
    • updateConfiguration

      public void updateConfiguration(ConfigModel model)
      Description copied from interface: ProductConfigurationService
      Update the configuration model within the configuration engine.
      Specified by:
      updateConfiguration in interface ProductConfigurationService
      Parameters:
      model - Updated model
    • checkUpdateAllowed

      protected void checkUpdateAllowed(ConfigModel model)
    • checkReadAllowed

      protected void checkReadAllowed(String configId)
    • retrieveConfigurationModel

      @Deprecated(since="2211", forRemoval=true) public ConfigModel retrieveConfigurationModel(String configId)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Description copied from interface: ProductConfigurationService
      Retrieve the actual configuration model for the requested configId in the ConfigModel format.
      Specified by:
      retrieveConfigurationModel in interface ProductConfigurationService
      Parameters:
      configId - Unique configuration ID
      Returns:
      The actual configuration
    • isRelatedObjectReadOnly

      protected boolean isRelatedObjectReadOnly(String configId, ConfigurationRetrievalOptions retrievalOptions)
    • retrieveRelatedObjectType

      protected ProductConfigurationRelatedObjectType retrieveRelatedObjectType(String configId, ConfigurationRetrievalOptions retrievalOptions)
    • retrieveCorrectPricingDate

      protected ConfigurationRetrievalOptions retrieveCorrectPricingDate(String configId)
    • retrieveConfigurationModelFromConfigurationEngine

      protected ConfigModel retrieveConfigurationModelFromConfigurationEngine(String configId, ConfigurationRetrievalOptions options)
    • updateKbKeyForVariants

      protected void updateKbKeyForVariants(ConfigModel configModel, String baseProductCode, String variantCode)
    • isChangeableVariant

      protected boolean isChangeableVariant(String variantCode)
    • updateKbKeyWithProductCode

      protected void updateKbKeyWithProductCode(ConfigModel configModel, String productCode)
    • cleanUpAfterEngineError

      protected void cleanUpAfterEngineError(String configId)
    • retrieveExternalConfiguration

      public String retrieveExternalConfiguration(String configId)
      Description copied from interface: ProductConfigurationService
      Retrieve the actual configuration model for the requested configId in a XML format.
      Specified by:
      retrieveExternalConfiguration in interface ProductConfigurationService
      Parameters:
      configId - Unique configuration ID
      Returns:
      The actual configuration as XML string
    • setProviderFactory

      public void setProviderFactory(ProviderFactory providerFactory)
      Parameters:
      providerFactory - inject factory to access the providers
    • setMaxLocksPerMap

      public static void setMaxLocksPerMap(int maxLocksPerMap)
      A configuration provider lock ensures, that there are no concurrent requests send to the configuration engine for the same configuration session.
      We might not always get informed when a configuration session is released, hence we do not rely on this. Instead we just keep a maximum number of locks and release the oldest locks, when there are to many. The maximum number can be configured by this setter.
      A look can be re-created in case it had already been deleted. The number should be high enough, so that locks do not get deleted while some concurrent threads are still using the lock, as this could cause concurrency issue. The maximum number heavily depends on the number of concurrent threads expected. Default is 1024.
      Parameters:
      maxLocksPerMap - sets the maximum number of Configuration Provider Locks kept.
    • getMaxLocksPerMap

      protected static int getMaxLocksPerMap()
    • getLock

      protected static ReentrantLock getLock(String configId)
    • ensureThatLockMapIsNotTooBig

      protected static void ensureThatLockMapIsNotTooBig()
    • afterDefaultConfigCreated

      protected ConfigModel afterDefaultConfigCreated(ConfigModel config)
    • afterConfigCreated

      protected ConfigModel afterConfigCreated(ConfigModel config, ConfigurationRetrievalOptions retrievalOptions)
    • createConfigurationFromExternal

      public ConfigModel createConfigurationFromExternal(KBKey kbKey, String externalConfiguration)
      Description copied from interface: ProductConfigurationService
      Creates a configuration from the external string representation (which contains the configuration in XML format)
      Specified by:
      createConfigurationFromExternal in interface ProductConfigurationService
      Parameters:
      kbKey - Key attributes needed to create a model
      externalConfiguration - Configuration as XML string
      Returns:
      Configuration model
    • createConfigurationFromExternal

      public ConfigModel createConfigurationFromExternal(KBKey kbKey, String externalConfiguration, String cartEntryKey)
      Description copied from interface: ProductConfigurationService
      Creates a configuration from the external string representation (which contains the configuration in XML format) and links it immediately with the given cart entry key
      Specified by:
      createConfigurationFromExternal in interface ProductConfigurationService
      Parameters:
      kbKey - Key attributes needed to create a model
      externalConfiguration - Configuration as XML string
      cartEntryKey - cartEntryKey this config belongs to
      Returns:
      Configuration model
    • createConfigurationFromExternal

      public ConfigModel createConfigurationFromExternal(KBKey kbKey, String externalConfiguration, String cartEntryKey, ConfigurationRetrievalOptions retrievalOptions)
      Description copied from interface: ProductConfigurationService
      Creates a configuration from the external string representation (which contains the configuration in XML format) and links it immediately with the given cart entry key
      Specified by:
      createConfigurationFromExternal in interface ProductConfigurationService
      Parameters:
      kbKey - Key attributes needed to create a model
      externalConfiguration - Configuration as XML string
      cartEntryKey - cartEntryKey this config belongs to
      retrievalOptions - options to modify behavior
      Returns:
      Configuration model
    • createConfigurationFromExternalSource

      public ConfigModel createConfigurationFromExternalSource(Configuration extConfig)
      Description copied from interface: ProductConfigurationService
      /** Create a ConfigModel based on a Configuration for the provided product code.
      Specified by:
      createConfigurationFromExternalSource in interface ProductConfigurationService
      Parameters:
      extConfig - Configuration in a data structure
      Returns:
      Configuration model
    • releaseSession

      public void releaseSession(String configId)
      Description copied from interface: ProductConfigurationService
      Releases the configuration sessions identified by the provided ID and all associated resources. Accessing the session afterwards is not possible anymore.
      Specified by:
      releaseSession in interface ProductConfigurationService
      Parameters:
      configId - session id
    • releaseSession

      public void releaseSession(String configId, boolean keepModel)
      Description copied from interface: ProductConfigurationService
      Releases the configuration sessions identified by the provided ID and all associated resources. Accessing the session afterwards is not possible anymore.
      Specified by:
      releaseSession in interface ProductConfigurationService
      Parameters:
      configId - session id
      keepModel - signifies whether config model should be kept despite releasing session
    • checkReleaseAllowed

      protected void checkReleaseAllowed(String configId)
    • removeConfigAttributesFromCache

      protected void removeConfigAttributesFromCache(String configId)
    • cacheConfig

      protected void cacheConfig(ConfigModel config)
    • getProviderFactory

      protected ProviderFactory getProviderFactory()
    • getConfigLifecycleStrategy

      protected ConfigurationLifecycleStrategy getConfigLifecycleStrategy()
    • setConfigLifecycleStrategy

      public void setConfigLifecycleStrategy(ConfigurationLifecycleStrategy configLifecycleStrategy)
    • getConfigModelCacheStrategy

      protected ConfigurationModelCacheStrategy getConfigModelCacheStrategy()
    • setConfigModelCacheStrategy

      public void setConfigModelCacheStrategy(ConfigurationModelCacheStrategy configModelCacheStrategy)
    • getAbstractOrderEntryLinkStrategy

      protected ConfigurationAbstractOrderEntryLinkStrategy getAbstractOrderEntryLinkStrategy()
    • setAbstractOrderEntryLinkStrategy

      public void setAbstractOrderEntryLinkStrategy(ConfigurationAbstractOrderEntryLinkStrategy configurationAbstractOrderEntryLinkStrategy)
    • calculateNumberOfIncompleteCsticsAndSolvableConflicts

      public int calculateNumberOfIncompleteCsticsAndSolvableConflicts(String configId)
      Description copied from interface: ProductConfigurationService
      Get the number of errors (conflict, not filled mandatory fields), as it is set at the cart item
      Specified by:
      calculateNumberOfIncompleteCsticsAndSolvableConflicts in interface ProductConfigurationService
      Parameters:
      configId - id of the configuration
      Returns:
      Total number of errors
    • countNumberOfIncompleteCstics

      public int countNumberOfIncompleteCstics(InstanceModel rootInstance)
      Description copied from interface: ProductConfigurationService
      Returns the number of incomplete cstics
      Specified by:
      countNumberOfIncompleteCstics in interface ProductConfigurationService
      Parameters:
      rootInstance - InstanceModel
      Returns:
      number of incomplete cstics
    • countNumberOfIncompleteVisibleCstics

      protected int countNumberOfIncompleteVisibleCstics(CsticModel cstic)
    • countNumberOfNotConsistentCstics

      protected int countNumberOfNotConsistentCstics(InstanceModel instance)
    • countNumberOfSolvableConflicts

      public int countNumberOfSolvableConflicts(ConfigModel configModel)
      Description copied from interface: ProductConfigurationService
      Returns the number of inconsistent cstics (solvable conflicts)
      Specified by:
      countNumberOfSolvableConflicts in interface ProductConfigurationService
      Parameters:
      configModel - ConfigModel
      Returns:
      number of inconsistent cstics
    • createConfigurationForVariant

      public ConfigModel createConfigurationForVariant(String baseProductCode, String variantProductCode)
      Description copied from interface: ProductConfigurationService
      Based on the hybris product code, the configuration engine will provide a configuration for the requested product variant.
      Specified by:
      createConfigurationForVariant in interface ProductConfigurationService
      Parameters:
      baseProductCode - The product code for the configurable base product
      variantProductCode - The product code for the specific product variant
      Returns:
      The configurable product with default configuration
    • getRecorder

      protected TrackingRecorder getRecorder()
    • setRecorder

      public void setRecorder(TrackingRecorder recorder)
      Parameters:
      recorder - inject the CPQ tracking recorder for tracking CPQ events
    • hasKbForDate

      public boolean hasKbForDate(String productCode, Date kbDate)
      Description copied from interface: ProductConfigurationService
      Checks whether a kb version exists for a given product and date
      Specified by:
      hasKbForDate in interface ProductConfigurationService
      Parameters:
      productCode - product code
      kbDate - date of the knowledgebase
      Returns:
      true if KB version for the date exists
    • isKbVersionValid

      public boolean isKbVersionValid(KBKey kbKey)
      Description copied from interface: ProductConfigurationService
      Checks whether kb version exists and is valid for specified date
      Specified by:
      isKbVersionValid in interface ProductConfigurationService
      Parameters:
      kbKey - knowledgebase key
      Returns:
      true if KB version exists and is valid
    • getConfigurationProvider

      protected ConfigurationProvider getConfigurationProvider()
    • getTotalNumberOfIssues

      public int getTotalNumberOfIssues(ConfigModel configModel)
      Description copied from interface: ProductConfigurationService
      Returns the total number of issues (number of solvable conflicts + number of incomplete cstics)
      Specified by:
      getTotalNumberOfIssues in interface ProductConfigurationService
      Parameters:
      configModel - configuration model
      Returns:
      total number of issues
    • extractKbKey

      public KBKey extractKbKey(String productCode, String externalConfig)
      Description copied from interface: ProductConfigurationService
      Extracts the KBKey from the external configuration
      Specified by:
      extractKbKey in interface ProductConfigurationService
      Parameters:
      productCode - product code
      externalConfig - external config
      Returns:
      returns the kBKey of the given external config
    • setProductConfigurationAccessControlService

      public void setProductConfigurationAccessControlService(ProductConfigurationAccessControlService productConfigurationAccessControlService)
      Parameters:
      productConfigurationAccessControlService -
    • getProductConfigurationAccessControlService

      protected ProductConfigurationAccessControlService getProductConfigurationAccessControlService()
    • getAssignmentResolverStrategy

      protected ConfigurationAssignmentResolverStrategy getAssignmentResolverStrategy()
    • setAssignmentResolverStrategy

      public void setAssignmentResolverStrategy(ConfigurationAssignmentResolverStrategy assignmentResolverStrategy)
    • getCpqConfigurableChecker

      protected CPQConfigurableChecker getCpqConfigurableChecker()
    • setCpqConfigurableChecker

      public void setCpqConfigurableChecker(CPQConfigurableChecker cpqConfigurableChecker)
    • getConfigurationProductUtil

      protected ConfigurationProductUtil getConfigurationProductUtil()
    • setConfigurationProductUtil

      public void setConfigurationProductUtil(ConfigurationProductUtil configurationProductUtil)
    • retrieveConfigurationModelFromConfigurationEngine

      protected ConfigModel retrieveConfigurationModelFromConfigurationEngine(String configId, String groupId, boolean overviewOnly, ConfigurationRetrievalOptions options)
    • retrieveConfigurationModel

      public ConfigModel retrieveConfigurationModel(String configId, String currentGroup)
      Description copied from interface: ProductConfigurationService
      Reads the entire configuration without domain values, except for the given groupId, in contrast to ProductConfigurationService.retrieveConfigurationModel(String) which reads all domain values for all groups. Hence this method will execute faster.
      Specified by:
      retrieveConfigurationModel in interface ProductConfigurationService
      Parameters:
      configId - runtime configuration id
      currentGroup - for which domain values are calculated and fetched
      Returns:
      config model without domain values, except for the given groupId
    • retrieveConfigurationModel

      protected ConfigModel retrieveConfigurationModel(String configId, String currentGroup, boolean overviewOnly)
    • retrieveConfigurationOverview

      public ConfigModel retrieveConfigurationOverview(String configId)
      Description copied from interface: ProductConfigurationService
      Reads entire configuration without domain values. So this call can be used when the actual data of the configuration is required, without offering to change it.
      Specified by:
      retrieveConfigurationOverview in interface ProductConfigurationService
      Parameters:
      configId - runtime configuration id
      Returns:
      entire config model without domain values
    • isReadDomainValuesOnDemand

      protected boolean isReadDomainValuesOnDemand()
      Returns:
      the readDomainValuesOnDemand
    • setReadDomainValuesOnDemand

      public void setReadDomainValuesOnDemand(boolean readDomainValuesOnDemand)
      Parameters:
      readDomainValuesOnDemand - the readDomainValuesOnDemand to set
    • adjustConfigurationModel

      protected void adjustConfigurationModel(ConfigModel config, String productCode, boolean overviewOnly)
    • retrieveConfigurationModelFromConfigurationEngineScenarioBased

      protected ConfigModel retrieveConfigurationModelFromConfigurationEngineScenarioBased(String configId, String currentGroup, boolean overviewOnly, ConfigurationRetrievalOptions options)
    • isReadDomainValuesOnDemandSupported

      protected boolean isReadDomainValuesOnDemandSupported()
    • isEnrichModelWithGroupRequired

      protected boolean isEnrichModelWithGroupRequired(String currentGroup, boolean overviewOnly, ConfigModel configModel)