mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-15 10:18:45 +00:00
bug4789: a few minor fixes; a few things start to work around report parameters
This commit is contained in:
@@ -848,14 +848,25 @@ public class Util {
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new set in any case
|
||||
*/
|
||||
public static <T> Set<T> asNewSet(Iterable<T> iterable) {
|
||||
final Set<T> result = new HashSet<>();
|
||||
addAll(iterable, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* If {@code iterable} already is a set, return it; otherwise create a new set
|
||||
*/
|
||||
public static <T> Set<T> asSet(Iterable<T> iterable) {
|
||||
final Set<T> result;
|
||||
if (iterable instanceof Set<?>) {
|
||||
result = (Set<T>) iterable;
|
||||
} else {
|
||||
result = new HashSet<>();
|
||||
addAll(iterable, result);
|
||||
result = asNewSet(iterable);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
+9
@@ -46,6 +46,10 @@ public class ReportParameterToDimensionFilterBindings implements Iterable<Entry<
|
||||
*/
|
||||
public ReportParameterToDimensionFilterBindings(ReportParameterToDimensionFilterBindings other) {
|
||||
this();
|
||||
fillFromOther(other);
|
||||
}
|
||||
|
||||
private void fillFromOther(ReportParameterToDimensionFilterBindings other) {
|
||||
for (final Entry<FilterDimensionIdentifier, FilterDimensionParameter> e : other) {
|
||||
setParameterBinding(e.getKey(), e.getValue());
|
||||
}
|
||||
@@ -67,4 +71,9 @@ public class ReportParameterToDimensionFilterBindings implements Iterable<Entry<
|
||||
public Iterator<Entry<FilterDimensionIdentifier, FilterDimensionParameter>> iterator() {
|
||||
return parameterBindings.entrySet().iterator();
|
||||
}
|
||||
|
||||
public void set(ReportParameterToDimensionFilterBindings parameterUsages) {
|
||||
parameterBindings.clear();
|
||||
fillFromOther(parameterUsages);
|
||||
}
|
||||
}
|
||||
|
||||
+1
@@ -70,6 +70,7 @@ public class ModifiableDataMiningReportDTO implements DataMiningReportDTO {
|
||||
this.parameters = new HashSet<>();
|
||||
Util.addAll(parameters, this.parameters);
|
||||
parameterModelListeners = new HashSet<>();
|
||||
parameterUsages = new IdentityHashMap<>();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+12
-4
@@ -40,6 +40,7 @@ import com.google.gwt.view.client.DefaultSelectionEventManager.SelectAction;
|
||||
import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.settings.SerializableSettings;
|
||||
import com.sap.sse.common.util.NaturalComparator;
|
||||
import com.sap.sse.datamining.shared.DataMiningSession;
|
||||
@@ -232,22 +233,29 @@ public class DimensionFilterSelectionProvider extends AbstractDataMiningComponen
|
||||
parameterSettingsButton.addStyleName("query-parameter");
|
||||
parameterSettingsButton.addClickHandler(e -> {
|
||||
if (this.parameter == null) {
|
||||
// TODO bug4789: when binding a parameter to this dimension filter, observe its value set and record usage in temporary structure ReportParameterToDimensionFilterBindings
|
||||
new PickOrCreateReportParameterDialog(reportProvider.getCurrentReport(), dimension.getReturnTypeName(), getDataMiningStringMessages(),
|
||||
final DataMiningReportDTO currentReport = reportProvider.getCurrentReport();
|
||||
final Set<FilterDimensionParameter> reportParametersBeforeDialogShown = Util.asNewSet(currentReport.getParameters());
|
||||
new PickOrCreateReportParameterDialog(currentReport, dimension.getReturnTypeName(), getDataMiningStringMessages(),
|
||||
new DialogCallback<FilterDimensionParameter>() {
|
||||
@Override
|
||||
public void ok(FilterDimensionParameter editedObject) {
|
||||
parameter = editedObject;
|
||||
reportParameterBindings.setParameterBinding(new FilterDimensionIdentifier(retrieverLevel, dimension), editedObject);
|
||||
if (Util.contains(reportParametersBeforeDialogShown, editedObject)) {
|
||||
// the parameter existed before; copy its value set to the current selection:
|
||||
parameterValueChanged(editedObject, Collections.emptySet());
|
||||
} else {
|
||||
// a new parameter; set the parameter's value to the current selection:
|
||||
parameter.setValues(selectionModel.getSelectedSet());
|
||||
}
|
||||
editedObject.addParameterModelListener(DimensionFilterSelectionProvider.this);
|
||||
parameterValueChanged(editedObject, Collections.emptySet()); // update this dimension filter's selection based on parameter value set
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel() {
|
||||
parameterSettingsButton.setDown(false);
|
||||
}
|
||||
}).center();
|
||||
}).show();
|
||||
} else {
|
||||
unbindFromParameter(this.parameter);
|
||||
}
|
||||
|
||||
+3
-3
@@ -438,13 +438,13 @@ public class HierarchicalDimensionListFilterSelectionProvider extends AbstractDa
|
||||
}
|
||||
|
||||
private void selectedFilterDimensionsChanged(SelectionChangeEvent event) {
|
||||
Iterable<DimensionWithContext> displayedDimensions = new HashSet<>(dimensionFilterSelectionProviders.keySet());
|
||||
for (DimensionWithContext displayedDimension : displayedDimensions) {
|
||||
final Iterable<DimensionWithContext> displayedDimensions = new HashSet<>(dimensionFilterSelectionProviders.keySet());
|
||||
for (final DimensionWithContext displayedDimension : displayedDimensions) {
|
||||
if (!filterDimensionSelectionModel.isSelected(displayedDimension)) {
|
||||
removeDimensionFilterSelectionProvider(displayedDimension);
|
||||
}
|
||||
}
|
||||
for (DimensionWithContext selectedDimension : filterDimensionSelectionModel.getSelectedSet()) {
|
||||
for (final DimensionWithContext selectedDimension : filterDimensionSelectionModel.getSelectedSet()) {
|
||||
if (!dimensionFilterSelectionProviders.containsKey(selectedDimension)) {
|
||||
addDimensionFilterSelectionProvider(selectedDimension);
|
||||
}
|
||||
|
||||
+2
-1
@@ -92,7 +92,7 @@ public class PickOrCreateReportParameterDialog extends DataEntryDialog<FilterDim
|
||||
this(report, typeName, stringMessages, callback, /* paramtersAdded */ new HashSet<>(), /* parametersRemoved */ new HashSet<>());
|
||||
}
|
||||
|
||||
public PickOrCreateReportParameterDialog(DataMiningReportDTO report,
|
||||
private PickOrCreateReportParameterDialog(DataMiningReportDTO report,
|
||||
String typeName, StringMessages stringMessages, DialogCallback<FilterDimensionParameter> callback,
|
||||
Set<FilterDimensionParameter> parametersAdded, Set<FilterDimensionParameter> parametersRemoved) {
|
||||
super(stringMessages.pickOrCreateReportParameter(), stringMessages.pickOrCreateReportParameterMessage(),
|
||||
@@ -180,6 +180,7 @@ public class PickOrCreateReportParameterDialog extends DataEntryDialog<FilterDim
|
||||
final FilterDimensionParameter newParameter = new ValueListFilterParameter(newParameterName, typeName, Collections.emptySet());
|
||||
parametersAdded.add(newParameter);
|
||||
parametersListBox.addItem(newParameter);
|
||||
parametersListBox.setSelectedIndex(parametersListBox.getItemCount()-1);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+7
-2
@@ -125,13 +125,17 @@ public class QueryDefinitionProviderWithControls extends AbstractQueryDefinition
|
||||
* together with the query so that the current report can be updated from it. See also
|
||||
* {@link DataMiningReportDTO#replaceQueryDefinition(StatisticQueryDefinitionDTO, ModifiableStatisticQueryDefinitionDTO, ReportParameterToDimensionFilterBindings)}.
|
||||
*/
|
||||
private ReportParameterToDimensionFilterBindings reportParameterBindings;
|
||||
private final ReportParameterToDimensionFilterBindings reportParameterBindings;
|
||||
|
||||
private final ReportProvider reportProvider;
|
||||
|
||||
public QueryDefinitionProviderWithControls(Component<?> parent, ComponentContext<?> context,
|
||||
DataMiningSession session, DataMiningServiceAsync dataMiningService, ReportProvider reportProvider,
|
||||
ErrorReporter errorReporter, DataMiningSettingsControl settingsControl,
|
||||
DataMiningSettingsInfoManager settingsManager, Consumer<Pair<ModifiableStatisticQueryDefinitionDTO, ReportParameterToDimensionFilterBindings>> queryRunner) {
|
||||
super(parent, context, dataMiningService, errorReporter);
|
||||
this.reportProvider = reportProvider;
|
||||
this.reportParameterBindings = new ReportParameterToDimensionFilterBindings();
|
||||
providerListener = new ProviderListener();
|
||||
mainPanel = new LayoutPanel();
|
||||
// Creating the header panel, that contains the retriever chain provider and the controls
|
||||
@@ -382,7 +386,8 @@ public class QueryDefinitionProviderWithControls extends AbstractQueryDefinition
|
||||
* its constituents to the various elements of this UI widget. A new query definition will be produced from this
|
||||
* editor UI in {@link #getQueryDefinition()}.
|
||||
*/
|
||||
private void setQueryDefinition(StatisticQueryDefinitionDTO queryDefinition) { // TODO bug4789: deliver parameter bindings and establish in local temporary model of type ReportParameterToDimensionFilterBindings
|
||||
private void setQueryDefinition(StatisticQueryDefinitionDTO queryDefinition) {
|
||||
reportParameterBindings.set(reportProvider.getCurrentReport().getParameterUsages(queryDefinition));
|
||||
final Set<ApplyCallback> callbacks = new HashSet<>();
|
||||
final Collection<String> errorMessages = new ArrayList<>();
|
||||
final String retrieverChainName = queryDefinition.getDataRetrieverChainDefinition().getName();
|
||||
|
||||
Reference in New Issue
Block a user