Class DefaultEntryMergeStrategy

java.lang.Object
de.hybris.platform.commerceservices.order.strategies.impl.DefaultEntryMergeStrategy
All Implemented Interfaces:
EntryMergeStrategy

public class DefaultEntryMergeStrategy extends Object implements EntryMergeStrategy
Default implementation of EntryMergeStrategy.

Any module can register a filter of type EntryMergeFilter. The filter can return FALSE to deny merging particular entry with given CommerceCartParameter.

Also it is possible to change order of preference for input entries.

See Also:
  • Constructor Details

    • DefaultEntryMergeStrategy

      public DefaultEntryMergeStrategy()
  • Method Details

    • getEntryToMerge

      public AbstractOrderEntryModel getEntryToMerge(List<AbstractOrderEntryModel> entries, @Nonnull AbstractOrderEntryModel newEntry)
      Description copied from interface: EntryMergeStrategy
      Returns cart entry can be updated instead of creation of separate newEntry.
      Specified by:
      getEntryToMerge in interface EntryMergeStrategy
      Parameters:
      entries - list of existing entries
      newEntry - the merge candidate (can be an item of entries
      Returns:
      merge target (null if no applicable entries found)
    • canMerge

      protected Boolean canMerge(@Nonnull AbstractOrderEntryModel mergeCandidate, @Nonnull AbstractOrderEntryModel newEntry)
      This method determines whether given entry can be merged with the given entry creation candidate.
      Parameters:
      mergeCandidate - entry that is supposed to be merge acceptor
      newEntry - entry to find merge target for
      Returns:
      Boolean.FALSE to disable merge of newEntry to mergeCandidate
    • getEntryMergeFilters

      protected List<EntryMergeFilter> getEntryMergeFilters()
    • setEntryMergeFilters

      public void setEntryMergeFilters(List<EntryMergeFilter> items)
      Filters to reject entities that can not be merged.

      The filters are applied in their natural order, so it worth to put the filters that are fast and likely return Boolean.FALSE on top of the list. It will speed up the filtration.

      Parameters:
      items - new list of filters
      See Also:
    • getEntryModelComparator

      protected Comparator<AbstractOrderEntryModel> getEntryModelComparator()
    • setEntryModelComparator

      public void setEntryModelComparator(Comparator<AbstractOrderEntryModel> entryModelComparator)
      The comparator can be overridden to change order of preference for entries. {@link this#getEntryToMerge(List, CommerceCartParameter)} returns first suitable entry of the resulting list.

      The default implementation does not change order of entries.

      Parameters:
      entryModelComparator - new AbstractOrderEntryModel comparator