feat: add build config according to example docu, introduce factory classes

This commit is contained in:
dancingCycle 2022-01-12 15:38:53 -05:00
parent 099ccb0722
commit 69a0dff31e
43 changed files with 601 additions and 334 deletions

84
pom.xml
View File

@ -7,10 +7,10 @@
<groupId>de.swingbe.ifleet</groupId>
<artifactId>tgp</artifactId>
<version>0.0.2</version>
<version>0.0.3</version>
<description>
Parse ifleet telegrams.
This project is a library for parsing ifleet telegrams in Java.
</description>
<url>https://swingbe.de</url>
@ -160,47 +160,47 @@
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>

View File

@ -1,20 +0,0 @@
package de.swingbe.ifleet;
import de.swingbe.ifleet.model.Entity;
import static de.swingbe.ifleet.model.EntityParser.parseLogEntry;
/**
* Parse telegram.
*
* Note that this class is package-private, so that the client can not use it.
*/
class TelegramParserImpl implements TelegramParser {
TelegramParserImpl() {
}
@Override
public Entity parse(String input) {
return parseLogEntry(input);
}
}

View File

@ -2,8 +2,6 @@ package de.swingbe.ifleet.model;
public class Communication {
private static final String SEP = "#";
private static final String END = System.getProperty("line.separator");
private final Header header;
private final Telegram telegram;
@ -12,14 +10,6 @@ public class Communication {
this.telegram = telegram;
}
@Override
public String toString() {
return "Communication{" +
"header=" + header +
", telegram=" + telegram +
'}';
}
public Header getHeader() {
return header;
}
@ -28,12 +18,12 @@ public class Communication {
return telegram;
}
public enum PeerType {
I,
B,
C,
K,
G,
R
@Override
public String toString() {
return "Communication{" +
"header=" + header +
", telegram=" + telegram +
'}';
}
}

View File

@ -1,6 +1,28 @@
package de.swingbe.ifleet.model;
public class Entity {
private final String date;
private final String time;
private final String logLevel;
private final String addressPartA;
private final String addressPartB;
private final String peer;
private final String addressNext;
private final String direction;
private final Communication cc;
public Entity(String date, String time, String logLevel, String addressPartA, String addressPartB, String peer, String addressNext, String direction, Communication cc) {
this.date = date;
this.time = time;
this.logLevel = logLevel;
this.addressPartA = addressPartA;
this.addressPartB = addressPartB;
this.peer = peer;
this.addressNext = addressNext;
this.direction = direction;
this.cc = cc;
}
public String getDate() {
return date;
}
@ -37,11 +59,6 @@ public class Entity {
return cc;
}
private final String date;
private final String time;
private final String logLevel;
private final String addressPartA;
@Override
public String toString() {
return "Entity{" +
@ -57,22 +74,4 @@ public class Entity {
'}';
}
public Entity(String date, String time, String logLevel, String addressPartA, String addressPartB, String peer, String addressNext, String direction, Communication cc) {
this.date = date;
this.time = time;
this.logLevel = logLevel;
this.addressPartA = addressPartA;
this.addressPartB = addressPartB;
this.peer = peer;
this.addressNext = addressNext;
this.direction = direction;
this.cc = cc;
}
private final String addressPartB;
private final String peer;
private final String addressNext;
private final String direction;
private final Communication cc;
}

View File

@ -10,14 +10,6 @@ public class Header {
this.receiver = receiver;
}
@Override
public String toString() {
return "Header{" +
"sender=" + sender +
", receiver=" + receiver +
'}';
}
public Sender getSender() {
return sender;
}
@ -25,4 +17,12 @@ public class Header {
public Receiver getReceiver() {
return receiver;
}
@Override
public String toString() {
return "Header{" +
"sender=" + sender +
", receiver=" + receiver +
'}';
}
}

View File

@ -1,33 +0,0 @@
package de.swingbe.ifleet.model;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static de.swingbe.ifleet.model.ComParser.popFieldFromCom;
import static de.swingbe.ifleet.model.ReceiverParser.parseReceiver;
import static de.swingbe.ifleet.model.SenderParser.parseSender;
public class HeaderParser {
private final static Logger LOG = LoggerFactory.getLogger(HeaderParser.class);
public static Header parseHeader(final String input) {
LOG.debug("input: {}", input);
Header header = null;
Sender sender;
Receiver receiver;
//parse Sender
sender = parseSender(input);
//parse Receiver
String inputPop = popFieldFromCom(input, 2);
LOG.debug("inputPop: " + inputPop);
receiver = parseReceiver(inputPop);
if (sender != null && receiver != null) {
header = new Header(sender, receiver);
}
return header;
}
}

View File

@ -1,6 +1,7 @@
package de.swingbe.ifleet.model;
public class LocationMessage {
private final Position position;
public LocationMessage(Position position) {

View File

@ -1,24 +0,0 @@
package de.swingbe.ifleet.model;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static de.swingbe.ifleet.model.PositionParser.parsePosition;
public class LocationMessageParser {
private final static Logger LOG = LoggerFactory.getLogger(LocationMessageParser.class);
public static LocationMessage parseLocationMessage(String input) {
LOG.debug("input: {}", input);
LocationMessage locationMessage = null;
Position position = parsePosition(input);
if (position != null) {
locationMessage = new LocationMessage(position);
}
return locationMessage;
}
}

View File

@ -14,16 +14,6 @@ public class Position {
this.heading = heading;
}
@Override
public String toString() {
return "Position{" +
"longitude=" + longitude +
", latitude=" + latitude +
", velocity=" + velocity +
", heading=" + heading +
'}';
}
public long getLongitude() {
return longitude;
}
@ -39,4 +29,15 @@ public class Position {
public int getHeading() {
return heading;
}
@Override
public String toString() {
return "Position{" +
"longitude=" + longitude +
", latitude=" + latitude +
", velocity=" + velocity +
", heading=" + heading +
'}';
}
}

View File

@ -2,24 +2,20 @@ package de.swingbe.ifleet.model;
public class Receiver {
private final String receiver;
public Receiver(String receiver) {
this.receiver = receiver;
}
public String getReceiver() {
return receiver;
}
@Override
public String toString() {
return "Receiver{" +
"receiver='" + receiver + '\'' +
'}';
}
public String getReceiver() {
return receiver;
}
public void setReceiver(String receiver) {
this.receiver = receiver;
}
public Receiver(String receiver) {
this.receiver = receiver;
}
private String receiver;
}

View File

@ -2,7 +2,15 @@ package de.swingbe.ifleet.model;
public class Sender {
private String sender;
private final String sender;
public Sender(String sender) {
this.sender = sender;
}
public String getSender() {
return sender;
}
@Override
public String toString() {
@ -10,16 +18,4 @@ public class Sender {
"sender='" + sender + '\'' +
'}';
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public Sender(String sender) {
this.sender = sender;
}
}

View File

@ -1,30 +0,0 @@
package de.swingbe.ifleet.model;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static de.swingbe.ifleet.model.ComParser.popFieldFromCom;
import static de.swingbe.ifleet.model.LocationMessageParser.parseLocationMessage;
import static de.swingbe.ifleet.model.TeleHeaderParser.parseTeleHeader;
public class TeleParser {
private final static Logger LOG = LoggerFactory.getLogger(TeleParser.class);
public static Telegram parseTelegram(final String input) {
LOG.debug("input: {}", input);
Telegram telegram = null;
TeleHeader teleHeader = parseTeleHeader(input);
String inputNew = popFieldFromCom(input, 3);
LOG.debug("inputNew: " + inputNew);
LocationMessage locationMessage = parseLocationMessage(inputNew);
if (teleHeader != null && locationMessage != null) {
telegram = new Telegram(teleHeader, locationMessage);
}
return telegram;
}
}

View File

@ -2,15 +2,15 @@ package de.swingbe.ifleet.model;
public class Telegram {
private final TeleHeader teleHeader;
private final TelegramHdr teleHeader;
private final LocationMessage locationMessage;
public Telegram(TeleHeader teleHeader, LocationMessage locationMessage) {
public Telegram(TelegramHdr teleHeader, LocationMessage locationMessage) {
this.teleHeader = teleHeader;
this.locationMessage = locationMessage;
}
public TeleHeader getTeleHeader() {
public TelegramHdr getTeleHeader() {
return teleHeader;
}

View File

@ -1,12 +1,12 @@
package de.swingbe.ifleet.model;
public class TeleHeader {
public class TelegramHdr {
private final int teleType;
private final String teleVersion;
private final int teleId;
public TeleHeader(int teleType, String teleVersion, int teleId) {
public TelegramHdr(int teleType, String teleVersion, int teleId) {
this.teleType = teleType;
this.teleVersion = teleVersion;
this.teleId = teleId;
@ -26,7 +26,7 @@ public class TeleHeader {
@Override
public String toString() {
return "TeleHeader{" +
return "TelegramHdr{" +
"teleType=" + teleType +
", teleVersion='" + teleVersion + '\'' +
", teleId=" + teleId +

View File

@ -0,0 +1,17 @@
package de.swingbe.ifleet.parser;
import de.swingbe.ifleet.model.Communication;
/**
* Parses a {@link Communication}.
*/
interface ComParser {
/**
* Returns a new {@link Communication} that holds the parses telegram.
*
* @param input the {@link String} to be parsed
* @return the parsed {@link Communication}
*/
Communication parse(final String input);
}

View File

@ -0,0 +1,20 @@
package de.swingbe.ifleet.parser;
/**
* Factory for creating instances of {@link ComParser}.
*/
class ComParserFactory {
private ComParserFactory() {
}
/**
* Creates an instance of {@link ComParser}.
*
* @return the new instance
*/
public static ComParser createComParser() {
return new ComParserImpl();
}
}

View File

@ -1,18 +1,44 @@
package de.swingbe.ifleet.model;
package de.swingbe.ifleet.parser;
import de.swingbe.ifleet.model.Communication;
import de.swingbe.ifleet.model.Header;
import de.swingbe.ifleet.model.Telegram;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
import static de.swingbe.ifleet.model.HeaderParser.parseHeader;
import static de.swingbe.ifleet.model.TeleParser.parseTelegram;
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");
public class ComParser {
private final static Logger LOG = LoggerFactory.getLogger(ComParser.class);
ComParserImpl() {
}
public static Communication parseCc(final String input) {
LOG.debug("input: {}", input);
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) {
Communication com = null;
Header header = null;
@ -24,12 +50,11 @@ public class ComParser {
input.lastIndexOf(">"));
//parse Header
header = parseHeader(input);
header = HeaderParserFactory.createHeaderParser().parse(input);
//parse Telegram
String inputSupPop = popFieldFromCom(inputSup, 4);
LOG.debug("inputSupPop: " + inputSupPop);
telegram = parseTelegram(inputSupPop);
telegram = TelegramParserFactory.createTelegramParser().parse(inputSupPop);
} else {
LOG.warn("telegram NOT included");
}
@ -42,27 +67,4 @@ public class ComParser {
}
return com;
}
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('#');
LOG.debug("indexChar: " + indexChar);
try {
comSup = comNew.substring(indexChar + 1);
LOG.debug("comSup: " + comSup);
} 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;
}
}

View File

@ -1,11 +1,11 @@
package de.swingbe.ifleet;
package de.swingbe.ifleet.parser;
import de.swingbe.ifleet.model.Entity;
/**
* Parses an {@link de.swingbe.ifleet.model.Entity}.
* Parses an {@link Entity}.
*/
public interface TelegramParser {
public interface EntityParser {
/**
* Returns a new {@link Entity} that holds the parses telegram.
@ -13,5 +13,5 @@ public interface TelegramParser {
* @param input the {@link String} to be parsed
* @return the parsed {@link Entity}
*/
Entity parse(String input);
Entity parse(final String input);
}

View File

@ -0,0 +1,20 @@
package de.swingbe.ifleet.parser;
/**
* Factory for creating instances of {@link EntityParser}.
*/
public class EntityParserFactory {
private EntityParserFactory() {
}
/**
* Creates an instance of {@link EntityParser}.
*
* @return the new instance
*/
public static EntityParser createEntityParser() {
return new EntityParserImpl();
}
}

View File

@ -1,22 +1,20 @@
package de.swingbe.ifleet.model;
package de.swingbe.ifleet.parser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.swingbe.ifleet.model.Communication;
import de.swingbe.ifleet.model.Entity;
import java.util.Arrays;
import static de.swingbe.ifleet.model.ComParser.parseCc;
class EntityParserImpl implements EntityParser {
public class EntityParser {
EntityParserImpl() {
}
private final static Logger LOG = LoggerFactory.getLogger(EntityParser.class);
@Override
public Entity parse(final String input) {
public static Entity parseLogEntry(String input) {
LOG.debug("input: {}", input);
Entity logEntry = null;
Entity entity = null;
String[] splits = input.split(" ");
LOG.debug("splits: " + splits.length);
//parse date
String date = null;
@ -70,13 +68,13 @@ public class EntityParser {
if (splits.length > 9) {
String[] splitsSup = Arrays.copyOfRange(splits, 9, splits.length);
String inputSup = String.join(" ", splitsSup);
communication = parseCc(inputSup);
communication = ComParserFactory.createComParser().parse(inputSup);
}
if (date != null && time != null && logLevel != null && addressPartA != null && addressPartB != null && peer != null && addressNext != null && direction != null && communication != null) {
logEntry = new Entity(date, time, logLevel, addressPartA, addressPartB, peer, addressNext, direction, communication);
entity = new Entity(date, time, logLevel, addressPartA, addressPartB, peer, addressNext, direction, communication);
}
return logEntry;
return entity;
}
}

View File

@ -0,0 +1,17 @@
package de.swingbe.ifleet.parser;
import de.swingbe.ifleet.model.Header;
/**
* Parses a {@link de.swingbe.ifleet.model.Header}.
*/
interface HeaderParser {
/**
* Returns a new {@link de.swingbe.ifleet.model.Header} that holds the parses telegram.
*
* @param input the {@link String} to be parsed
* @return the parsed {@link de.swingbe.ifleet.model.Header}
*/
Header parse(final String input);
}

View File

@ -0,0 +1,20 @@
package de.swingbe.ifleet.parser;
/**
* Factory for creating instances of {@link HeaderParser}.
*/
class HeaderParserFactory {
private HeaderParserFactory() {
}
/**
* Creates an instance of {@link HeaderParser}.
*
* @return the new instance
*/
public static HeaderParser createHeaderParser() {
return new HeaderParserImpl();
}
}

View File

@ -0,0 +1,32 @@
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;
class HeaderParserImpl implements HeaderParser {
HeaderParserImpl() {
}
public Header parse(final String input) {
Header header = null;
Sender sender;
Receiver receiver;
//parse Sender
sender = SenderParserFactory.createSenderParser().parse(input);
//parse Receiver
String inputPop = popFieldFromCom(input, 2);
receiver = ReceiverParserFactory.createReceiverParser().parse(inputPop);
if (sender != null && receiver != null) {
header = new Header(sender, receiver);
}
return header;
}
}

View File

@ -0,0 +1,17 @@
package de.swingbe.ifleet.parser;
import de.swingbe.ifleet.model.LocationMessage;
/**
* Parses a {@link de.swingbe.ifleet.model.LocationMessage}.
*/
interface LocationMsgParser {
/**
* Returns a new {@link de.swingbe.ifleet.model.LocationMessage} that holds the parses telegram.
*
* @param input the {@link String} to be parsed
* @return the parsed {@link de.swingbe.ifleet.model.LocationMessage}
*/
LocationMessage parse(final String input);
}

View File

@ -0,0 +1,20 @@
package de.swingbe.ifleet.parser;
/**
* Factory for creating instances of {@link LocationMsgParser}.
*/
class LocationMsgParserFactory {
private LocationMsgParserFactory() {
}
/**
* Creates an instance of {@link LocationMsgParser}.
*
* @return the new instance
*/
public static LocationMsgParser createLocationMsgParer() {
return new LocationMsgParserImpl();
}
}

View File

@ -0,0 +1,20 @@
package de.swingbe.ifleet.parser;
import de.swingbe.ifleet.model.LocationMessage;
import de.swingbe.ifleet.model.Position;
class LocationMsgParserImpl implements LocationMsgParser {
public LocationMessage parse(String input) {
LocationMessage locationMessage = null;
Position position = PositionParserFactory.createPositionParser().parse(input);
if (position != null) {
locationMessage = new LocationMessage(position);
}
return locationMessage;
}
}

View File

@ -0,0 +1,17 @@
package de.swingbe.ifleet.parser;
import de.swingbe.ifleet.model.Position;
/**
* Parses a {@link de.swingbe.ifleet.model.Position}.
*/
interface PositionParser {
/**
* Returns a new {@link de.swingbe.ifleet.model.Position} that holds the parses telegram.
*
* @param input the {@link String} to be parsed
* @return the parsed {@link de.swingbe.ifleet.model.Position}
*/
Position parse(final String input);
}

View File

@ -0,0 +1,20 @@
package de.swingbe.ifleet.parser;
/**
* Factory for creating instances of {@link PositionParser}.
*/
class PositionParserFactory {
private PositionParserFactory() {
}
/**
* Creates an instance of {@link PositionParser}.
*
* @return the new instance
*/
public static PositionParser createPositionParser() {
return new PositionParserImpl();
}
}

View File

@ -1,22 +1,22 @@
package de.swingbe.ifleet.model;
package de.swingbe.ifleet.parser;
import de.swingbe.ifleet.model.Position;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
import static de.swingbe.ifleet.model.TeleHeaderParser.isNumeric;
import static de.swingbe.ifleet.parser.TelegramHdrParserImpl.isNumeric;
public class PositionParser {
private final static Logger LOG = LoggerFactory.getLogger(PositionParser.class);
public class PositionParserImpl implements PositionParser {
private final static Logger LOG = LoggerFactory.getLogger(PositionParserImpl.class);
public static Position parsePosition(String input) {
LOG.debug("input: {}", input);
@Override
public Position parse(final String input) {
Position position = null;
String[] splits = input.split("#");
LOG.debug("splits: " + splits.length);
//parse NetPoint
//parse RelPosition
@ -26,21 +26,18 @@ public class PositionParser {
lat = splits[2];
}
//parse lon
String lon = null;
if (splits.length > 3) {
lon = splits[3];
}
//parse vel
String vel = null;
if (splits.length > 4) {
vel = splits[4];
}
//parse hdg
String hdg = null;
if (splits.length > 5) {

View File

@ -0,0 +1,17 @@
package de.swingbe.ifleet.parser;
import de.swingbe.ifleet.model.Receiver;
/**
* Parses a {@link de.swingbe.ifleet.model.Receiver}.
*/
interface ReceiverParser {
/**
* Returns a new {@link de.swingbe.ifleet.model.Receiver} that holds the parses telegram.
*
* @param input the {@link String} to be parsed
* @return the parsed {@link de.swingbe.ifleet.model.Receiver}
*/
Receiver parse(final String input);
}

View File

@ -0,0 +1,20 @@
package de.swingbe.ifleet.parser;
/**
* Factory for creating instances of {@link ReceiverParser}.
*/
class ReceiverParserFactory {
private ReceiverParserFactory() {
}
/**
* Creates an instance of {@link ReceiverParser}.
*
* @return the new instance
*/
public static ReceiverParser createReceiverParser() {
return new ReceiverParserImpl();
}
}

View File

@ -1,17 +1,14 @@
package de.swingbe.ifleet.model;
package de.swingbe.ifleet.parser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.swingbe.ifleet.model.Receiver;
public class ReceiverParser {
private final static Logger LOG = LoggerFactory.getLogger(ReceiverParser.class);
class ReceiverParserImpl implements ReceiverParser {
public static Receiver parseReceiver(final String input) {
LOG.debug("input: {}", input);
@Override
public Receiver parse(final String input) {
Receiver receiver = null;
String[] splits = input.split("#");
LOG.debug("splits: " + splits.length);
//parse receiver part A
String receiverPartA = null;
@ -30,4 +27,5 @@ public class ReceiverParser {
}
return receiver;
}
}

View File

@ -0,0 +1,17 @@
package de.swingbe.ifleet.parser;
import de.swingbe.ifleet.model.Sender;
/**
* Parses a {@link Sender}.
*/
interface SenderParser {
/**
* Returns a new {@link Sender} that holds the parses telegram.
*
* @param input the {@link String} to be parsed
* @return the parsed {@link Sender}
*/
Sender parse(final String input);
}

View File

@ -0,0 +1,20 @@
package de.swingbe.ifleet.parser;
/**
* Factory for creating instances of {@link ReceiverParser}.
*/
class SenderParserFactory {
private SenderParserFactory() {
}
/**
* Creates an instance of {@link ReceiverParser}.
*
* @return the new instance
*/
public static SenderParser createSenderParser() {
return new SenderParserImpl();
}
}

View File

@ -1,18 +1,14 @@
package de.swingbe.ifleet.model;
package de.swingbe.ifleet.parser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.swingbe.ifleet.model.Sender;
public class SenderParser {
private final static Logger LOG = LoggerFactory.getLogger(SenderParser.class);
class SenderParserImpl implements SenderParser {
public static Sender parseSender(final String input) {
LOG.debug("input: {}", input);
public Sender parse(final String input) {
Sender sender = null;
String[] splits = input.split("#");
LOG.debug("splits: " + splits.length);
//parse sender part A
String senderPartA = null;

View File

@ -0,0 +1,17 @@
package de.swingbe.ifleet.parser;
import de.swingbe.ifleet.model.TelegramHdr;
/**
* Parses a {@link TelegramHdr}.
*/
interface TelegramHdrParser {
/**
* Returns a new {@link de.swingbe.ifleet.model.TelegramHdr} that holds the parses telegram.
*
* @param input the {@link String} to be parsed
* @return the parsed {@link de.swingbe.ifleet.model.TelegramHdr}
*/
TelegramHdr parse(final String input);
}

View File

@ -0,0 +1,20 @@
package de.swingbe.ifleet.parser;
/**
* Factory for creating instances of {@link TelegramHdrParser}.
*/
class TelegramHdrParserFactory {
private TelegramHdrParserFactory() {
}
/**
* Creates an instance of {@link TelegramHdrParser}.
*
* @return the new instance
*/
public static TelegramHdrParser createTelegramHdrParser() {
return new TelegramHdrParserImpl();
}
}

View File

@ -1,20 +1,27 @@
package de.swingbe.ifleet.model;
package de.swingbe.ifleet.parser;
import de.swingbe.ifleet.model.TelegramHdr;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
public class TeleHeaderParser {
private final static Logger LOG = LoggerFactory.getLogger(TeleHeaderParser.class);
class TelegramHdrParserImpl implements TelegramHdrParser {
public static TeleHeader parseTeleHeader(String input) {
LOG.debug("input: {}", input);
private final static Logger LOG = LoggerFactory.getLogger(TelegramHdrParserImpl.class);
TeleHeader teleHeader = null;
TelegramHdrParserImpl() {
}
public static boolean isNumeric(String str) {
return str != null && str.matches("[0-9.]+");
}
public TelegramHdr parse(final String input) {
TelegramHdr teleHeader = null;
String[] splits = input.split("#");
LOG.debug("splits: " + splits.length);
//parse id
String type = null;
@ -40,7 +47,7 @@ public class TeleHeaderParser {
if (typeIsNumeric && idIsNumeric) {
try {
teleHeader = new TeleHeader(Integer.parseInt(type), version, Integer.parseInt(id));
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()));
}
@ -50,8 +57,4 @@ public class TeleHeaderParser {
return teleHeader;
}
public static boolean isNumeric(String str) {
return str != null && str.matches("[0-9.]+");
}
}

View File

@ -0,0 +1,17 @@
package de.swingbe.ifleet.parser;
import de.swingbe.ifleet.model.Telegram;
/**
* Parses a {@link de.swingbe.ifleet.model.Telegram}.
*/
interface TelegramParser {
/**
* Returns a new {@link de.swingbe.ifleet.model.Telegram} that holds the parses telegram.
*
* @param input the {@link String} to be parsed
* @return the parsed {@link de.swingbe.ifleet.model.Telegram}
*/
Telegram parse(final String input);
}

View File

@ -0,0 +1,20 @@
package de.swingbe.ifleet.parser;
/**
* Factory for creating instances of {@link TelegramParser}.
*/
class TelegramParserFactory {
private TelegramParserFactory() {
}
/**
* Creates an instance of {@link TelegramParser}.
*
* @return the new instance
*/
public static TelegramParser createTelegramParser() {
return new TelegramParserImpl();
}
}

View File

@ -0,0 +1,29 @@
package de.swingbe.ifleet.parser;
import de.swingbe.ifleet.model.LocationMessage;
import de.swingbe.ifleet.model.Telegram;
import de.swingbe.ifleet.model.TelegramHdr;
import static de.swingbe.ifleet.parser.ComParserImpl.popFieldFromCom;
class TelegramParserImpl implements TelegramParser {
TelegramParserImpl() {
}
public Telegram parse(final String input) {
Telegram telegram = null;
TelegramHdr teleHeader = TelegramHdrParserFactory.createTelegramHdrParser().parse(input);
String inputNew = popFieldFromCom(input, 3);
LocationMessage locationMessage = LocationMsgParserFactory.createLocationMsgParer().parse(inputNew);
if (teleHeader != null && locationMessage != null) {
telegram = new Telegram(teleHeader, locationMessage);
}
return telegram;
}
}

View File

@ -7,7 +7,7 @@
filePattern="log-%d{yyyy-MM-dd}-%i.txt.gz"
ignoreExceptions="false">
<PatternLayout>
<Pattern>[%-5p] %d{yyyy-MM-dd HH:mm:ss.SSS} %p %c{1} %m%n
<Pattern>[%-5p] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{1} %m%n
</Pattern>
</PatternLayout>
<Policies>
@ -19,7 +19,7 @@
# Console appender
<Console name="console" target="SYSTEM_OUT">
# Pattern of log message for console appender
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %p %c{1} - %msg%n"/>
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{1} - %msg%n"/>
</Console>
</Appenders>

View File

@ -1,5 +1,6 @@
package de.swingbe.ifleet;
import de.swingbe.ifleet.parser.EntityParserFactory;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
@ -11,11 +12,10 @@ import static org.assertj.core.api.Assertions.assertThat;
*/
class TelegramParserImplTest {
private final TelegramParserImpl parser = new TelegramParserImpl();
@Test
void padLeft() {
assertThat(parser.parse("TODO"))
assertThat(EntityParserFactory.createEntityParser().parse("TODO"))
.isEqualTo(null);
}