From df42b556037e48c903606036943c0a3d51262404 Mon Sep 17 00:00:00 2001 From: Fabian Schwarz-Fritz Date: Tue, 15 Nov 2011 23:34:30 +0100 Subject: [PATCH] Changed Dates to TimePoints because of the protocol. Added MessageFileService classes, which is usable with the MessageScriptService Interface to repository. --- .../classes/messages/ABSMessage.java | 44 +++ .../classes/messages/CAMMessage.java | 37 ++- .../classes/messages/CBSMessage.java | 33 +++ .../classes/messages/CCGMessage.java | 31 +- .../classes/messages/ClockAtMarkElement.java | 47 ++- .../classes/messages/DBBMessage.java | 42 +++ .../classes/messages/DTMMessage.java | 41 +++ .../classes/messages/RACMessage.java | 26 ++ .../classes/messages/RPDMessage.java | 86 +++++- .../messages/RacePositionDataElement.java | 85 +++++- .../classes/messages/STLMessage.java | 31 +- .../classes/messages/STTMessage.java | 31 ++ .../classes/messages/TMDMessage.java | 41 ++- .../classes/messages/TimingDataElement.java | 45 ++- .../classes/messages/VERMessage.java | 26 ++ .../classes/messages/WEAMessage.java | 43 +++ .../classes/messages/WNDMessage.java | 39 +++ .../MessageScriptParsingException.java | 27 ++ .../classes/services/MessageFileService.java | 14 + .../services/MessageFileServiceImpl.java | 280 ++++++++++++++++++ .../services/MessageScriptService.java | 5 +- .../services/MessageScriptServiceImpl.java | 5 +- 22 files changed, 1017 insertions(+), 42 deletions(-) create mode 100644 java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/Exceptions/MessageScriptParsingException.java create mode 100644 java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageFileService.java create mode 100644 java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageFileServiceImpl.java diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/ABSMessage.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/ABSMessage.java index cd03a1d3997..1989f3526af 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/ABSMessage.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/ABSMessage.java @@ -53,4 +53,48 @@ public class ABSMessage { public String toString() { return "ABS|" + raceId + ";" + leg + ";" + sailNumber + ";" + speed; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((leg == null) ? 0 : leg.hashCode()); + result = prime * result + ((raceId == null) ? 0 : raceId.hashCode()); + result = prime * result + ((sailNumber == null) ? 0 : sailNumber.hashCode()); + long temp; + temp = Double.doubleToLongBits(speed); + result = prime * result + (int) (temp ^ (temp >>> 32)); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ABSMessage other = (ABSMessage) obj; + if (leg == null) { + if (other.leg != null) + return false; + } else if (!leg.equals(other.leg)) + return false; + if (raceId == null) { + if (other.raceId != null) + return false; + } else if (!raceId.equals(other.raceId)) + return false; + if (sailNumber == null) { + if (other.sailNumber != null) + return false; + } else if (!sailNumber.equals(other.sailNumber)) + return false; + if (Double.doubleToLongBits(speed) != Double.doubleToLongBits(other.speed)) + return false; + return true; + } + + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/CAMMessage.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/CAMMessage.java index 950d09d938d..706259dec37 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/CAMMessage.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/CAMMessage.java @@ -1,11 +1,7 @@ package com.sap.sailing.domain.swisstimingadapter.classes.messages; -import java.util.ArrayList; import java.util.List; -import com.sap.sailing.domain.swisstimingadapter.Mark; -import com.sap.sailing.domain.swisstimingadapter.Race; - public class CAMMessage { private String raceId; private List markList; @@ -46,4 +42,37 @@ public class CAMMessage { return "CAM|" + markList.size() + s; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((markList == null) ? 0 : markList.hashCode()); + result = prime * result + ((raceId == null) ? 0 : raceId.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + CAMMessage other = (CAMMessage) obj; + if (markList == null) { + if (other.markList != null) + return false; + } else if (!markList.equals(other.markList)) + return false; + if (raceId == null) { + if (other.raceId != null) + return false; + } else if (!raceId.equals(other.raceId)) + return false; + return true; + } + + + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/CBSMessage.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/CBSMessage.java index a3e2f7617c0..0614bfd8521 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/CBSMessage.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/CBSMessage.java @@ -36,4 +36,37 @@ public class CBSMessage { public String toString() { return "CBS|" + raceId + ";" + sailNumber + ";" + speed; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + raceId; + result = prime * result + ((sailNumber == null) ? 0 : sailNumber.hashCode()); + long temp; + temp = Double.doubleToLongBits(speed); + result = prime * result + (int) (temp ^ (temp >>> 32)); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + CBSMessage other = (CBSMessage) obj; + if (raceId != other.raceId) + return false; + if (sailNumber == null) { + if (other.sailNumber != null) + return false; + } else if (!sailNumber.equals(other.sailNumber)) + return false; + if (Double.doubleToLongBits(speed) != Double.doubleToLongBits(other.speed)) + return false; + return true; + } + + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/CCGMessage.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/CCGMessage.java index 981e9c3bb0d..d29f23f8278 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/CCGMessage.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/CCGMessage.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.List; import com.sap.sailing.domain.swisstimingadapter.Mark; -import com.sap.sailing.domain.swisstimingadapter.Race; public class CCGMessage { private String raceId; @@ -44,4 +43,34 @@ public class CCGMessage { s = s.substring(0, s.length()-2); return "CCG|" + markList.size() + s; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((markList == null) ? 0 : markList.hashCode()); + result = prime * result + ((raceId == null) ? 0 : raceId.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + CCGMessage other = (CCGMessage) obj; + if (markList == null) { + if (other.markList != null) + return false; + } else if (!markList.equals(other.markList)) + return false; + if (raceId == null) { + if (other.raceId != null) + return false; + } else if (!raceId.equals(other.raceId)) + return false; + return true; + } + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/ClockAtMarkElement.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/ClockAtMarkElement.java index 45b2af706ae..1ab304af689 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/ClockAtMarkElement.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/ClockAtMarkElement.java @@ -1,14 +1,15 @@ package com.sap.sailing.domain.swisstimingadapter.classes.messages; import java.text.SimpleDateFormat; -import java.util.Date; + +import com.sap.sailing.domain.base.TimePoint; public class ClockAtMarkElement { private int markindex; - private Date marktime; + private TimePoint marktime; private String sailnumber; - public ClockAtMarkElement(int markindex, Date marktime, String sailnumber) { + public ClockAtMarkElement(int markindex, TimePoint marktime, String sailnumber) { super(); this.markindex = markindex; this.marktime = marktime; @@ -27,11 +28,11 @@ public class ClockAtMarkElement { this.markindex = markindex; } - public Date getMarktime() { + public TimePoint getMarktime() { return marktime; } - public void setMarktime(Date marktime) { + public void setMarktime(TimePoint marktime) { this.marktime = marktime; } @@ -48,4 +49,40 @@ public class ClockAtMarkElement { return "|" + markindex + ";" + sd.format(marktime) + ";" + sailnumber; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + markindex; + result = prime * result + ((marktime == null) ? 0 : marktime.hashCode()); + result = prime * result + ((sailnumber == null) ? 0 : sailnumber.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ClockAtMarkElement other = (ClockAtMarkElement) obj; + if (markindex != other.markindex) + return false; + if (marktime == null) { + if (other.marktime != null) + return false; + } else if (!marktime.equals(other.marktime)) + return false; + if (sailnumber == null) { + if (other.sailnumber != null) + return false; + } else if (!sailnumber.equals(other.sailnumber)) + return false; + return true; + } + + + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/DBBMessage.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/DBBMessage.java index 4749c55ca4e..984787eeec9 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/DBBMessage.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/DBBMessage.java @@ -44,4 +44,46 @@ public class DBBMessage { public String toString() { return "DBB|" + raceId + ";" + sailNumber + ";" + sailNumber2; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + temp = Double.doubleToLongBits(distance); + result = prime * result + (int) (temp ^ (temp >>> 32)); + result = prime * result + ((raceId == null) ? 0 : raceId.hashCode()); + result = prime * result + ((sailNumber == null) ? 0 : sailNumber.hashCode()); + result = prime * result + ((sailNumber2 == null) ? 0 : sailNumber2.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + DBBMessage other = (DBBMessage) obj; + if (Double.doubleToLongBits(distance) != Double.doubleToLongBits(other.distance)) + return false; + if (raceId == null) { + if (other.raceId != null) + return false; + } else if (!raceId.equals(other.raceId)) + return false; + if (sailNumber == null) { + if (other.sailNumber != null) + return false; + } else if (!sailNumber.equals(other.sailNumber)) + return false; + if (sailNumber2 == null) { + if (other.sailNumber2 != null) + return false; + } else if (!sailNumber2.equals(other.sailNumber2)) + return false; + return true; + } + + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/DTMMessage.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/DTMMessage.java index ab62fb9734c..681d5be9e38 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/DTMMessage.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/DTMMessage.java @@ -55,4 +55,45 @@ public class DTMMessage { return "DTM|" + raceId + ";" + markIndex + ";" + sailNumber; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + temp = Double.doubleToLongBits(distance); + result = prime * result + (int) (temp ^ (temp >>> 32)); + result = prime * result + markIndex; + result = prime * result + ((raceId == null) ? 0 : raceId.hashCode()); + result = prime * result + ((sailNumber == null) ? 0 : sailNumber.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + DTMMessage other = (DTMMessage) obj; + if (Double.doubleToLongBits(distance) != Double.doubleToLongBits(other.distance)) + return false; + if (markIndex != other.markIndex) + return false; + if (raceId == null) { + if (other.raceId != null) + return false; + } else if (!raceId.equals(other.raceId)) + return false; + if (sailNumber == null) { + if (other.sailNumber != null) + return false; + } else if (!sailNumber.equals(other.sailNumber)) + return false; + return true; + } + + + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/RACMessage.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/RACMessage.java index 3b1d15b7d81..0eb1d669148 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/RACMessage.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/RACMessage.java @@ -33,5 +33,31 @@ public class RACMessage { } return "RAC|" + raceList.size() + s; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((raceList == null) ? 0 : raceList.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + RACMessage other = (RACMessage) obj; + if (raceList == null) { + if (other.raceList != null) + return false; + } else if (!raceList.equals(other.raceList)) + return false; + return true; + } + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/RPDMessage.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/RPDMessage.java index 6b413902188..b30dda66db2 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/RPDMessage.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/RPDMessage.java @@ -5,18 +5,22 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import com.sap.sailing.domain.base.TimePoint; + public class RPDMessage { private String raceId; private int status; - private Date dataTime; - private Date startTime; + private TimePoint dataTime; + private TimePoint startTime; private Date raceTime; private int nextMarkLeader; private double distanceToNextMarkLeader; private List racePositionElements; - public RPDMessage(String raceId, int status, Date dataTime, Date startTime, Date raceTime, int nextMarkLeader, - double distanceToNextMarkLeader, List racePositionElements) { + + + public RPDMessage(String raceId, int status, TimePoint dataTime, TimePoint startTime, Date raceTime, + int nextMarkLeader, double distanceToNextMarkLeader, List racePositionElements) { super(); this.raceId = raceId; this.status = status; @@ -42,18 +46,6 @@ public class RPDMessage { public void setStatus(int status) { this.status = status; } - public Date getDataTime() { - return dataTime; - } - public void setDataTime(Date dataTime) { - this.dataTime = dataTime; - } - public Date getStartTime() { - return startTime; - } - public void setStartTime(Date startTime) { - this.startTime = startTime; - } public Date getRaceTime() { return raceTime; } @@ -79,6 +71,19 @@ public class RPDMessage { this.racePositionElements = racePositionElements; } + + public TimePoint getDataTime() { + return dataTime; + } + public void setDataTime(TimePoint dataTime) { + this.dataTime = dataTime; + } + public TimePoint getStartTime() { + return startTime; + } + public void setStartTime(TimePoint startTime) { + this.startTime = startTime; + } public String toString(){ SimpleDateFormat sdataTime = new SimpleDateFormat("yyyy.MM.dd"); SimpleDateFormat sstartTime = new SimpleDateFormat("yyyy.MM.dd"); @@ -91,5 +96,54 @@ public class RPDMessage { return "RPD|" + raceId + "|" + status + "|" + sdataTime.format(dataTime) + "|" + sstartTime.format(startTime) + "|" + sraceTime.format(raceTime) + "|" + racePositionElements.size() + elements; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + temp = Double.doubleToLongBits(distanceToNextMarkLeader); + result = prime * result + (int) (temp ^ (temp >>> 32)); + result = prime * result + nextMarkLeader; + result = prime * result + ((raceId == null) ? 0 : raceId.hashCode()); + result = prime * result + ((racePositionElements == null) ? 0 : racePositionElements.hashCode()); + result = prime * result + ((raceTime == null) ? 0 : raceTime.hashCode()); + result = prime * result + status; + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + RPDMessage other = (RPDMessage) obj; + if (Double.doubleToLongBits(distanceToNextMarkLeader) != Double + .doubleToLongBits(other.distanceToNextMarkLeader)) + return false; + if (nextMarkLeader != other.nextMarkLeader) + return false; + if (raceId == null) { + if (other.raceId != null) + return false; + } else if (!raceId.equals(other.raceId)) + return false; + if (racePositionElements == null) { + if (other.racePositionElements != null) + return false; + } else if (!racePositionElements.equals(other.racePositionElements)) + return false; + if (raceTime == null) { + if (other.raceTime != null) + return false; + } else if (!raceTime.equals(other.raceTime)) + return false; + if (status != other.status) + return false; + return true; + } + + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/RacePositionDataElement.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/RacePositionDataElement.java index ef8140050df..f5a23dec7b0 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/RacePositionDataElement.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/RacePositionDataElement.java @@ -10,7 +10,7 @@ public class RacePositionDataElement { private double vmg; private double als; private double cog; - private String nextMark; + private int nextMark; private int rank; private double distanceToLeader; private double distanceToNextMark; @@ -18,7 +18,7 @@ public class RacePositionDataElement { public RacePositionDataElement(String sailNumber, int boatType, long ageOfData, double latitude, double longitude, - double sog, double vmg, double als, double cog, String nextMark, int rank, double distanceToLeader, + double sog, double vmg, double als, double cog, int nextMarkIndex, int rank, double distanceToLeader, double distanceToNextMark) { super(); this.sailNumber = sailNumber; @@ -30,7 +30,7 @@ public class RacePositionDataElement { this.vmg = vmg; this.als = als; this.cog = cog; - this.nextMark = nextMark; + this.nextMark = nextMarkIndex; this.rank = rank; this.distanceToLeader = distanceToLeader; this.distanceToNextMark = distanceToNextMark; @@ -39,7 +39,7 @@ public class RacePositionDataElement { public RacePositionDataElement() { super(); } - + public String getSailNumber() { return sailNumber; } @@ -137,15 +137,88 @@ public class RacePositionDataElement { } - public String getNextMark() { + + public int getNextMark() { return nextMark; } - public void setNextMark(String nextMark) { + public void setNextMark(int nextMark) { this.nextMark = nextMark; } public String toString(){ return "|" + sailNumber + ";" + boatType + ";" + ageOfData + ";" + latitude + ";" + longitude + ";" + sog + ";" + vmg + ";" + als + ";" + cog + ";" +nextMark + ";" + rank + ";" + distanceToLeader + ";" + distanceToNextMark; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (int) (ageOfData ^ (ageOfData >>> 32)); + long temp; + temp = Double.doubleToLongBits(als); + result = prime * result + (int) (temp ^ (temp >>> 32)); + result = prime * result + boatType; + temp = Double.doubleToLongBits(cog); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(distanceToLeader); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(distanceToNextMark); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(latitude); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(longitude); + result = prime * result + (int) (temp ^ (temp >>> 32)); + result = prime * result + nextMark; + result = prime * result + rank; + result = prime * result + ((sailNumber == null) ? 0 : sailNumber.hashCode()); + temp = Double.doubleToLongBits(sog); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(vmg); + result = prime * result + (int) (temp ^ (temp >>> 32)); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + RacePositionDataElement other = (RacePositionDataElement) obj; + if (ageOfData != other.ageOfData) + return false; + if (Double.doubleToLongBits(als) != Double.doubleToLongBits(other.als)) + return false; + if (boatType != other.boatType) + return false; + if (Double.doubleToLongBits(cog) != Double.doubleToLongBits(other.cog)) + return false; + if (Double.doubleToLongBits(distanceToLeader) != Double.doubleToLongBits(other.distanceToLeader)) + return false; + if (Double.doubleToLongBits(distanceToNextMark) != Double.doubleToLongBits(other.distanceToNextMark)) + return false; + if (Double.doubleToLongBits(latitude) != Double.doubleToLongBits(other.latitude)) + return false; + if (Double.doubleToLongBits(longitude) != Double.doubleToLongBits(other.longitude)) + return false; + if (nextMark != other.nextMark) + return false; + if (rank != other.rank) + return false; + if (sailNumber == null) { + if (other.sailNumber != null) + return false; + } else if (!sailNumber.equals(other.sailNumber)) + return false; + if (Double.doubleToLongBits(sog) != Double.doubleToLongBits(other.sog)) + return false; + if (Double.doubleToLongBits(vmg) != Double.doubleToLongBits(other.vmg)) + return false; + return true; + } + + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/STLMessage.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/STLMessage.java index c8647287f6c..e70d6327187 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/STLMessage.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/STLMessage.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.List; import com.sap.sailing.domain.swisstimingadapter.Competitor; -import com.sap.sailing.domain.swisstimingadapter.Race; public class STLMessage { private String raceId; @@ -39,4 +38,34 @@ public class STLMessage { } return "STL|" + competitorList.size() + s; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((competitorList == null) ? 0 : competitorList.hashCode()); + result = prime * result + ((raceId == null) ? 0 : raceId.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + STLMessage other = (STLMessage) obj; + if (competitorList == null) { + if (other.competitorList != null) + return false; + } else if (!competitorList.equals(other.competitorList)) + return false; + if (raceId == null) { + if (other.raceId != null) + return false; + } else if (!raceId.equals(other.raceId)) + return false; + return true; + } + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/STTMessage.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/STTMessage.java index d1ae59b7725..4fe6fdb89fb 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/STTMessage.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/STTMessage.java @@ -33,4 +33,35 @@ public class STTMessage { SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd"); return "STT|" + raceId + sd.format(startTime); } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((raceId == null) ? 0 : raceId.hashCode()); + result = prime * result + ((startTime == null) ? 0 : startTime.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + STTMessage other = (STTMessage) obj; + if (raceId == null) { + if (other.raceId != null) + return false; + } else if (!raceId.equals(other.raceId)) + return false; + if (startTime == null) { + if (other.startTime != null) + return false; + } else if (!startTime.equals(other.startTime)) + return false; + return true; + } + + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/TMDMessage.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/TMDMessage.java index 44604a64f94..e65cba8524b 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/TMDMessage.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/TMDMessage.java @@ -3,8 +3,6 @@ package com.sap.sailing.domain.swisstimingadapter.classes.messages; import java.util.ArrayList; import java.util.List; -import com.sap.sailing.domain.swisstimingadapter.Race; - public class TMDMessage { private String raceId; private String sailNumber; @@ -55,4 +53,43 @@ public class TMDMessage { return "TMD|" + list.size() + s; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((list == null) ? 0 : list.hashCode()); + result = prime * result + ((raceId == null) ? 0 : raceId.hashCode()); + result = prime * result + ((sailNumber == null) ? 0 : sailNumber.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + TMDMessage other = (TMDMessage) obj; + if (list == null) { + if (other.list != null) + return false; + } else if (!list.equals(other.list)) + return false; + if (raceId == null) { + if (other.raceId != null) + return false; + } else if (!raceId.equals(other.raceId)) + return false; + if (sailNumber == null) { + if (other.sailNumber != null) + return false; + } else if (!sailNumber.equals(other.sailNumber)) + return false; + return true; + } + + + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/TimingDataElement.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/TimingDataElement.java index 3841872983a..f1b9ec11d30 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/TimingDataElement.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/TimingDataElement.java @@ -1,14 +1,15 @@ package com.sap.sailing.domain.swisstimingadapter.classes.messages; import java.text.SimpleDateFormat; -import java.util.Date; + +import com.sap.sailing.domain.base.TimePoint; public class TimingDataElement { private int markIndex; private int rank; - private Date timeSinceStart; + private TimePoint timeSinceStart; - public TimingDataElement(int markIndex, int rank, Date timeSinceStart) { + public TimingDataElement(int markIndex, int rank, TimePoint timeSinceStart) { super(); this.markIndex = markIndex; this.rank = rank; @@ -19,6 +20,7 @@ public class TimingDataElement { super(); } + public int getMarkIndex() { return markIndex; } @@ -35,11 +37,11 @@ public class TimingDataElement { this.rank = rank; } - public Date getTimeSinceStart() { + public TimePoint getTimeSinceStart() { return timeSinceStart; } - public void setTimeSinceStart(Date timeSinceStart) { + public void setTimeSinceStart(TimePoint timeSinceStart) { this.timeSinceStart = timeSinceStart; } @@ -48,4 +50,37 @@ public class TimingDataElement { SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd"); return "|" + markIndex + ";" + rank + ";" + sd.format(timeSinceStart); } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + markIndex; + result = prime * result + rank; + result = prime * result + ((timeSinceStart == null) ? 0 : timeSinceStart.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + TimingDataElement other = (TimingDataElement) obj; + if (markIndex != other.markIndex) + return false; + if (rank != other.rank) + return false; + if (timeSinceStart == null) { + if (other.timeSinceStart != null) + return false; + } else if (!timeSinceStart.equals(other.timeSinceStart)) + return false; + return true; + } + + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/VERMessage.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/VERMessage.java index e95c7dc161f..5a1daff885b 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/VERMessage.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/VERMessage.java @@ -23,4 +23,30 @@ public class VERMessage { public String toString(){ return "VER|" + version; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((version == null) ? 0 : version.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + VERMessage other = (VERMessage) obj; + if (version == null) { + if (other.version != null) + return false; + } else if (!version.equals(other.version)) + return false; + return true; + } + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/WEAMessage.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/WEAMessage.java index 2199176bf76..0701c526f11 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/WEAMessage.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/WEAMessage.java @@ -43,4 +43,47 @@ public class WEAMessage { public String toString(){ return "WEA|" + raceId + ";" + conditions + ";" + temperature + ";" +humidity; } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((conditions == null) ? 0 : conditions.hashCode()); + result = prime * result + ((humidity == null) ? 0 : humidity.hashCode()); + result = prime * result + ((raceId == null) ? 0 : raceId.hashCode()); + result = prime * result + ((temperature == null) ? 0 : temperature.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + WEAMessage other = (WEAMessage) obj; + if (conditions == null) { + if (other.conditions != null) + return false; + } else if (!conditions.equals(other.conditions)) + return false; + if (humidity == null) { + if (other.humidity != null) + return false; + } else if (!humidity.equals(other.humidity)) + return false; + if (raceId == null) { + if (other.raceId != null) + return false; + } else if (!raceId.equals(other.raceId)) + return false; + if (temperature == null) { + if (other.temperature != null) + return false; + } else if (!temperature.equals(other.temperature)) + return false; + return true; + } + + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/WNDMessage.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/WNDMessage.java index 971070f161f..26b4f531b58 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/WNDMessage.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/messages/WNDMessage.java @@ -53,4 +53,43 @@ public class WNDMessage { public String toString(){ return "WND|" + raceId + ";" + markIndex + ";" + windDirection+ ";" +windSpeed; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + markIndex; + result = prime * result + ((raceId == null) ? 0 : raceId.hashCode()); + long temp; + temp = Double.doubleToLongBits(windDirection); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(windSpeed); + result = prime * result + (int) (temp ^ (temp >>> 32)); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + WNDMessage other = (WNDMessage) obj; + if (markIndex != other.markIndex) + return false; + if (raceId == null) { + if (other.raceId != null) + return false; + } else if (!raceId.equals(other.raceId)) + return false; + if (Double.doubleToLongBits(windDirection) != Double.doubleToLongBits(other.windDirection)) + return false; + if (Double.doubleToLongBits(windSpeed) != Double.doubleToLongBits(other.windSpeed)) + return false; + return true; + } + + } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/Exceptions/MessageScriptParsingException.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/Exceptions/MessageScriptParsingException.java new file mode 100644 index 00000000000..047a0786320 --- /dev/null +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/Exceptions/MessageScriptParsingException.java @@ -0,0 +1,27 @@ +package com.sap.sailing.domain.swisstimingadapter.classes.services.Exceptions; + +import java.io.File; + +public class MessageScriptParsingException extends Exception { + + /** + *??? + */ + private static final long serialVersionUID = 1L; + + private File file; + private String line; + + public MessageScriptParsingException(String line, File file) { + super("Parsing Exception while parsing a line from MessageScript"); + this.file = file; + this.line = line; + } + + @Override + public String toString() { + return "MessageScriptParsingException [file=" + file + ", line=" + line + ", toString()=" + super.toString() + + "]"; + } + +} diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageFileService.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageFileService.java new file mode 100644 index 00000000000..b8f03f93c23 --- /dev/null +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageFileService.java @@ -0,0 +1,14 @@ +package com.sap.sailing.domain.swisstimingadapter.classes.services; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +import com.sap.sailing.domain.swisstimingadapter.classes.services.Exceptions.MessageScriptParsingException; + +public interface MessageFileService { + void writeListToFile(String path, List msgList) throws IOException; + List readListFromFile(String path) throws MessageScriptParsingException, IOException, ParseException; +} diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageFileServiceImpl.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageFileServiceImpl.java new file mode 100644 index 00000000000..41111c1ec71 --- /dev/null +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageFileServiceImpl.java @@ -0,0 +1,280 @@ +package com.sap.sailing.domain.swisstimingadapter.classes.services; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +import com.sap.sailing.domain.base.Distance; +import com.sap.sailing.domain.base.Speed; +import com.sap.sailing.domain.base.SpeedWithBearing; +import com.sap.sailing.domain.base.TimePoint; +import com.sap.sailing.domain.base.impl.DegreeBearingImpl; +import com.sap.sailing.domain.base.impl.KnotSpeedImpl; +import com.sap.sailing.domain.base.impl.KnotSpeedWithBearingImpl; +import com.sap.sailing.domain.base.impl.MeterDistance; +import com.sap.sailing.domain.base.impl.MillisecondsTimePoint; +import com.sap.sailing.domain.swisstimingadapter.Competitor; +import com.sap.sailing.domain.swisstimingadapter.Mark; +import com.sap.sailing.domain.swisstimingadapter.Race; +import com.sap.sailing.domain.swisstimingadapter.SailMasterMessage; +import com.sap.sailing.domain.swisstimingadapter.classes.messages.CAMMessage; +import com.sap.sailing.domain.swisstimingadapter.classes.messages.CCGMessage; +import com.sap.sailing.domain.swisstimingadapter.classes.messages.ClockAtMarkElement; +import com.sap.sailing.domain.swisstimingadapter.classes.messages.RACMessage; +import com.sap.sailing.domain.swisstimingadapter.classes.messages.RPDMessage; +import com.sap.sailing.domain.swisstimingadapter.classes.messages.RacePositionDataElement; +import com.sap.sailing.domain.swisstimingadapter.classes.messages.STLMessage; +import com.sap.sailing.domain.swisstimingadapter.classes.messages.TMDMessage; +import com.sap.sailing.domain.swisstimingadapter.classes.messages.TimingDataElement; +import com.sap.sailing.domain.swisstimingadapter.classes.services.Exceptions.MessageScriptParsingException; + +import com.sap.sailing.domain.swisstimingadapter.impl.CompetitorImpl; +import com.sap.sailing.domain.swisstimingadapter.impl.MarkImpl; +import com.sap.sailing.domain.swisstimingadapter.impl.RaceImpl; +import com.sap.sailing.domain.swisstimingadapter.impl.SailMasterMessageImpl; + +public class MessageFileServiceImpl implements MessageFileService { + + private File file; + private BufferedWriter writer; + private BufferedReader reader; + private String lastTimeZoneSuffix; + private final DateFormat dateFormat; + + public MessageFileServiceImpl() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssZ"); + } + + @Override + public void writeListToFile(String path, List msgList) throws IOException { + file = new File(path); + writer = new BufferedWriter(new FileWriter(path)); + String tmp = ""; + for (Object object : msgList) { + tmp = tmp + object.toString() + "\n"; + } + System.out.println(tmp); + writer.write(tmp); + writer.flush(); + } + + @Override + public List readListFromFile(String path) throws MessageScriptParsingException, IOException, ParseException { + file = new File(path); + List resultList = new ArrayList(); + + reader = new BufferedReader(new FileReader(path)); + List strList = getFileIntoArrayListString(reader); + List sailMasterMessageList = getSailMasterMessageList(strList); + + // Iterate throug sailmastermessagelist + for (SailMasterMessage sailMasterMessage : sailMasterMessageList) { + // Switch Case for all kinds of actions, just used + switch (sailMasterMessage.getType()) { + case RPD: + resultList.add(getRPDMessage(sailMasterMessage)); + break; + case RAC: + resultList.add(getRACMessage(sailMasterMessage)); + break; + case CCG: + resultList.add(getCCGMessage(sailMasterMessage)); + break; + case STL: + resultList.add(getSTLMessage(sailMasterMessage)); + break; + case CAM: + resultList.add(getCAMMessage(sailMasterMessage)); + break; + case TMD: + resultList.add(getTMDMessage(sailMasterMessage)); + break; + default: + throw new MessageScriptParsingException(sailMasterMessage.getMessage(), file); + } + } + return resultList; + } + + private RPDMessage getRPDMessage(SailMasterMessage message) throws ParseException { + String[] sections = message.getSections(); + + String raceID = sections[1]; + int status = Integer.valueOf(sections[2]); + TimePoint timePoint = new MillisecondsTimePoint(parseTimeAndDateISO(sections[3])); + TimePoint startTimeEstimatedStartTime = sections[4].trim().length() == 0 ? null : new MillisecondsTimePoint( + parseTimePrefixedWithISOToday(sections[4])); + Long millisecondsSinceRaceStart = sections[5].trim().length() == 0 ? null + : parseHHMMSSToMilliseconds(sections[5]); + Integer nextMarkIndexForLeader = sections[6].trim().length() == 0 ? null : Integer.valueOf(sections[6]); + Distance distanceToNextMarkForLeader = sections[7].trim().length() == 0 ? null : new MeterDistance( + Double.valueOf(sections[7])); + int count = Integer.valueOf(sections[8]); + + List racePositionElements = new ArrayList(); + + for (int i = 0; i < count; i++) { + int fixDetailIndex = 0; + String[] fixSections = sections[9 + i].split(";"); + if (fixSections.length > 2) { + String boatID = fixSections[fixDetailIndex++]; + int trackerTypeInt = Integer.valueOf(fixSections[fixDetailIndex++]); + Long ageOfDataInMilliseconds = 1000l * Long.valueOf(fixSections[fixDetailIndex++]); + double longitude = Double.valueOf(fixSections[fixDetailIndex++]); + double latitude = Double.valueOf(fixSections[fixDetailIndex++]); + Double speedOverGroundInKnots = Double.valueOf(fixSections[fixDetailIndex++]); + Speed averageSpeedOverGround = fixSections[fixDetailIndex].trim().length() == 0 ? null + : new KnotSpeedImpl(Double.valueOf(fixSections[fixDetailIndex])); + fixDetailIndex++; + Speed velocityMadeGood = fixSections[fixDetailIndex].trim().length() == 0 ? null : new KnotSpeedImpl( + Double.valueOf(fixSections[fixDetailIndex])); + fixDetailIndex++; + SpeedWithBearing speed = new KnotSpeedWithBearingImpl(speedOverGroundInKnots, new DegreeBearingImpl( + Double.valueOf(fixSections[fixDetailIndex++]))); + + Integer nextMarkIndex = fixSections.length <= fixDetailIndex + || fixSections[fixDetailIndex].trim().length() == 0 ? null : Integer + .valueOf(fixSections[fixDetailIndex]); + fixDetailIndex++; + Integer rank = fixSections.length <= fixDetailIndex || fixSections[fixDetailIndex].trim().length() == 0 ? null + : Integer.valueOf(fixSections[fixDetailIndex]); + fixDetailIndex++; + Distance distanceToLeader = fixSections.length <= fixDetailIndex + || fixSections[fixDetailIndex].trim().length() == 0 ? null : new MeterDistance( + Double.valueOf(fixSections[fixDetailIndex])); + fixDetailIndex++; + Distance distanceToNextMark = fixSections.length <= fixDetailIndex + || fixSections[fixDetailIndex].trim().length() == 0 ? null : new MeterDistance( + Double.valueOf(fixSections[fixDetailIndex])); + fixDetailIndex++; + + racePositionElements.add(new RacePositionDataElement(boatID, trackerTypeInt, ageOfDataInMilliseconds.longValue(), latitude, longitude, speedOverGroundInKnots.doubleValue(), velocityMadeGood.getKnots(), speed.getKnots(), speed.getBearing().getDegrees(), nextMarkIndex.intValue(), rank.intValue(), distanceToLeader.getMeters(), distanceToNextMark.getMeters())); + } + } + return new RPDMessage(raceID, status, timePoint, startTimeEstimatedStartTime, new Date(millisecondsSinceRaceStart), nextMarkIndexForLeader.intValue(), distanceToNextMarkForLeader.getMeters(), racePositionElements); + } + + private RACMessage getRACMessage(SailMasterMessage message) { + int count = Integer.valueOf(message.getSections()[1]); + List result = new ArrayList(); + for (int i=0; i marks = new ArrayList(); + for (int i=0; i competitors = new ArrayList(); + int count = Integer.valueOf(message.getSections()[2]); + for (int i=0; i result = new ArrayList(); + int count = Integer.valueOf(message.getSections()[2]); + for (int i=0; i timingDataelementList = new ArrayList(); + for (int i = 0; i < count; i++) { + String[] details = message.getSections()[4+i].split(";"); + Integer markIndex = details.length <= 0 || details[0].trim().length() == 0 ? null : Integer.valueOf(details[0]); + Integer rank = details.length <= 1 || details[1].trim().length() == 0 ? null : Integer.valueOf(details[1]); + TimePoint timeSinceStart = details[4].trim().length() == 0 ? null : new MillisecondsTimePoint( + parseTimePrefixedWithISOToday(details[4])); + timingDataelementList.add(new TimingDataElement(markIndex, rank, timeSinceStart)); + } + return new TMDMessage(raceID, boatID, timingDataelementList); + } + + private Date parseTimeAndDateISO(String timeAndDateISO) throws ParseException { + char timeZoneIndicator = timeAndDateISO.charAt(timeAndDateISO.length()-6); + if ((timeZoneIndicator == '+' || timeZoneIndicator == '-') && timeAndDateISO.charAt(timeAndDateISO.length()-3) == ':') { + timeAndDateISO = timeAndDateISO.substring(0, timeAndDateISO.length()-3)+timeAndDateISO.substring(timeAndDateISO.length()-2); + lastTimeZoneSuffix = timeAndDateISO.substring(timeAndDateISO.length()-5); + } + synchronized(dateFormat) { + return dateFormat.parse(timeAndDateISO); + } + } + + private Date parseTimePrefixedWithISOToday(String timeHHMMSS) throws ParseException { + synchronized(dateFormat) { + return dateFormat.parse(prefixTimeWithISOTodayAndSuffixWithTimezoneIndicator(timeHHMMSS)); + } + } + + private String prefixTimeWithISOTodayAndSuffixWithTimezoneIndicator(String time) { + synchronized (dateFormat) { + return dateFormat.format(new Date()).substring(0, "yyyy-mm-ddT".length())+time+lastTimeZoneSuffix; + } + } + + private long parseHHMMSSToMilliseconds(String hhmmss) { + String[] timeDetail = hhmmss.split(":"); + long millisecondsSinceStart = 1000 * (Long.valueOf(timeDetail[2]) + 60 * Long.valueOf(timeDetail[1]) + 3600 * Long + .valueOf(timeDetail[0])); + return millisecondsSinceStart; + } + + private List getSailMasterMessageList(List strList) { + // Add Strings of stringmessageList into a ArrayList of type SailMasterMessage + List sailMasterMessageList = new ArrayList(); + for (String s : strList) { + sailMasterMessageList.add(new SailMasterMessageImpl(s, new Long(0))); + } + return sailMasterMessageList; + } + + private List getFileIntoArrayListString(BufferedReader reader) throws IOException { + // List list = new ArrayList(); + List strList = new ArrayList(); + + // Read Lines into ArrayList + String tmp = ""; + while ((tmp = reader.readLine()) != null) { + strList.add(reader.readLine()); + } + return strList; + } + +} diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageScriptService.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageScriptService.java index b59b38ebc39..8a847d6c562 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageScriptService.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageScriptService.java @@ -1,8 +1,11 @@ package com.sap.sailing.domain.swisstimingadapter.classes.services; import java.io.IOException; +import java.text.ParseException; import java.util.List; +import com.sap.sailing.domain.swisstimingadapter.classes.services.Exceptions.MessageScriptParsingException; + public interface MessageScriptService { void updateMessage(Object message); void createMessagePosition(int positoin, Object message); @@ -12,5 +15,5 @@ public interface MessageScriptService { Object getMessageId(int id); void saveToFile(String path) throws IOException; - void readFromFile(String path); + void readFromFile(String path) throws IOException, ParseException, MessageScriptParsingException; } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageScriptServiceImpl.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageScriptServiceImpl.java index 7b515b9ba90..58d7c4265d2 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageScriptServiceImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/classes/services/MessageScriptServiceImpl.java @@ -1,9 +1,12 @@ package com.sap.sailing.domain.swisstimingadapter.classes.services; import java.io.IOException; +import java.text.ParseException; import java.util.ArrayList; import java.util.List; +import com.sap.sailing.domain.swisstimingadapter.classes.services.Exceptions.MessageScriptParsingException; + public class MessageScriptServiceImpl implements MessageScriptService{ private List messageList; @@ -60,7 +63,7 @@ public class MessageScriptServiceImpl implements MessageScriptService{ } @Override - public void readFromFile(String path) { + public void readFromFile(String path) throws IOException, ParseException, MessageScriptParsingException { fileService.readListFromFile(path); }