Create data structure to store parameters of a report

This commit is contained in:
Lennart Hensler committed 2020-10-26 20:28:34 +01:00
1 parent bfa302cf8f
commit f6091ad61c
16 files changed
+139 -43

No files matched your search

@@ -3,9 +3,7 @@ package com.sap.sailing.gwt.ui.datamining;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Consumer;
@@ -33,13 +31,14 @@ import com.google.gwt.user.client.ui.Widget;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.datamining.shared.DataMiningSession;
import com.sap.sse.datamining.shared.dto.DataMiningReportDTO;
import com.sap.sse.datamining.shared.dto.DataMiningReportParametersDTO.ParameterKey;
import com.sap.sse.datamining.shared.dto.DataMiningReportParametersDTO.QueryKey;
import com.sap.sse.datamining.shared.dto.StatisticQueryDefinitionDTO;
import com.sap.sse.datamining.shared.dto.StoredDataMiningReportDTO;
import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO;
import com.sap.sse.datamining.shared.impl.dto.FunctionDTO;
import com.sap.sse.datamining.shared.impl.dto.ModifiableDataMiningReportDTO;
import com.sap.sse.datamining.shared.impl.dto.ModifiableStatisticQueryDefinitionDTO;
import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO;
import com.sap.sse.datamining.shared.impl.dto.parameters.ModifiableDataMiningReportParametersDTO;
import com.sap.sse.datamining.ui.client.CompositeResultsPresenter;
import com.sap.sse.datamining.ui.client.DataMiningServiceAsync;
import com.sap.sse.datamining.ui.client.DataRetrieverChainDefinitionProvider;
@@ -47,7 +46,6 @@ import com.sap.sse.datamining.ui.client.StringMessages;
import com.sap.sse.datamining.ui.client.event.ConfigureFilterParameterEvent;
import com.sap.sse.datamining.ui.client.event.DataMiningEventBus;
import com.sap.sse.datamining.ui.client.event.FilterParameterChangedEvent;
import com.sap.sse.datamining.ui.client.parameterization.ParameterizedFilterDimension;
import com.sap.sse.datamining.ui.client.selection.ConfigureQueryParametersDialog;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.Notification;
@@ -85,7 +83,7 @@ public class DataMiningReportStoreControls extends Composite {
private final MultiWordSuggestOracle oracle;
private final Panel applyReportBusyIndicator;
private final Map<Pair<DataRetrieverLevelDTO, FunctionDTO>, ParameterizedFilterDimension> filterParameters;
private final ModifiableDataMiningReportParametersDTO filterParameters;
private final ConfigureQueryParametersDialog configureQueryParametersDialog;
@@ -95,7 +93,7 @@ public class DataMiningReportStoreControls extends Composite {
this.errorReporter = errorReporter;
this.session = session;
this.dataMiningService = dataMiningService;
this.filterParameters = new HashMap<>();
this.filterParameters = new ModifiableDataMiningReportParametersDTO();
this.reportsProvider = reportsProvider;
this.reportsProvider.addReportsChangedListener(
reports -> updateOracle(reports.stream().map(r -> r.getName()).collect(Collectors.toList())));
@@ -183,11 +181,13 @@ public class DataMiningReportStoreControls extends Composite {
private void onConfigureFilterParameter(ConfigureFilterParameterEvent event) {
this.configureQueryParametersDialog.show(event, parameter -> {
// StatisticQueryDefinitionDTO query = this.resultsPresenter.getCurrentQueryDefinition();
// QueryKey queryKey = new QueryKey(query.getStatisticToCalculate(), query.getAggregatorDefinition());
if (parameter == null) {
filterParameters.remove(new Pair<>(event.getRetrieverLevel(), event.getDimension()));
filterParameters.remove(new ParameterKey(event.getRetrieverLevel(), event.getDimension()));
// TODO Remove parameter from triggering filter selection provider
} else {
filterParameters.put(new Pair<>(parameter.getRetrieverLevel(), parameter.getDimension()), parameter);
filterParameters.add(new ParameterKey(parameter.getRetrieverLevel(), parameter.getDimension()), parameter);
DataMiningEventBus.fire(new FilterParameterChangedEvent(parameter));
}
});
@@ -198,7 +198,7 @@ public class DataMiningReportStoreControls extends Composite {
.stream(resultsPresenter.getPresenterIds().spliterator(), false)
.map(resultsPresenter::getQueryDefinition).filter(Objects::nonNull).collect(Collectors.toList());
if (!queryDefinitions.isEmpty()) {
return new ModifiableDataMiningReportDTO(new ArrayList<>(queryDefinitions));
return new ModifiableDataMiningReportDTO(new ArrayList<>(queryDefinitions), new ModifiableDataMiningReportParametersDTO(filterParameters));
} else {
return null;
}
@@ -10,6 +10,7 @@ Export-Package: com.sap.sse.datamining.shared,
com.sap.sse.datamining.shared.dto,
com.sap.sse.datamining.shared.impl,
com.sap.sse.datamining.shared.impl.dto,
com.sap.sse.datamining.shared.impl.dto.parameters,
com.sap.sse.datamining.shared.util
Bundle-ActivationPolicy: lazy
Require-Bundle: com.sap.sse.datamining.annotations,
@@ -7,6 +7,6 @@ public interface DataMiningReportDTO extends Serializable {
ArrayList<StatisticQueryDefinitionDTO> getQueryDefinitions();
// TODO Add parameters
DataMiningReportParametersDTO getParameters();
}
@@ -0,0 +1,32 @@
package com.sap.sse.datamining.shared.dto;
import java.util.Map;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.datamining.shared.impl.dto.AggregationProcessorDefinitionDTO;
import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO;
import com.sap.sse.datamining.shared.impl.dto.FunctionDTO;
public interface DataMiningReportParametersDTO {
public static class ParameterKey extends Pair<DataRetrieverLevelDTO, FunctionDTO> {
private static final long serialVersionUID = -6819556797537594552L;
public ParameterKey(DataRetrieverLevelDTO retrieverLevel, FunctionDTO dimension) {
super(retrieverLevel, dimension);
}
}
public static class QueryKey extends Pair<FunctionDTO, AggregationProcessorDefinitionDTO> {
private static final long serialVersionUID = -4239175922626327780L;
public QueryKey(FunctionDTO statisticToCalculate, AggregationProcessorDefinitionDTO aggregatorDefinition) {
super(statisticToCalculate, aggregatorDefinition);
}
}
Map<ParameterKey, FilterDimensionParameter> getAll();
boolean contains(ParameterKey key);
FilterDimensionParameter get(ParameterKey key);
}
@@ -1,4 +1,4 @@
package com.sap.sse.datamining.ui.client.parameterization;
package com.sap.sse.datamining.shared.dto;
import java.io.Serializable;
import java.util.Collection;
@@ -6,7 +6,7 @@ import java.util.Collection;
import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO;
import com.sap.sse.datamining.shared.impl.dto.FunctionDTO;
public interface ParameterizedFilterDimension {
public interface FilterDimensionParameter {
DataRetrieverLevelDTO getRetrieverLevel();
FunctionDTO getDimension();
@@ -3,32 +3,41 @@ package com.sap.sse.datamining.shared.impl.dto;
import java.util.ArrayList;
import com.sap.sse.datamining.shared.dto.DataMiningReportDTO;
import com.sap.sse.datamining.shared.dto.DataMiningReportParametersDTO;
import com.sap.sse.datamining.shared.dto.StatisticQueryDefinitionDTO;
import com.sap.sse.datamining.shared.impl.dto.parameters.ModifiableDataMiningReportParametersDTO;
public class ModifiableDataMiningReportDTO implements DataMiningReportDTO {
private static final long serialVersionUID = -6512175470789118223L;
private ArrayList<StatisticQueryDefinitionDTO> queryDefinitions;
private DataMiningReportParametersDTO parameters;
public ModifiableDataMiningReportDTO() {
this(new ArrayList<>());
this(new ArrayList<>(), new ModifiableDataMiningReportParametersDTO());
}
public ModifiableDataMiningReportDTO(ArrayList<StatisticQueryDefinitionDTO> queryDefinitions) {
public ModifiableDataMiningReportDTO(ArrayList<StatisticQueryDefinitionDTO> queryDefinitions, DataMiningReportParametersDTO parameters) {
this.queryDefinitions = queryDefinitions;
this.parameters = parameters;
}
@Override
public ArrayList<StatisticQueryDefinitionDTO> getQueryDefinitions() {
return this.queryDefinitions;
return queryDefinitions;
}
public void addQueryDefinition(StatisticQueryDefinitionDTO queryDefinition) {
this.queryDefinitions.add(queryDefinition);
queryDefinitions.add(queryDefinition);
}
public boolean removeQueryDefinition(StatisticQueryDefinitionDTO queryDefinition) {
return this.queryDefinitions.remove(queryDefinition);
return queryDefinitions.remove(queryDefinition);
}
@Override
public DataMiningReportParametersDTO getParameters() {
return parameters;
}
}
@@ -1,13 +1,14 @@
package com.sap.sse.datamining.ui.client.parameterization;
package com.sap.sse.datamining.shared.impl.dto.parameters;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import com.sap.sse.datamining.shared.dto.FilterDimensionParameter;
import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO;
import com.sap.sse.datamining.shared.impl.dto.FunctionDTO;
public abstract class AbstractParameterizedDimensionFilter implements ParameterizedFilterDimension {
public abstract class AbstractParameterizedDimensionFilter implements FilterDimensionParameter {
private final DataRetrieverLevelDTO retrieverLevel;
private final FunctionDTO dimension;
@@ -1,4 +1,4 @@
package com.sap.sse.datamining.ui.client.parameterization;
package com.sap.sse.datamining.shared.impl.dto.parameters;
import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO;
import com.sap.sse.datamining.shared.impl.dto.FunctionDTO;
@@ -1,4 +1,4 @@
package com.sap.sse.datamining.ui.client.parameterization;
package com.sap.sse.datamining.shared.impl.dto.parameters;
import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO;
import com.sap.sse.datamining.shared.impl.dto.FunctionDTO;
@@ -0,0 +1,53 @@
package com.sap.sse.datamining.shared.impl.dto.parameters;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import com.sap.sse.datamining.shared.dto.DataMiningReportParametersDTO;
import com.sap.sse.datamining.shared.dto.FilterDimensionParameter;
public class ModifiableDataMiningReportParametersDTO implements DataMiningReportParametersDTO {
private final Map<ParameterKey, FilterDimensionParameter> parameters;
private final Map<QueryKey, Collection<ParameterKey>> usages;
public ModifiableDataMiningReportParametersDTO() {
parameters = new HashMap<>();
usages = new HashMap<>();
}
public ModifiableDataMiningReportParametersDTO(ModifiableDataMiningReportParametersDTO source) {
this.parameters = source.getAll();
this.usages = new HashMap<>();
for (Entry<QueryKey, Collection<ParameterKey>> entry : source.usages.entrySet()) {
this.usages.put(entry.getKey(), new ArrayList<>(entry.getValue()));
}
}
@Override
public Map<ParameterKey, FilterDimensionParameter> getAll() {
return new HashMap<>(parameters);
}
@Override
public boolean contains(ParameterKey key) {
return parameters.containsKey(key);
}
@Override
public FilterDimensionParameter get(ParameterKey key) {
return parameters.get(key);
}
public void add(ParameterKey key, FilterDimensionParameter parameter) {
parameters.put(key, parameter);
}
public void remove(ParameterKey key) {
parameters.remove(key);
}
}
@@ -1,4 +1,4 @@
package com.sap.sse.datamining.ui.client.parameterization;
package com.sap.sse.datamining.shared.impl.dto.parameters;
import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO;
import com.sap.sse.datamining.shared.impl.dto.FunctionDTO;
@@ -1,4 +1,4 @@
package com.sap.sse.datamining.ui.client.parameterization;
package com.sap.sse.datamining.shared.impl.dto.parameters;
import java.io.Serializable;
@@ -1,4 +1,4 @@
package com.sap.sse.datamining.ui.client.parameterization;
package com.sap.sse.datamining.shared.impl.dto.parameters;
import java.io.Serializable;
import java.util.Collection;
@@ -4,7 +4,7 @@ import com.google.gwt.event.shared.EventHandler;
import com.google.web.bindery.event.shared.Event;
import com.google.web.bindery.event.shared.EventBus;
import com.google.web.bindery.event.shared.HandlerRegistration;
import com.sap.sse.datamining.ui.client.parameterization.ParameterizedFilterDimension;
import com.sap.sse.datamining.shared.dto.FilterDimensionParameter;
public class FilterParameterChangedEvent extends Event<FilterParameterChangedEvent.Handler> {
@@ -15,13 +15,13 @@ public class FilterParameterChangedEvent extends Event<FilterParameterChangedEve
void onFilterParameterChenge(FilterParameterChangedEvent event);
}
private final ParameterizedFilterDimension parameter;
private final FilterDimensionParameter parameter;
public FilterParameterChangedEvent(ParameterizedFilterDimension parameter) {
public FilterParameterChangedEvent(FilterDimensionParameter parameter) {
this.parameter = parameter;
}
public ParameterizedFilterDimension getParameter() {
public FilterDimensionParameter getParameter() {
return parameter;
}
@@ -46,20 +46,20 @@ import com.sap.sse.common.settings.SerializableSettings;
import com.sap.sse.common.util.NaturalComparator;
import com.sap.sse.datamining.shared.DataMiningSession;
import com.sap.sse.datamining.shared.GroupKey;
import com.sap.sse.datamining.shared.dto.FilterDimensionParameter;
import com.sap.sse.datamining.shared.impl.GenericGroupKey;
import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO;
import com.sap.sse.datamining.shared.impl.dto.FunctionDTO;
import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO;
import com.sap.sse.datamining.shared.impl.dto.parameters.ContainsTextFilterParameter;
import com.sap.sse.datamining.shared.impl.dto.parameters.EndsWithFilterParameter;
import com.sap.sse.datamining.shared.impl.dto.parameters.StartsWithFilterParameter;
import com.sap.sse.datamining.shared.impl.dto.parameters.ValueListFilterParameter;
import com.sap.sse.datamining.ui.client.AbstractDataMiningComponent;
import com.sap.sse.datamining.ui.client.DataMiningServiceAsync;
import com.sap.sse.datamining.ui.client.DataRetrieverChainDefinitionProvider;
import com.sap.sse.datamining.ui.client.StringMessages;
import com.sap.sse.datamining.ui.client.event.ConfigureFilterParameterEvent;
import com.sap.sse.datamining.ui.client.parameterization.ContainsTextFilterParameter;
import com.sap.sse.datamining.ui.client.parameterization.EndsWithFilterParameter;
import com.sap.sse.datamining.ui.client.parameterization.ParameterizedFilterDimension;
import com.sap.sse.datamining.ui.client.parameterization.StartsWithFilterParameter;
import com.sap.sse.datamining.ui.client.parameterization.ValueListFilterParameter;
import com.sap.sse.datamining.ui.client.resources.DataMiningDataGridResources;
import com.sap.sse.gwt.client.ErrorReporter;
import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator;
@@ -67,7 +67,7 @@ import com.sap.sse.gwt.client.panels.AbstractFilterablePanel;
import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.shared.controls.AbstractObjectRenderer;
public class ConfigureQueryParametersDialog extends AbstractDataMiningComponent<SerializableSettings> {
public class ConfigureQueryParametersDialog extends AbstractDataMiningComponent<SerializableSettings> {
private enum FilterParameterType {
ValueList, Contains, StartsWith, EndsWith;
@@ -125,7 +125,7 @@ public class ConfigureQueryParametersDialog extends AbstractDataMiningComponent<
private DataRetrieverLevelDTO retrieverLevel;
private FunctionDTO dimension;
private Consumer<ParameterizedFilterDimension> onApply;
private Consumer<FilterDimensionParameter> onApply;
private Runnable onCancel;
public ConfigureQueryParametersDialog(DataMiningServiceAsync dataMiningService,
@@ -287,11 +287,11 @@ public class ConfigureQueryParametersDialog extends AbstractDataMiningComponent<
// TODO Select existing parameter to be used as filter dimension values
// TODO Allow editing of the parameter if the dimension is already parameterized
public void show(ConfigureFilterParameterEvent data, Consumer<ParameterizedFilterDimension> onApply) {
public void show(ConfigureFilterParameterEvent data, Consumer<FilterDimensionParameter> onApply) {
this.show(data, onApply, null);
}
public void show(ConfigureFilterParameterEvent data, Consumer<ParameterizedFilterDimension> onApply, Runnable onCancel) {
public void show(ConfigureFilterParameterEvent data, Consumer<FilterDimensionParameter> onApply, Runnable onCancel) {
this.filterValuesToSelect = data.getSelectedValues();
this.retrieverLevel = data.getRetrieverLevel();
this.dimension = data.getDimension();
@@ -403,7 +403,7 @@ public class ConfigureQueryParametersDialog extends AbstractDataMiningComponent<
private void applyParameter() {
hide();
ParameterizedFilterDimension parameter;
FilterDimensionParameter parameter;
switch (getSelectedParameterType()) {
case ValueList:
parameter = new ValueListFilterParameter(retrieverLevel, dimension, selectionModel.getSelectedSet());
@@ -45,6 +45,7 @@ import com.sap.sse.common.settings.SerializableSettings;
import com.sap.sse.common.util.NaturalComparator;
import com.sap.sse.datamining.shared.DataMiningSession;
import com.sap.sse.datamining.shared.GroupKey;
import com.sap.sse.datamining.shared.dto.FilterDimensionParameter;
import com.sap.sse.datamining.shared.impl.GenericGroupKey;
import com.sap.sse.datamining.shared.impl.dto.DataRetrieverLevelDTO;
import com.sap.sse.datamining.shared.impl.dto.FunctionDTO;
@@ -60,7 +61,6 @@ import com.sap.sse.datamining.ui.client.event.DataMiningEventBus;
import com.sap.sse.datamining.ui.client.event.FilterParameterChangedEvent;
import com.sap.sse.datamining.ui.client.execution.ManagedDataMiningQueryCallback;
import com.sap.sse.datamining.ui.client.execution.SimpleManagedDataMiningQueriesCounter;
import com.sap.sse.datamining.ui.client.parameterization.ParameterizedFilterDimension;
import com.sap.sse.datamining.ui.client.resources.DataMiningDataGridResources;
import com.sap.sse.datamining.ui.client.resources.DataMiningResources;
import com.sap.sse.gwt.client.ErrorReporter;
@@ -98,7 +98,7 @@ public class DimensionFilterSelectionProvider extends AbstractDataMiningComponen
private final DataGrid<Serializable> dataGrid;
private final Column<Serializable, Boolean> checkboxColumn;
private ParameterizedFilterDimension parameter;
private FilterDimensionParameter parameter;
private String searchInputToApply;
private Iterable<? extends Serializable> selectionToBeApplied;
@@ -188,7 +188,7 @@ public class DimensionFilterSelectionProvider extends AbstractDataMiningComponen
mainPanel.add(contentContainer);
DataMiningEventBus.addHandler(FilterParameterChangedEvent.TYPE, event -> {
ParameterizedFilterDimension parameter = event.getParameter();
FilterDimensionParameter parameter = event.getParameter();
if (parameter.getRetrieverLevel().equals(retrieverLevel) && parameter.getDimension().equals(dimension)) {
this.parameter = parameter;
this.filterPanel.filter();