mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-17 01:31:01 +00:00
started a drill-down feature (bug 4326)
Change-Id: Ie80a06aea5b6dbb74e9373fc952979faaf6a4d94
This commit is contained in:
1 parent
ea8f02b001
commit
9665ac08a8
2 files changed
+41
-2
No files matched your search
+1
-1
@@ -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
|
||||
|
||||
+40
-1
@@ -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();
|
||||
|
||||
Reference in new issue
Block a user