started a drill-down feature (bug 4326)

Change-Id: Ie80a06aea5b6dbb74e9373fc952979faaf6a4d94
This commit is contained in:
Axel Uhl committed 2017-10-04 16:51:22 +02:00
1 parent ea8f02b001
commit 9665ac08a8
2 files changed
+41 -2

No files matched your search

@@ -197,7 +197,7 @@ public class MultiResultsPresenter extends AbstractComponent<Settings> implement
public AbstractColumnChartDescriptor(String name, boolean showErrorBars) {
this.name = name;
presenter = new ResultsChart(MultiResultsPresenter.this, getComponentContext(), stringMessages, showErrorBars);
presenter = new ResultsChart(MultiResultsPresenter.this, getComponentContext(), stringMessages, showErrorBars, /* drillDownCallback */ null);
}
@Override
@@ -21,9 +21,12 @@ import org.moxieapps.gwt.highcharts.client.Point;
import org.moxieapps.gwt.highcharts.client.Series;
import org.moxieapps.gwt.highcharts.client.Series.Type;
import org.moxieapps.gwt.highcharts.client.ToolTip;
import org.moxieapps.gwt.highcharts.client.events.SeriesClickEvent;
import org.moxieapps.gwt.highcharts.client.events.SeriesClickEventHandler;
import org.moxieapps.gwt.highcharts.client.labels.AxisLabelsData;
import org.moxieapps.gwt.highcharts.client.labels.AxisLabelsFormatter;
import org.moxieapps.gwt.highcharts.client.labels.YAxisLabels;
import org.moxieapps.gwt.highcharts.client.plotOptions.SeriesPlotOptions;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
@@ -45,6 +48,9 @@ import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent;
import com.sap.sse.gwt.client.shared.settings.ComponentContext;
public class ResultsChart extends AbstractNumericResultsPresenter<Settings> {
public static interface DrillDownCallback {
boolean drillDown(GroupKey groupKey);
}
private final Comparator<GroupKey> standardKeyComparator = new Comparator<GroupKey>() {
@Override
@@ -125,6 +131,7 @@ public class ResultsChart extends AbstractNumericResultsPresenter<Settings> {
private final SimpleLayoutPanel chartPanel;
private final Chart chart;
private final DrillDownCallback drillDownCallback;
/**
* The series showing the numerical results
@@ -139,6 +146,7 @@ public class ResultsChart extends AbstractNumericResultsPresenter<Settings> {
private final GroupKey simpleResultSeriesKey;
private final Map<GroupKey, Integer> mainKeyToXValueMap;
private final Map<Integer, GroupKey> xValueToMainKeyMap;
private Map<GroupKey, Number> currentResultValues;
private Map<GroupKey, Triple<Number, Number, Long>> currentResultErrorMargins;
@@ -146,9 +154,11 @@ public class ResultsChart extends AbstractNumericResultsPresenter<Settings> {
private final Map<GroupKey, Double> medianPerMainKey;
private final boolean showErrorBars;
public ResultsChart(Component<?> parent, ComponentContext<?> context, StringMessages stringMessages, boolean showErrorBars) {
public ResultsChart(Component<?> parent, ComponentContext<?> context, StringMessages stringMessages,
boolean showErrorBars, DrillDownCallback drillDownCallback) {
super(parent, context, stringMessages);
this.showErrorBars = showErrorBars;
this.drillDownCallback = drillDownCallback;
sortByPanel = new HorizontalPanel();
sortByPanel.setSpacing(5);
sortByPanel.add(new Label(stringMessages.sortBy() + ":"));
@@ -200,6 +210,7 @@ public class ResultsChart extends AbstractNumericResultsPresenter<Settings> {
errorSeriesMappedByGroupKey = new HashMap<>();
simpleResultSeriesKey = new GenericGroupKey<>(stringMessages.results());
mainKeyToXValueMap = new HashMap<>();
xValueToMainKeyMap = new HashMap<>();
averagePerMainKey = new HashMap<>();
medianPerMainKey = new HashMap<>();
}
@@ -327,10 +338,12 @@ public class ResultsChart extends AbstractNumericResultsPresenter<Settings> {
List<GroupKey> sortedMainKeys = getSortedMainKeys();
String[] categories = new String[sortedMainKeys.size()];
mainKeyToXValueMap.clear();
xValueToMainKeyMap.clear();
for (int i = 0; i < sortedMainKeys.size(); i++) {
GroupKey mainKey = sortedMainKeys.get(i);
categories[i] = mainKey.asString();
mainKeyToXValueMap.put(mainKey, i);
xValueToMainKeyMap.put(i, mainKey);
}
chart.getXAxis().setCategories(false, categories);
}
@@ -378,6 +391,15 @@ public class ResultsChart extends AbstractNumericResultsPresenter<Settings> {
return simpleResultSeriesKey;
}
}
private class SeriesClickHandler implements SeriesClickEventHandler {
@Override
public boolean onClick(SeriesClickEvent seriesClickEvent) {
final double xAxisValue = seriesClickEvent.getNearestXAsDouble();
final GroupKey groupKey = xValueToMainKeyMap.get((int) Math.round(xAxisValue));
return drillDown(groupKey);
}
}
private Chart createChart() {
Chart chart = new Chart()
@@ -402,9 +424,26 @@ public class ResultsChart extends AbstractNumericResultsPresenter<Settings> {
}
}
}));
chart.setSeriesPlotOptions(new SeriesPlotOptions().setSeriesClickEventHandler(new SeriesClickHandler()));
return chart;
}
/**
* Attempts a drill-down for the {@code groupKey}. If a drill-down callback has been
* provided, it will be invoked; otherwise, this is a no-op.
*
* @return whether or not a drill-down was issued
*/
public boolean drillDown(GroupKey groupKey) {
final boolean drilledDown;
if (drillDownCallback != null) {
drilledDown = drillDownCallback.drillDown(groupKey);
} else {
drilledDown = false;
}
return drilledDown;
}
@Override
public String getLocalizedShortName() {
return getStringMessages().resultsChart();