From 7da30a75aa53e07e3b5c7cfca050f959813aa039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maido=20K=C3=A4=C3=A4ra?= Date: Tue, 30 Oct 2018 11:23:03 +0200 Subject: [PATCH 1/2] Removed compile time dependency on log4j --- pom.xml | 17 +- .../com/github/kmbulebu/dsc/it100/IT100.java | 26 ++- .../commands/read/ReadCommandFactory.java | 162 +++++++-------- .../it100/mina/filters/CommandLogFilter.java | 189 +++++------------- .../it100/rxjava/ReadCommandOnSubscribe.java | 12 +- 5 files changed, 165 insertions(+), 241 deletions(-) diff --git a/pom.xml b/pom.xml index 0634a11..d209c6c 100644 --- a/pom.xml +++ b/pom.xml @@ -51,6 +51,7 @@ UTF-8 2.0.16 2.7 + 1.7.25 @@ -83,8 +84,14 @@ org.apache.logging.log4j - log4j-api + log4j-slf4j-impl ${log4j.version} + runtime + + + org.slf4j + slf4j-api + ${slf4j.version} compile @@ -132,7 +139,13 @@ org.apache.logging.log4j - log4j-api + log4j-slf4j-impl + runtime + true + + + org.slf4j + slf4j-api compile diff --git a/src/main/java/com/github/kmbulebu/dsc/it100/IT100.java b/src/main/java/com/github/kmbulebu/dsc/it100/IT100.java index dc6d00f..306e60f 100644 --- a/src/main/java/com/github/kmbulebu/dsc/it100/IT100.java +++ b/src/main/java/com/github/kmbulebu/dsc/it100/IT100.java @@ -1,10 +1,12 @@ package com.github.kmbulebu.dsc.it100; -import java.net.SocketAddress; - -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import com.github.kmbulebu.dsc.it100.commands.read.ReadCommand; +import com.github.kmbulebu.dsc.it100.commands.write.WriteCommand; +import com.github.kmbulebu.dsc.it100.mina.codec.IT100CodecFactory; +import com.github.kmbulebu.dsc.it100.mina.filters.CommandLogFilter; +import com.github.kmbulebu.dsc.it100.mina.filters.PollKeepAliveFilter; +import com.github.kmbulebu.dsc.it100.mina.filters.StatusRequestFilter; +import com.github.kmbulebu.dsc.it100.rxjava.ReadCommandOnSubscribe; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.service.IoConnector; import org.apache.mina.core.session.IoSession; @@ -12,19 +14,15 @@ import org.apache.mina.filter.keepalive.KeepAliveRequestTimeoutHandler; import org.apache.mina.handler.demux.DemuxingIoHandler; import org.apache.mina.handler.demux.MessageHandler; - +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.event.Level; import rx.Observable; import rx.Observer; import rx.observables.ConnectableObservable; import rx.subjects.PublishSubject; -import com.github.kmbulebu.dsc.it100.commands.read.ReadCommand; -import com.github.kmbulebu.dsc.it100.commands.write.WriteCommand; -import com.github.kmbulebu.dsc.it100.mina.codec.IT100CodecFactory; -import com.github.kmbulebu.dsc.it100.mina.filters.CommandLogFilter; -import com.github.kmbulebu.dsc.it100.mina.filters.PollKeepAliveFilter; -import com.github.kmbulebu.dsc.it100.mina.filters.StatusRequestFilter; -import com.github.kmbulebu.dsc.it100.rxjava.ReadCommandOnSubscribe; +import java.net.SocketAddress; /** * API Main Entry point. @@ -43,7 +41,7 @@ public class IT100 { private IoConnector connector = null; private IoSession session = null; - private static final Logger LOGGER = LogManager.getLogger(); + private static final Logger LOGGER = LoggerFactory.getLogger(IT100.class); private final Configuration configuration; diff --git a/src/main/java/com/github/kmbulebu/dsc/it100/commands/read/ReadCommandFactory.java b/src/main/java/com/github/kmbulebu/dsc/it100/commands/read/ReadCommandFactory.java index 06302c4..c17e630 100644 --- a/src/main/java/com/github/kmbulebu/dsc/it100/commands/read/ReadCommandFactory.java +++ b/src/main/java/com/github/kmbulebu/dsc/it100/commands/read/ReadCommandFactory.java @@ -3,97 +3,99 @@ import com.github.kmbulebu.dsc.it100.commands.read.ReadCommand.CommandLengthException; import com.github.kmbulebu.dsc.it100.commands.read.ReadCommand.InvalidCommandException; +import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; public class ReadCommandFactory { - private static Map> codeToCommandMap = new HashMap>(); + private static Map> codeToCommandMap = new HashMap>(); - static { - codeToCommandMap.put(AcknowledgeCommand.CODE, AcknowledgeCommand.class); - codeToCommandMap.put(BaudRateSetCommand.CODE, BaudRateSetCommand.class); - codeToCommandMap.put(BroadcastLabelsCommand.CODE, BroadcastLabelsCommand.class); - codeToCommandMap.put(CommandErrorCommand.CODE, CommandErrorCommand.class); - codeToCommandMap.put(CommandOutputInProgressCommand.CODE, CommandOutputInProgressCommand.class); - codeToCommandMap.put(EntryDelayInProgressCommand.CODE, EntryDelayInProgressCommand.class); - codeToCommandMap.put(ExitDelayInProgressCommand.CODE, ExitDelayInProgressCommand.class); - codeToCommandMap.put(GeneralSystemTamperCommand.CODE, GeneralSystemTamperCommand.class); - codeToCommandMap.put(GeneralSystemTamperRestoreCommand.CODE, GeneralSystemTamperRestoreCommand.class); - codeToCommandMap.put(InvalidAccessCodeCommand.CODE, InvalidAccessCodeCommand.class); - codeToCommandMap.put(KeybusFaultCommand.CODE, KeybusFaultCommand.class); - codeToCommandMap.put(KeybusFaultRestoredCommand.CODE, KeybusFaultRestoredCommand.class); - codeToCommandMap.put(LCDUpdateCommand.CODE, LCDUpdateCommand.class); - codeToCommandMap.put(LCDCursorCommand.CODE, LCDCursorCommand.class); - codeToCommandMap.put(LEDStatusCommand.CODE, LEDStatusCommand.class); - codeToCommandMap.put(BeepStatusCommand.CODE, BeepStatusCommand.class); - codeToCommandMap.put(BuzzerStatusCommand.CODE, BuzzerStatusCommand.class); - codeToCommandMap.put(DoorChimeStatusCommand.CODE, DoorChimeStatusCommand.class); - codeToCommandMap.put(ToneStatusCommand.CODE, ToneStatusCommand.class); - codeToCommandMap.put(PanelACTroubleCommand.CODE, PanelACTroubleCommand.class); - codeToCommandMap.put(PanelACTroubleRestoreCommand.CODE, PanelACTroubleRestoreCommand.class); - codeToCommandMap.put(PanelBatteryTroubleCommand.CODE, PanelBatteryTroubleCommand.class); - codeToCommandMap.put(PanelBatteryTroubleRestoreCommand.CODE, PanelBatteryTroubleRestoreCommand.class); - codeToCommandMap.put(PartitionArmedCommand.CODE, PartitionArmedCommand.class); - codeToCommandMap.put(PartitionBusyCommand.CODE, PartitionBusyCommand.class); - codeToCommandMap.put(PartitionDisarmedCommand.CODE, PartitionDisarmedCommand.class); - codeToCommandMap.put(PartitionInAlarmCommand.CODE, PartitionInAlarmCommand.class); - codeToCommandMap.put(PartitionNotReadyCommand.CODE, PartitionNotReadyCommand.class); - codeToCommandMap.put(PartitionReadyCommand.CODE, PartitionReadyCommand.class); - codeToCommandMap.put(PartitionReadyToForceArmCommand.CODE, PartitionReadyToForceArmCommand.class); - codeToCommandMap.put(RingDetectedCommand.CODE, RingDetectedCommand.class); - codeToCommandMap.put(SystemBellTroubleCommand.CODE, SystemBellTroubleCommand.class); - codeToCommandMap.put(SystemBellTroubleRestoreCommand.CODE, SystemBellTroubleRestoreCommand.class); - codeToCommandMap.put(SystemErrorCommand.CODE, SystemErrorCommand.class); - codeToCommandMap.put(TimeDateBroadcastCommand.CODE, TimeDateBroadcastCommand.class); - codeToCommandMap.put(TroubleStatusCommand.CODE, TroubleStatusCommand.class); - codeToCommandMap.put(TroubleStatusRestoreCommand.CODE, TroubleStatusRestoreCommand.class); - codeToCommandMap.put(ZoneAlarmCommand.CODE, ZoneAlarmCommand.class); - codeToCommandMap.put(ZoneAlarmRestoreCommand.CODE, ZoneAlarmRestoreCommand.class); - codeToCommandMap.put(ZoneFaultCommand.CODE, ZoneFaultCommand.class); - codeToCommandMap.put(ZoneFaultRestoreCommand.CODE, ZoneFaultRestoreCommand.class); - codeToCommandMap.put(ZoneOpenCommand.CODE, ZoneOpenCommand.class); - codeToCommandMap.put(ZoneRestoredCommand.CODE, ZoneRestoredCommand.class); - codeToCommandMap.put(ZoneTamperCommand.CODE, ZoneTamperCommand.class); - codeToCommandMap.put(ZoneTamperRestoreCommand.CODE, ZoneTamperRestoreCommand.class); - codeToCommandMap.put(UserOpeningCommand.CODE, UserOpeningCommand.class); - codeToCommandMap.put(UserClosingCommand.CODE, UserClosingCommand.class); - codeToCommandMap.put(PartialClosingCommand.CODE, PartialClosingCommand.class); - codeToCommandMap.put(SpecialClosingCommand.CODE, SpecialClosingCommand.class); - codeToCommandMap.put(SoftwareVersionCommand.CODE, SoftwareVersionCommand.class); - } + static { + codeToCommandMap.put(AcknowledgeCommand.CODE, AcknowledgeCommand.class); + codeToCommandMap.put(BaudRateSetCommand.CODE, BaudRateSetCommand.class); + codeToCommandMap.put(BroadcastLabelsCommand.CODE, BroadcastLabelsCommand.class); + codeToCommandMap.put(CommandErrorCommand.CODE, CommandErrorCommand.class); + codeToCommandMap.put(CommandOutputInProgressCommand.CODE, CommandOutputInProgressCommand.class); + codeToCommandMap.put(EntryDelayInProgressCommand.CODE, EntryDelayInProgressCommand.class); + codeToCommandMap.put(ExitDelayInProgressCommand.CODE, ExitDelayInProgressCommand.class); + codeToCommandMap.put(GeneralSystemTamperCommand.CODE, GeneralSystemTamperCommand.class); + codeToCommandMap.put(GeneralSystemTamperRestoreCommand.CODE, GeneralSystemTamperRestoreCommand.class); + codeToCommandMap.put(InvalidAccessCodeCommand.CODE, InvalidAccessCodeCommand.class); + codeToCommandMap.put(KeybusFaultCommand.CODE, KeybusFaultCommand.class); + codeToCommandMap.put(KeybusFaultRestoredCommand.CODE, KeybusFaultRestoredCommand.class); + codeToCommandMap.put(LCDUpdateCommand.CODE, LCDUpdateCommand.class); + codeToCommandMap.put(LCDCursorCommand.CODE, LCDCursorCommand.class); + codeToCommandMap.put(LEDStatusCommand.CODE, LEDStatusCommand.class); + codeToCommandMap.put(BeepStatusCommand.CODE, BeepStatusCommand.class); + codeToCommandMap.put(BuzzerStatusCommand.CODE, BuzzerStatusCommand.class); + codeToCommandMap.put(DoorChimeStatusCommand.CODE, DoorChimeStatusCommand.class); + codeToCommandMap.put(ToneStatusCommand.CODE, ToneStatusCommand.class); + codeToCommandMap.put(PanelACTroubleCommand.CODE, PanelACTroubleCommand.class); + codeToCommandMap.put(PanelACTroubleRestoreCommand.CODE, PanelACTroubleRestoreCommand.class); + codeToCommandMap.put(PanelBatteryTroubleCommand.CODE, PanelBatteryTroubleCommand.class); + codeToCommandMap.put(PanelBatteryTroubleRestoreCommand.CODE, PanelBatteryTroubleRestoreCommand.class); + codeToCommandMap.put(PartitionArmedCommand.CODE, PartitionArmedCommand.class); + codeToCommandMap.put(PartitionBusyCommand.CODE, PartitionBusyCommand.class); + codeToCommandMap.put(PartitionDisarmedCommand.CODE, PartitionDisarmedCommand.class); + codeToCommandMap.put(PartitionInAlarmCommand.CODE, PartitionInAlarmCommand.class); + codeToCommandMap.put(PartitionNotReadyCommand.CODE, PartitionNotReadyCommand.class); + codeToCommandMap.put(PartitionReadyCommand.CODE, PartitionReadyCommand.class); + codeToCommandMap.put(PartitionReadyToForceArmCommand.CODE, PartitionReadyToForceArmCommand.class); + codeToCommandMap.put(RingDetectedCommand.CODE, RingDetectedCommand.class); + codeToCommandMap.put(SystemBellTroubleCommand.CODE, SystemBellTroubleCommand.class); + codeToCommandMap.put(SystemBellTroubleRestoreCommand.CODE, SystemBellTroubleRestoreCommand.class); + codeToCommandMap.put(SystemErrorCommand.CODE, SystemErrorCommand.class); + codeToCommandMap.put(TimeDateBroadcastCommand.CODE, TimeDateBroadcastCommand.class); + codeToCommandMap.put(TroubleStatusCommand.CODE, TroubleStatusCommand.class); + codeToCommandMap.put(TroubleStatusRestoreCommand.CODE, TroubleStatusRestoreCommand.class); + codeToCommandMap.put(ZoneAlarmCommand.CODE, ZoneAlarmCommand.class); + codeToCommandMap.put(ZoneAlarmRestoreCommand.CODE, ZoneAlarmRestoreCommand.class); + codeToCommandMap.put(ZoneFaultCommand.CODE, ZoneFaultCommand.class); + codeToCommandMap.put(ZoneFaultRestoreCommand.CODE, ZoneFaultRestoreCommand.class); + codeToCommandMap.put(ZoneOpenCommand.CODE, ZoneOpenCommand.class); + codeToCommandMap.put(ZoneRestoredCommand.CODE, ZoneRestoredCommand.class); + codeToCommandMap.put(ZoneTamperCommand.CODE, ZoneTamperCommand.class); + codeToCommandMap.put(ZoneTamperRestoreCommand.CODE, ZoneTamperRestoreCommand.class); + codeToCommandMap.put(UserOpeningCommand.CODE, UserOpeningCommand.class); + codeToCommandMap.put(UserClosingCommand.CODE, UserClosingCommand.class); + codeToCommandMap.put(PartialClosingCommand.CODE, PartialClosingCommand.class); + codeToCommandMap.put(SpecialClosingCommand.CODE, SpecialClosingCommand.class); + codeToCommandMap.put(SoftwareVersionCommand.CODE, SoftwareVersionCommand.class); + } - public ReadCommand parseCommand(String receivedCommand) throws InvalidCommandException { - if (receivedCommand.length() < 3) { - throw new CommandLengthException(receivedCommand.length()); - } + public ReadCommand parseCommand(String receivedCommand) throws InvalidCommandException { + if (receivedCommand.length() < 3) { + throw new CommandLengthException(receivedCommand.length()); + } - final String commandCode = receivedCommand.substring(0, 3); + final String commandCode = receivedCommand.substring(0, 3); - Class commandClass = codeToCommandMap.get(commandCode); - //System.out.println(commandCode + ", " + commandClass); - if (commandClass == null) { - throw new ReadCommand.UnknownCommandException(receivedCommand); - } + Class commandClass = codeToCommandMap.get(commandCode); + //System.out.println(commandCode + ", " + commandClass); + if (commandClass == null) { + throw new ReadCommand.UnknownCommandException(receivedCommand); + } - ReadCommand command; - try { - command = commandClass.newInstance(); - } catch (InstantiationException e) { - throw new InvalidCommandException(e); - } catch (IllegalAccessException e) { - throw new InvalidCommandException(e); - } - command.init(receivedCommand); - return command; - } + ReadCommand command; + try { + command = commandClass.getDeclaredConstructor().newInstance(); + } catch (InstantiationException | + IllegalAccessException | + NoSuchMethodException | + InvocationTargetException e) { + throw new InvalidCommandException(e); + } + command.init(receivedCommand); + return command; + } - public static void registerCommand(String commandCode, Class clazz) { - if (codeToCommandMap.containsKey(commandCode)) { - throw new IllegalArgumentException("You may not redefine an existing command."); - } - codeToCommandMap.put(commandCode, clazz); - } + public static void registerCommand(String commandCode, Class clazz) { + if (codeToCommandMap.containsKey(commandCode)) { + throw new IllegalArgumentException("You may not redefine an existing command."); + } + codeToCommandMap.put(commandCode, clazz); + } } diff --git a/src/main/java/com/github/kmbulebu/dsc/it100/mina/filters/CommandLogFilter.java b/src/main/java/com/github/kmbulebu/dsc/it100/mina/filters/CommandLogFilter.java index a825868..f339dec 100644 --- a/src/main/java/com/github/kmbulebu/dsc/it100/mina/filters/CommandLogFilter.java +++ b/src/main/java/com/github/kmbulebu/dsc/it100/mina/filters/CommandLogFilter.java @@ -1,148 +1,61 @@ package com.github.kmbulebu.dsc.it100.mina.filters; -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.Marker; +import com.github.kmbulebu.dsc.it100.commands.read.ReadCommand; +import com.github.kmbulebu.dsc.it100.commands.write.WriteCommand; import org.apache.mina.core.filterchain.IoFilterAdapter; import org.apache.mina.core.session.IoSession; import org.apache.mina.core.write.WriteRequest; - -import com.github.kmbulebu.dsc.it100.commands.read.ReadCommand; -import com.github.kmbulebu.dsc.it100.commands.write.WriteCommand; +import org.slf4j.IMarkerFactory; +import org.slf4j.Logger; +import org.slf4j.Marker; +import org.slf4j.event.Level; +import org.slf4j.helpers.BasicMarkerFactory; public class CommandLogFilter extends IoFilterAdapter { - - private final Logger logger; - private final Level level; - - public CommandLogFilter(Logger logger, Level level) { - this.logger = logger; - this.level = level; - } - - @Override - public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception { - if (message instanceof ReadCommand) { - logger.log(level, new ReceivedMarker(), message.toString()); - } - super.messageReceived(nextFilter, session, message); - } - - @Override - public void messageSent(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception { - if (writeRequest.getMessage() instanceof WriteCommand) { - logger.log(level, new SentMarker(), writeRequest.getMessage().toString()); - } - super.messageSent(nextFilter, session, writeRequest); - } - - private static class ReceivedMarker implements Marker { - - /** - * - */ - private static final long serialVersionUID = 5190100565468306990L; - - @Override - public String getName() { - return "RECEIVED"; - } - - @Override - public boolean isInstanceOf(Marker m) { - return (m instanceof ReceivedMarker); - } - - @Override - public boolean isInstanceOf(String name) { - return "RECEIVED".equals(name); - } - - @Override - public String toString() { - return "RECEIVED"; - } - - @Override - public Marker addParents(Marker... markers) { - return null; - } - - @Override - public Marker[] getParents() { - return null; - } - - @Override - public boolean hasParents() { - return false; - } - - @Override - public boolean remove(Marker marker) { - return false; - } - - @Override - public Marker setParents(Marker... markers) { - return null; - } - - } - - private static class SentMarker implements Marker { - - - /** - * - */ - private static final long serialVersionUID = 5213322286168888154L; - - @Override - public String getName() { - return "SENT"; - } - - @Override - public boolean isInstanceOf(Marker m) { - return (m instanceof SentMarker); - } - - @Override - public boolean isInstanceOf(String name) { - return "SENT".equals(name); - } - - @Override - public String toString() { - return "SENT"; - } - - @Override - public Marker addParents(Marker... markers) { - return null; - } - - @Override - public Marker[] getParents() { - return null; - } - - @Override - public boolean hasParents() { - return false; - } - - @Override - public boolean remove(Marker marker) { - return false; - } - @Override - public Marker setParents(Marker... markers) { - return null; - } - - } + private final IMarkerFactory markerFactory = new BasicMarkerFactory(); + private final Logger logger; + private final Level level; + + public CommandLogFilter(Logger logger, Level level) { + this.logger = logger; + this.level = level; + } + + @Override + public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception { + if (message instanceof ReadCommand) { + log(level, markerFactory.getMarker("RECEIVED"), message.toString()); + } + super.messageReceived(nextFilter, session, message); + } + + @Override + public void messageSent(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception { + if (writeRequest.getMessage() instanceof WriteCommand) { + log(level, markerFactory.getMarker("SENT"), writeRequest.getMessage().toString()); + } + super.messageSent(nextFilter, session, writeRequest); + } + + private void log(Level level, Marker marker, String message) { + switch (level) { + case TRACE: + logger.trace(marker, message); + break; + case DEBUG: + logger.debug(marker, message); + break; + case INFO: + logger.info(marker, message); + break; + case WARN: + logger.warn(marker, message); + break; + case ERROR: + logger.error(marker, message); + break; + } + } } diff --git a/src/main/java/com/github/kmbulebu/dsc/it100/rxjava/ReadCommandOnSubscribe.java b/src/main/java/com/github/kmbulebu/dsc/it100/rxjava/ReadCommandOnSubscribe.java index c7edb04..3e8a83a 100644 --- a/src/main/java/com/github/kmbulebu/dsc/it100/rxjava/ReadCommandOnSubscribe.java +++ b/src/main/java/com/github/kmbulebu/dsc/it100/rxjava/ReadCommandOnSubscribe.java @@ -1,21 +1,19 @@ package com.github.kmbulebu.dsc.it100.rxjava; -import java.io.IOException; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import com.github.kmbulebu.dsc.it100.commands.read.ReadCommand; import org.apache.mina.core.session.IoSession; import org.apache.mina.handler.demux.DemuxingIoHandler; import org.apache.mina.handler.demux.ExceptionHandler; import org.apache.mina.handler.demux.MessageHandler; - +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import rx.Subscriber; -import com.github.kmbulebu.dsc.it100.commands.read.ReadCommand; +import java.io.IOException; public class ReadCommandOnSubscribe implements rx.Observable.OnSubscribe { - private static final Logger LOGGER = LogManager.getLogger(); + private static final Logger LOGGER = LoggerFactory.getLogger(ReadCommandOnSubscribe.class); private final DemuxingIoHandler demuxIoHandler; From 5e85b33fdd93dba6355511dadacc9ca3d9db29bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maido=20K=C3=A4=C3=A4ra?= Date: Tue, 30 Oct 2018 11:43:17 +0200 Subject: [PATCH 2/2] Version bump Old version didn't work with Java 10 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d209c6c..f88b055 100644 --- a/pom.xml +++ b/pom.xml @@ -214,7 +214,7 @@ maven-javadoc-plugin - 2.10.4 + 3.0.1 javadoc-jar