mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-10 21:02:40 +00:00
Fixed a drill down issue where the filter selection would be outdated due to the asynchronicity of the filter selection widgets
This commit is contained in:
1 parent
447f69ae24
commit
f44322e4e9
3 files changed
+61
-58
No files matched your search
+1
-1
@@ -17,6 +17,6 @@ public interface FilterSelectionProvider
|
||||
|
||||
public void clearSelection();
|
||||
|
||||
void setHighestRetrieverLevelWithFilterDimension(FunctionDTO dimension, Serializable groupKey);
|
||||
void setFilterSelectionForUnreducedDimension(FunctionDTO unreducedDimension, Serializable filterValue, Runnable onCompletion);
|
||||
|
||||
}
|
||||
+19
-12
@@ -277,18 +277,6 @@ public class HierarchicalDimensionListFilterSelectionProvider extends AbstractDa
|
||||
filterDimensionSelectionModel.clear();
|
||||
filterFilterDimensionsPanel.removeAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setHighestRetrieverLevelWithFilterDimension(FunctionDTO dimension, Serializable groupKey) {
|
||||
FunctionDTO reducedDimension = reducedDimensions == null ? dimension : reducedDimensions.getReducedDimension(dimension);
|
||||
Collection<Serializable> items = Collections.singleton(groupKey);
|
||||
for (DimensionWithContext dimensionWithContext : availableFilterDimensions) {
|
||||
if (dimensionWithContext.getDimension().equals(reducedDimension)) {
|
||||
setDimensionSelection(dimensionWithContext, items, m -> { });
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applyQueryDefinition(StatisticQueryDefinitionDTO queryDefinition, Consumer<Iterable<String>> callback) {
|
||||
@@ -367,6 +355,25 @@ public class HierarchicalDimensionListFilterSelectionProvider extends AbstractDa
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFilterSelectionForUnreducedDimension(FunctionDTO unreducedDimension, Serializable filterValue, Runnable onCompletion) {
|
||||
FunctionDTO reducedDimension = reducedDimensions == null ? unreducedDimension : reducedDimensions.getReducedDimension(unreducedDimension);
|
||||
DimensionWithContext dimensionToChange = null;
|
||||
for (DimensionWithContext dimensionWithContext : availableFilterDimensions) {
|
||||
if (dimensionWithContext.getDimension().equals(reducedDimension)) {
|
||||
dimensionToChange = dimensionWithContext;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (dimensionToChange != null) {
|
||||
ignoreSelectionChangedNotifications = true;
|
||||
setDimensionSelection(dimensionToChange, Collections.singleton(filterValue), m -> { });
|
||||
ignoreSelectionChangedNotifications = false;
|
||||
updateAvailableFilterValues(dimensionToChange.getRetrieverLevel(), dimensionToChange, onCompletion);
|
||||
}
|
||||
}
|
||||
|
||||
private void setDimensionSelection(DimensionWithContext dimension, Collection<? extends Serializable> items, Consumer<Iterable<String>> callback) {
|
||||
DimensionFilterSelectionProvider selectionProvider;
|
||||
if (filterDimensionSelectionModel.isSelected(dimension)) {
|
||||
|
||||
+41
-45
@@ -256,61 +256,22 @@ public class QueryDefinitionProviderWithControls extends AbstractQueryDefinition
|
||||
*/
|
||||
public void drillDown(GroupKey groupKey, Runnable onSuccessCallback) {
|
||||
assert groupKey instanceof GenericGroupKey<?>;
|
||||
final GenericGroupKey<?> groupKeyForSingleDimension = (GenericGroupKey<?>) groupKey;
|
||||
final Serializable filterValue = (Serializable) ((GenericGroupKey<?>) groupKey).getValue();
|
||||
final Collection<FunctionDTO> dimensionsToGroupBy = groupingProvider.getDimensionsToGroupBy();
|
||||
if (!dimensionsToGroupBy.isEmpty()) {
|
||||
final FunctionDTO firstDimension = dimensionsToGroupBy.iterator().next();
|
||||
final FunctionDTO firstDimension = Util.first(dimensionsToGroupBy);
|
||||
if (dimensionsToGroupBy.size() == 1) {
|
||||
letUserSelectADifferentFirstDimension(() -> {
|
||||
filterSelectionProvider.setHighestRetrieverLevelWithFilterDimension(firstDimension,
|
||||
(Serializable) groupKeyForSingleDimension.getValue());
|
||||
onSuccessCallback.run();
|
||||
showSelectNewFirstDimensionDialog(() -> {
|
||||
filterSelectionProvider.setFilterSelectionForUnreducedDimension(firstDimension, filterValue, onSuccessCallback);
|
||||
});
|
||||
} else {
|
||||
filterSelectionProvider.setHighestRetrieverLevelWithFilterDimension(firstDimension,
|
||||
(Serializable) groupKeyForSingleDimension.getValue());
|
||||
groupingProvider.removeDimensionToGroupBy(firstDimension);
|
||||
onSuccessCallback.run();
|
||||
filterSelectionProvider.setFilterSelectionForUnreducedDimension(firstDimension, filterValue, onSuccessCallback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class FirstDimensionSelectionDialog extends DataEntryDialog<FunctionDTO> {
|
||||
private ValueListBox<FunctionDTO> dimensionChooser;
|
||||
|
||||
public FirstDimensionSelectionDialog(DialogCallback<FunctionDTO> callback) {
|
||||
super(getDataMiningStringMessages().chooseDifferentDimensionTitle(),
|
||||
getDataMiningStringMessages().chooseDifferentDimensionMessage(), getDataMiningStringMessages().ok(),
|
||||
getDataMiningStringMessages().cancel(), new DataEntryDialog.Validator<FunctionDTO>() {
|
||||
@Override
|
||||
public String getErrorMessage(FunctionDTO valueToValidate) {
|
||||
if (valueToValidate == null) {
|
||||
return getDataMiningStringMessages().pleaseSelectADimension();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}, callback);
|
||||
dimensionChooser = groupingProvider.createDimensionToGroupByBoxWithoutEventHandler();
|
||||
Collection<FunctionDTO> acceptableValues = new ArrayList<>();
|
||||
Util.addAll(groupingProvider.getAvailableDimensions(), acceptableValues);
|
||||
acceptableValues.add(null);
|
||||
dimensionChooser.setAcceptableValues(acceptableValues);
|
||||
dimensionChooser.addValueChangeHandler(e -> validateAndUpdate());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
return dimensionChooser;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected FunctionDTO getResult() {
|
||||
return dimensionChooser.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
private void letUserSelectADifferentFirstDimension(final Runnable onSuccessCallback) {
|
||||
private void showSelectNewFirstDimensionDialog(final Runnable onSuccessCallback) {
|
||||
final FirstDimensionSelectionDialog dialog = new FirstDimensionSelectionDialog(
|
||||
new DialogCallback<FunctionDTO>() {
|
||||
@Override
|
||||
@@ -614,4 +575,39 @@ public class QueryDefinitionProviderWithControls extends AbstractQueryDefinition
|
||||
|
||||
}
|
||||
|
||||
private class FirstDimensionSelectionDialog extends DataEntryDialog<FunctionDTO> {
|
||||
private ValueListBox<FunctionDTO> dimensionChooser;
|
||||
|
||||
public FirstDimensionSelectionDialog(DialogCallback<FunctionDTO> callback) {
|
||||
super(getDataMiningStringMessages().chooseDifferentDimensionTitle(),
|
||||
getDataMiningStringMessages().chooseDifferentDimensionMessage(), getDataMiningStringMessages().ok(),
|
||||
getDataMiningStringMessages().cancel(), new DataEntryDialog.Validator<FunctionDTO>() {
|
||||
@Override
|
||||
public String getErrorMessage(FunctionDTO valueToValidate) {
|
||||
if (valueToValidate == null) {
|
||||
return getDataMiningStringMessages().pleaseSelectADimension();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}, callback);
|
||||
dimensionChooser = groupingProvider.createDimensionToGroupByBoxWithoutEventHandler();
|
||||
Collection<FunctionDTO> acceptableValues = new ArrayList<>();
|
||||
Util.addAll(groupingProvider.getAvailableDimensions(), acceptableValues);
|
||||
acceptableValues.add(null);
|
||||
dimensionChooser.setAcceptableValues(acceptableValues);
|
||||
dimensionChooser.addValueChangeHandler(e -> validateAndUpdate());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Widget getAdditionalWidget() {
|
||||
return dimensionChooser;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected FunctionDTO getResult() {
|
||||
return dimensionChooser.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user