From 5cc33784207627805402a8df0d0779c1f95c999c Mon Sep 17 00:00:00 2001 From: "Begerad, Stefan" Date: Wed, 2 Feb 2022 05:33:37 -0500 Subject: [PATCH] feat: add classes for Trip parsing --- .../swingbe/ifleet/model/LocationMessage.java | 22 ----- .../de/swingbe/ifleet/model/LocationMsg.java | 39 +++++++++ .../de/swingbe/ifleet/model/Position.java | 74 ++++++++++------ .../de/swingbe/ifleet/model/Receiver.java | 2 +- .../java/de/swingbe/ifleet/model/Sender.java | 2 +- .../de/swingbe/ifleet/model/Telegram.java | 14 ++-- .../de/swingbe/ifleet/model/TelegramHdr.java | 18 ++-- .../java/de/swingbe/ifleet/model/Trip.java | 74 ++++++++++++++++ .../de/swingbe/ifleet/parser/ComParser.java | 2 +- .../swingbe/ifleet/parser/ComParserImpl.java | 27 +----- .../swingbe/ifleet/parser/EntityParser.java | 2 +- .../swingbe/ifleet/parser/HeaderParser.java | 2 +- .../ifleet/parser/HeaderParserImpl.java | 5 +- .../ifleet/parser/LocationMsgParser.java | 10 +-- .../ifleet/parser/LocationMsgParserImpl.java | 35 +++++++- .../swingbe/ifleet/parser/PositionParser.java | 2 +- .../ifleet/parser/PositionParserImpl.java | 61 ++++++++------ .../swingbe/ifleet/parser/ReceiverParser.java | 2 +- .../swingbe/ifleet/parser/SenderParser.java | 2 +- .../ifleet/parser/TelegramHdrParser.java | 2 +- .../ifleet/parser/TelegramHdrParserImpl.java | 26 +----- .../swingbe/ifleet/parser/TelegramParser.java | 2 +- .../ifleet/parser/TelegramParserImpl.java | 5 +- .../de/swingbe/ifleet/parser/TripParser.java | 17 ++++ .../ifleet/parser/TripParserFactory.java | 20 +++++ .../swingbe/ifleet/parser/TripParserImpl.java | 84 +++++++++++++++++++ .../swingbe/ifleet/utils/TelegramUtils.java | 39 +++++++++ 27 files changed, 433 insertions(+), 157 deletions(-) delete mode 100644 src/main/java/de/swingbe/ifleet/model/LocationMessage.java create mode 100644 src/main/java/de/swingbe/ifleet/model/LocationMsg.java create mode 100644 src/main/java/de/swingbe/ifleet/model/Trip.java create mode 100644 src/main/java/de/swingbe/ifleet/parser/TripParser.java create mode 100644 src/main/java/de/swingbe/ifleet/parser/TripParserFactory.java create mode 100644 src/main/java/de/swingbe/ifleet/parser/TripParserImpl.java create mode 100644 src/main/java/de/swingbe/ifleet/utils/TelegramUtils.java diff --git a/src/main/java/de/swingbe/ifleet/model/LocationMessage.java b/src/main/java/de/swingbe/ifleet/model/LocationMessage.java deleted file mode 100644 index a0c4c7a..0000000 --- a/src/main/java/de/swingbe/ifleet/model/LocationMessage.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.swingbe.ifleet.model; - -public class LocationMessage { - - private final Position position; - - public LocationMessage(Position position) { - this.position = position; - } - - public Position getPosition() { - return position; - } - - @Override - public String toString() { - String positionString = "LocationMessage{"; - positionString += position != null ? "position=" + position : ""; - positionString += '}'; - return positionString; - } -} diff --git a/src/main/java/de/swingbe/ifleet/model/LocationMsg.java b/src/main/java/de/swingbe/ifleet/model/LocationMsg.java new file mode 100644 index 0000000..8f88f15 --- /dev/null +++ b/src/main/java/de/swingbe/ifleet/model/LocationMsg.java @@ -0,0 +1,39 @@ +package de.swingbe.ifleet.model; + +public class LocationMsg { + + private final Position position; + private final String driverNumber; + private final Trip trip; + + public LocationMsg(final Position position, final String driverNumber, + final Trip trip) { + this.position = position; + this.driverNumber = driverNumber; + this.trip = trip; + } + + @Override + public String toString() { + String tString = "LocationMsg{" + + "position=" + position + + ", driverNumber='" + driverNumber + '\''; + tString += trip != null ? ", trip=" + trip + '\'' : "" + '\''; + tString += '}'; + + return tString; + } + + public String getDriverNumber() { + return driverNumber; + } + + public Trip getTrip() { + return trip; + } + + public Position getPosition() { + return position; + } + +} diff --git a/src/main/java/de/swingbe/ifleet/model/Position.java b/src/main/java/de/swingbe/ifleet/model/Position.java index a6302a4..a302e14 100644 --- a/src/main/java/de/swingbe/ifleet/model/Position.java +++ b/src/main/java/de/swingbe/ifleet/model/Position.java @@ -2,42 +2,66 @@ package de.swingbe.ifleet.model; public class Position { - private final long longitude; - private final long latitude; - private final int velocity; - private final int heading; + public final static int POSITION_FIELD_NO = 7; - public Position(long longitude, long latitude, int velocity, int heading) { + private final String netPoint; + private final String relPosition; + private final String longitude; + private final String latitude; + private final String offRoute; + private final String velocity; + private final String heading; + + public Position(final String netPoint, final String relPosition, final String longitude, + final String latitude, final String offRoute, + final String velocity, final String heading) { + this.netPoint = netPoint; + this.relPosition = relPosition; this.longitude = longitude; this.latitude = latitude; + this.offRoute = offRoute; this.velocity = velocity; this.heading = heading; } - public long getLongitude() { - return longitude; - } - - public long getLatitude() { - return latitude; - } - - public int getVelocity() { - return velocity; - } - - public int getHeading() { - return heading; - } - @Override public String toString() { return "Position{" + - "longitude=" + longitude + - ", latitude=" + latitude + - ", velocity=" + velocity + - ", heading=" + heading + + "netPoint='" + netPoint + '\'' + + ", relPosition='" + relPosition + '\'' + + ", longitude='" + longitude + '\'' + + ", latitude='" + latitude + '\'' + + ", offRoute='" + offRoute + '\'' + + ", velocity='" + velocity + '\'' + + ", heading='" + heading + '\'' + '}'; } + public String getOffRoute() { + return offRoute; + } + + public String getNetPoint() { + return netPoint; + } + + public String getRelPosition() { + return relPosition; + } + + public String getLongitude() { + return longitude; + } + + public String getLatitude() { + return latitude; + } + + public String getVelocity() { + return velocity; + } + + public String getHeading() { + return heading; + } } diff --git a/src/main/java/de/swingbe/ifleet/model/Receiver.java b/src/main/java/de/swingbe/ifleet/model/Receiver.java index a306391..add594c 100644 --- a/src/main/java/de/swingbe/ifleet/model/Receiver.java +++ b/src/main/java/de/swingbe/ifleet/model/Receiver.java @@ -15,7 +15,7 @@ public class Receiver { @Override public String toString() { String rString = "Receiver{"; - rString += receiver != null ? "receiver='" + receiver + '\'' : ""; + rString += receiver != null ? "receiver='" + receiver + '\'' : "" + '\''; rString += '}'; return rString; } diff --git a/src/main/java/de/swingbe/ifleet/model/Sender.java b/src/main/java/de/swingbe/ifleet/model/Sender.java index 2666106..283a715 100644 --- a/src/main/java/de/swingbe/ifleet/model/Sender.java +++ b/src/main/java/de/swingbe/ifleet/model/Sender.java @@ -15,7 +15,7 @@ public class Sender { @Override public String toString() { String sString = "Sender{"; - sString += sender != null ? "sender='" + sender + '\'' : ""; + sString += sender != null ? "sender='" + sender + '\'' : "" + '\''; sString += '}'; return sString; } diff --git a/src/main/java/de/swingbe/ifleet/model/Telegram.java b/src/main/java/de/swingbe/ifleet/model/Telegram.java index f4545ea..376faa2 100644 --- a/src/main/java/de/swingbe/ifleet/model/Telegram.java +++ b/src/main/java/de/swingbe/ifleet/model/Telegram.java @@ -3,26 +3,26 @@ package de.swingbe.ifleet.model; public class Telegram { private final TelegramHdr teleHeader; - private final LocationMessage locationMessage; + private final LocationMsg locationMsg; - public Telegram(TelegramHdr teleHeader, LocationMessage locationMessage) { + public Telegram(TelegramHdr teleHeader, LocationMsg locationMsg) { this.teleHeader = teleHeader; - this.locationMessage = locationMessage; + this.locationMsg = locationMsg; } public TelegramHdr getTeleHeader() { return teleHeader; } - public LocationMessage getLocationMessage() { - return locationMessage; + public LocationMsg getLocationMessage() { + return locationMsg; } @Override public String toString() { String telegramString = "Telegram{"; - telegramString += teleHeader != null ? "teleHeader=" + teleHeader : ""; - telegramString += locationMessage != null ? ", locationMessage=" + locationMessage : ""; + telegramString += teleHeader != null ? "teleHeader=" + teleHeader + '\'' : "" + '\''; + telegramString += locationMsg != null ? ", locationMsg=" + locationMsg + '\'' : "" + '\''; telegramString += '}'; return telegramString; } diff --git a/src/main/java/de/swingbe/ifleet/model/TelegramHdr.java b/src/main/java/de/swingbe/ifleet/model/TelegramHdr.java index f0ecd42..a739636 100644 --- a/src/main/java/de/swingbe/ifleet/model/TelegramHdr.java +++ b/src/main/java/de/swingbe/ifleet/model/TelegramHdr.java @@ -2,17 +2,19 @@ package de.swingbe.ifleet.model; public class TelegramHdr { - private final int teleType; - private final String teleVersion; - private final int teleId; + public final static int TELEGRAM_HDR_FIELD_NO = 3; - public TelegramHdr(int teleType, String teleVersion, int teleId) { + private final String teleType; + private final String teleVersion; + private final String teleId; + + public TelegramHdr(String teleType, String teleVersion, String teleId) { this.teleType = teleType; this.teleVersion = teleVersion; this.teleId = teleId; } - public int getTeleType() { + public String getTeleType() { return teleType; } @@ -20,16 +22,16 @@ public class TelegramHdr { return teleVersion; } - public int getTeleId() { + public String getTeleId() { return teleId; } @Override public String toString() { return "TelegramHdr{" + - "teleType=" + teleType + + "teleType='" + teleType + '\'' + ", teleVersion='" + teleVersion + '\'' + - ", teleId=" + teleId + + ", teleId='" + teleId + '\'' + '}'; } } diff --git a/src/main/java/de/swingbe/ifleet/model/Trip.java b/src/main/java/de/swingbe/ifleet/model/Trip.java new file mode 100644 index 0000000..05406b5 --- /dev/null +++ b/src/main/java/de/swingbe/ifleet/model/Trip.java @@ -0,0 +1,74 @@ +package de.swingbe.ifleet.model; + +public class Trip { + + public final static int TRIP_FIELD_NO = 8; + + private final String blockNo; + private final String lineNo; + private final String tripNo; + private final String routeNo; + private final String deviation; + private final String loadDegree; + private final String destinationNo; + private final String tripType; + + public Trip(final String blockNo, final String lineNo, final String tripNo, + final String routeNo, final String deviation, final String loadDegree, + final String destinationNo, final String tripType) { + this.blockNo = blockNo; + this.lineNo = lineNo; + this.tripNo = tripNo; + this.routeNo = routeNo; + this.deviation = deviation; + this.loadDegree = loadDegree; + this.destinationNo = destinationNo; + this.tripType = tripType; + } + + @Override + public String toString() { + return "Trip{" + + "blockNo='" + blockNo + '\'' + + ", lineNo='" + lineNo + '\'' + + ", tripNo='" + tripNo + '\'' + + ", routeNo='" + routeNo + '\'' + + ", deviation='" + deviation + '\'' + + ", loadDegree='" + loadDegree + '\'' + + ", destinationNo='" + destinationNo + '\'' + + ", tripType='" + tripType + '\'' + + '}'; + } + + public String getBlockNo() { + return blockNo; + } + + public String getLineNo() { + return lineNo; + } + + public String getTripNo() { + return tripNo; + } + + public String getRouteNo() { + return routeNo; + } + + public String getDeviation() { + return deviation; + } + + public String getLoadDegree() { + return loadDegree; + } + + public String getDestinationNo() { + return destinationNo; + } + + public String getTripType() { + return tripType; + } +} diff --git a/src/main/java/de/swingbe/ifleet/parser/ComParser.java b/src/main/java/de/swingbe/ifleet/parser/ComParser.java index 511ad7d..556d5c9 100644 --- a/src/main/java/de/swingbe/ifleet/parser/ComParser.java +++ b/src/main/java/de/swingbe/ifleet/parser/ComParser.java @@ -8,7 +8,7 @@ import de.swingbe.ifleet.model.Communication; interface ComParser { /** - * Returns a new {@link Communication} that holds the parses telegram. + * Returns a new {@link Communication} that holds the parses fields. * * @param input the {@link String} to be parsed * @return the parsed {@link Communication} diff --git a/src/main/java/de/swingbe/ifleet/parser/ComParserImpl.java b/src/main/java/de/swingbe/ifleet/parser/ComParserImpl.java index 5a2f4b8..70f0b08 100644 --- a/src/main/java/de/swingbe/ifleet/parser/ComParserImpl.java +++ b/src/main/java/de/swingbe/ifleet/parser/ComParserImpl.java @@ -3,12 +3,12 @@ package de.swingbe.ifleet.parser; import de.swingbe.ifleet.model.Communication; import de.swingbe.ifleet.model.Header; import de.swingbe.ifleet.model.Telegram; +import de.swingbe.ifleet.utils.TelegramUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Arrays; - class ComParserImpl implements ComParser { + private final static Logger LOG = LoggerFactory.getLogger(ComParserImpl.class); private static final String SEP = "#"; private static final String END = System.getProperty("line.separator"); @@ -16,27 +16,6 @@ class ComParserImpl implements ComParser { ComParserImpl() { } - public static String popFieldFromCom(final String com, final int numberOfFields) { - String comNew = com; - String comSup = null; - for (int i = 0; i < numberOfFields; i++) { - //TODO Method call indexOf may produce NullPointerException! - int indexChar; - if (comNew != null) { - indexChar = comNew.indexOf('#'); - try { - comSup = comNew.substring(indexChar + 1); - } catch (IndexOutOfBoundsException e) { - LOG.error("poping field from communication failed, message: " + e.getMessage() + ", trace: " + Arrays.toString(e.getStackTrace())); - } - comNew = comSup; - } else { - LOG.error("input unavailable"); - } - } - return comNew; - } - @Override public Communication parse(final String input) { @@ -52,7 +31,7 @@ class ComParserImpl implements ComParser { header = HeaderParserFactory.createHeaderParser().parse(input); //parse Telegram - String inputSupPop = popFieldFromCom(inputSup, 4); + String inputSupPop = TelegramUtils.popField(inputSup, 4); telegram = TelegramParserFactory.createTelegramParser().parse(inputSupPop); } else { LOG.warn("telegram NOT included"); diff --git a/src/main/java/de/swingbe/ifleet/parser/EntityParser.java b/src/main/java/de/swingbe/ifleet/parser/EntityParser.java index f1b3b86..5085561 100644 --- a/src/main/java/de/swingbe/ifleet/parser/EntityParser.java +++ b/src/main/java/de/swingbe/ifleet/parser/EntityParser.java @@ -8,7 +8,7 @@ import de.swingbe.ifleet.model.Entity; public interface EntityParser { /** - * Returns a new {@link Entity} that holds the parses telegram. + * Returns a new {@link Entity} that holds the parses fields. * * @param input the {@link String} to be parsed * @return the parsed {@link Entity} diff --git a/src/main/java/de/swingbe/ifleet/parser/HeaderParser.java b/src/main/java/de/swingbe/ifleet/parser/HeaderParser.java index ce0a0d7..47a38dc 100644 --- a/src/main/java/de/swingbe/ifleet/parser/HeaderParser.java +++ b/src/main/java/de/swingbe/ifleet/parser/HeaderParser.java @@ -8,7 +8,7 @@ import de.swingbe.ifleet.model.Header; interface HeaderParser { /** - * Returns a new {@link de.swingbe.ifleet.model.Header} that holds the parses telegram. + * Returns a new {@link de.swingbe.ifleet.model.Header} that holds the parses fields. * * @param input the {@link String} to be parsed * @return the parsed {@link de.swingbe.ifleet.model.Header} diff --git a/src/main/java/de/swingbe/ifleet/parser/HeaderParserImpl.java b/src/main/java/de/swingbe/ifleet/parser/HeaderParserImpl.java index d1cbe8e..c062c34 100644 --- a/src/main/java/de/swingbe/ifleet/parser/HeaderParserImpl.java +++ b/src/main/java/de/swingbe/ifleet/parser/HeaderParserImpl.java @@ -1,10 +1,9 @@ package de.swingbe.ifleet.parser; import de.swingbe.ifleet.model.Header; -import de.swingbe.ifleet.model.Receiver; import de.swingbe.ifleet.model.Sender; -import static de.swingbe.ifleet.parser.ComParserImpl.popFieldFromCom; +import static de.swingbe.ifleet.utils.TelegramUtils.popField; class HeaderParserImpl implements HeaderParser { @@ -19,7 +18,7 @@ class HeaderParserImpl implements HeaderParser { sender = SenderParserFactory.createSenderParser().parse(input); //parse Receiver - String inputPop = popFieldFromCom(input, 2); + String inputPop = popField(input, 2); return new Header(sender, ReceiverParserFactory.createReceiverParser().parse(inputPop)); } diff --git a/src/main/java/de/swingbe/ifleet/parser/LocationMsgParser.java b/src/main/java/de/swingbe/ifleet/parser/LocationMsgParser.java index fb5c235..5599c29 100644 --- a/src/main/java/de/swingbe/ifleet/parser/LocationMsgParser.java +++ b/src/main/java/de/swingbe/ifleet/parser/LocationMsgParser.java @@ -1,17 +1,17 @@ package de.swingbe.ifleet.parser; -import de.swingbe.ifleet.model.LocationMessage; +import de.swingbe.ifleet.model.LocationMsg; /** - * Parses a {@link de.swingbe.ifleet.model.LocationMessage}. + * Parses a {@link LocationMsg}. */ interface LocationMsgParser { /** - * Returns a new {@link de.swingbe.ifleet.model.LocationMessage} that holds the parses telegram. + * Returns a new {@link LocationMsg} that holds the parses fields. * * @param input the {@link String} to be parsed - * @return the parsed {@link de.swingbe.ifleet.model.LocationMessage} + * @return the parsed {@link LocationMsg} */ - LocationMessage parse(final String input); + LocationMsg parse(final String input); } diff --git a/src/main/java/de/swingbe/ifleet/parser/LocationMsgParserImpl.java b/src/main/java/de/swingbe/ifleet/parser/LocationMsgParserImpl.java index 4a13d3f..7f48d1a 100644 --- a/src/main/java/de/swingbe/ifleet/parser/LocationMsgParserImpl.java +++ b/src/main/java/de/swingbe/ifleet/parser/LocationMsgParserImpl.java @@ -1,10 +1,39 @@ package de.swingbe.ifleet.parser; -import de.swingbe.ifleet.model.LocationMessage; +import de.swingbe.ifleet.model.LocationMsg; +import de.swingbe.ifleet.model.Position; +import de.swingbe.ifleet.model.Trip; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import static de.swingbe.ifleet.model.Position.POSITION_FIELD_NO; +import static de.swingbe.ifleet.utils.TelegramUtils.popField; class LocationMsgParserImpl implements LocationMsgParser { - public LocationMessage parse(String input) { - return new LocationMessage(PositionParserFactory.createPositionParser().parse(input)); + public final static int DRIVER_NO_FIELD_NO = 1; + + private final static Logger LOG = LoggerFactory.getLogger(LocationMsgParserImpl.class); + + public LocationMsg parse(String input) { + + //parse position + Position position = PositionParserFactory.createPositionParser().parse(input); + + //parse driver number + String inputNew = popField(input, POSITION_FIELD_NO); + + String[] splits = inputNew.split("#"); + + String driverNo = ""; + if (splits.length > 0) { + driverNo = splits[0]; + } else { + LOG.warn("driverNo unavailable"); + } + + //parse trip + inputNew = popField(input, DRIVER_NO_FIELD_NO); + return new LocationMsg(position, driverNo, TripParserFactory.createTripParser().parse(inputNew)); } } diff --git a/src/main/java/de/swingbe/ifleet/parser/PositionParser.java b/src/main/java/de/swingbe/ifleet/parser/PositionParser.java index 5bb1d03..330b2fd 100644 --- a/src/main/java/de/swingbe/ifleet/parser/PositionParser.java +++ b/src/main/java/de/swingbe/ifleet/parser/PositionParser.java @@ -8,7 +8,7 @@ import de.swingbe.ifleet.model.Position; interface PositionParser { /** - * Returns a new {@link de.swingbe.ifleet.model.Position} that holds the parses telegram. + * Returns a new {@link de.swingbe.ifleet.model.Position} that holds the parses fields. * * @param input the {@link String} to be parsed * @return the parsed {@link de.swingbe.ifleet.model.Position} diff --git a/src/main/java/de/swingbe/ifleet/parser/PositionParserImpl.java b/src/main/java/de/swingbe/ifleet/parser/PositionParserImpl.java index dc3380d..f21f5db 100644 --- a/src/main/java/de/swingbe/ifleet/parser/PositionParserImpl.java +++ b/src/main/java/de/swingbe/ifleet/parser/PositionParserImpl.java @@ -9,6 +9,7 @@ import java.util.Arrays; import static de.swingbe.ifleet.parser.TelegramHdrParserImpl.isNumeric; public class PositionParserImpl implements PositionParser { + private final static Logger LOG = LoggerFactory.getLogger(PositionParserImpl.class); @Override @@ -19,51 +20,61 @@ public class PositionParserImpl implements PositionParser { String[] splits = input.split("#"); //parse NetPoint - //parse RelPosition - //parse lat - String lat = ""; - if (splits.length > 2) { - lat = splits[2]; + String netPoint = ""; + if (splits.length > 0) { + netPoint = splits[0]; } else { - LOG.warn("lat unavailable"); + LOG.warn("netPoint unavailable"); + } + + //parse RelPosition + String relPosition = ""; + if (splits.length > 1) { + relPosition = splits[1]; + } else { + LOG.warn("relPosition unavailable"); } //parse lon String lon = ""; - if (splits.length > 3) { - lon = splits[3]; + if (splits.length > 2) { + lon = splits[2]; } else { LOG.warn("lon unavailable"); } + //parse lat + String lat = ""; + if (splits.length > 3) { + lat = splits[3]; + } else { + LOG.warn("lat unavailable"); + } + + //parse offRoute + String offRoute = ""; + if (splits.length > 4) { + offRoute = splits[4]; + } else { + LOG.warn("offRoute unavailable"); + } + //parse vel String vel = ""; - if (splits.length > 4) { - vel = splits[4]; + if (splits.length > 5) { + vel = splits[5]; } else { LOG.warn("vel unavailable"); } //parse hdg String hdg = ""; - if (splits.length > 5) { - hdg = splits[5]; + if (splits.length > 6) { + hdg = splits[6]; } else { LOG.warn("hdg unavailable"); } - boolean latIsNumeric = isNumeric(lat); - boolean lonIsNumeric = isNumeric(lon); - boolean velIsNumeric = isNumeric(vel); - boolean hdgIsNumeric = isNumeric(hdg); - - if (latIsNumeric && lonIsNumeric && velIsNumeric && hdgIsNumeric) { - try { - position = new Position(Long.parseLong(lat), Long.parseLong(lon), Integer.parseInt(vel), Integer.parseInt(hdg)); - } catch (NumberFormatException e) { - LOG.error("parsing position failed, message: " + e.getMessage() + ", trace: " + Arrays.toString(e.getStackTrace())); - } - } - return position; + return new Position(netPoint, relPosition, lon, lat, offRoute, vel, hdg); } } diff --git a/src/main/java/de/swingbe/ifleet/parser/ReceiverParser.java b/src/main/java/de/swingbe/ifleet/parser/ReceiverParser.java index 54b14c5..b1af601 100644 --- a/src/main/java/de/swingbe/ifleet/parser/ReceiverParser.java +++ b/src/main/java/de/swingbe/ifleet/parser/ReceiverParser.java @@ -8,7 +8,7 @@ import de.swingbe.ifleet.model.Receiver; interface ReceiverParser { /** - * Returns a new {@link de.swingbe.ifleet.model.Receiver} that holds the parses telegram. + * Returns a new {@link de.swingbe.ifleet.model.Receiver} that holds the parses fields. * * @param input the {@link String} to be parsed * @return the parsed {@link de.swingbe.ifleet.model.Receiver} diff --git a/src/main/java/de/swingbe/ifleet/parser/SenderParser.java b/src/main/java/de/swingbe/ifleet/parser/SenderParser.java index 40aed04..01cf335 100644 --- a/src/main/java/de/swingbe/ifleet/parser/SenderParser.java +++ b/src/main/java/de/swingbe/ifleet/parser/SenderParser.java @@ -8,7 +8,7 @@ import de.swingbe.ifleet.model.Sender; interface SenderParser { /** - * Returns a new {@link Sender} that holds the parses telegram. + * Returns a new {@link Sender} that holds the parses fields. * * @param input the {@link String} to be parsed * @return the parsed {@link Sender} diff --git a/src/main/java/de/swingbe/ifleet/parser/TelegramHdrParser.java b/src/main/java/de/swingbe/ifleet/parser/TelegramHdrParser.java index 701ef4b..dfa19d3 100644 --- a/src/main/java/de/swingbe/ifleet/parser/TelegramHdrParser.java +++ b/src/main/java/de/swingbe/ifleet/parser/TelegramHdrParser.java @@ -8,7 +8,7 @@ import de.swingbe.ifleet.model.TelegramHdr; interface TelegramHdrParser { /** - * Returns a new {@link de.swingbe.ifleet.model.TelegramHdr} that holds the parses telegram. + * Returns a new {@link de.swingbe.ifleet.model.TelegramHdr} that holds the parses fields. * * @param input the {@link String} to be parsed * @return the parsed {@link de.swingbe.ifleet.model.TelegramHdr} diff --git a/src/main/java/de/swingbe/ifleet/parser/TelegramHdrParserImpl.java b/src/main/java/de/swingbe/ifleet/parser/TelegramHdrParserImpl.java index b0ba401..d0c40a7 100644 --- a/src/main/java/de/swingbe/ifleet/parser/TelegramHdrParserImpl.java +++ b/src/main/java/de/swingbe/ifleet/parser/TelegramHdrParserImpl.java @@ -4,8 +4,6 @@ import de.swingbe.ifleet.model.TelegramHdr; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Arrays; - class TelegramHdrParserImpl implements TelegramHdrParser { private final static Logger LOG = LoggerFactory.getLogger(TelegramHdrParserImpl.class); @@ -19,11 +17,9 @@ class TelegramHdrParserImpl implements TelegramHdrParser { public TelegramHdr parse(final String input) { - TelegramHdr teleHeader = null; - String[] splits = input.split("#"); - //parse id + //parse type String type = null; if (splits.length > 0) { type = splits[0]; @@ -35,29 +31,13 @@ class TelegramHdrParserImpl implements TelegramHdrParser { version = splits[1]; } - //parse ID + //parse id String id = null; if (splits.length > 2) { id = splits[2]; } - if (type != null && version != null && id != null) { - boolean typeIsNumeric = isNumeric(type); - boolean idIsNumeric = isNumeric(id); - - if (typeIsNumeric && idIsNumeric) { - try { - teleHeader = new TelegramHdr(Integer.parseInt(type), version, - Integer.parseInt(id)); - } catch (NumberFormatException e) { - LOG.error("parsing telegram header failed, message: " - + e.getMessage() + ", trace: " - + Arrays.toString(e.getStackTrace())); - } - } - } - - return teleHeader; + return new TelegramHdr(type, version, id); } } diff --git a/src/main/java/de/swingbe/ifleet/parser/TelegramParser.java b/src/main/java/de/swingbe/ifleet/parser/TelegramParser.java index 02821e7..83859f3 100644 --- a/src/main/java/de/swingbe/ifleet/parser/TelegramParser.java +++ b/src/main/java/de/swingbe/ifleet/parser/TelegramParser.java @@ -8,7 +8,7 @@ import de.swingbe.ifleet.model.Telegram; interface TelegramParser { /** - * Returns a new {@link de.swingbe.ifleet.model.Telegram} that holds the parses telegram. + * Returns a new {@link de.swingbe.ifleet.model.Telegram} that holds the parses fields. * * @param input the {@link String} to be parsed * @return the parsed {@link de.swingbe.ifleet.model.Telegram} diff --git a/src/main/java/de/swingbe/ifleet/parser/TelegramParserImpl.java b/src/main/java/de/swingbe/ifleet/parser/TelegramParserImpl.java index 987da9d..b84adca 100644 --- a/src/main/java/de/swingbe/ifleet/parser/TelegramParserImpl.java +++ b/src/main/java/de/swingbe/ifleet/parser/TelegramParserImpl.java @@ -3,7 +3,8 @@ package de.swingbe.ifleet.parser; import de.swingbe.ifleet.model.Telegram; import de.swingbe.ifleet.model.TelegramHdr; -import static de.swingbe.ifleet.parser.ComParserImpl.popFieldFromCom; +import static de.swingbe.ifleet.model.TelegramHdr.TELEGRAM_HDR_FIELD_NO; +import static de.swingbe.ifleet.utils.TelegramUtils.popField; class TelegramParserImpl implements TelegramParser { @@ -14,7 +15,7 @@ class TelegramParserImpl implements TelegramParser { TelegramHdr teleHeader = TelegramHdrParserFactory.createTelegramHdrParser().parse(input); - String inputNew = popFieldFromCom(input, 3); + String inputNew = popField(input, TELEGRAM_HDR_FIELD_NO); return new Telegram(teleHeader, LocationMsgParserFactory.createLocationMsgParer().parse(inputNew)); diff --git a/src/main/java/de/swingbe/ifleet/parser/TripParser.java b/src/main/java/de/swingbe/ifleet/parser/TripParser.java new file mode 100644 index 0000000..6637ee4 --- /dev/null +++ b/src/main/java/de/swingbe/ifleet/parser/TripParser.java @@ -0,0 +1,17 @@ +package de.swingbe.ifleet.parser; + +import de.swingbe.ifleet.model.Trip; + +/** + * Parses a {@link de.swingbe.ifleet.model.Trip}. + */ +interface TripParser { + + /** + * Returns a new {@link de.swingbe.ifleet.model.Trip} that holds the parses fields. + * + * @param input the {@link String} to be parsed + * @return the parsed {@link de.swingbe.ifleet.model.Trip} + */ + Trip parse(final String input); +} diff --git a/src/main/java/de/swingbe/ifleet/parser/TripParserFactory.java b/src/main/java/de/swingbe/ifleet/parser/TripParserFactory.java new file mode 100644 index 0000000..eabb9b4 --- /dev/null +++ b/src/main/java/de/swingbe/ifleet/parser/TripParserFactory.java @@ -0,0 +1,20 @@ +package de.swingbe.ifleet.parser; + +/** + * Factory for creating instances of {@link TripParser}. + */ +class TripParserFactory { + + private TripParserFactory() { + + } + + /** + * Creates an instance of {@link TripParser}. + * + * @return the new instance + */ + public static TripParser createTripParser() { + return new TripParserImpl(); + } +} diff --git a/src/main/java/de/swingbe/ifleet/parser/TripParserImpl.java b/src/main/java/de/swingbe/ifleet/parser/TripParserImpl.java new file mode 100644 index 0000000..a970060 --- /dev/null +++ b/src/main/java/de/swingbe/ifleet/parser/TripParserImpl.java @@ -0,0 +1,84 @@ +package de.swingbe.ifleet.parser; + +import de.swingbe.ifleet.model.Trip; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TripParserImpl implements TripParser { + + private final static Logger LOG = LoggerFactory.getLogger(TripParserImpl.class); + + @Override + public Trip parse(final String input) { + + Trip trip = null; + + String[] splits = input.split("#"); + + //parse blockNo + String blockNo = ""; + if (splits.length > 0) { + blockNo = splits[0]; + } else { + LOG.warn("blockNo unavailable"); + } + + //parse lineNo + String lineNo = ""; + if (splits.length > 1) { + lineNo = splits[1]; + } else { + LOG.warn("lineNo unavailable"); + } + + //parse tripNo + String tripNo = ""; + if (splits.length > 2) { + tripNo = splits[2]; + } else { + LOG.warn("tripNo unavailable"); + } + + //parse routeNo + String routeNo = ""; + if (splits.length > 3) { + routeNo = splits[3]; + } else { + LOG.warn("routeNo unavailable"); + } + + //parse deviation + String deviation = ""; + if (splits.length > 4) { + deviation = splits[4]; + } else { + LOG.warn("deviation unavailable"); + } + + //parse loadDegree + String loadDegree = ""; + if (splits.length > 5) { + loadDegree = splits[5]; + } else { + LOG.warn("loadDegree unavailable"); + } + + //parse destinationNo + String destinationNo = ""; + if (splits.length > 6) { + destinationNo = splits[6]; + } else { + LOG.warn("destinationNo unavailable"); + } + + //parse tripType + String tripType = ""; + if (splits.length > 6) { + tripType = splits[6]; + } else { + LOG.warn("tripType unavailable"); + } + + return new Trip(blockNo, lineNo, tripNo, routeNo, deviation, loadDegree, destinationNo, tripType); + } +} diff --git a/src/main/java/de/swingbe/ifleet/utils/TelegramUtils.java b/src/main/java/de/swingbe/ifleet/utils/TelegramUtils.java new file mode 100644 index 0000000..416bc84 --- /dev/null +++ b/src/main/java/de/swingbe/ifleet/utils/TelegramUtils.java @@ -0,0 +1,39 @@ +package de.swingbe.ifleet.utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; + +public class TelegramUtils { + + private final static Logger LOG = LoggerFactory.getLogger(TelegramUtils.class); + + /** + * Returns a sub {@link String} from the input {@link String} reduces by a certain number of fields + * + * @param input the {@link String} to be reduced by a certain number of fields + * @param numberOfFields the number of fields to be popped from the input {@link String} + * @return the sub {@link String} not containing the popped fields + */ + public static String popField(final String input, final int numberOfFields) { + String inputNew = input; + String inputSub = null; + for (int i = 0; i < numberOfFields; i++) { + //TODO Method call indexOf may produce NullPointerException! + int indexHash; + if (inputNew != null) { + indexHash = inputNew.indexOf('#'); + try { + inputSub = inputNew.substring(indexHash + 1); + } catch (IndexOutOfBoundsException e) { + LOG.error("popping field failed, message: " + e.getMessage() + ", trace: " + Arrays.toString(e.getStackTrace())); + } + inputNew = inputSub; + } else { + LOG.error("input unavailable"); + } + } + return inputNew; + } +}