From 341cc0e60e2b503448628768fdf1abc4be41122f Mon Sep 17 00:00:00 2001 From: Lennart Hensler Date: Mon, 20 Feb 2017 17:28:04 +0100 Subject: [PATCH] ResultsPresenter cleanup and now the selected data provider doesn't change, when the results presenter is changed --- ...a => AbstractNumericResultsPresenter.java} | 36 +++++++++++-------- .../presentation/MultiResultsPresenter.java | 7 +++- .../presentation/PlainResultsPresenter.java | 4 +-- .../datamining/presentation/ResultsChart.java | 4 +-- ....java => AbstractNumericDataProvider.java} | 8 +++-- .../dataproviders/BearingDataProvider.java | 2 +- .../dataproviders/DistanceDataProvider.java | 2 +- .../dataproviders/DurationDataProvider.java | 2 +- .../dataproviders/NumberDataProvider.java | 2 +- 9 files changed, 41 insertions(+), 26 deletions(-) rename java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/{AbstractResultsPresenterWithDataProviders.java => AbstractNumericResultsPresenter.java} (74%) rename java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/{AbstractResultDataProvider.java => AbstractNumericDataProvider.java} (87%) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/AbstractResultsPresenterWithDataProviders.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/AbstractNumericResultsPresenter.java similarity index 74% rename from java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/AbstractResultsPresenterWithDataProviders.java rename to java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/AbstractNumericResultsPresenter.java index 2df4e4da224..025d2c5a945 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/AbstractResultsPresenterWithDataProviders.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/AbstractNumericResultsPresenter.java @@ -14,7 +14,7 @@ import com.sap.sailing.domain.common.Bearing; import com.sap.sailing.domain.common.Distance; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sailing.gwt.ui.client.shared.controls.AbstractObjectRenderer; -import com.sap.sailing.gwt.ui.datamining.presentation.dataproviders.AbstractResultDataProvider; +import com.sap.sailing.gwt.ui.datamining.presentation.dataproviders.AbstractNumericDataProvider; import com.sap.sailing.gwt.ui.datamining.presentation.dataproviders.BearingDataProvider; import com.sap.sailing.gwt.ui.datamining.presentation.dataproviders.DistanceDataProvider; import com.sap.sailing.gwt.ui.datamining.presentation.dataproviders.DurationDataProvider; @@ -24,23 +24,23 @@ import com.sap.sse.common.settings.Settings; import com.sap.sse.datamining.shared.GroupKey; import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO; -public abstract class AbstractResultsPresenterWithDataProviders extends AbstractResultsPresenter { +public abstract class AbstractNumericResultsPresenter extends AbstractResultsPresenter { private final NumberDataProvider numberDataProvider; - private final Map> dataProviders; + private final Map> dataProviders; private final ValueListBox dataSelectionListBox; - private AbstractResultDataProvider currentDataProvider; + private AbstractNumericDataProvider currentDataProvider; - public AbstractResultsPresenterWithDataProviders(StringMessages stringMessages) { + public AbstractNumericResultsPresenter(StringMessages stringMessages) { super(stringMessages); numberDataProvider = new NumberDataProvider(); dataProviders = new HashMap<>(); - AbstractResultDataProvider distanceDataProvider = new DistanceDataProvider(); + AbstractNumericDataProvider distanceDataProvider = new DistanceDataProvider(); dataProviders.put(distanceDataProvider.getResultType().getName(), distanceDataProvider); - AbstractResultDataProvider durationDataProvider = new DurationDataProvider(); + AbstractNumericDataProvider durationDataProvider = new DurationDataProvider(); dataProviders.put(durationDataProvider.getResultType().getName(), durationDataProvider); - AbstractResultDataProvider bearingDataProvider = new BearingDataProvider(); + AbstractNumericDataProvider bearingDataProvider = new BearingDataProvider(); dataProviders.put(bearingDataProvider.getResultType().getName(), bearingDataProvider); dataSelectionListBox = new ValueListBox<>(new AbstractObjectRenderer() { @@ -53,7 +53,7 @@ public abstract class AbstractResultsPresenterWithDataProviders event) { Map resultValues = currentDataProvider.getData(getCurrentResult(), dataSelectionListBox.getValue()); - internalShowNumberResult(resultValues); + internalShowNumericResult(resultValues); } }); addControl(dataSelectionListBox); @@ -64,7 +64,7 @@ public abstract class AbstractResultsPresenterWithDataProviders resultValues = currentDataProvider.getData(getCurrentResult(), dataSelectionListBox.getValue()); - internalShowNumberResult(resultValues); + internalShowNumericResult(resultValues); Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override public void execute() { @@ -76,7 +76,7 @@ public abstract class AbstractResultsPresenterWithDataProviders selectCurrentDataProvider() { + private AbstractNumericDataProvider selectCurrentDataProvider() { if (numberDataProvider.acceptsResultsOfType(getCurrentResult().getResultType())) { return numberDataProvider; } @@ -94,11 +94,17 @@ public abstract class AbstractResultsPresenterWithDataProviders resultValues); + protected abstract void internalShowNumericResult(Map resultValues); - @Override - public String getId() { - return getLocalizedShortName(); + String getSelectedDataKey() { + return dataSelectionListBox.getValue(); + } + + void setSelectedDataKey(String dataKey) { + if (!currentDataProvider.isValidDataKey(dataKey)) { + throw new IllegalArgumentException("The given data key '" + dataKey + "' isn't valid"); + } + dataSelectionListBox.setValue(dataKey, true); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/MultiResultsPresenter.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/MultiResultsPresenter.java index be16178f2f3..4c4c84c8169 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/MultiResultsPresenter.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/MultiResultsPresenter.java @@ -64,7 +64,12 @@ public class MultiResultsPresenter implements ResultsPresenter { controlsPanel.removeFromParent(); presenter.addControl(controlsPanel); - // TODO Synchronize the selected data (Meters, Kilometers, ...) + if (presenter instanceof AbstractNumericResultsPresenter && + currentPresenter instanceof AbstractNumericResultsPresenter) { + String dataKey = ((AbstractNumericResultsPresenter) currentPresenter).getSelectedDataKey(); + ((AbstractNumericResultsPresenter) presenter).setSelectedDataKey(dataKey); + } + currentPresenter = presenter; presenterPanel.setWidget(currentPresenter.getEntryWidget()); Scheduler.get().scheduleDeferred(new ScheduledCommand() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/PlainResultsPresenter.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/PlainResultsPresenter.java index 1afa462812a..b7b52ef2fb6 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/PlainResultsPresenter.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/PlainResultsPresenter.java @@ -15,7 +15,7 @@ import com.sap.sse.datamining.shared.GroupKey; import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO; import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent; -public class PlainResultsPresenter extends AbstractResultsPresenterWithDataProviders { +public class PlainResultsPresenter extends AbstractNumericResultsPresenter { private final ScrollPanel scrollPanel; private final HTML resultsLabel; @@ -28,7 +28,7 @@ public class PlainResultsPresenter extends AbstractResultsPresenterWithDataProvi } @Override - protected void internalShowNumberResult(Map resultValues) { + protected void internalShowNumericResult(Map resultValues) { QueryResultDTO result = getCurrentResult(); SafeHtmlBuilder resultsBuilder = new SafeHtmlBuilder(); resultsBuilder.appendHtmlConstant(""); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/ResultsChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/ResultsChart.java index d01fc17dd04..fc056c979df 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/ResultsChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/ResultsChart.java @@ -40,7 +40,7 @@ import com.sap.sse.datamining.shared.impl.CompoundGroupKey; import com.sap.sse.datamining.shared.impl.GenericGroupKey; import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent; -public class ResultsChart extends AbstractResultsPresenterWithDataProviders { +public class ResultsChart extends AbstractNumericResultsPresenter { private final Comparator standardKeyComparator = new Comparator() { @Override @@ -192,7 +192,7 @@ public class ResultsChart extends AbstractResultsPresenterWithDataProviders resultValues) { + protected void internalShowNumericResult(Map resultValues) { this.currentResultValues = resultValues; decimalsListBox.setValue(getCurrentResult().getValueDecimals(), false); updateKeyComparatorListBox(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/AbstractResultDataProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/AbstractNumericDataProvider.java similarity index 87% rename from java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/AbstractResultDataProvider.java rename to java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/AbstractNumericDataProvider.java index 0a2445eaf38..a195a4304a1 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/AbstractResultDataProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/AbstractNumericDataProvider.java @@ -10,12 +10,12 @@ import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sse.datamining.shared.GroupKey; import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO; -public abstract class AbstractResultDataProvider { +public abstract class AbstractNumericDataProvider { private final Class resultType; private final LinkedHashMap> mappings; - public AbstractResultDataProvider(Class resultType, LinkedHashMap> mappings) { + public AbstractNumericDataProvider(Class resultType, LinkedHashMap> mappings) { this.resultType = resultType; this.mappings = mappings; } @@ -27,6 +27,10 @@ public abstract class AbstractResultDataProvider { public Collection getDataKeys() { return mappings.keySet(); } + + public boolean isValidDataKey(String dataKey) { + return mappings.containsKey(dataKey); + } public Map getData(QueryResultDTO result, String dataKey) { if (!acceptsResultsOfType(result.getResultType())) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/BearingDataProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/BearingDataProvider.java index bf8d5b12b1d..dc2d9e10af1 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/BearingDataProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/BearingDataProvider.java @@ -7,7 +7,7 @@ import com.sap.sailing.domain.common.Bearing; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO; -public class BearingDataProvider extends AbstractResultDataProvider { +public class BearingDataProvider extends AbstractNumericDataProvider { private static final String DEGREES = "Degrees"; private static final String RADIANS = "Radians"; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/DistanceDataProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/DistanceDataProvider.java index 75699bb540f..000c98f3f51 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/DistanceDataProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/DistanceDataProvider.java @@ -7,7 +7,7 @@ import com.sap.sailing.domain.common.Distance; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO; -public class DistanceDataProvider extends AbstractResultDataProvider { +public class DistanceDataProvider extends AbstractNumericDataProvider { private static final String CENTRAL_ANGLE_RADIAN = "CentralAngleRadian"; private static final String CENTRAL_ANGLE_DEGREE = "CentralAngleDegree"; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/DurationDataProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/DurationDataProvider.java index 3363aeb8799..401ec600ca6 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/DurationDataProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/DurationDataProvider.java @@ -7,7 +7,7 @@ import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sse.common.Duration; import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO; -public class DurationDataProvider extends AbstractResultDataProvider { +public class DurationDataProvider extends AbstractNumericDataProvider { private static final String DAYS = "Days"; private static final String HOURS = "Hours"; private static final String MINUTES = "Minutes"; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/NumberDataProvider.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/NumberDataProvider.java index 65ff725d42d..72acc7b37fd 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/NumberDataProvider.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/datamining/presentation/dataproviders/NumberDataProvider.java @@ -6,7 +6,7 @@ import java.util.function.Function; import com.sap.sailing.gwt.ui.client.StringMessages; import com.sap.sse.datamining.shared.impl.dto.QueryResultDTO; -public class NumberDataProvider extends AbstractResultDataProvider { +public class NumberDataProvider extends AbstractNumericDataProvider { private final static String FLOAT = "Float"; private final static String INTEGER = "Integer";