mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-15 06:49:56 +00:00
Fixed AbstractCompetitorLeaderBoardChart rendering of new inputs.
This commit is contained in:
1 parent
51b50bd471
commit
3a8965e827
1 file changed
+27
-92
+27
-92
@@ -1,13 +1,11 @@
|
||||
package com.sap.sailing.gwt.ui.client.shared.charts;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.moxieapps.gwt.highcharts.client.Axis;
|
||||
import org.moxieapps.gwt.highcharts.client.Chart;
|
||||
@@ -41,6 +39,7 @@ import com.sap.sailing.gwt.ui.client.DetailTypeFormatter;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.Util.Triple;
|
||||
import com.sap.sse.common.filter.Filter;
|
||||
import com.sap.sse.common.filter.FilterSet;
|
||||
import com.sap.sse.common.settings.generic.GenericSerializableSettings;
|
||||
@@ -212,11 +211,15 @@ public abstract class AbstractCompetitorLeaderboardChart<SettingsType extends Ge
|
||||
if (result == null) {
|
||||
result = chart.createSeries().setType(Series.Type.LINE).setName(competitor.getName());
|
||||
result.setPlotOptions(new LinePlotOptions()
|
||||
.setLineWidth(LINE_WIDTH)
|
||||
.setMarker(new Marker().setEnabled(true).setRadius(4).setSymbol(Symbol.DIAMOND))
|
||||
.setShadow(true).setHoverStateLineWidth(LINE_WIDTH)
|
||||
.setColor(competitorSelectionProvider.getColor(competitor).getAsHtml()).setSelected(true));
|
||||
.setLineWidth(LINE_WIDTH)
|
||||
.setMarker(new Marker().setEnabled(true).setRadius(4).setSymbol(Symbol.DIAMOND))
|
||||
.setShadow(true)
|
||||
.setHoverStateLineWidth(LINE_WIDTH)
|
||||
.setColor(competitorSelectionProvider.getColor(competitor).getAsHtml())
|
||||
.setSelected(true)
|
||||
);
|
||||
competitorSeries.put(competitor, result);
|
||||
chart.addSeries(result, false, true);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -247,34 +250,20 @@ public abstract class AbstractCompetitorLeaderboardChart<SettingsType extends Ge
|
||||
sailingService, leaderboardName, /* date */ null, selectedDetailType);
|
||||
|
||||
asyncActionsExecutor.execute(getLeaderboardDataEntriesAction, LODA_LEADERBOARD_CHART_DATA_CATEGORY,
|
||||
new AsyncCallback<List<com.sap.sse.common.Util.Triple<String, List<CompetitorDTO>, List<Double>>>>() {
|
||||
new AsyncCallback<List<Triple<String, List<CompetitorDTO>, List<Double>>>>() {
|
||||
@Override
|
||||
public void onSuccess(List<com.sap.sse.common.Util.Triple<String, List<CompetitorDTO>, List<Double>>> result) {
|
||||
List<Series> chartSeries = new ArrayList<Series>(Arrays.asList(chart.getSeries()));
|
||||
public void onSuccess(List<Triple<String, List<CompetitorDTO>, List<Double>>> result) {
|
||||
chart.hideLoading();
|
||||
setWidget(chart);
|
||||
raceColumnNames.clear();
|
||||
switch (selectedDetailType) {
|
||||
case OVERALL_RANK:
|
||||
case REGATTA_RANK:
|
||||
fillTotalRanksSeries(result, chartSeries);
|
||||
break;
|
||||
case REGATTA_NET_POINTS_SUM:
|
||||
fillTotalPointsSeries(result, chartSeries);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
fillSeries(result);
|
||||
// TODO will removing the following line do harm on any usage of this abstract base class?
|
||||
// chart.setSizeToMatchContainer();
|
||||
|
||||
// it's important here to recall the redraw method, otherwise the bug fix for wrong checkbox
|
||||
// positions (nativeAdjustCheckboxPosition)
|
||||
// in the BaseChart class would not be called
|
||||
// positions (nativeAdjustCheckboxPosition) in the BaseChart class would not be called
|
||||
chart.redraw();
|
||||
chartDataUpdateCallbacks.forEach(Runnable::run);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
chart.hideLoading();
|
||||
@@ -284,82 +273,22 @@ public abstract class AbstractCompetitorLeaderboardChart<SettingsType extends Ge
|
||||
});
|
||||
}
|
||||
|
||||
private void fillTotalRanksSeries(List<com.sap.sse.common.Util.Triple<String, List<CompetitorDTO>, List<Double>>> result, List<Series> chartSeries) {
|
||||
Set<Series> unusedSeries = new HashSet<>(competitorSeries.values());
|
||||
for (Series series : competitorSeries.values()) {
|
||||
for (Point p : new ArrayList<Point>(Arrays.asList(series.getPoints()))) {
|
||||
series.removePoint(p, /* redraw */false, /* animation */false);
|
||||
}
|
||||
}
|
||||
private void fillSeries(List<Triple<String, List<CompetitorDTO>, List<Double>>> result) {
|
||||
int raceColumnNumber = 0;
|
||||
int maxCompetitorCount = 0;
|
||||
for (com.sap.sse.common.Util.Triple<String, List<CompetitorDTO>, List<Double>> entry : result) {
|
||||
List<Double> dataValues = entry.getC();
|
||||
raceColumnNames.add(entry.getA());
|
||||
if(hasValidValues(dataValues)) {
|
||||
raceColumnNamesWithData.add(entry.getA());
|
||||
int index = 0;
|
||||
maxCompetitorCount = Math.max(maxCompetitorCount, entry.getB().size());
|
||||
for (CompetitorDTO competitor : entry.getB()) {
|
||||
if (isCompetitorVisible(competitor)) {
|
||||
Series series = getOrCreateSeries(competitor);
|
||||
Double dataValue = dataValues.get(index);
|
||||
if (dataValue != null) {
|
||||
series.addPoint(raceColumnNumber, dataValue, /* redraw */false, /* shift */false, /* animation */ false);
|
||||
}
|
||||
|
||||
unusedSeries.remove(series);
|
||||
if (!chartSeries.contains(series)) {
|
||||
chart.addSeries(series);
|
||||
chartSeries.add(series);
|
||||
}
|
||||
}
|
||||
index++;
|
||||
}
|
||||
raceColumnNumber++;
|
||||
}
|
||||
}
|
||||
setHeight();
|
||||
}
|
||||
|
||||
private void setHeight() {
|
||||
chart.setSize(chart.getOffsetWidth(), Window.getClientHeight());
|
||||
}
|
||||
|
||||
private void fillTotalPointsSeries(
|
||||
List<com.sap.sse.common.Util.Triple<String, List<CompetitorDTO>, List<Double>>> result,
|
||||
List<Series> chartSeries) {
|
||||
Double maxTotalPoints = 0.0;
|
||||
Set<Series> unusedSeries = new HashSet<Series>(competitorSeries.values());
|
||||
for (Series series : competitorSeries.values()) {
|
||||
for (Point p : new ArrayList<Point>(Arrays.asList(series.getPoints()))) {
|
||||
series.removePoint(p, /* redraw */ false, /* animation */ false);
|
||||
}
|
||||
}
|
||||
int raceColumnNumber = 0;
|
||||
int maxCompetitorCount = 0;
|
||||
for (com.sap.sse.common.Util.Triple<String, List<CompetitorDTO>, List<Double>> entry : result) {
|
||||
List<Double> dataValues = entry.getC();
|
||||
final Map<CompetitorDTO, Point[]> competitorWithCoordinatePoints = new ConcurrentHashMap<>();
|
||||
for (Triple<String, List<CompetitorDTO>, List<Double>> entry : result) {
|
||||
final List<Double> dataValues = entry.getC();
|
||||
raceColumnNames.add(entry.getA());
|
||||
if (hasValidValues(dataValues)) {
|
||||
raceColumnNamesWithData.add(entry.getA());
|
||||
int index = 0;
|
||||
maxCompetitorCount = Math.max(maxCompetitorCount, entry.getB().size());
|
||||
for (CompetitorDTO competitor : entry.getB()) {
|
||||
if (isCompetitorVisible(competitor)) {
|
||||
Series series = getOrCreateSeries(competitor);
|
||||
Double dataValue = dataValues.get(index);
|
||||
if (dataValue != null) {
|
||||
Double sumTotalPoints = dataValue;
|
||||
series.addPoint(raceColumnNumber, sumTotalPoints, /* redraw */ false, /* shift */ false, /* animation */ false);
|
||||
if (sumTotalPoints > maxTotalPoints) {
|
||||
maxTotalPoints = sumTotalPoints;
|
||||
}
|
||||
}
|
||||
unusedSeries.remove(series);
|
||||
if (!chartSeries.contains(series)) {
|
||||
chart.addSeries(series);
|
||||
chartSeries.add(series);
|
||||
final Point[] points = competitorWithCoordinatePoints
|
||||
.computeIfAbsent(competitor, c -> new Point[result.size()]);
|
||||
points[raceColumnNumber] = new Point(raceColumnNumber, dataValue);
|
||||
}
|
||||
}
|
||||
index++;
|
||||
@@ -367,9 +296,15 @@ public abstract class AbstractCompetitorLeaderboardChart<SettingsType extends Ge
|
||||
raceColumnNumber++;
|
||||
}
|
||||
}
|
||||
competitorWithCoordinatePoints
|
||||
.forEach((competitor, points) -> getOrCreateSeries(competitor).setPoints(points, false));
|
||||
setHeight();
|
||||
}
|
||||
|
||||
private void setHeight() {
|
||||
chart.setSize(chart.getOffsetWidth(), Window.getClientHeight());
|
||||
}
|
||||
|
||||
private boolean hasValidValues(List<Double> values) {
|
||||
boolean result = false;
|
||||
for(Double value: values) {
|
||||
|
||||
Reference in new issue
Block a user