Bug 571029: [R-DataEditor] Fix filter application of filter after
refresh

Change-Id: Iedbdec6723cae1a23e7779e0d5c25009599b84c9
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/IntervalVariableFilter.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/IntervalVariableFilter.java
index d9b31c5..42228cb 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/IntervalVariableFilter.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/IntervalVariableFilter.java
@@ -67,13 +67,14 @@
 	@Override
 	public void load(final VariableFilter filter) {
 		if (filter.getType() == FilterType.INTERVAL
-				&& filter.getColumn().getDataStore().getStoreType() == getColumn().getDataStore().getStoreType()) {
+				&& filter.getColumn().getDataStore().getStoreType() == getColumn().getDataStore().getStoreType() ) {
 			final IntervalVariableFilter intervalFilter= (IntervalVariableFilter)filter;
 			runInRealm(() -> {
-				final var minMaxData= this.minMaxData;
-				if (minMaxData != null) {
+				var minMaxData= this.minMaxData;
+				if (minMaxData != null || (minMaxData= intervalFilter.minMaxData) == null) {
 					return;
 				}
+				this.minMaxData= minMaxData;
 				this.selectedLowerValue.setValue(intervalFilter.getSelectedLowerValue().getValue());
 				this.selectedUpperValue.setValue(intervalFilter.getSelectedUpperValue().getValue());
 				this.selectedNA.setValue(intervalFilter.getSelectedNA().getValue());
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/LevelVariableFilter.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/LevelVariableFilter.java
index 9534fa4..4687f2c 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/LevelVariableFilter.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/datafilter/LevelVariableFilter.java
@@ -38,7 +38,7 @@
 public class LevelVariableFilter extends VariableFilter {
 	
 	
-	private RStore<?> availableValues;
+	private @Nullable RStore<?> availableValues;
 	
 	private final IObservableSet<Object> selectedValues;
 	
@@ -46,7 +46,6 @@
 	public LevelVariableFilter(final FilterSet set, final RDataTableColumn column) {
 		super(set, column);
 		
-		this.availableValues= NO_VALUES;
 		this.selectedValues= new WritableSet<>(set.getRealm());
 		registerObservable(this.selectedValues);
 	}
@@ -59,9 +58,13 @@
 	
 	@Override
 	public void load(final VariableFilter filter) {
-		if (filter.getType() == FilterType.LEVEL) {
+		if (filter.getType() == FilterType.LEVEL
+				&& filter.getColumn().getDataStore().getStoreType() == getColumn().getDataStore().getStoreType() ) {
 			final LevelVariableFilter levelFilter= (LevelVariableFilter)filter;
 			runInRealm(() -> {
+				if (this.availableValues == null) {
+					this.availableValues= levelFilter.availableValues;
+				}
 				this.selectedValues.addAll(levelFilter.getSelectedValues());
 			});
 		}
@@ -114,7 +117,7 @@
 	
 	protected void setValues(final RStore<?> values) {
 		runInRealm(() -> {
-			if (!this.availableValues.equals(values) || getError() != null) {
+			if (!values.equals(this.availableValues) || getError() != null) {
 				this.availableValues= values;
 				clearError();
 				notifyListeners();
@@ -185,7 +188,8 @@
 	
 	
 	public RStore<?> getAvailableValues() {
-		return this.availableValues;
+		final var availableValues= this.availableValues;
+		return (availableValues != null) ? availableValues : NO_VALUES;
 	}
 	
 	public IObservableSet getSelectedValues() {