Skip to content

Commit

Permalink
Add missing cache in Differential
Browse files Browse the repository at this point in the history
  • Loading branch information
fducroquet committed Jul 24, 2017
1 parent 553e2a5 commit 2378ab5
Showing 1 changed file with 20 additions and 12 deletions.
32 changes: 20 additions & 12 deletions gs-common/src/main/java/org/genericsystem/common/Differential.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.genericsystem.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;

import org.genericsystem.api.core.FiltersBuilder;
Expand All @@ -28,6 +30,7 @@ public class Differential implements IDifferential<Generic> {
private final IDifferential<Generic> subDifferential;
protected final PseudoConcurrentCollection<Generic> adds = new PseudoConcurrentCollection<>();
protected final PseudoConcurrentCollection<Generic> removes = new PseudoConcurrentCollection<>();
private Map<Generic, ObservableList<Generic>> dependenciesAsOservableListCacheMap = new HashMap<>();

public Differential(IDifferential<Generic> subDifferential) {
this.subDifferential = subDifferential;
Expand Down Expand Up @@ -110,18 +113,23 @@ public Stream<Generic> unfilteredStream() {

@Override
public ObservableList<Generic> toObservableList() {
return BindingsTools.createMinimalUnitaryChangesBinding(BindingsTools.transmitSuccessiveInvalidations(new ListBinding<Generic>() {
private final Observable invalidator = cache != null ? cache.getObservable(generic) : getObservable(generic);
{
bind(invalidator);
invalidate();
}

@Override
protected ObservableList<Generic> computeValue() {
return FXCollections.observableList(cache != null ? cache.getDependencies(generic).toList() : Differential.this.getDependencies(generic).toList());
}
}));
ObservableList<Generic> result = dependenciesAsOservableListCacheMap.get(generic);
if (result == null) {
result = BindingsTools.createMinimalUnitaryChangesBinding(BindingsTools.transmitSuccessiveInvalidations(new ListBinding<Generic>() {
private final Observable invalidator = cache != null ? cache.getObservable(generic) : getObservable(generic);
{
bind(invalidator);
invalidate();
}

@Override
protected ObservableList<Generic> computeValue() {
return FXCollections.observableList(cache != null ? cache.getDependencies(generic).toList() : Differential.this.getDependencies(generic).toList());
}
}));
dependenciesAsOservableListCacheMap.put(generic, result);
}
return result;
}
};
}
Expand Down

0 comments on commit 2378ab5

Please sign in to comment.