diff --git a/java/com.sap.sse.datamining.ui/src/main/java/com/sap/sse/datamining/ui/client/FilterSelectionProvider.java b/java/com.sap.sse.datamining.ui/src/main/java/com/sap/sse/datamining/ui/client/FilterSelectionProvider.java index 3161015cb61..9ceb0084d27 100644 --- a/java/com.sap.sse.datamining.ui/src/main/java/com/sap/sse/datamining/ui/client/FilterSelectionProvider.java +++ b/java/com.sap.sse.datamining.ui/src/main/java/com/sap/sse/datamining/ui/client/FilterSelectionProvider.java @@ -17,6 +17,6 @@ public interface FilterSelectionProvider public void clearSelection(); - void setHighestRetrieverLevelWithFilterDimension(FunctionDTO dimension, Serializable groupKey); + void setFilterSelectionForUnreducedDimension(FunctionDTO unreducedDimension, Serializable filterValue, Runnable onCompletion); } \ No newline at end of file diff --git a/java/com.sap.sse.datamining.ui/src/main/java/com/sap/sse/datamining/ui/client/selection/HierarchicalDimensionListFilterSelectionProvider.java b/java/com.sap.sse.datamining.ui/src/main/java/com/sap/sse/datamining/ui/client/selection/HierarchicalDimensionListFilterSelectionProvider.java index 6b02d5f4fee..c9cb6804b85 100644 --- a/java/com.sap.sse.datamining.ui/src/main/java/com/sap/sse/datamining/ui/client/selection/HierarchicalDimensionListFilterSelectionProvider.java +++ b/java/com.sap.sse.datamining.ui/src/main/java/com/sap/sse/datamining/ui/client/selection/HierarchicalDimensionListFilterSelectionProvider.java @@ -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 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> 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 items, Consumer> callback) { DimensionFilterSelectionProvider selectionProvider; if (filterDimensionSelectionModel.isSelected(dimension)) { diff --git a/java/com.sap.sse.datamining.ui/src/main/java/com/sap/sse/datamining/ui/client/selection/QueryDefinitionProviderWithControls.java b/java/com.sap.sse.datamining.ui/src/main/java/com/sap/sse/datamining/ui/client/selection/QueryDefinitionProviderWithControls.java index 9669e8a23f0..35d8f64108b 100644 --- a/java/com.sap.sse.datamining.ui/src/main/java/com/sap/sse/datamining/ui/client/selection/QueryDefinitionProviderWithControls.java +++ b/java/com.sap.sse.datamining.ui/src/main/java/com/sap/sse/datamining/ui/client/selection/QueryDefinitionProviderWithControls.java @@ -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 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 { - private ValueListBox dimensionChooser; - - public FirstDimensionSelectionDialog(DialogCallback callback) { - super(getDataMiningStringMessages().chooseDifferentDimensionTitle(), - getDataMiningStringMessages().chooseDifferentDimensionMessage(), getDataMiningStringMessages().ok(), - getDataMiningStringMessages().cancel(), new DataEntryDialog.Validator() { - @Override - public String getErrorMessage(FunctionDTO valueToValidate) { - if (valueToValidate == null) { - return getDataMiningStringMessages().pleaseSelectADimension(); - } else { - return null; - } - } - }, callback); - dimensionChooser = groupingProvider.createDimensionToGroupByBoxWithoutEventHandler(); - Collection 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() { @Override @@ -614,4 +575,39 @@ public class QueryDefinitionProviderWithControls extends AbstractQueryDefinition } + private class FirstDimensionSelectionDialog extends DataEntryDialog { + private ValueListBox dimensionChooser; + + public FirstDimensionSelectionDialog(DialogCallback callback) { + super(getDataMiningStringMessages().chooseDifferentDimensionTitle(), + getDataMiningStringMessages().chooseDifferentDimensionMessage(), getDataMiningStringMessages().ok(), + getDataMiningStringMessages().cancel(), new DataEntryDialog.Validator() { + @Override + public String getErrorMessage(FunctionDTO valueToValidate) { + if (valueToValidate == null) { + return getDataMiningStringMessages().pleaseSelectADimension(); + } else { + return null; + } + } + }, callback); + dimensionChooser = groupingProvider.createDimensionToGroupByBoxWithoutEventHandler(); + Collection 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(); + } + } + }