diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/startanalysis/StartAnalysisSimpleMap.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/startanalysis/StartAnalysisSimpleMap.java deleted file mode 100644 index 8958371d9e9..00000000000 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/client/startanalysis/StartAnalysisSimpleMap.java +++ /dev/null @@ -1,329 +0,0 @@ -package com.sap.sailing.dashboards.gwt.client.startanalysis; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import com.google.gwt.dom.client.Style.Position; -import com.google.gwt.dom.client.Style.Unit; -import com.google.gwt.maps.client.LoadApi; -import com.google.gwt.maps.client.LoadApi.LoadLibrary; -import com.google.gwt.maps.client.MapOptions; -import com.google.gwt.maps.client.MapWidget; -import com.google.gwt.maps.client.base.LatLng; -import com.google.gwt.maps.client.base.LatLngBounds; -import com.google.gwt.maps.client.controls.ControlPosition; -import com.google.gwt.maps.client.controls.MapTypeStyle; -import com.google.gwt.maps.client.controls.ScaleControlOptions; -import com.google.gwt.maps.client.maptypes.MapTypeStyleFeatureType; -import com.google.gwt.maps.client.mvc.MVCArray; -import com.google.gwt.maps.client.overlays.Polyline; -import com.google.gwt.maps.client.overlays.PolylineOptions; -import com.google.gwt.user.client.ui.AbsolutePanel; -import com.sap.sailing.dashboards.gwt.shared.dto.startanalysis.StartAnalysisCompetitorDTO; -import com.sap.sailing.dashboards.gwt.shared.dto.startanalysis.StartAnalysisDTO; -import com.sap.sailing.domain.common.dto.CompetitorDTO; -import com.sap.sailing.domain.common.dto.PositionDTO; -import com.sap.sailing.gwt.ui.client.shared.racemap.BoatOverlay; -import com.sap.sailing.gwt.ui.client.shared.racemap.CourseMarkOverlay; -import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapOverlaysZIndexes; -import com.sap.sailing.gwt.ui.client.shared.racemap.TailFactory; -import com.sap.sailing.gwt.ui.shared.GPSFixDTO; -import com.sap.sailing.gwt.ui.shared.MarkDTO; -import com.sap.sailing.gwt.ui.shared.racemap.GoogleMapStyleHelper; -import com.sap.sse.common.impl.RGBColor; - -public class StartAnalysisSimpleMap extends AbsolutePanel implements TailFactory { - - private MapWidget map; - private StartAnalysisDTO startAnalysisDTO; - - public StartAnalysisSimpleMap(int containerID, StartAnalysisDTO startAnalysisDTO) { - - this.startAnalysisDTO = startAnalysisDTO; - - this.getElement().getStyle().setPosition(Position.ABSOLUTE); - this.getElement().getStyle().setWidth(100, Unit.PCT); - this.getElement().getStyle().setHeight(100, Unit.PCT); - loadMapsAPIV3(); - } - - private void loadMapsAPIV3() { - boolean sensor = true; - // load all the libs for use in the maps - ArrayList loadLibraries = new ArrayList(); - loadLibraries.add(LoadLibrary.DRAWING); - loadLibraries.add(LoadLibrary.GEOMETRY); - - Runnable onLoad = new Runnable() { - @Override - public void run() { - MapOptions mapOptions = MapOptions.newInstance(); - mapOptions.setScrollWheel(true); - mapOptions.setMapTypeControl(false); - mapOptions.setPanControl(false); - mapOptions.setZoomControl(false); - mapOptions.setScaleControl(true); - mapOptions.setDraggable(false); - mapOptions.setPanControl(false); - MapTypeStyle[] mapTypeStyles = new MapTypeStyle[4]; - - // hide all transit lines including ferry lines - mapTypeStyles[0] = GoogleMapStyleHelper.createHiddenStyle(MapTypeStyleFeatureType.TRANSIT); - // hide points of interest - mapTypeStyles[1] = GoogleMapStyleHelper.createHiddenStyle(MapTypeStyleFeatureType.POI); - // simplify road display - mapTypeStyles[2] = GoogleMapStyleHelper.createSimplifiedStyle(MapTypeStyleFeatureType.ROAD); - // set water color - mapTypeStyles[3] = GoogleMapStyleHelper.createColorStyle(MapTypeStyleFeatureType.WATER, new RGBColor(0, - 136, 255), -35, -34); - - mapOptions.setMapTypeStyles(mapTypeStyles); - ScaleControlOptions scaleControlOptions = ScaleControlOptions.newInstance(); - scaleControlOptions.setPosition(ControlPosition.BOTTOM_RIGHT); - mapOptions.setScaleControlOptions(scaleControlOptions); - mapOptions.setStreetViewControl(false); - map = new MapWidget(mapOptions); - StartAnalysisSimpleMap.this.add(map, 0, 0); - map.setSize("100%", "100%"); - map.getElement().getStyle().setBackgroundColor("#4293DB"); - map.triggerResize(); - drawStartLine(startAnalysisDTO.startLineMarks); - drawLinesFromStartLineToFirstMark(startAnalysisDTO.startLineMarks, startAnalysisDTO.firstMark); - drawStartlineMarks(startAnalysisDTO.startLineMarks); - drawFirstMark(startAnalysisDTO.firstMark); - drawTails(createGPSFixesForCompetitors(startAnalysisDTO)); - drawBoats(createGPSPositionForCompetitors(startAnalysisDTO)); - zoomMapToNewBounds(calculateNewBounds(startAnalysisDTO.startLineMarkPositions)); - } - }; - LoadApi.go(onLoad, loadLibraries, sensor); - } - - private Map> createGPSFixesForCompetitors(StartAnalysisDTO startAnalysisDTO) { - - Map> gpsFixesForCompetitors = new HashMap>(); - for (StartAnalysisCompetitorDTO startAnalysisCompetitorDTO : startAnalysisDTO.startAnalysisCompetitorDTOs) { - if (startAnalysisCompetitorDTO.gpsFixDTOs != null && !startAnalysisCompetitorDTO.gpsFixDTOs.isEmpty()) { - gpsFixesForCompetitors.put(startAnalysisCompetitorDTO.competitorDTO, - startAnalysisCompetitorDTO.gpsFixDTOs); - } - } - return gpsFixesForCompetitors; - } - - private Map createGPSPositionForCompetitors(StartAnalysisDTO startAnalysisDTO) { - Map gpsPositionForCompetitors = new HashMap(); - for (StartAnalysisCompetitorDTO startAnalysisCompetitorDTO : startAnalysisDTO.startAnalysisCompetitorDTOs) { - if (startAnalysisCompetitorDTO.gpsFixDTOs != null && !startAnalysisCompetitorDTO.gpsFixDTOs.isEmpty()) { - gpsPositionForCompetitors.put(startAnalysisCompetitorDTO.competitorDTO, - startAnalysisCompetitorDTO.gpsFixDTOs.get(startAnalysisCompetitorDTO.gpsFixDTOs.size() - 1)); - } - } - return gpsPositionForCompetitors; - } - - private void drawStartLine(List startlineMarks) { - if (map != null && startlineMarks != null) { - - if (startlineMarks.size() == 2) { - LatLng startLinePoint1 = LatLng.newInstance(startlineMarks.get(0).position.latDeg, - startlineMarks.get(0).position.lngDeg); - LatLng startLinePoint2 = LatLng.newInstance(startlineMarks.get(1).position.latDeg, - startlineMarks.get(1).position.lngDeg); - - PolylineOptions options = PolylineOptions.newInstance(); - options.setGeodesic(true); - options.setStrokeColor("#FFFFFF"); - options.setStrokeWeight(2); - options.setStrokeOpacity(1.0); - - MVCArray pointsAsArray = MVCArray.newInstance(); - pointsAsArray.insertAt(0, startLinePoint1); - pointsAsArray.insertAt(1, startLinePoint2); - - Polyline startLine = Polyline.newInstance(options); - startLine.setPath(pointsAsArray); - - startLine.setMap(map); - } - } - } - - private void drawLinesFromStartLineToFirstMark(List startlineMarks, MarkDTO firstMark) { - if (map != null && startlineMarks != null && firstMark != null) { - if (startlineMarks.size() == 2) { - LatLng startLinePoint1 = LatLng.newInstance(startlineMarks.get(0).position.latDeg, - startlineMarks.get(0).position.lngDeg); - LatLng startLinePoint2 = LatLng.newInstance(startlineMarks.get(1).position.latDeg, - startlineMarks.get(1).position.lngDeg); - LatLng firstMarkPoint = LatLng.newInstance(firstMark.position.latDeg, firstMark.position.lngDeg); - - PolylineOptions options = PolylineOptions.newInstance(); - options.setGeodesic(true); - options.setStrokeColor("#A3A3A3"); - options.setStrokeWeight(2); - options.setStrokeOpacity(1.0); - - MVCArray pointsAsArray1 = MVCArray.newInstance(); - pointsAsArray1.insertAt(0, startLinePoint1); - pointsAsArray1.insertAt(1, firstMarkPoint); - - MVCArray pointsAsArray2 = MVCArray.newInstance(); - pointsAsArray2.insertAt(0, startLinePoint2); - pointsAsArray2.insertAt(1, firstMarkPoint); - - Polyline startMarkFirstMark1 = Polyline.newInstance(options); - Polyline startMarkFirstMark2 = Polyline.newInstance(options); - - startMarkFirstMark1.setPath(pointsAsArray1); - startMarkFirstMark2.setPath(pointsAsArray2); - - startMarkFirstMark1.setMap(map); - startMarkFirstMark2.setMap(map); - } - } - } - - private void drawStartlineMarks(List startlineMarks) { - if (map != null) { - for (MarkDTO markDTO : startlineMarks) { - CourseMarkOverlay courseMarkOverlay = createCourseMarkOverlay( - RaceMapOverlaysZIndexes.COURSEMARK_ZINDEX, markDTO); - courseMarkOverlay.addToMap(); - } - } - } - - private void drawFirstMark(MarkDTO firstMark) { - CourseMarkOverlay courseMarkOverlay = createCourseMarkOverlay(RaceMapOverlaysZIndexes.COURSEMARK_ZINDEX, - firstMark); - courseMarkOverlay.addToMap(); - } - - private CourseMarkOverlay createCourseMarkOverlay(int zIndex, final MarkDTO markDTO) { - markDTO.position.latDeg = markDTO.position.latDeg; - final CourseMarkOverlay courseMarkOverlay = new CourseMarkOverlay(map, zIndex, markDTO); - return courseMarkOverlay; - } - - private LatLngBounds calculateNewBounds(List startLinePositions) { - LatLngBounds newBounds = null; - List newStartLinePositionDTOs = new ArrayList(startLinePositions); - Iterable positionsToZoom = newStartLinePositionDTOs; - - if (positionsToZoom != null) { - for (PositionDTO position : positionsToZoom) { - PositionDTO positionMoovedToNorth = position; - positionMoovedToNorth.latDeg = positionMoovedToNorth.latDeg - 0.0009; - - LatLng markLatLng = LatLng.newInstance(positionMoovedToNorth.latDeg, positionMoovedToNorth.lngDeg); - LatLngBounds bounds = LatLngBounds.newInstance(markLatLng, markLatLng); - if (newBounds == null) { - newBounds = bounds; - } else { - newBounds.extend(markLatLng); - } - markLatLng = null; - position = null; - positionMoovedToNorth.latDeg = positionMoovedToNorth.latDeg + 0.0009; - } - } - // } - positionsToZoom = null; - return newBounds; - } - - private void zoomMapToNewBounds(LatLngBounds newBounds) { - if (newBounds != null) { - map.setCenter(newBounds.getCenter()); - map.setZoom(17); - } - } - - private void drawBoats(Map competitorAndLastFix) { - - Set competitors = competitorAndLastFix.keySet(); - - for (CompetitorDTO competitorDTO : competitors) { - BoatOverlay boatOverlay = createBoatOverlay(RaceMapOverlaysZIndexes.BOATS_ZINDEX, competitorDTO, false); - boatOverlay.setSelected(false); - boatOverlay.setBoatFix(competitorAndLastFix.get(competitorDTO), 10); - boatOverlay.addToMap(); - } - } - - private BoatOverlay createBoatOverlay(int zIndex, final CompetitorDTO competitorDTO, boolean highlighted) { - final BoatOverlay boatCanvas = new BoatOverlay(map, zIndex, competitorDTO, competitorDTO.getColor()); - boatCanvas.setSelected(false); - return boatCanvas; - } - - private void drawTails(Map> competitorFixes) { - - Set competitors = competitorFixes.keySet(); - for (CompetitorDTO competitor : competitors) { - Polyline competitorPolyline = createPolylineFromGPSFixDTOs(competitor, competitorFixes.get(competitor)); - competitorPolyline.setMap(map); - } - - } - - private Polyline createPolylineFromGPSFixDTOs(CompetitorDTO competitorDTO, List fixes) { - List points = new ArrayList(); - int indexOfFirst = -1; - int indexOfLast = -1; - int i = 0; - for (Iterator fixIter = fixes.iterator(); fixIter.hasNext() && indexOfLast == -1;) { - GPSFixDTO fix = fixIter.next(); - if (!fix.timepoint.before(fixes.get(fixes.size() - 1).timepoint)) { - indexOfLast = i - 1; - } else { - LatLng point = null; - if (indexOfFirst == -1) { - if (!fix.timepoint.before(fixes.get(0).timepoint)) { - indexOfFirst = i; - point = LatLng.newInstance(fix.position.latDeg, fix.position.lngDeg); - } - } else { - point = LatLng.newInstance(fix.position.latDeg, fix.position.lngDeg); - } - if (point != null) { - points.add(point); - } - } - i++; - } - if (indexOfLast == -1) { - indexOfLast = i - 1; - } - Polyline result = createTail(competitorDTO, points); - return result; - } - - @Override - public Polyline createTail(CompetitorDTO competitor, List points) { - PolylineOptions options = createTailStyle(competitor, false); - Polyline result = Polyline.newInstance(options); - - MVCArray pointsAsArray = MVCArray.newInstance(points.toArray(new LatLng[0])); - result.setPath(pointsAsArray); - - return result; - } - - @Override - public PolylineOptions createTailStyle(CompetitorDTO competitor, boolean isHighlighted) { - PolylineOptions options = PolylineOptions.newInstance(); - options.setClickable(true); - options.setGeodesic(true); - options.setStrokeOpacity(1.0); - options.setStrokeColor(competitor.getColor().getAsHtml()); - options.setStrokeWeight(1); - options.setZindex(RaceMapOverlaysZIndexes.BOATTAILS_ZINDEX); - return options; - } -} diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/startanalysis/StartAnalysisDTOFactory.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/startanalysis/StartAnalysisDTOFactory.java index 4081f563d2d..3925d937589 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/startanalysis/StartAnalysisDTOFactory.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/server/startanalysis/StartAnalysisDTOFactory.java @@ -2,10 +2,8 @@ package com.sap.sailing.dashboards.gwt.server.startanalysis; import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -16,27 +14,15 @@ import com.sap.sailing.dashboards.gwt.shared.dto.startanalysis.StartAnalysisDTO; import com.sap.sailing.dashboards.gwt.shared.dto.startanalysis.StartAnalysisRankingTableEntryDTO; import com.sap.sailing.dashboards.gwt.shared.dto.startanalysis.WindAndAdvantagesInfoForStartLineDTO; import com.sap.sailing.domain.base.Competitor; -import com.sap.sailing.domain.base.Mark; import com.sap.sailing.domain.base.Waypoint; import com.sap.sailing.domain.common.LegType; import com.sap.sailing.domain.common.NoWindException; import com.sap.sailing.domain.common.Position; -import com.sap.sailing.domain.common.SpeedWithBearing; -import com.sap.sailing.domain.common.Tack; -import com.sap.sailing.domain.common.dto.CompetitorDTO; -import com.sap.sailing.domain.common.dto.PositionDTO; -import com.sap.sailing.domain.tracking.GPSFix; -import com.sap.sailing.domain.tracking.GPSFixMoving; -import com.sap.sailing.domain.tracking.GPSFixTrack; import com.sap.sailing.domain.tracking.LineDetails; import com.sap.sailing.domain.tracking.MarkPassing; import com.sap.sailing.domain.tracking.TrackedLeg; import com.sap.sailing.domain.tracking.TrackedRace; import com.sap.sailing.domain.tracking.Wind; -import com.sap.sailing.gwt.ui.shared.GPSFixDTO; -import com.sap.sailing.gwt.ui.shared.MarkDTO; -import com.sap.sailing.gwt.ui.shared.SpeedWithBearingDTO; -import com.sap.sailing.gwt.ui.shared.WindDTO; import com.sap.sailing.server.RacingEventService; import com.sap.sse.common.TimePoint; import com.sap.sse.common.impl.MillisecondsTimePoint; @@ -46,7 +32,6 @@ public class StartAnalysisDTOFactory extends AbstractStartAnalysisCreationValida private final com.sap.sailing.domain.base.DomainFactory baseDomainFactory; private static int MINIMUM_NUMBER_COMPETITORS_FOR_STARTANALYSIS = 3; - private final int TAILLENGHT_IN_MILLISECONDS = 200000; private static final Logger logger = Logger.getLogger(StartAnalysisDTOFactory.class.getName()); @@ -75,6 +60,8 @@ public class StartAnalysisDTOFactory extends AbstractStartAnalysisCreationValida } startAnalysisDTO.competitor = baseDomainFactory.getCompetitorStore().convertToCompetitorDTO(competitor); startAnalysisDTO.startAnalysisCompetitorDTOs = competitors; + startAnalysisDTO.timeOfStartInMilliSeconds = trackedRace.getStartOfRace().asMillis(); + startAnalysisDTO.regattaAndRaceIdentifier = trackedRace.getRaceIdentifier(); logger.log(Level.INFO, "Created StartAnalysis For Competitor "+competitor.getName()+" and "+trackedRace.getRace().getName()); return startAnalysisDTO; } @@ -101,26 +88,10 @@ public class StartAnalysisDTOFactory extends AbstractStartAnalysisCreationValida private StartAnalysisDTO addStaticDataToStartAnalysisDTOFrom(StartAnalysisDTO startAnalysisDTO,TrackedRace trackedRace) { startAnalysisDTO.raceName = trackedRace.getRace().getName(); - startAnalysisDTO.startLineMarkPositions = getStartLineBoyPositions(trackedRace); - startAnalysisDTO.firstMark = getMarksOfWayPoint(trackedRace, getFirstMarkWayPoint(trackedRace)).get(0); startAnalysisDTO.startAnalysisWindLineInfoDTO = createStartAnalysisWindAndLineData(trackedRace); - startAnalysisDTO.startLineMarks = getMarksOfWayPoint(trackedRace, - trackedRace.getStartLine(trackedRace.getStartTimeReceived()).getWaypoint()); return startAnalysisDTO; } - private Map createPerCompetitorIdAsString(TrackedRace currentRace, Date fiveSecondsBeforeStart) { - Map fromPerCompetitorIdAsString = new HashMap(); - try { - for (Competitor competitor : currentRace.getCompetitorsFromBestToWorst(new MillisecondsTimePoint(new Date() - .getTime()))) { - fromPerCompetitorIdAsString.put(competitor.getId().toString(), fiveSecondsBeforeStart); - } - } catch (NoWindException e) { - e.printStackTrace(); - } - return fromPerCompetitorIdAsString; - } private StartAnalysisRankingTableEntryDTO createRankTableEntry(TrackedRace trackedRace, int rank, Competitor competitor) { @@ -140,66 +111,6 @@ public class StartAnalysisDTOFactory extends AbstractStartAnalysisCreationValida return tableentry; } - private List getStartLineBoyPositions(TrackedRace trackedRace) { - return getMarkPositionDTOs(trackedRace.getStartTimeReceived(), trackedRace, trackedRace.getRace().getCourse() - .getFirstWaypoint()); - } - - private Waypoint getFirstMarkWayPoint(TrackedRace trackedRace) { - Waypoint firstMarkWayPoint = null; - Iterator waypoints = trackedRace.getRace().getCourse().getWaypoints().iterator(); - int wayPointCounter = 0; - while (waypoints.hasNext()) { - Waypoint wayPoint = waypoints.next(); - if (wayPointCounter == 1) { - return wayPoint; - } - wayPointCounter++; - } - return firstMarkWayPoint; - } - - private List getMarkPositionDTOs(TimePoint timePoint, TrackedRace trackedRace, Waypoint waypoint) { - - List markPositionDTOs = new ArrayList(); - for (Mark startMark : waypoint.getMarks()) { - final Position estimatedMarkPosition = trackedRace.getOrCreateTrack(startMark).getEstimatedPosition( - timePoint, /* extrapolate */false); - if (estimatedMarkPosition != null) { - markPositionDTOs.add(new PositionDTO(estimatedMarkPosition.getLatDeg(), estimatedMarkPosition - .getLngDeg())); - } - } - return markPositionDTOs; - } - - private List getMarksOfWayPoint(TrackedRace trackedRace, Waypoint wayPoint) { - List startLineMarks = new ArrayList(); - for (Mark startMark : wayPoint.getMarks()) { - final Position estimatedMarkPosition = trackedRace.getOrCreateTrack(startMark).getEstimatedPosition( - trackedRace.getStartTimeReceived(), /* extrapolate */false); - if (estimatedMarkPosition != null) { - startLineMarks.add(convertToMarkDTO(startMark, estimatedMarkPosition)); - } - } - return startLineMarks; - } - - private MarkDTO convertToMarkDTO(Mark mark, Position position) { - MarkDTO markDTO; - if (position != null) { - markDTO = new MarkDTO(mark.getId().toString(), mark.getName(), position.getLatDeg(), position.getLngDeg()); - } else { - markDTO = new MarkDTO(mark.getId().toString(), mark.getName()); - } - markDTO.color = mark.getColor(); - markDTO.shape = mark.getShape(); - markDTO.pattern = mark.getPattern(); - markDTO.type = mark.getType(); - - return markDTO; - } - private WindAndAdvantagesInfoForStartLineDTO createStartAnalysisWindAndLineData(TrackedRace trackedRace) { WindAndAdvantagesInfoForStartLineDTO startAnalysisWindLineInfoDTO = new WindAndAdvantagesInfoForStartLineDTO(); LineDetails startline = trackedRace.getStartLine(trackedRace.getStartTimeReceived()); @@ -235,87 +146,6 @@ public class StartAnalysisDTOFactory extends AbstractStartAnalysisCreationValida } } - private Map> getGPSFixDTOListForCompetitorName(TrackedRace trackedRace, - Map fromPerCompetitorIdAsString, Map toPerCompetitorIdAsString, - boolean extrapolate) throws NoWindException { - Map> result = new HashMap>(); - if (trackedRace != null) { - for (Competitor competitor : trackedRace.getRace().getCompetitors()) { - if (fromPerCompetitorIdAsString.containsKey(competitor.getId().toString())) { - CompetitorDTO competitorDTO = baseDomainFactory.convertToCompetitorDTO(competitor); - List fixesForCompetitor = new ArrayList(); - result.put(competitorDTO.getName(), fixesForCompetitor); - GPSFixTrack track = trackedRace.getTrack(competitor); - TimePoint fromTimePoint = new MillisecondsTimePoint(fromPerCompetitorIdAsString.get(competitorDTO - .getIdAsString())); - TimePoint toTimePoint = new MillisecondsTimePoint(toPerCompetitorIdAsString.get(competitorDTO - .getIdAsString())); - // copy the fixes into a list while holding the monitor; - // then release the monitor to avoid deadlocks - // during wind estimations required for tack determination - List fixes = new ArrayList(); - track.lockForRead(); - try { - Iterator fixIter = track.getFixesIterator(fromTimePoint, /* inclusive */ - true); - while (fixIter.hasNext()) { - GPSFixMoving fix = fixIter.next(); - if (fix.getTimePoint().after(fromTimePoint) && fix.getTimePoint().before(toTimePoint)) { - fixes.add(fix); - } - } - } finally { - track.unlockAfterRead(); - } - - Iterator fixIter = fixes.iterator(); - while (fixIter.hasNext()) { - GPSFixMoving fix = fixIter.next(); - Wind wind = trackedRace.getWind(fix.getPosition(), toTimePoint); - final SpeedWithBearing estimatedSpeed = track.getEstimatedSpeed(fix.getTimePoint()); - Tack tack = wind == null ? null : trackedRace.getTack(estimatedSpeed, wind, fix.getTimePoint()); - LegType legType = null; - WindDTO windDTO = wind == null ? null : createWindDTOFromAlreadyAveraged(wind, toTimePoint); - GPSFixDTO fixDTO = createGPSFixDTO(fix, estimatedSpeed, windDTO, tack, legType, /* extrapolate */ - false); - fixesForCompetitor.add(fixDTO); - } - } - } - } - return result; - } - - protected WindDTO createWindDTOFromAlreadyAveraged(Wind wind, TimePoint requestTimepoint) { - WindDTO windDTO = new WindDTO(); - windDTO.requestTimepoint = requestTimepoint.asMillis(); - windDTO.trueWindBearingDeg = wind.getBearing().getDegrees(); - windDTO.trueWindFromDeg = wind.getBearing().reverse().getDegrees(); - windDTO.trueWindSpeedInKnots = wind.getKnots(); - windDTO.trueWindSpeedInMetersPerSecond = wind.getMetersPerSecond(); - windDTO.dampenedTrueWindBearingDeg = wind.getBearing().getDegrees(); - windDTO.dampenedTrueWindFromDeg = wind.getBearing().reverse().getDegrees(); - windDTO.dampenedTrueWindSpeedInKnots = wind.getKnots(); - windDTO.dampenedTrueWindSpeedInMetersPerSecond = wind.getMetersPerSecond(); - if (wind.getPosition() != null) { - windDTO.position = new PositionDTO(wind.getPosition().getLatDeg(), wind.getPosition().getLngDeg()); - } - if (wind.getTimePoint() != null) { - windDTO.measureTimepoint = wind.getTimePoint().asMillis(); - } - return windDTO; - } - - private SpeedWithBearingDTO createSpeedWithBearingDTO(SpeedWithBearing speedWithBearing) { - return new SpeedWithBearingDTO(speedWithBearing.getKnots(), speedWithBearing.getBearing().getDegrees()); - } - - private GPSFixDTO createGPSFixDTO(GPSFix fix, SpeedWithBearing speedWithBearing, WindDTO windDTO, Tack tack, - LegType legType, boolean extrapolated) { - return new GPSFixDTO(fix.getTimePoint().asDate(), fix.getPosition() == null ? null : new PositionDTO(fix - .getPosition().getLatDeg(), fix.getPosition().getLngDeg()), speedWithBearing == null ? null - : createSpeedWithBearingDTO(speedWithBearing), windDTO, tack, legType, extrapolated); - } private LegType getFirstLegTypeOfTrackedRaceAtTimePoint(TrackedRace trackedRace, TimePoint timePoint) throws NoWindException { @@ -333,19 +163,6 @@ public class StartAnalysisDTOFactory extends AbstractStartAnalysisCreationValida StartAnalysisCompetitorDTO startAnalysisCompetitorDTOsForRace = new StartAnalysisCompetitorDTO(); startAnalysisCompetitorDTOsForRace.competitorDTO = baseDomainFactory.getCompetitorStore().convertToCompetitorDTO(competitor); startAnalysisCompetitorDTOsForRace.rankingTableEntryDTO = createRankTableEntry(trackedRace, rank, competitor); - List boatPositions = getOrCreateGPSFixDTOsForCompetitorForTrackedRace(trackedRace).get( - competitor.getName()); - startAnalysisCompetitorDTOsForRace.gpsFixDTOs = boatPositions; return startAnalysisCompetitorDTOsForRace; } - - private Map> getOrCreateGPSFixDTOsForCompetitorForTrackedRace(TrackedRace trackedRace) { - try { - return getGPSFixDTOListForCompetitorName(trackedRace, createPerCompetitorIdAsString(trackedRace, new Date(trackedRace.getStartTimeReceived() - .asMillis() - TAILLENGHT_IN_MILLISECONDS)), createPerCompetitorIdAsString(trackedRace, new Date(trackedRace.getStartTimeReceived() - .asMillis())), true); - } catch (NoWindException e) { - return null; - } - } } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/shared/dto/startanalysis/StartAnalysisCompetitorDTO.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/shared/dto/startanalysis/StartAnalysisCompetitorDTO.java index b26ca108def..2f56496ee13 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/shared/dto/startanalysis/StartAnalysisCompetitorDTO.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/shared/dto/startanalysis/StartAnalysisCompetitorDTO.java @@ -1,10 +1,8 @@ package com.sap.sailing.dashboards.gwt.shared.dto.startanalysis; import java.io.Serializable; -import java.util.List; import com.sap.sailing.domain.common.dto.CompetitorDTO; -import com.sap.sailing.gwt.ui.shared.GPSFixDTO; public class StartAnalysisCompetitorDTO implements Serializable{ @@ -12,5 +10,4 @@ public class StartAnalysisCompetitorDTO implements Serializable{ public CompetitorDTO competitorDTO; public StartAnalysisRankingTableEntryDTO rankingTableEntryDTO; - public List gpsFixDTOs; } diff --git a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/shared/dto/startanalysis/StartAnalysisDTO.java b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/shared/dto/startanalysis/StartAnalysisDTO.java index 65fe2688627..326958c411f 100644 --- a/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/shared/dto/startanalysis/StartAnalysisDTO.java +++ b/java/com.sap.sailing.dashboards.gwt/src/main/java/com/sap/sailing/dashboards/gwt/shared/dto/startanalysis/StartAnalysisDTO.java @@ -1,29 +1,36 @@ package com.sap.sailing.dashboards.gwt.shared.dto.startanalysis; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; +import com.sap.sailing.domain.common.RegattaAndRaceIdentifier; import com.sap.sailing.domain.common.dto.CompetitorDTO; -import com.sap.sailing.domain.common.dto.PositionDTO; -import com.sap.sailing.gwt.ui.shared.MarkDTO; -public class StartAnalysisDTO implements Serializable, Comparable{ - +public class StartAnalysisDTO implements Serializable, Comparable { + private static final long serialVersionUID = -1325150193180234561L; - + public String raceName; public CompetitorDTO competitor; - public List startLineMarkPositions; - public List startLineMarks; - public MarkDTO firstMark; public WindAndAdvantagesInfoForStartLineDTO startAnalysisWindLineInfoDTO; public List startAnalysisCompetitorDTOs; - - - public StartAnalysisDTO(){} + public long timeOfStartInMilliSeconds; + public RegattaAndRaceIdentifier regattaAndRaceIdentifier; + + public StartAnalysisDTO() { + } @Override public int compareTo(StartAnalysisDTO o) { return raceName.compareTo(o.raceName); } + + public List getCompetitorDTOsFromStartAnaylsisCompetitorDTOs() { + List competitorDTOs = new ArrayList(); + for (StartAnalysisCompetitorDTO startAnalysisCompetitorDTO : startAnalysisCompetitorDTOs) { + competitorDTOs.add(startAnalysisCompetitorDTO.competitorDTO); + } + return competitorDTOs; + } } \ No newline at end of file