Class DefaultModelService

All Implemented Interfaces:
ModelService, Serializable, org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanNameAware, org.springframework.beans.factory.InitializingBean

public class DefaultModelService extends AbstractModelService
Default implementation of the ModelService.
Since:
4.0
See Also:
  • Field Details

  • Constructor Details

    • DefaultModelService

      public DefaultModelService()
  • Method Details

    • attach

      public void attach(Object model)
      Description copied from interface: ModelService
      Attaches a model instance to the current model context. This is necessary for all models being created manually using their constructors. This context keeps track of all models being loaded, created or modified. There is a single context per thread/request. Loading models for the same source element multiple times will return a single model instance inside one context (thread/request).
      Parameters:
      model - the model instance to attach
    • clearTransactionsSettings

      public void clearTransactionsSettings()
      Description copied from interface: ModelService
      Clears any local transactions settings set by ModelService.enableTransactions() or ModelService.disableTransactions() methods which influences on save operations. After executing this method global setting for transactions will be respected.
    • clone

      public <T> T clone(T original)
      Description copied from interface: ModelService
      Creates a deep copy of the given model. The resulting object is not persisted yet in order to allow modifications like unique key adjustments etc.
    • clone

      public <T> T clone(Object original, Class<T> targetType)
      Description copied from interface: ModelService
      Creates a deep copy of the given model except that the result object type may be changed here. Please note that only attributes that exist in both types are actually copied! The resulting object is not persisted yet in order to allow modifications like unique key adjustments etc.
    • clone

      public <T> T clone(T original, ModelCloningContext ctx)
      Description copied from interface: ModelService
      Creates a deep copy of the given model. The resulting object is not persisted yet in order to allow modifications like unique key adjustments etc. The optional context allows to adjust the cloning process in some aspects. See ModelCloningContext for details.
    • clone

      public <T> T clone(Object original, Class<T> targetType, ModelCloningContext ctx)
      Description copied from interface: ModelService
      Creates a deep copy of the given model except that the result object type may be changed here. Please note that only attributes that exist in both types are actually copied! The resulting object is not persisted yet in order to allow modifications like unique key adjustments etc. The optional context allows to adjust the cloning process in some aspects. See ModelCloningContext for details.
    • create

      public <T> T create(Class modelClass)
      Description copied from interface: ModelService
      Creates a new empty model instance of those class which is registered for given type model.
      Parameters:
      modelClass - the model class to create a new instance of
      Returns:
      new empty model
    • create

      public <T> T create(String typeCode)
      Description copied from interface: ModelService
      Creates a new empty model instance of those class which is registered for given type code.
      Parameters:
      typeCode - type code whose registered model implementation will be used for instantiation
      Returns:
      new empty model
    • detach

      public void detach(Object modelPkOrItem)
      Description copied from interface: ModelService
      Removes a model instance from the current model context. Afterward it will no longer be saved automatically via ModelService.saveAll(). Please note that loading a model for its source again results in a new instance being attached to the context! This context keeps track of all models being loaded, created or modified. There is a single context per thread/request. Loading models for the same source element multiple times will return a single model instance inside one context (thread/request).
      Parameters:
      modelPkOrItem - the model instance to detach
    • detach

      public void detach(PK sourcePK)
      Description copied from interface: ModelService
      Removes a model instance from the current model context. Afterward it will no longer be saved automatically via ModelService.saveAll(). Please note that loading a model for its source again results in a new instance being attached to the context! This context keeps track of all models being loaded, created or modified. There is a single context per thread/request. Loading models for the same source element multiple times will return a single model instance inside one context (thread/request).
      Parameters:
      sourcePK - the source primary key belonging to the model to be detached
    • detachAll

      public void detachAll()
      Description copied from interface: ModelService
      Removes all model instances attached to the current model context. Afterward they will no longer be saved automatically via ModelService.saveAll(). Also note that loading models for their sources again results in new instances being attached to the context!
    • disableTransactions

      public void disableTransactions()
      Description copied from interface: ModelService

      Disables transactions for save operation. This setting overrides the global setting and has higher priority. Disabling transactions is done via session (session key: "enableTransactionalSaves") so to make it temporary please use SessionService.executeInLocalView(de.hybris.platform.servicelayer.session.SessionExecutionBody) . If you are not planning use local session, please remove completely session key "enableTransactionalSaves" from the session to back to the global setting using ModelService.clearTransactionsSettings() method.

      Global setting is controlled by property: model.service.transactional.saves

      Example usage:

       sessionService.executeInLocalView(new SessionExecutionBody()
       {
              @Override
              public Object execute()
          {
                      modelService.disableTransactions();
                      modelService.save(someModel);
                      return someModel;
          }
       });
       
    • enableTransactions

      public void enableTransactions()
      Description copied from interface: ModelService

      Enables transactions for save operation. This setting overrides the global setting and has higher priority. Enabling transactions is done via session (session key: "enableTransactionalSaves") so to make it temporary please use SessionService.executeInLocalView(de.hybris.platform.servicelayer.session.SessionExecutionBody) . If you are not planning use local session, please remove completely session key "enableTransactionalSaves" from the session to back to the global setting using ModelService.clearTransactionsSettings() method.

      Global setting is controlled by property: model.service.transactional.saves

      Example usage:

       sessionService.executeInLocalView(new SessionExecutionBody()
       {
              @Override
              public Object execute()
          {
                      modelService.enableTransactions();
                      modelService.save(someModel);
                      return someModel;
          }
       });
       
    • get

      public <T> T get(Object source)
      Description copied from interface: ModelService
      Returns a model instance for the given source object. It is tried to find a target class using the type of the source object.
      Parameters:
      source - the object for which to retrieve a model instance
      Returns:
      a model for the given source object
    • get

      public <T> T get(Object source, String conversionType)
      Description copied from interface: ModelService
      Special loading method, which allows to specify the type for looking up the converter to be used. Normally there is no need to prefer this to ModelService.get(Object) - use with care!
      Parameters:
      source - the persistent object to convert
      conversionType - the type to use when looking up the converter
    • get

      public <T> T get(PK sourcePK)
      Description copied from interface: ModelService
      Returns a model instance for the source object the given pk represents. It is tried to find a target class using the type of the source object resolved from given PK.
      Parameters:
      sourcePK - the object pk for which to retrieve a model instance
      Returns:
      a model for the given source object pk
    • getAttributeValue

      public <T> T getAttributeValue(Object model, String attributeQualifier)
      Description copied from interface: ModelService
      Generic attribute value getter to read attribute data from arbitrary model instances. If attribute is localized value for current Locale is returned.
      Parameters:
      model - the model instance
      attributeQualifier - the attribute qualifier
    • getAttributeValue

      public <T> T getAttributeValue(Object model, String attributeQualifier, Locale locale)
      Description copied from interface: ModelService
      Generic attribute value getter to read attribute data for given Locale from arbitrary model instances.
      Parameters:
      model - the model instance
      attributeQualifier - the attribute qualifier for which value must be returned
      locale - the locale for which value must be returned
    • getAttributeValues

      public <T> Map<Locale,T> getAttributeValues(Object model, String attributeQualifier, Locale... locales)
      Description copied from interface: ModelService
      Generic attribute value getter to read attribute data for given list of Locales from arbitrary model instances. This method returns immutable map of values mapped to the corresponding locale. If none of the values for a given locale can be found, an empty map will be returned.
      Parameters:
      model - the model instance
      attributeQualifier - the attribute qualifier for which value must be returned
      locales - Locales for which value must be returned (at least one locale is required)
      Returns:
      immutable map of values mapped to the corresponding Locale
    • getByExample

      @Deprecated(since="ages", forRemoval=true) public <T> T getByExample(T example)
      Deprecated, for removal: This API element is subject to removal in a future version.
      since ages - Please use FlexibleSearchService.getModelByExample().
      Description copied from interface: ModelService
      Search for an existing object (in the database) by a given (not saved) example. Every modified attribute in this example is used as search parameter.
      Type Parameters:
      T - the type of the example and the return type
      Parameters:
      example - the example
      Returns:
      the result if this was found by the example.
    • getModelType

      public String getModelType(Class modelClass)
      Description copied from interface: ModelService
      Returns the type mapped to a model class.
      Parameters:
      modelClass - the model class
    • getModelType

      public String getModelType(Object model)
      Description copied from interface: ModelService
      Returns the actual type of a given model instance.
      Parameters:
      model - the model instance
    • getModelTypeClass

      public Class getModelTypeClass(Class modelClass)
      Description copied from interface: ModelService
      If the given class is a model class the mapped jalo class will be returned. Otherwise the same class is returned.
      Parameters:
      modelClass - a model class
      Returns:
      the mapped jalo class
    • getSource

      public <T> T getSource(Object model)
      Description copied from interface: ModelService
      Returns underlying source for given model.
      Parameters:
      model - the model for which to return the source
      Returns:
      the underlying source of the given model, or null if the source doesn't (yet) exist
    • initDefaults

      public void initDefaults(Object model) throws ModelInitializationException
      Description copied from interface: ModelService
      Initializes newly created model instance.
              ModelService s = ...
              // create plain instance - no defaults whatsoever
              ProductModel myModel = new ProductModel();
              // now load defaults
              s.initDefaults( myModel );
       
      Throws:
      ModelInitializationException
    • preloadItems

      public boolean preloadItems(List<PK> pks)
    • isModified

      public boolean isModified(Object model)
      Description copied from interface: ModelService
      Tells if the model has been modified. This applies to models which have been create or modified after loading.
      Parameters:
      model - the model to check
    • isNew

      public boolean isNew(Object model)
      Description copied from interface: ModelService
      Tells if the model has been created and has not been saved yet.
      Parameters:
      model - the model to check
    • isRemoved

      public boolean isRemoved(Object model)
      Description copied from interface: ModelService
      Tells if the model has been removed.
      Parameters:
      model - the model to check
    • isUpToDate

      public boolean isUpToDate(Object model)
      Description copied from interface: ModelService
      Checks if the given model represents the current persistent state of its source. It is considered to be up to date if
      • the model is not modified
      • the model is not new
      • a source exists for this model
      • the persistence version of the source item is the same as stored inside the model
      Parameters:
      model - the model to check
    • refresh

      public void refresh(Object model)
      Description copied from interface: ModelService
      Requests the persistence layer to fetch a new, updated version of the passed model.
      Parameters:
      model - model to be updated
    • remove

      public void remove(Object model) throws ModelRemovalException
      Description copied from interface: ModelService
      Tries to remove the source (and all part-of elements) of the given model.
      Parameters:
      model - the model for which to remove the source
      Throws:
      ModelRemovalException - if the remove action failed
    • remove

      public void remove(PK pk) throws ModelRemovalException
      Description copied from interface: ModelService
      Tries to remove the source belonging to the specified PK.
      Parameters:
      pk - the primary key of the source to remove
      Throws:
      ModelRemovalException - if the remove action failed
    • removeAll

      public void removeAll(Collection<? extends Object> models) throws ModelRemovalException
      Description copied from interface: ModelService
      Tries to remove the source (and all part-of elements) of the given collection of models.
      Parameters:
      models - the models for which to remove the source
      Throws:
      ModelRemovalException - if the remove action failed
    • removeAll

      public void removeAll(Object... models) throws ModelRemovalException
      Description copied from interface: ModelService
      Tries to remove the source (and all part-of elements) of the given collection of models.
      Parameters:
      models - the models for which to remove the source
      Throws:
      ModelRemovalException - if the remove action failed
    • removeAll

      protected void removeAll(Collection<? extends Object> models, boolean transactional)
    • isUniqueConstraintErrorAsRootCause

      public boolean isUniqueConstraintErrorAsRootCause(Exception e)
      Description copied from interface: ModelService
      Checks whether the root cause of the given exception is the database rejecting a new item due to some unique key constraint violation.
    • isSQLServerConstraintViolation

      protected boolean isSQLServerConstraintViolation(Exception e)
    • isHanaConstraintViolation

      protected boolean isHanaConstraintViolation(Exception e)
    • isSpringDuplicateKeyException

      protected boolean isSpringDuplicateKeyException(Exception e)
    • isSpringConcurrencyException

      protected boolean isSpringConcurrencyException(Exception e)
    • save

      public void save(Object model)
      Description copied from interface: ModelService
      Saves all attribute values from the model to the wrapped source object or creates a new one if no source is mapped yet.
      Parameters:
      model - the model to save
      See Also:
    • saveAll

      public void saveAll() throws ModelSavingException
      Description copied from interface: ModelService
      Saves all modified and new model instances which are attached to the current request context. A model becomes attached if
      Throws:
      ModelSavingException
    • saveAll

      public void saveAll(Collection<? extends Object> models) throws ModelSavingException
      Description copied from interface: ModelService
      Saves several model model instances at once. If at least one instance causes a validation error no modifications are written.
      Parameters:
      models - the model instances to save
      Throws:
      ModelSavingException
      See Also:
    • saveAll

      public void saveAll(Object... models) throws ModelSavingException
      Description copied from interface: ModelService
      Saves several model model instances at once. If at least one instance causes a validation error no modifications are written.
      Specified by:
      saveAll in interface ModelService
      Overrides:
      saveAll in class AbstractModelService
      Parameters:
      models - the model instances to save
      Throws:
      ModelSavingException
      See Also:
    • saveAll

      protected void saveAll(Collection<? extends Object> models, boolean transactional)
    • prepareObjectsToSave

      protected Set<Object> prepareObjectsToSave()
      Prepares objects to save.
    • setAttributeValue

      public void setAttributeValue(Object model, String attributeQualifier, Object value)
      Description copied from interface: ModelService
      Generic attribute value setter to modify attribute data on arbitrary model instances.
      Parameters:
      model - the model
      attributeQualifier - the attribute qualifier
      value - the attribute value
    • setAttributeValue

      public <T> void setAttributeValue(Object model, String attributeQualifier, Map<Locale,T> value)
      Description copied from interface: ModelService
      Generic attribute value setter to modify attribute data on arbitrary model instances for a given Locale.
      Parameters:
      model - the model instance
      attributeQualifier - the attribute qualifier for which value must be returned
      value - map of values mapped to the corresponding Locale
    • setTransactionTemplate

      public void setTransactionTemplate(org.springframework.transaction.support.TransactionTemplate transactionTemplate)
    • setModelContext

      public void setModelContext(ModelContext modelContext)
    • setModelPersister

      public void setModelPersister(ModelPersister modelPersister)
    • setModelExtractor

      public void setModelExtractor(ModelExtractor factory)
    • setChangeSetBuilder

      public void setChangeSetBuilder(ChangeSetBuilder builder)
    • setCacheInvalidator

      @Deprecated(since="ages", forRemoval=true) public void setCacheInvalidator(CacheInvalidator invalidator)
      Deprecated, for removal: This API element is subject to removal in a future version.
    • setEventService

      public void setEventService(EventService eventService)
    • setTransactional

      public void setTransactional(boolean transactional)
    • detachViaSource

      protected void detachViaSource(PersistenceObject persistenceObject)
    • doAttach

      protected void doAttach(Object model, PersistenceObject source, ModelConverter conv, ModelContext ctx)
    • doCreate

      protected <T> T doCreate(ModelConverter conv, String type)
    • doDetach

      protected void doDetach(Object model, Object source, ModelConverter conv)
    • doLoad

      protected <T> T doLoad(ModelConverter conv, PersistenceObject source)
    • getModelConverterByModel

      protected ModelConverter getModelConverterByModel(Object model)
    • getModelConverterBySource

      protected ModelConverter getModelConverterBySource(PersistenceObject persistenceObject)
    • getModelForPersistentValue

      protected Object getModelForPersistentValue(Object persistentValue)
      Specified by:
      getModelForPersistentValue in class AbstractModelService
    • getPersistentValueForModel

      protected Object getPersistentValueForModel(Object model)
      Specified by:
      getPersistentValueForModel in class AbstractModelService
    • getSourceTypeFromModel

      protected String getSourceTypeFromModel(Object model)
    • getSourceTypeFromSource

      protected String getSourceTypeFromSource(PersistenceObject persistenceObject)
    • notifyLoadInterceptors

      protected void notifyLoadInterceptors(Object model, PersistenceObject source)
    • isTransactional

      protected boolean isTransactional()
    • lock

      public void lock(PK itemPK)
      Default implementation delegates to Transaction.lock(Item).
      Parameters:
      itemPK - pk of the item to lock.
    • lock

      public void lock(Object source)
      Default implementation delegates to Transaction.lock(Item).
      Parameters:
      source - item to lock.
    • getWithLock

      public <T> T getWithLock(Object source)
      Default implementation delegates to Transaction.lock(Item).
      Type Parameters:
      T - Type of returned model.
      Parameters:
      source - item to lock.
      Returns:
      locked model for given source.
    • isAttached

      public boolean isAttached(Object model)
      Description copied from interface: ModelService
      Tells if the model is attached to the context
      Parameters:
      model - the model to check
    • isSourceAttached

      public boolean isSourceAttached(Object source)
    • getConverterRegistry

      public ConverterRegistry getConverterRegistry()
    • getInterceptorRegistry

      public InterceptorRegistry getInterceptorRegistry()
    • getModelCloningContext

      public ModelCloningContext getModelCloningContext()
    • getModelCloningStrategy

      public ModelCloningStrategy getModelCloningStrategy()
    • getModelContext

      public ModelContext getModelContext()
    • getModelSearchStrategy

      public ModelSearchStrategy getModelSearchStrategy()
    • getSessionService

      public SessionService getSessionService()
    • getWritePersistenceGateway

      public WritePersistenceGateway getWritePersistenceGateway()
    • lookupConverterRegistry

      public ConverterRegistry lookupConverterRegistry()
      Must be overwritten! Use <lookup-method> in spring.
    • lookupInterceptorRegistry

      public InterceptorRegistry lookupInterceptorRegistry()
      Must be overwritten! Use <lookup-method> in spring.
    • lookupModelCloningContext

      public ModelCloningContext lookupModelCloningContext()
      Must be overwritten! Use <lookup-method> in spring.
    • lookupModelCloningStrategy

      public ModelCloningStrategy lookupModelCloningStrategy()
      Must be overwritten! Use <lookup-method> in spring.
    • lookupModelSearchStrategy

      public ModelSearchStrategy lookupModelSearchStrategy()
      Must be overwritten! Use <lookup-method> in spring.
    • lookupSessionService

      public SessionService lookupSessionService()
      Must be overwritten! Use <lookup-method> in spring.
    • lookupWritePersistenceGateway

      public WritePersistenceGateway lookupWritePersistenceGateway()
      Must be overwritten! Use <lookup-method> in spring.
    • setPersistenceTypeService

      public void setPersistenceTypeService(PersistenceTypeService persistenceTypeService)
    • setCascader

      public void setCascader(Cascader cascader)
    • setSourceTransformer

      public void setSourceTransformer(SourceTransformer sourceTransformer)
    • setSldDataContainerProvider

      public void setSldDataContainerProvider(DefaultSLDDataContainerProvider sldDataContainerProvider)