From a3619ed4d7a3aac56841ed34ae61cc1d1acfe147 Mon Sep 17 00:00:00 2001 From: Kai Boernert Date: Wed, 12 Oct 2016 10:36:04 +0200 Subject: [PATCH 1/4] removed not used older constructor --- .../shared/charts/AbstractCompetitorRaceChart.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java index 7ab3138f5c6..cb49dd7300f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java @@ -101,17 +101,6 @@ public abstract class AbstractCompetitorRaceChart Date: Wed, 12 Oct 2016 13:42:42 +0200 Subject: [PATCH 2/4] refactored the title layouting logic to make it deterministic, then changed the behaviour to render the text over the chart --- .../charts/AbstractCompetitorRaceChart.java | 273 ++++++++++-------- 1 file changed, 155 insertions(+), 118 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java index cb49dd7300f..6a1ad932140 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java @@ -34,9 +34,10 @@ import org.moxieapps.gwt.highcharts.client.plotOptions.Marker; import org.moxieapps.gwt.highcharts.client.plotOptions.ScatterPlotOptions; import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RequiresResize; import com.google.gwt.user.client.ui.Widget; @@ -65,8 +66,8 @@ import com.sap.sse.gwt.client.player.Timer.PlayModes; import com.sap.sse.gwt.client.shared.components.Component; /** - * AbstractCompetitorChart is a chart that can show one sort of competitor data (e.g. current speed over ground, windward - * distance to leader) for different races in a chart. + * AbstractCompetitorChart is a chart that can show one sort of competitor data (e.g. current speed over ground, + * windward distance to leader) for different races in a chart. * * When calling the constructor a chart is created that creates a final amount of series (so the maximum number of * competitors cannot be changed in one chart) which are connected to competitors, when the sailing service returns the @@ -76,14 +77,14 @@ import com.sap.sse.gwt.client.shared.components.Component; * @author Benjamin Ebling (D056866), Axel Uhl (d043530) * */ -public abstract class AbstractCompetitorRaceChart extends AbstractRaceChart implements - CompetitorSelectionChangeListener, RequiresResize { +public abstract class AbstractCompetitorRaceChart + extends AbstractRaceChart implements CompetitorSelectionChangeListener, RequiresResize { public static final String LOAD_COMPETITOR_CHART_DATA_CATEGORY = "loadCompetitorChartData"; - + public static final long DEFAULT_STEPSIZE = 5000; - + private static final int LINE_WIDTH = 1; - + private final Label noCompetitorsSelectedLabel; private final Label noDataFoundLabel; private final CompetitorSelectionProvider competitorSelectionProvider; @@ -97,23 +98,23 @@ public abstract class AbstractCompetitorRaceChart, Series> dataSeriesForDetailTypeAndCompetitor = new HashMap<>(); private final Map, Series> markPassingSeriesByCompetitor = new HashMap<>(); - + private final TimingHolder primary = new TimingHolder(); private final TimingHolder secondary = new TimingHolder(); - + AbstractCompetitorRaceChart(SailingServiceAsync sailingService, AsyncActionsExecutor asyncActionsExecutor, CompetitorSelectionProvider competitorSelectionProvider, RegattaAndRaceIdentifier selectedRaceIdentifier, Timer timer, TimeRangeWithZoomProvider timeRangeWithZoomProvider, final StringMessages stringMessages, ErrorReporter errorReporter, DetailType firstDetailType, DetailType secondDetailType, boolean compactChart, - boolean allowTimeAdjust, - String leaderboardGroupName, String leaderboardName) { - super(sailingService, selectedRaceIdentifier, timer, timeRangeWithZoomProvider, stringMessages, asyncActionsExecutor, errorReporter); + boolean allowTimeAdjust, String leaderboardGroupName, String leaderboardName) { + super(sailingService, selectedRaceIdentifier, timer, timeRangeWithZoomProvider, stringMessages, + asyncActionsExecutor, errorReporter); this.competitorSelectionProvider = competitorSelectionProvider; this.compactChart = compactChart; this.allowTimeAdjust = allowTimeAdjust; this.leaderboardGroupName = leaderboardGroupName; this.leaderboardName = leaderboardName; - + setSize("100%", "100%"); noCompetitorsSelectedLabel = new Label(stringMessages.selectAtLeastOneCompetitor() + "."); noCompetitorsSelectedLabel.setStyleName("abstractChartPanel-importantMessageOfChart"); @@ -129,24 +130,15 @@ public abstract class AbstractCompetitorRaceChart getComponent(); /** - * Loads the needed data (data which isn't in the {@link #chartData cache}) for the - * {@link #getSelectedCompetitors() visible competitors} via + * Loads the needed data (data which isn't in the {@link #chartData cache}) for the {@link #getSelectedCompetitors() + * visible competitors} via * {@link SailingServiceAsync#getCompetitorsRaceData(RaceIdentifier, List, long, DetailType, AsyncCallback)}. After * loading, the method {@link #drawChartData()} is called. *

@@ -233,19 +219,23 @@ public abstract class AbstractCompetitorRaceChart competitorsToLoad, final DetailType selectedDataTypeToRetrieve,final TimingHolder tholder) { - long stepSize = Math.max(getStepSizeInMillis(), - from==null||to==null ? 0 : Math.abs(to.getTime()-from.getTime())/SailingServiceConstants.MAX_NUMBER_OF_FIXES_TO_QUERY); + ArrayList competitorsToLoad, final DetailType selectedDataTypeToRetrieve, + final TimingHolder tholder) { + long stepSize = Math.max(getStepSizeInMillis(), from == null || to == null ? 0 + : Math.abs(to.getTime() - from.getTime()) / SailingServiceConstants.MAX_NUMBER_OF_FIXES_TO_QUERY); GetCompetitorsRaceDataAction getCompetitorsRaceDataAction = new GetCompetitorsRaceDataAction(sailingService, selectedRaceIdentifier, competitorsToLoad, from, to, stepSize, selectedDataTypeToRetrieve, leaderboardGroupName, leaderboardName); @@ -258,7 +248,7 @@ public abstract class AbstractCompetitorRaceChart competitorsToLoad = new ArrayList(); competitorsToLoad.add(competitor); - + { - Date fromDate = primary.timeOfEarliestRequestInMillis == null ? null : new Date(primary.timeOfEarliestRequestInMillis); - Date toDate = primary.timeOfLatestRequestInMillis == null ? null : new Date(primary.timeOfLatestRequestInMillis); + Date fromDate = primary.timeOfEarliestRequestInMillis == null ? null + : new Date(primary.timeOfEarliestRequestInMillis); + Date toDate = primary.timeOfLatestRequestInMillis == null ? null + : new Date(primary.timeOfLatestRequestInMillis); loadData(fromDate, toDate, competitorsToLoad, false); } { - Date fromDate = secondary.timeOfEarliestRequestInMillis == null ? null : new Date(secondary.timeOfEarliestRequestInMillis); - Date toDate = secondary.timeOfLatestRequestInMillis == null ? null : new Date(secondary.timeOfLatestRequestInMillis); + Date fromDate = secondary.timeOfEarliestRequestInMillis == null ? null + : new Date(secondary.timeOfEarliestRequestInMillis); + Date toDate = secondary.timeOfLatestRequestInMillis == null ? null + : new Date(secondary.timeOfLatestRequestInMillis); loadData(fromDate, toDate, competitorsToLoad, false); } } @@ -330,21 +324,23 @@ public abstract class AbstractCompetitorRaceChart - * Fills the series for the selected competitors with the data in {@link AbstractCompetitorRaceChart#chartData}.
+ * Fills the series for the selected competitors with the data in {@link AbstractCompetitorRaceChart#chartData}. + *
*/ private synchronized void updateChartSeries(CompetitorsRaceDataDTO chartData, DetailType retrievedDataType, - boolean append,TimingHolder tholder) { + boolean append, TimingHolder tholder) { // Make sure the busy indicator is removed at this point, or plotting the data results in an exception setWidget(chart); for (CompetitorDTO competitor : chartData.getCompetitors()) { Series competitorDataSeries = getOrCreateCompetitorDataSeries(retrievedDataType, competitor); Series markPassingSeries = getOrCreateCompetitorMarkPassingSeries(competitorDataSeries, retrievedDataType, competitor); - + CompetitorRaceDataDTO competitorData = chartData.getCompetitorData(competitor); if (competitorData != null) { Date toDate = timer.getLiveTimePointAsDate(); - List> markPassingsData = competitorData.getMarkPassingsData(); + List> markPassingsData = competitorData + .getMarkPassingsData(); List markPassingPoints = new ArrayList(); for (com.sap.sse.common.Util.Triple markPassingData : markPassingsData) { if (markPassingData.getB() != null && markPassingData.getC() != null) { @@ -365,10 +361,13 @@ public abstract class AbstractCompetitorRaceChart raceDataPoint : raceData) { Double dataPointValue = raceDataPoint.getB(); - if(dataPointValue != null) { + if (dataPointValue != null) { long dataPointTimeAsMillis = raceDataPoint.getA().getTime(); - if(append == false || (tholder.timeOfEarliestRequestInMillis == null || dataPointTimeAsMillis < tholder.timeOfEarliestRequestInMillis) || - tholder.timeOfLatestRequestInMillis == null || dataPointTimeAsMillis > tholder.timeOfLatestRequestInMillis) { + if (append == false + || (tholder.timeOfEarliestRequestInMillis == null + || dataPointTimeAsMillis < tholder.timeOfEarliestRequestInMillis) + || tholder.timeOfLatestRequestInMillis == null + || dataPointTimeAsMillis > tholder.timeOfLatestRequestInMillis) { raceDataPointsToAdd[currentPointIndex++] = new Point(dataPointTimeAsMillis, dataPointValue); } } @@ -378,26 +377,29 @@ public abstract class AbstractCompetitorRaceChart chartSeries = Arrays.asList(chart.getSeries()); if (!chartSeries.contains(competitorDataSeries)) { chart.addSeries(competitorDataSeries); chart.addSeries(markPassingSeries); - + } } } - if (tholder.timeOfEarliestRequestInMillis == null || tholder.timeOfEarliestRequestInMillis > chartData.getRequestedFromTime().getTime()) { + if (tholder.timeOfEarliestRequestInMillis == null + || tholder.timeOfEarliestRequestInMillis > chartData.getRequestedFromTime().getTime()) { tholder.timeOfEarliestRequestInMillis = chartData.getRequestedFromTime().getTime(); } - if (tholder.timeOfLatestRequestInMillis == null || tholder.timeOfLatestRequestInMillis < chartData.getRequestedToTime().getTime()) { + if (tholder.timeOfLatestRequestInMillis == null + || tholder.timeOfLatestRequestInMillis < chartData.getRequestedToTime().getTime()) { tholder.timeOfLatestRequestInMillis = chartData.getRequestedToTime().getTime(); } chart.redraw(); @@ -429,13 +431,14 @@ public abstract class AbstractCompetitorRaceChart the old title appears - chart.setTitle(hasSecondYAxis() ? null : new ChartTitle().setText(chartTitleFromDetailTypes()), null); + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + + @Override + public void execute() { + // Workaround for a highcharts bug: Set a chart title, overwrite the title, + // switch chart to invisible and visible again -> the old title appears + if (compactChart) { + applyCompactTitle(chartTitleFromDetailTypes()); + } else { + chart.setTitle(hasSecondYAxis() ? null : new ChartTitle().setText(chartTitleFromDetailTypes()), + null); + } + + 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 + chart.redraw(); + } + }); } + + } + + private void applyCompactTitle(String title) { + chart.setSpacingLeft(10).setSpacingRight(10).setSpacingTop(20).setOption("legend/margin", 2) + .setChartSubtitle(null).getXAxis().setAxisTitleText(null); + chart.setTitle(hasSecondYAxis() ? null : new ChartTitle().setText(title).setOption("floating",true), null); + chart.redraw(); } private int yAxisIndex(DetailType seriesDetailType) { @@ -585,13 +614,13 @@ public abstract class AbstractCompetitorRaceChart zoomRange = timeRangeWithZoomProvider.getTimeZoom(); - onTimeZoomChanged(zoomRange.getA(), zoomRange.getB()); - } else { - resetMinMaxAndExtremesInterval(/* redraw */ true); - } + chart = createChart(); + if (isZoomed) { + com.sap.sse.common.Util.Pair zoomRange = timeRangeWithZoomProvider.getTimeZoom(); + onTimeZoomChanged(zoomRange.getA(), zoomRange.getB()); + } else { + resetMinMaxAndExtremesInterval(/* redraw */ true); + } // } final String unitY0 = DetailTypeFormatter.getUnit(getSelectedFirstDetailType()); @@ -599,34 +628,34 @@ public abstract class AbstractCompetitorRaceChart, Series> entry : dataSeriesForDetailTypeAndCompetitor.entrySet()) { @@ -666,7 +695,7 @@ public abstract class AbstractCompetitorRaceChartnull. */ - public com.sap.sse.common.Util.Pair checkPassingRelationToSelection(ArrayList> markPassingInRange) { + public com.sap.sse.common.Util.Pair checkPassingRelationToSelection( + ArrayList> markPassingInRange) { boolean everyPassingInRange = true; Boolean twoPassingsInRangeBeforeError = null; ArrayList competitorPassings = markPassingInRange.get(0); @@ -733,15 +764,17 @@ public abstract class AbstractCompetitorRaceChart primary.timeOfLatestRequestInMillis) { - updateChart(new Date(primary.timeOfLatestRequestInMillis), timeRangeWithZoomProvider.getToTime(), /* append */true); + updateChart(new Date(primary.timeOfLatestRequestInMillis), timeRangeWithZoomProvider.getToTime(), + /* append */true); } // otherwise the cache spans across date and so we don't need to load anything break; @@ -749,13 +782,16 @@ public abstract class AbstractCompetitorRaceChart primary.timeOfLatestRequestInMillis) { - updateChart(new Date(primary.timeOfLatestRequestInMillis), timeRangeWithZoomProvider.getToTime(), /* append */true); + updateChart(new Date(primary.timeOfLatestRequestInMillis), timeRangeWithZoomProvider.getToTime(), + /* append */true); } } break; @@ -776,7 +812,7 @@ public abstract class AbstractCompetitorRaceChart competitors) { timeChanged(timer.getTime(), null); } - + @Override public void filteredCompetitorsListChanged(Iterable filteredCompetitors) { timeChanged(timer.getTime(), null); @@ -785,10 +821,11 @@ public abstract class AbstractCompetitorRaceChart> oldFilterSet, FilterSet> newFilterSet) { - // nothing to do; if it changes the filtered competitor list, a separate call to filteredCompetitorsListChanged will occur + // nothing to do; if it changes the filtered competitor list, a separate call to filteredCompetitorsListChanged + // will occur } - - static class TimingHolder{ + + static class TimingHolder { private Long timeOfEarliestRequestInMillis; private Long timeOfLatestRequestInMillis; } From cff727ae1ed3bad4b41216841792af9963b94e93 Mon Sep 17 00:00:00 2001 From: Kai Boernert Date: Wed, 12 Oct 2016 13:55:47 +0200 Subject: [PATCH 3/4] removed leftover GWT.log --- .../ui/client/shared/charts/AbstractCompetitorRaceChart.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java index 6a1ad932140..3e680d54383 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java @@ -472,7 +472,6 @@ public abstract class AbstractCompetitorRaceChart primary.timeOfLatestRequestInMillis) { updateChart(new Date(primary.timeOfLatestRequestInMillis), timeRangeWithZoomProvider.getToTime(), From 0f1555ce7a5a5a29ce027f85c3ac65a44015832f Mon Sep 17 00:00:00 2001 From: Kai Boernert Date: Wed, 12 Oct 2016 14:15:49 +0200 Subject: [PATCH 4/4] reduced formating changes --- .../charts/AbstractCompetitorRaceChart.java | 203 +++++++++--------- 1 file changed, 96 insertions(+), 107 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java index 3e680d54383..14f4df17f8e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/charts/AbstractCompetitorRaceChart.java @@ -77,14 +77,14 @@ import com.sap.sse.gwt.client.shared.components.Component; * @author Benjamin Ebling (D056866), Axel Uhl (d043530) * */ -public abstract class AbstractCompetitorRaceChart - extends AbstractRaceChart implements CompetitorSelectionChangeListener, RequiresResize { +public abstract class AbstractCompetitorRaceChart extends AbstractRaceChart implements + CompetitorSelectionChangeListener, RequiresResize { public static final String LOAD_COMPETITOR_CHART_DATA_CATEGORY = "loadCompetitorChartData"; - + public static final long DEFAULT_STEPSIZE = 5000; - + private static final int LINE_WIDTH = 1; - + private final Label noCompetitorsSelectedLabel; private final Label noDataFoundLabel; private final CompetitorSelectionProvider competitorSelectionProvider; @@ -98,7 +98,7 @@ public abstract class AbstractCompetitorRaceChart, Series> dataSeriesForDetailTypeAndCompetitor = new HashMap<>(); private final Map, Series> markPassingSeriesByCompetitor = new HashMap<>(); - + private final TimingHolder primary = new TimingHolder(); private final TimingHolder secondary = new TimingHolder(); @@ -106,15 +106,15 @@ public abstract class AbstractCompetitorRaceChart getComponent(); /** - * Loads the needed data (data which isn't in the {@link #chartData cache}) for the {@link #getSelectedCompetitors() - * visible competitors} via + * Loads the needed data (data which isn't in the {@link #chartData cache}) for the + * {@link #getSelectedCompetitors() visible competitors} via * {@link SailingServiceAsync#getCompetitorsRaceData(RaceIdentifier, List, long, DetailType, AsyncCallback)}. After * loading, the method {@link #drawChartData()} is called. *

@@ -219,23 +227,19 @@ public abstract class AbstractCompetitorRaceChart competitorsToLoad, final DetailType selectedDataTypeToRetrieve, - final TimingHolder tholder) { - long stepSize = Math.max(getStepSizeInMillis(), from == null || to == null ? 0 - : Math.abs(to.getTime() - from.getTime()) / SailingServiceConstants.MAX_NUMBER_OF_FIXES_TO_QUERY); + ArrayList competitorsToLoad, final DetailType selectedDataTypeToRetrieve,final TimingHolder tholder) { + long stepSize = Math.max(getStepSizeInMillis(), + from==null||to==null ? 0 : Math.abs(to.getTime()-from.getTime())/SailingServiceConstants.MAX_NUMBER_OF_FIXES_TO_QUERY); GetCompetitorsRaceDataAction getCompetitorsRaceDataAction = new GetCompetitorsRaceDataAction(sailingService, selectedRaceIdentifier, competitorsToLoad, from, to, stepSize, selectedDataTypeToRetrieve, leaderboardGroupName, leaderboardName); @@ -248,7 +252,7 @@ public abstract class AbstractCompetitorRaceChart competitorsToLoad = new ArrayList(); competitorsToLoad.add(competitor); - + { - Date fromDate = primary.timeOfEarliestRequestInMillis == null ? null - : new Date(primary.timeOfEarliestRequestInMillis); - Date toDate = primary.timeOfLatestRequestInMillis == null ? null - : new Date(primary.timeOfLatestRequestInMillis); + Date fromDate = primary.timeOfEarliestRequestInMillis == null ? null : new Date(primary.timeOfEarliestRequestInMillis); + Date toDate = primary.timeOfLatestRequestInMillis == null ? null : new Date(primary.timeOfLatestRequestInMillis); loadData(fromDate, toDate, competitorsToLoad, false); } { - Date fromDate = secondary.timeOfEarliestRequestInMillis == null ? null - : new Date(secondary.timeOfEarliestRequestInMillis); - Date toDate = secondary.timeOfLatestRequestInMillis == null ? null - : new Date(secondary.timeOfLatestRequestInMillis); + Date fromDate = secondary.timeOfEarliestRequestInMillis == null ? null : new Date(secondary.timeOfEarliestRequestInMillis); + Date toDate = secondary.timeOfLatestRequestInMillis == null ? null : new Date(secondary.timeOfLatestRequestInMillis); loadData(fromDate, toDate, competitorsToLoad, false); } } @@ -324,23 +324,21 @@ public abstract class AbstractCompetitorRaceChart - * Fills the series for the selected competitors with the data in {@link AbstractCompetitorRaceChart#chartData}. - *
+ * Fills the series for the selected competitors with the data in {@link AbstractCompetitorRaceChart#chartData}.
*/ private synchronized void updateChartSeries(CompetitorsRaceDataDTO chartData, DetailType retrievedDataType, - boolean append, TimingHolder tholder) { + boolean append,TimingHolder tholder) { // Make sure the busy indicator is removed at this point, or plotting the data results in an exception setWidget(chart); for (CompetitorDTO competitor : chartData.getCompetitors()) { Series competitorDataSeries = getOrCreateCompetitorDataSeries(retrievedDataType, competitor); Series markPassingSeries = getOrCreateCompetitorMarkPassingSeries(competitorDataSeries, retrievedDataType, competitor); - + CompetitorRaceDataDTO competitorData = chartData.getCompetitorData(competitor); if (competitorData != null) { Date toDate = timer.getLiveTimePointAsDate(); - List> markPassingsData = competitorData - .getMarkPassingsData(); + List> markPassingsData = competitorData.getMarkPassingsData(); List markPassingPoints = new ArrayList(); for (com.sap.sse.common.Util.Triple markPassingData : markPassingsData) { if (markPassingData.getB() != null && markPassingData.getC() != null) { @@ -361,13 +359,10 @@ public abstract class AbstractCompetitorRaceChart raceDataPoint : raceData) { Double dataPointValue = raceDataPoint.getB(); - if (dataPointValue != null) { + if(dataPointValue != null) { long dataPointTimeAsMillis = raceDataPoint.getA().getTime(); - if (append == false - || (tholder.timeOfEarliestRequestInMillis == null - || dataPointTimeAsMillis < tholder.timeOfEarliestRequestInMillis) - || tholder.timeOfLatestRequestInMillis == null - || dataPointTimeAsMillis > tholder.timeOfLatestRequestInMillis) { + if(append == false || (tholder.timeOfEarliestRequestInMillis == null || dataPointTimeAsMillis < tholder.timeOfEarliestRequestInMillis) || + tholder.timeOfLatestRequestInMillis == null || dataPointTimeAsMillis > tholder.timeOfLatestRequestInMillis) { raceDataPointsToAdd[currentPointIndex++] = new Point(dataPointTimeAsMillis, dataPointValue); } } @@ -377,29 +372,26 @@ public abstract class AbstractCompetitorRaceChart chartSeries = Arrays.asList(chart.getSeries()); if (!chartSeries.contains(competitorDataSeries)) { chart.addSeries(competitorDataSeries); chart.addSeries(markPassingSeries); - + } } } - if (tholder.timeOfEarliestRequestInMillis == null - || tholder.timeOfEarliestRequestInMillis > chartData.getRequestedFromTime().getTime()) { + if (tholder.timeOfEarliestRequestInMillis == null || tholder.timeOfEarliestRequestInMillis > chartData.getRequestedFromTime().getTime()) { tholder.timeOfEarliestRequestInMillis = chartData.getRequestedFromTime().getTime(); } - if (tholder.timeOfLatestRequestInMillis == null - || tholder.timeOfLatestRequestInMillis < chartData.getRequestedToTime().getTime()) { + if (tholder.timeOfLatestRequestInMillis == null || tholder.timeOfLatestRequestInMillis < chartData.getRequestedToTime().getTime()) { tholder.timeOfLatestRequestInMillis = chartData.getRequestedToTime().getTime(); } chart.redraw(); @@ -431,14 +423,13 @@ public abstract class AbstractCompetitorRaceChart zoomRange = timeRangeWithZoomProvider.getTimeZoom(); - onTimeZoomChanged(zoomRange.getA(), zoomRange.getB()); - } else { - resetMinMaxAndExtremesInterval(/* redraw */ true); - } + chart = createChart(); + if (isZoomed) { + com.sap.sse.common.Util.Pair zoomRange = timeRangeWithZoomProvider.getTimeZoom(); + onTimeZoomChanged(zoomRange.getA(), zoomRange.getB()); + } else { + resetMinMaxAndExtremesInterval(/* redraw */ true); + } // } final String unitY0 = DetailTypeFormatter.getUnit(getSelectedFirstDetailType()); @@ -639,22 +631,25 @@ public abstract class AbstractCompetitorRaceChart, Series> entry : dataSeriesForDetailTypeAndCompetitor.entrySet()) { @@ -694,7 +689,7 @@ public abstract class AbstractCompetitorRaceChartnull. */ - public com.sap.sse.common.Util.Pair checkPassingRelationToSelection( - ArrayList> markPassingInRange) { + public com.sap.sse.common.Util.Pair checkPassingRelationToSelection(ArrayList> markPassingInRange) { boolean everyPassingInRange = true; Boolean twoPassingsInRangeBeforeError = null; ArrayList competitorPassings = markPassingInRange.get(0); @@ -763,7 +757,7 @@ public abstract class AbstractCompetitorRaceChart primary.timeOfLatestRequestInMillis) { - updateChart(new Date(primary.timeOfLatestRequestInMillis), timeRangeWithZoomProvider.getToTime(), - /* append */true); + updateChart(new Date(primary.timeOfLatestRequestInMillis), timeRangeWithZoomProvider.getToTime(), /* append */true); } // otherwise the cache spans across date and so we don't need to load anything break; @@ -780,16 +773,13 @@ public abstract class AbstractCompetitorRaceChart primary.timeOfLatestRequestInMillis) { - updateChart(new Date(primary.timeOfLatestRequestInMillis), timeRangeWithZoomProvider.getToTime(), - /* append */true); + updateChart(new Date(primary.timeOfLatestRequestInMillis), timeRangeWithZoomProvider.getToTime(), /* append */true); } } break; @@ -810,7 +800,7 @@ public abstract class AbstractCompetitorRaceChart competitors) { timeChanged(timer.getTime(), null); } - + @Override public void filteredCompetitorsListChanged(Iterable filteredCompetitors) { timeChanged(timer.getTime(), null); @@ -819,11 +809,10 @@ public abstract class AbstractCompetitorRaceChart> oldFilterSet, FilterSet> newFilterSet) { - // nothing to do; if it changes the filtered competitor list, a separate call to filteredCompetitorsListChanged - // will occur + // nothing to do; if it changes the filtered competitor list, a separate call to filteredCompetitorsListChanged will occur } - - static class TimingHolder { + + static class TimingHolder{ private Long timeOfEarliestRequestInMillis; private Long timeOfLatestRequestInMillis; }