ResultsPresenter cleanup and now the selected data provider doesn't change, when the results presenter is changed

This commit is contained in:
Lennart Hensler committed 2017-02-20 17:28:04 +01:00
1 parent 711808dfe7
commit 341cc0e60e
9 files changed
+41 -26

No files matched your search

@@ -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<SettingsType extends Settings> extends AbstractResultsPresenter<Settings> {
public abstract class AbstractNumericResultsPresenter<SettingsType extends Settings> extends AbstractResultsPresenter<Settings> {
private final NumberDataProvider numberDataProvider;
private final Map<String, AbstractResultDataProvider<? extends Object>> dataProviders;
private final Map<String, AbstractNumericDataProvider<? extends Object>> dataProviders;
private final ValueListBox<String> dataSelectionListBox;
private AbstractResultDataProvider<? extends Object> currentDataProvider;
private AbstractNumericDataProvider<? extends Object> currentDataProvider;
public AbstractResultsPresenterWithDataProviders(StringMessages stringMessages) {
public AbstractNumericResultsPresenter(StringMessages stringMessages) {
super(stringMessages);
numberDataProvider = new NumberDataProvider();
dataProviders = new HashMap<>();
AbstractResultDataProvider<Distance> distanceDataProvider = new DistanceDataProvider();
AbstractNumericDataProvider<Distance> distanceDataProvider = new DistanceDataProvider();
dataProviders.put(distanceDataProvider.getResultType().getName(), distanceDataProvider);
AbstractResultDataProvider<Duration> durationDataProvider = new DurationDataProvider();
AbstractNumericDataProvider<Duration> durationDataProvider = new DurationDataProvider();
dataProviders.put(durationDataProvider.getResultType().getName(), durationDataProvider);
AbstractResultDataProvider<Bearing> bearingDataProvider = new BearingDataProvider();
AbstractNumericDataProvider<Bearing> bearingDataProvider = new BearingDataProvider();
dataProviders.put(bearingDataProvider.getResultType().getName(), bearingDataProvider);
dataSelectionListBox = new ValueListBox<>(new AbstractObjectRenderer<String>() {
@@ -53,7 +53,7 @@ public abstract class AbstractResultsPresenterWithDataProviders<SettingsType ext
@Override
public void onValueChange(ValueChangeEvent<String> event) {
Map<GroupKey, Number> resultValues = currentDataProvider.getData(getCurrentResult(), dataSelectionListBox.getValue());
internalShowNumberResult(resultValues);
internalShowNumericResult(resultValues);
}
});
addControl(dataSelectionListBox);
@@ -64,7 +64,7 @@ public abstract class AbstractResultsPresenterWithDataProviders<SettingsType ext
updateDataSelectionListBox();
if (currentDataProvider != null) {
Map<GroupKey, Number> 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<SettingsType ext
}
}
private AbstractResultDataProvider<? extends Object> selectCurrentDataProvider() {
private AbstractNumericDataProvider<? extends Object> selectCurrentDataProvider() {
if (numberDataProvider.acceptsResultsOfType(getCurrentResult().getResultType())) {
return numberDataProvider;
}
@@ -94,11 +94,17 @@ public abstract class AbstractResultsPresenterWithDataProviders<SettingsType ext
}
}
protected abstract void internalShowNumberResult(Map<GroupKey, Number> resultValues);
protected abstract void internalShowNumericResult(Map<GroupKey, Number> 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);
}
}
@@ -64,7 +64,12 @@ public class MultiResultsPresenter implements ResultsPresenter<Settings> {
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() {
@@ -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<Settings> {
public class PlainResultsPresenter extends AbstractNumericResultsPresenter<Settings> {
private final ScrollPanel scrollPanel;
private final HTML resultsLabel;
@@ -28,7 +28,7 @@ public class PlainResultsPresenter extends AbstractResultsPresenterWithDataProvi
}
@Override
protected void internalShowNumberResult(Map<GroupKey, Number> resultValues) {
protected void internalShowNumericResult(Map<GroupKey, Number> resultValues) {
QueryResultDTO<?> result = getCurrentResult();
SafeHtmlBuilder resultsBuilder = new SafeHtmlBuilder();
resultsBuilder.appendHtmlConstant("<b>");
@@ -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<Settings> {
public class ResultsChart extends AbstractNumericResultsPresenter<Settings> {
private final Comparator<GroupKey> standardKeyComparator = new Comparator<GroupKey>() {
@Override
@@ -192,7 +192,7 @@ public class ResultsChart extends AbstractResultsPresenterWithDataProviders<Sett
}
@Override
protected void internalShowNumberResult(Map<GroupKey, Number> resultValues) {
protected void internalShowNumericResult(Map<GroupKey, Number> resultValues) {
this.currentResultValues = resultValues;
decimalsListBox.setValue(getCurrentResult().getValueDecimals(), false);
updateKeyComparatorListBox();
@@ -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<T> {
public abstract class AbstractNumericDataProvider<T> {
private final Class<T> resultType;
private final LinkedHashMap<String, Function<T, Number>> mappings;
public AbstractResultDataProvider(Class<T> resultType, LinkedHashMap<String, Function<T, Number>> mappings) {
public AbstractNumericDataProvider(Class<T> resultType, LinkedHashMap<String, Function<T, Number>> mappings) {
this.resultType = resultType;
this.mappings = mappings;
}
@@ -27,6 +27,10 @@ public abstract class AbstractResultDataProvider<T> {
public Collection<String> getDataKeys() {
return mappings.keySet();
}
public boolean isValidDataKey(String dataKey) {
return mappings.containsKey(dataKey);
}
public Map<GroupKey, Number> getData(QueryResultDTO<?> result, String dataKey) {
if (!acceptsResultsOfType(result.getResultType())) {
@@ -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<Bearing> {
public class BearingDataProvider extends AbstractNumericDataProvider<Bearing> {
private static final String DEGREES = "Degrees";
private static final String RADIANS = "Radians";
@@ -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<Distance> {
public class DistanceDataProvider extends AbstractNumericDataProvider<Distance> {
private static final String CENTRAL_ANGLE_RADIAN = "CentralAngleRadian";
private static final String CENTRAL_ANGLE_DEGREE = "CentralAngleDegree";
@@ -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<Duration> {
public class DurationDataProvider extends AbstractNumericDataProvider<Duration> {
private static final String DAYS = "Days";
private static final String HOURS = "Hours";
private static final String MINUTES = "Minutes";
@@ -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<Number> {
public class NumberDataProvider extends AbstractNumericDataProvider<Number> {
private final static String FLOAT = "Float";
private final static String INTEGER = "Integer";