diff --git a/pom.xml b/pom.xml
index 4e371375..e17d3079 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
obd-metrics
- 11.0.0-SNAPSHOT
+ 11.1.0-SNAPSHOT
jar
diff --git a/src/main/java/org/obd/metrics/api/CommandBufferInitHandler.java b/src/main/java/org/obd/metrics/api/CommandBufferInitHandler.java
index c41f0fc7..38e3a0d9 100644
--- a/src/main/java/org/obd/metrics/api/CommandBufferInitHandler.java
+++ b/src/main/java/org/obd/metrics/api/CommandBufferInitHandler.java
@@ -29,6 +29,7 @@
import org.obd.metrics.buffer.CommandsBuffer;
import org.obd.metrics.command.ATCommand;
import org.obd.metrics.command.Command;
+import org.obd.metrics.command.obd.ObdCommand;
import org.obd.metrics.command.process.DelayCommand;
import org.obd.metrics.command.process.InitCompletedCommand;
import org.obd.metrics.context.Context;
@@ -92,16 +93,20 @@ private void appendPIDsGroups(Init init, LinkedList groups) {
@SuppressWarnings("unchecked")
private Optional mapToCommand(Class> defaultClass, PidDefinition pid) {
+
+ log.debug("Instantiating the PID: {} for the group: {}",pid.getPid(),pid.getGroup());
+
try {
final Class> commandClass = (pid.getCommandClass() == null) ? defaultClass
: Class.forName(pid.getCommandClass());
if (commandClass == null) {
- return Optional.empty();
+ return Optional.of(new ObdCommand(pid));
+ }else {
+ final Constructor extends Command> constructor = (Constructor extends Command>) commandClass
+ .getConstructor(PidDefinition.class);
+ return Optional.of(constructor.newInstance(pid));
}
- final Constructor extends Command> constructor = (Constructor extends Command>) commandClass
- .getConstructor(PidDefinition.class);
- return Optional.of(constructor.newInstance(pid));
} catch (Throwable e) {
log.error("Failed to initiate command class: {}", pid.getCommandClass(), e);
}
diff --git a/src/main/java/org/obd/metrics/command/meta/HexCommand.java b/src/main/java/org/obd/metrics/command/meta/HexCodec.java
similarity index 68%
rename from src/main/java/org/obd/metrics/command/meta/HexCommand.java
rename to src/main/java/org/obd/metrics/command/meta/HexCodec.java
index 2c6189a8..dc079545 100644
--- a/src/main/java/org/obd/metrics/command/meta/HexCommand.java
+++ b/src/main/java/org/obd/metrics/command/meta/HexCodec.java
@@ -18,33 +18,35 @@
**/
package org.obd.metrics.command.meta;
-import java.util.Optional;
-
import org.obd.metrics.codec.Codec;
import org.obd.metrics.pid.PidDefinition;
+import org.obd.metrics.transport.Characters;
import org.obd.metrics.transport.message.ConnectorResponse;
import lombok.extern.slf4j.Slf4j;
@Slf4j
-public final class HexCommand extends MetadataCommand implements Codec {
-
- public HexCommand(PidDefinition pid) {
- super(pid);
- }
+public final class HexCodec implements Codec {
@Override
public String decode(PidDefinition pid, ConnectorResponse connectorResponse) {
- log.info("Decoding the message: {}", connectorResponse.getMessage());
- final Optional answer = decodeRawMessage(getQuery(),connectorResponse);
-
- if (answer.isPresent()) {
- final String decoded = Hex.decode(answer.get());
+ if (log.isTraceEnabled()) {
+ log.trace("PID: {}, received message: {}",pid.getPid(), connectorResponse.getMessage());
+ }
+
+ final String rawValue = connectorResponse.getRawValue(pid);
+ if (rawValue == null) {
+ return null;
+ }else {
+ final String answer = Characters.normalize(rawValue);
+ final String decoded = Hex.decode(answer);
final String result = (decoded == null) ? null : decoded.trim();
- log.info("Decoded message: {} for: {}", result, connectorResponse.getMessage());
+
+ if (log.isTraceEnabled()) {
+ log.trace("Decoded message: {} for: {}", result, connectorResponse.getMessage());
+ }
return result;
}
- return null;
}
}
diff --git a/src/main/java/org/obd/metrics/command/meta/MetadataCommand.java b/src/main/java/org/obd/metrics/command/meta/MetadataCommand.java
index 71234926..cb24a8d1 100644
--- a/src/main/java/org/obd/metrics/command/meta/MetadataCommand.java
+++ b/src/main/java/org/obd/metrics/command/meta/MetadataCommand.java
@@ -20,7 +20,6 @@
import java.util.Optional;
-import org.obd.metrics.command.Command;
import org.obd.metrics.pid.PidDefinition;
import org.obd.metrics.transport.Characters;
import org.obd.metrics.transport.message.ConnectorResponse;
@@ -28,13 +27,11 @@
import lombok.extern.slf4j.Slf4j;
@Slf4j
-public abstract class MetadataCommand extends Command {
+public abstract class MetadataCommand {
protected final PidDefinition pid;
protected MetadataCommand(PidDefinition pid) {
- super(pid.getQuery(), pid.getMode(),
- pid.getDescription(), pid.getOverrides().getCanMode() != null ? pid.getOverrides().getCanMode() : "");
this.pid = pid;
}
diff --git a/src/main/java/org/obd/metrics/command/meta/NotEncodedCommand.java b/src/main/java/org/obd/metrics/command/meta/NotEncodedCodec.java
similarity index 70%
rename from src/main/java/org/obd/metrics/command/meta/NotEncodedCommand.java
rename to src/main/java/org/obd/metrics/command/meta/NotEncodedCodec.java
index 3820a14a..e7eafb4b 100644
--- a/src/main/java/org/obd/metrics/command/meta/NotEncodedCommand.java
+++ b/src/main/java/org/obd/metrics/command/meta/NotEncodedCodec.java
@@ -18,30 +18,23 @@
**/
package org.obd.metrics.command.meta;
-import java.util.Optional;
-
import org.obd.metrics.codec.Codec;
import org.obd.metrics.pid.PidDefinition;
+import org.obd.metrics.transport.Characters;
import org.obd.metrics.transport.message.ConnectorResponse;
import lombok.extern.slf4j.Slf4j;
@Slf4j
-public final class NotEncodedCommand extends MetadataCommand implements Codec {
+public final class NotEncodedCodec implements Codec {
- public NotEncodedCommand(PidDefinition pid) {
- super(pid);
- }
@Override
public String decode(PidDefinition pid, ConnectorResponse connectorResponse) {
-
- log.info("Decoding the message: {}", connectorResponse.getMessage());
- final Optional answer = decodeRawMessage(getQuery(), connectorResponse);
- if (answer.isPresent()) {
- log.info("Decoded message: {} for: {}", answer.get(), connectorResponse.getMessage());
- return answer.get();
+ if (log.isTraceEnabled()) {
+ log.trace("Decoding the message: {}", connectorResponse.getMessage());
}
- return null;
+ final String rawValue = connectorResponse.getRawValue(pid);
+ return rawValue == null ? null : Characters.normalize(rawValue);
}
}
diff --git a/src/main/java/org/obd/metrics/command/meta/TimeCommand.java b/src/main/java/org/obd/metrics/command/meta/TimeCommand.java
index 792f1100..916bbf39 100644
--- a/src/main/java/org/obd/metrics/command/meta/TimeCommand.java
+++ b/src/main/java/org/obd/metrics/command/meta/TimeCommand.java
@@ -18,8 +18,6 @@
**/
package org.obd.metrics.command.meta;
-import java.util.Optional;
-
import org.obd.metrics.codec.Codec;
import org.obd.metrics.pid.PidDefinition;
import org.obd.metrics.transport.message.ConnectorResponse;
@@ -27,23 +25,16 @@
import lombok.extern.slf4j.Slf4j;
@Slf4j
-public final class TimeCommand extends MetadataCommand implements Codec {
-
- public TimeCommand(PidDefinition pid) {
- super(pid);
- }
+public final class TimeCommand implements Codec {
@Override
- public Integer decode(PidDefinition pid, ConnectorResponse connectorResponse) {
-
- log.info("Decoding the message: {}", connectorResponse.getMessage());
-
- final Optional answer = decodeRawMessage(getQuery(), connectorResponse);
- if (answer.isPresent()) {
- final Integer result = Integer.parseInt(answer.get(), 16);
- log.info("Decoded message: {} for: {}", result, connectorResponse.getMessage());
- return result;
+ public String decode(PidDefinition pid, ConnectorResponse connectorResponse) {
+ if (log.isDebugEnabled()) {
+ log.debug("Decoding the message: {}", connectorResponse.getMessage());
}
- return null;
+
+ final String answer = connectorResponse.getRawValue(pid);
+ final Integer result = Integer.parseInt(answer, 16);
+ return result.toString();
}
}
diff --git a/src/main/java/org/obd/metrics/executor/MetadataReader.java b/src/main/java/org/obd/metrics/executor/MetadataReader.java
index c3ab9e07..6dc4d12a 100644
--- a/src/main/java/org/obd/metrics/executor/MetadataReader.java
+++ b/src/main/java/org/obd/metrics/executor/MetadataReader.java
@@ -21,39 +21,26 @@
import java.util.HashMap;
import java.util.Map;
-import org.obd.metrics.api.model.Reply;
-import org.obd.metrics.codec.Codec;
+import org.obd.metrics.api.model.ObdMetric;
+import org.obd.metrics.api.model.ReplyObserver;
import org.obd.metrics.command.Command;
import org.obd.metrics.pid.PIDsGroup;
+import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
@Slf4j
-final class MetadataReader extends PIDsGroupReader