From eef6932a4a76e074ebf4ac65383710f3b9e88b38 Mon Sep 17 00:00:00 2001 From: Arseniy Borisov Date: Mon, 13 Nov 2017 12:10:06 +0300 Subject: [PATCH] Update by payload fixed (#51) --- .../collections/ObservableList.java | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/touchin/roboswag/core/observables/collections/ObservableList.java b/src/main/java/ru/touchin/roboswag/core/observables/collections/ObservableList.java index 6b979bf..14dcd19 100644 --- a/src/main/java/ru/touchin/roboswag/core/observables/collections/ObservableList.java +++ b/src/main/java/ru/touchin/roboswag/core/observables/collections/ObservableList.java @@ -58,6 +58,8 @@ public class ObservableList extends ObservableCollection implement private SameItemsPredicate sameItemsPredicate; @Nullable private ChangePayloadProducer changePayloadProducer; + @Nullable + private ObservableList diffUtilsSource; public ObservableList() { super(); @@ -227,9 +229,19 @@ public class ObservableList extends ObservableCollection implement synchronized (this) { final List oldList = new ArrayList<>(items); final List newList = new ArrayList<>(newItems); - final CollectionsChangesCalculator calculator = sameItemsPredicate != null - ? new DiffCollectionsChangesCalculator<>(oldList, newList, detectMoves, sameItemsPredicate, changePayloadProducer) - : new DefaultCollectionsChangesCalculator<>(oldList, newList, false); + final CollectionsChangesCalculator calculator; + if (diffUtilsSource != null) { + if (diffUtilsSource.sameItemsPredicate != null) { + calculator = new DiffCollectionsChangesCalculator<>(oldList, newList, + diffUtilsSource.detectMoves, diffUtilsSource.sameItemsPredicate, diffUtilsSource.changePayloadProducer); + } else { + calculator = new DefaultCollectionsChangesCalculator<>(oldList, newList, false); + } + } else if (sameItemsPredicate != null) { + calculator = new DiffCollectionsChangesCalculator<>(oldList, newList, detectMoves, sameItemsPredicate, changePayloadProducer); + } else { + calculator = new DefaultCollectionsChangesCalculator<>(oldList, newList, false); + } items.clear(); items.addAll(newItems); notifyAboutChanges(calculator.calculateInsertedItems(), calculator.calculateRemovedItems(), calculator.calculateChanges()); @@ -271,7 +283,16 @@ public class ObservableList extends ObservableCollection implement * @return true if diff utils is enabled. */ public boolean diffUtilsIsEnabled() { - return sameItemsPredicate != null; + return diffUtilsSource != null ? diffUtilsSource.diffUtilsIsEnabled() : sameItemsPredicate != null; + } + + /** + * Sets observableCollection as a source of diff utils parameters; + * + * @param diffUtilsSource Source of diff utils parameters. + */ + public void setDiffUtilsSource(@Nullable final ObservableList diffUtilsSource) { + this.diffUtilsSource = diffUtilsSource; } /**