diff options
33 files changed, 271 insertions, 504 deletions
diff --git a/src/org/traccar/model/ExtendedInfoFormatter.java b/src/org/traccar/model/ExtendedInfoFormatter.java new file mode 100644 index 000000000..e17c96cb8 --- /dev/null +++ b/src/org/traccar/model/ExtendedInfoFormatter.java @@ -0,0 +1,47 @@ +/* + * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.traccar.model; + +/** + * Format extended tracker status + */ +public class ExtendedInfoFormatter { + + private static final String rootNode = "info"; + + private StringBuilder data; + + public ExtendedInfoFormatter(String protocol) { + data = new StringBuilder(); + data.append("<").append(rootNode).append(">"); + data.append("<protocol>").append(protocol).append("</protocol>"); + } + + public void set(String key, Object value) { + if (value != null) { + data.append("<").append(key).append(">"); + data.append(value); + data.append("</").append(key).append(">"); + } + } + + @Override + public String toString() { + data.append("</").append(rootNode).append(">"); + return data.toString(); + } + +} diff --git a/src/org/traccar/protocol/Avl08ProtocolDecoder.java b/src/org/traccar/protocol/Avl08ProtocolDecoder.java index 7cd64ad2b..c08b56129 100644 --- a/src/org/traccar/protocol/Avl08ProtocolDecoder.java +++ b/src/org/traccar/protocol/Avl08ProtocolDecoder.java @@ -24,6 +24,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; /** @@ -84,7 +85,7 @@ public class Avl08ProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>avl08</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("avl08"); Integer index = 1; @@ -98,9 +99,7 @@ public class Avl08ProtocolDecoder extends BaseProtocolDecoder { } // Alarm type - extendedInfo.append("<alarm>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</alarm>"); + extendedInfo.set("alarm", parser.group(index++)); // Time Calendar time = Calendar.getInstance(TimeZone.getTimeZone("UTC")); @@ -146,65 +145,38 @@ public class Avl08ProtocolDecoder extends BaseProtocolDecoder { position.setTime(time.getTime()); // Dilution of precision - extendedInfo.append("<pdop>"); - extendedInfo.append(parser.group(index++).replaceFirst ("^0*(?![\\.$])", "")); - extendedInfo.append("</pdop>"); - extendedInfo.append("<hdop>"); - extendedInfo.append(parser.group(index++).replaceFirst ("^0*(?![\\.$])", "")); - extendedInfo.append("</hdop>"); - extendedInfo.append("<vdop>"); - extendedInfo.append(parser.group(index++).replaceFirst ("^0*(?![\\.$])", "")); - extendedInfo.append("</vdop>"); + extendedInfo.set("pdop", parser.group(index++).replaceFirst ("^0*(?![\\.$])", "")); + extendedInfo.set("hdop", parser.group(index++).replaceFirst ("^0*(?![\\.$])", "")); + extendedInfo.set("vdop", parser.group(index++).replaceFirst ("^0*(?![\\.$])", "")); // Status - extendedInfo.append("<status>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</status>"); + extendedInfo.set("status", parser.group(index++)); // Real time clock - extendedInfo.append("<clock>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</clock>"); + extendedInfo.set("clock", parser.group(index++)); // Voltage String voltage = parser.group(index++); position.setPower(Double.valueOf(voltage.substring(1, 4)) / 100); - extendedInfo.append("<voltage>"); - extendedInfo.append(voltage); - extendedInfo.append("</voltage>"); + extendedInfo.set("voltage", voltage); // ADC - extendedInfo.append("<adc>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</adc>"); + extendedInfo.set("adc", parser.group(index++)); // Cell - extendedInfo.append("<cell>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</cell>"); + extendedInfo.set("cell", parser.group(index++)); // Temperature - extendedInfo.append("<temperature>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</temperature>"); + extendedInfo.set("temperature", parser.group(index++)); // Mileage - extendedInfo.append("<mileage>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</mileage>"); + extendedInfo.set("mileage", parser.group(index++)); // Serial - extendedInfo.append("<serial>"); - extendedInfo.append(parser.group(index++).replaceFirst ("^0*", "")); - extendedInfo.append("</serial>"); + extendedInfo.set("serial", parser.group(index++).replaceFirst ("^0*", "")); // RFID - String rfid = parser.group(index++); - if (rfid != null) { - extendedInfo.append("<rfid>"); - extendedInfo.append(rfid); - extendedInfo.append("</rfid>"); - } + extendedInfo.set("rfid", parser.group(index++)); // Extended info position.setExtendedInfo(extendedInfo.toString()); diff --git a/src/org/traccar/protocol/CarscopProtocolDecoder.java b/src/org/traccar/protocol/CarscopProtocolDecoder.java index accc04ebd..93354498a 100644 --- a/src/org/traccar/protocol/CarscopProtocolDecoder.java +++ b/src/org/traccar/protocol/CarscopProtocolDecoder.java @@ -24,6 +24,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class CarscopProtocolDecoder extends BaseProtocolDecoder { @@ -79,7 +80,7 @@ public class CarscopProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); position.setDeviceId(deviceId); - StringBuilder extendedInfo = new StringBuilder("<protocol>carscop</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("carscop"); index = 1; // Time @@ -120,14 +121,10 @@ public class CarscopProtocolDecoder extends BaseProtocolDecoder { position.setCourse(Double.valueOf(parser.group(index++))); // State - extendedInfo.append("<state>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</state>"); + extendedInfo.set("state", parser.group(index++)); // Milage - extendedInfo.append("<milage>"); - extendedInfo.append(Integer.valueOf(parser.group(index++))); - extendedInfo.append("</milage>"); + extendedInfo.set("milage", Integer.valueOf(parser.group(index++))); position.setExtendedInfo(extendedInfo.toString()); return position; diff --git a/src/org/traccar/protocol/CellocatorProtocolDecoder.java b/src/org/traccar/protocol/CellocatorProtocolDecoder.java index aabda6f51..3ca7853e0 100644 --- a/src/org/traccar/protocol/CellocatorProtocolDecoder.java +++ b/src/org/traccar/protocol/CellocatorProtocolDecoder.java @@ -25,6 +25,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class CellocatorProtocolDecoder extends BaseProtocolDecoder { @@ -102,7 +103,7 @@ public class CellocatorProtocolDecoder extends BaseProtocolDecoder { // Parse location if (type == MSG_CLIENT_STATUS) { Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>cellocator</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("cellocator"); // Device identifier try { @@ -117,9 +118,7 @@ public class CellocatorProtocolDecoder extends BaseProtocolDecoder { buf.readUnsignedByte(); // protocol version // Status - extendedInfo.append("<status>"); - extendedInfo.append(buf.getUnsignedByte(buf.readerIndex()) & 0x0f); - extendedInfo.append("</status>"); + extendedInfo.set("status", buf.getUnsignedByte(buf.readerIndex()) & 0x0f); int operator = (buf.readUnsignedByte() & 0xf0) << 4; operator += buf.readUnsignedByte(); @@ -131,7 +130,7 @@ public class CellocatorProtocolDecoder extends BaseProtocolDecoder { operator <<= 8; operator += buf.readUnsignedByte(); - extendedInfo.append("<operator>").append(operator).append("</operator>"); + extendedInfo.set("operator", operator); buf.readUnsignedInt(); // ADC buf.readUnsignedMedium(); // milage diff --git a/src/org/traccar/protocol/Ev603ProtocolDecoder.java b/src/org/traccar/protocol/Ev603ProtocolDecoder.java index e80717cdf..322d7dd61 100644 --- a/src/org/traccar/protocol/Ev603ProtocolDecoder.java +++ b/src/org/traccar/protocol/Ev603ProtocolDecoder.java @@ -25,28 +25,17 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder;
import org.traccar.ServerManager;
import org.traccar.helper.Log;
+import org.traccar.model.ExtendedInfoFormatter;
import org.traccar.model.Position;
-/**
- * Ev603 Protocol Decoder
- */
public class Ev603ProtocolDecoder extends BaseProtocolDecoder{
- /**
- * Device ID
- */
private Long deviceId;
- /**
- * Initialize
- */
public Ev603ProtocolDecoder(ServerManager serverManager) {
super(serverManager);
}
- /**
- * Regular expressions pattern
- */
static private Pattern pattern = Pattern.compile(
"!A," + // Type
"(\\d{2})\\/(\\d{2})\\/(\\d{2})," + // Date dd/mm/YY
@@ -57,9 +46,7 @@ public class Ev603ProtocolDecoder extends BaseProtocolDecoder{ "(\\d+\\.?\\d+)," + // Course
".*");
- /**
- * Decode message
- */
+ @Override
protected Object decode(
ChannelHandlerContext ctx, Channel channel, Object msg)
throws Exception {
@@ -87,7 +74,7 @@ public class Ev603ProtocolDecoder extends BaseProtocolDecoder{ // Create new position
Position position = new Position();
position.setDeviceId(deviceId);
- StringBuilder extendedInfo = new StringBuilder("<protocol>ev603</protocol>");
+ ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("ev603");
Integer index = 1;
// Date
diff --git a/src/org/traccar/protocol/GalileoProtocolDecoder.java b/src/org/traccar/protocol/GalileoProtocolDecoder.java index 62669eb1c..d56bc0f6d 100644 --- a/src/org/traccar/protocol/GalileoProtocolDecoder.java +++ b/src/org/traccar/protocol/GalileoProtocolDecoder.java @@ -29,6 +29,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class GalileoProtocolDecoder extends BaseProtocolDecoder { @@ -98,7 +99,7 @@ public class GalileoProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>galileo</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("galileo"); while (buf.readerIndex() < length) { int tag = buf.readUnsignedByte(); @@ -134,9 +135,7 @@ public class GalileoProtocolDecoder extends BaseProtocolDecoder { break; case TAG_STATUS: - extendedInfo.append("<status>"); - extendedInfo.append(buf.readUnsignedShort()); - extendedInfo.append("</status>"); + extendedInfo.set("status", buf.readUnsignedShort()); break; case TAG_POWER: @@ -144,15 +143,11 @@ public class GalileoProtocolDecoder extends BaseProtocolDecoder { break; case TAG_BATTERY: - extendedInfo.append("<battery>"); - extendedInfo.append(buf.readUnsignedShort()); - extendedInfo.append("</battery>"); + extendedInfo.set("battery", buf.readUnsignedShort()); break; case TAG_MILAGE: - extendedInfo.append("<milage>"); - extendedInfo.append(buf.readUnsignedInt()); - extendedInfo.append("</milage>"); + extendedInfo.set("milage", buf.readUnsignedInt()); break; default: diff --git a/src/org/traccar/protocol/Gps103ProtocolDecoder.java b/src/org/traccar/protocol/Gps103ProtocolDecoder.java index 9646a5e6c..344d985e9 100644 --- a/src/org/traccar/protocol/Gps103ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gps103ProtocolDecoder.java @@ -24,6 +24,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class Gps103ProtocolDecoder extends BaseProtocolDecoder { @@ -85,7 +86,7 @@ public class Gps103ProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>gps103</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("gps103"); Integer index = 1; @@ -99,9 +100,7 @@ public class Gps103ProtocolDecoder extends BaseProtocolDecoder { } // Alarm message - extendedInfo.append("<alarm>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</alarm>"); + extendedInfo.set("alarm", parser.group(index++)); // Date Calendar time = Calendar.getInstance(TimeZone.getTimeZone("UTC")); diff --git a/src/org/traccar/protocol/Gt06ProtocolDecoder.java b/src/org/traccar/protocol/Gt06ProtocolDecoder.java index 741841a11..a0113b362 100644 --- a/src/org/traccar/protocol/Gt06ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gt06ProtocolDecoder.java @@ -25,6 +25,7 @@ import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Crc; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class Gt06ProtocolDecoder extends BaseProtocolDecoder { @@ -108,7 +109,7 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); position.setDeviceId(deviceId); - StringBuilder extendedInfo = new StringBuilder("<protocol>gt06</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("gt06"); // Date and time Calendar time = Calendar.getInstance(TimeZone.getTimeZone("UTC")); @@ -123,9 +124,7 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder { // GPS length and Satellites count int gpsLength = buf.readUnsignedByte(); - extendedInfo.append("<satellites>"); - extendedInfo.append(gpsLength & 0xf); - extendedInfo.append("</satellites>"); + extendedInfo.set("satellites", gpsLength & 0xf); gpsLength >>= 4; // Latitude @@ -158,32 +157,22 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder { } // Cell information - extendedInfo.append("<mcc>"); - extendedInfo.append(buf.readUnsignedShort()); - extendedInfo.append("</mcc>"); - extendedInfo.append("<mnc>"); - extendedInfo.append(buf.readUnsignedByte()); - extendedInfo.append("</mnc>"); - extendedInfo.append("<lac>"); - extendedInfo.append(buf.readUnsignedShort()); - extendedInfo.append("</lac>"); - extendedInfo.append("<cell>"); - extendedInfo.append(buf.readUnsignedShort() << 8 + buf.readUnsignedByte()); - extendedInfo.append("</cell>"); + extendedInfo.set("mcc", buf.readUnsignedShort()); + extendedInfo.set("mnc", buf.readUnsignedByte()); + extendedInfo.set("lac", buf.readUnsignedShort()); + extendedInfo.set("cell", buf.readUnsignedShort() << 8 + buf.readUnsignedByte()); buf.skipBytes(lbsLength - 9); // Status if (type == MSG_GPS_LBS_STATUS) { int flags = buf.readUnsignedByte(); // TODO parse flags - extendedInfo.append("<alarm>true</alarm>"); + extendedInfo.set("alarm", true); // Voltage position.setPower((double) buf.readUnsignedByte()); // GSM signal - extendedInfo.append("<gsm>"); - extendedInfo.append(buf.readUnsignedByte()); - extendedInfo.append("</gsm>"); + extendedInfo.set("gsm", buf.readUnsignedByte()); } } diff --git a/src/org/traccar/protocol/H02ProtocolDecoder.java b/src/org/traccar/protocol/H02ProtocolDecoder.java index 1163ac75d..0b6d9e560 100644 --- a/src/org/traccar/protocol/H02ProtocolDecoder.java +++ b/src/org/traccar/protocol/H02ProtocolDecoder.java @@ -24,6 +24,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class H02ProtocolDecoder extends BaseProtocolDecoder { @@ -64,7 +65,7 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>h02</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("h02"); Integer index = 1; diff --git a/src/org/traccar/protocol/IntellitracProtocolDecoder.java b/src/org/traccar/protocol/IntellitracProtocolDecoder.java index 7b1cb3880..de1ce35de 100644 --- a/src/org/traccar/protocol/IntellitracProtocolDecoder.java +++ b/src/org/traccar/protocol/IntellitracProtocolDecoder.java @@ -24,6 +24,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class IntellitracProtocolDecoder extends BaseProtocolDecoder { @@ -36,8 +37,8 @@ public class IntellitracProtocolDecoder extends BaseProtocolDecoder { "(?:.+,)?(\\d+)," + // Device Identifier "(\\d{4})(\\d{2})(\\d{2})" + // Date (YYYYMMDD) "(\\d{2})(\\d{2})(\\d{2})," + // Time (HHMMSS) - "(\\d+\\.\\d+)," + // Longitude - "(\\d+\\.\\d+)," + // Latitude + "(-?\\d+\\.\\d+)," + // Longitude + "(-?\\d+\\.\\d+)," + // Latitude "(\\d+\\.?\\d*)," + // Speed "(\\d+\\.?\\d*)," + // Course "(\\d+\\.?\\d*)," + // Altitude @@ -63,7 +64,7 @@ public class IntellitracProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>intellitrac</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("intellitrac"); Integer index = 1; // Detect device @@ -96,33 +97,27 @@ public class IntellitracProtocolDecoder extends BaseProtocolDecoder { // Satellites int satellites = Integer.valueOf(parser.group(index++)); position.setValid(satellites >= 3); - extendedInfo.append("<satellites>"); - extendedInfo.append(satellites); - extendedInfo.append("</satellites>"); + extendedInfo.set("satellites", satellites); // Report identifier position.setId(Long.valueOf(parser.group(index++))); // Input - extendedInfo.append("<input>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</input>"); + extendedInfo.set("input", parser.group(index++)); // Output - extendedInfo.append("<output>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</output>"); + extendedInfo.set("output", parser.group(index++)); // ADC1 String adc1 = parser.group(index++); if (adc1 != null) { - extendedInfo.append("<adc1>").append(adc1).append("</adc1>"); + extendedInfo.set("adc1", adc1); } // ADC2 String adc2 = parser.group(index++); if (adc2 != null) { - extendedInfo.append("<adc2>").append(adc2).append("</adc2>"); + extendedInfo.set("adc2", adc2); } position.setExtendedInfo(extendedInfo.toString()); diff --git a/src/org/traccar/protocol/MegastekProtocolDecoder.java b/src/org/traccar/protocol/MegastekProtocolDecoder.java index 0a25f0b4a..649e9c45e 100644 --- a/src/org/traccar/protocol/MegastekProtocolDecoder.java +++ b/src/org/traccar/protocol/MegastekProtocolDecoder.java @@ -24,6 +24,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class MegastekProtocolDecoder extends BaseProtocolDecoder { @@ -73,7 +74,7 @@ public class MegastekProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>megastek</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("megastek"); int index = 1; // Time @@ -121,9 +122,7 @@ public class MegastekProtocolDecoder extends BaseProtocolDecoder { position.setTime(time.getTime()); // Alarm - extendedInfo.append("<alarm>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</alarm>"); + extendedInfo.set("alarm", parser.group(index++)); // IMEI String imei = parser.group(index++); @@ -137,9 +136,7 @@ public class MegastekProtocolDecoder extends BaseProtocolDecoder { // Satellites String satellites = parser.group(index++); if (satellites != null) { - extendedInfo.append("<satellites>"); - extendedInfo.append(satellites); - extendedInfo.append("</satellites>"); + extendedInfo.set("satellites", satellites); } // Altitude @@ -151,25 +148,17 @@ public class MegastekProtocolDecoder extends BaseProtocolDecoder { // Charger String charger = parser.group(index++); if (charger != null) { - extendedInfo.append("<charger>"); - extendedInfo.append(Integer.valueOf(charger) == 1); - extendedInfo.append("</charger>"); + extendedInfo.set("charger", Integer.valueOf(charger) == 1); } // MCC - extendedInfo.append("<mcc>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</mcc>"); + extendedInfo.set("mcc", parser.group(index++)); // MNC - extendedInfo.append("<mnc>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</mnc>"); + extendedInfo.set("mnc", parser.group(index++)); // LAC - extendedInfo.append("<lac>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</lac>"); + extendedInfo.set("lac", parser.group(index++)); // Extended info position.setExtendedInfo(extendedInfo.toString()); diff --git a/src/org/traccar/protocol/MeiligaoProtocolDecoder.java b/src/org/traccar/protocol/MeiligaoProtocolDecoder.java index 1d2b6584d..42d7ca350 100644 --- a/src/org/traccar/protocol/MeiligaoProtocolDecoder.java +++ b/src/org/traccar/protocol/MeiligaoProtocolDecoder.java @@ -29,6 +29,7 @@ import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Crc; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class MeiligaoProtocolDecoder extends BaseProtocolDecoder { @@ -37,12 +38,6 @@ public class MeiligaoProtocolDecoder extends BaseProtocolDecoder { super(serverManager); } - //"134743.003,A,0648.9866,S,10707.5795,E,000.0,000.0,260313" - //,,*38|0.8|245|2000|03F6,0000,0000,001C,0000,0000,0000,0000|0194000201CC627C|1A|01160849yt - - /** - * Regular expressions pattern - */ static private Pattern pattern = Pattern.compile( "(\\d{2})(\\d{2})(\\d{2})\\.(\\d+)," + // Time (HHMMSS.SSS) "([AV])," + // Validity @@ -121,13 +116,11 @@ public class MeiligaoProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>meiligao</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("meiligao"); // Alarm if (command == 0x9999) { - extendedInfo.append("<alarm>"); - extendedInfo.append(buf.getUnsignedByte(offset)); - extendedInfo.append("</alarm>"); + extendedInfo.set("alarm", buf.getUnsignedByte(offset)); } // Data offset @@ -200,12 +193,7 @@ public class MeiligaoProtocolDecoder extends BaseProtocolDecoder { position.setTime(time.getTime()); // Dilution of precision - String hdop = parser.group(index++); - if (hdop != null) { - extendedInfo.append("<hdop>"); - extendedInfo.append(hdop); - extendedInfo.append("</hdop>"); - } + extendedInfo.set("hdop", parser.group(index++)); // Altitude String altitude = parser.group(index++); @@ -218,43 +206,33 @@ public class MeiligaoProtocolDecoder extends BaseProtocolDecoder { // State String state = parser.group(index++); if (state != null) { - extendedInfo.append("<state>"); - extendedInfo.append(state); - extendedInfo.append("</state>"); + extendedInfo.set("state", state); } // ADC for (int i = 1; i <= 8; i++) { String adc = parser.group(index++); if (adc != null) { - extendedInfo.append("<adc").append(i).append(">"); - extendedInfo.append(Integer.parseInt(adc, 16)); - extendedInfo.append("</adc").append(i).append(">"); + extendedInfo.set("adc" + i, Integer.parseInt(adc, 16)); } } // Cell identifier String cell = parser.group(index++); if (cell != null) { - extendedInfo.append("<cell>"); - extendedInfo.append(cell); - extendedInfo.append("</cell>"); + extendedInfo.set("cell", cell); } // GSM signal String gsm = parser.group(index++); if (gsm != null) { - extendedInfo.append("<gsm>"); - extendedInfo.append(Integer.parseInt(gsm, 16)); - extendedInfo.append("</gsm>"); + extendedInfo.set("gsm", Integer.parseInt(gsm, 16)); } // Milage String milage = parser.group(index++); if (milage != null) { - extendedInfo.append("<milage>"); - extendedInfo.append(Integer.parseInt(milage, 16)); - extendedInfo.append("</milage>"); + extendedInfo.set("milage", Integer.parseInt(milage, 16)); } // Extended info diff --git a/src/org/traccar/protocol/MeitrackProtocolDecoder.java b/src/org/traccar/protocol/MeitrackProtocolDecoder.java index 87d222c37..e3b5187f4 100644 --- a/src/org/traccar/protocol/MeitrackProtocolDecoder.java +++ b/src/org/traccar/protocol/MeitrackProtocolDecoder.java @@ -24,23 +24,15 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; -/** - * Meitrack protocol decoder - */ public class MeitrackProtocolDecoder extends BaseProtocolDecoder { - /** - * Initialize - */ public MeitrackProtocolDecoder(ServerManager serverManager) { super(serverManager); } - /** - * Regular expressions pattern - */ static private Pattern pattern = Pattern.compile( "\\$\\$." + // Flag "\\d+," + // Length @@ -61,9 +53,7 @@ public class MeitrackProtocolDecoder extends BaseProtocolDecoder { "(\\d+)," + // Milage ".*"); // TODO: parse other stuff - /** - * Decode message - */ + @Override protected Object decode( ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception { @@ -77,7 +67,7 @@ public class MeitrackProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>meitrack</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("meitrack"); Integer index = 1; @@ -91,9 +81,7 @@ public class MeitrackProtocolDecoder extends BaseProtocolDecoder { } // Event - extendedInfo.append("<event>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</event>"); + extendedInfo.set("event", parser.group(index++)); // Coordinates position.setLatitude(Double.valueOf(parser.group(index++))); @@ -114,14 +102,10 @@ public class MeitrackProtocolDecoder extends BaseProtocolDecoder { position.setValid(parser.group(index++).compareTo("A") == 0 ? true : false); // Satellites - extendedInfo.append("<satellites>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</satellites>"); + extendedInfo.set("satellites", parser.group(index++)); // GSM Signal - extendedInfo.append("<gsm>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</gsm>"); + extendedInfo.set("gsm", parser.group(index++)); // Speed position.setSpeed(Double.valueOf(parser.group(index++))); @@ -130,17 +114,13 @@ public class MeitrackProtocolDecoder extends BaseProtocolDecoder { position.setCourse(Double.valueOf(parser.group(index++))); // HDOP - extendedInfo.append("<hdop>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</hdop>"); + extendedInfo.set("hdop", parser.group(index++)); // Altitude position.setAltitude(Double.valueOf(parser.group(index++))); // Milage - extendedInfo.append("<milage>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</milage>"); + extendedInfo.set("milage", parser.group(index++)); // Extended info position.setExtendedInfo(extendedInfo.toString()); diff --git a/src/org/traccar/protocol/Mta6ProtocolDecoder.java b/src/org/traccar/protocol/Mta6ProtocolDecoder.java index 749c01393..108e74963 100644 --- a/src/org/traccar/protocol/Mta6ProtocolDecoder.java +++ b/src/org/traccar/protocol/Mta6ProtocolDecoder.java @@ -34,6 +34,7 @@ import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.ChannelBufferTools; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class Mta6ProtocolDecoder extends BaseProtocolDecoder { @@ -128,7 +129,7 @@ public class Mta6ProtocolDecoder extends BaseProtocolDecoder { while (buf.readable()) { Position position = new Position(); position.setDeviceId(deviceId); - StringBuilder extendedInfo = new StringBuilder("<protocol>mta6</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("mta6"); short flags = buf.readUnsignedByte(); @@ -162,50 +163,40 @@ public class Mta6ProtocolDecoder extends BaseProtocolDecoder { } if (checkBit(flags, 3)) { - extendedInfo.append("<milage>"); - extendedInfo.append(buf.readUnsignedShort()); - extendedInfo.append("</milage>"); + extendedInfo.set("milage", buf.readUnsignedShort()); } if (checkBit(flags, 4)) { - extendedInfo.append("<fuel1>").append(buf.readUnsignedInt()).append("</fuel1>"); - extendedInfo.append("<fuel2>").append(buf.readUnsignedInt()).append("</fuel2>"); - extendedInfo.append("<hours1>").append(buf.readUnsignedShort()).append("</hours1>"); - extendedInfo.append("<hours2>").append(buf.readUnsignedShort()).append("</hours2>"); + extendedInfo.set("fuel1", buf.readUnsignedInt()); + extendedInfo.set("fuel2", buf.readUnsignedInt()); + extendedInfo.set("hours1", buf.readUnsignedShort()); + extendedInfo.set("hours2", buf.readUnsignedShort()); } if (checkBit(flags, 5)) { - extendedInfo.append("<adc1>").append(buf.readUnsignedShort() & 0x03ff).append("</adc1>"); - extendedInfo.append("<adc2>").append(buf.readUnsignedShort() & 0x03ff).append("</adc2>"); - extendedInfo.append("<adc3>").append(buf.readUnsignedShort() & 0x03ff).append("</adc3>"); - extendedInfo.append("<adc4>").append(buf.readUnsignedShort() & 0x03ff).append("</adc4>"); + extendedInfo.set("adc1", buf.readUnsignedShort() & 0x03ff); + extendedInfo.set("adc2", buf.readUnsignedShort() & 0x03ff); + extendedInfo.set("adc3", buf.readUnsignedShort() & 0x03ff); + extendedInfo.set("adc4", buf.readUnsignedShort() & 0x03ff); } if (checkBit(flags, 6)) { - extendedInfo.append("<temperature>"); - extendedInfo.append(buf.readByte()); - extendedInfo.append("</temperature>"); + extendedInfo.set("temperature", buf.readByte()); buf.getUnsignedByte(buf.readerIndex()); // control (>> 4) - extendedInfo.append("<sensor>"); - extendedInfo.append(buf.readUnsignedShort() & 0x0fff); - extendedInfo.append("</sensor>"); + extendedInfo.set("sensor", buf.readUnsignedShort() & 0x0fff); buf.readUnsignedShort(); // old sensor state (& 0x0fff) } if (checkBit(flags, 7)) { - extendedInfo.append("<battery>"); - extendedInfo.append(buf.getUnsignedByte(buf.readerIndex()) >> 2); - extendedInfo.append("</battery>"); + extendedInfo.set("battery", buf.getUnsignedByte(buf.readerIndex()) >> 2); position.setPower((double) (buf.readUnsignedShort() & 0x03ff)); buf.readByte(); // microcontroller temperature - extendedInfo.append("<gsm>"); - extendedInfo.append((buf.getUnsignedByte(buf.readerIndex()) >> 4) & 0x07); - extendedInfo.append("</gsm>"); + extendedInfo.set("gsm", (buf.getUnsignedByte(buf.readerIndex()) >> 4) & 0x07); int satellites = buf.readUnsignedByte() & 0x0f; position.setValid(satellites >= 3); - extendedInfo.append("<satellites>").append(satellites).append("</satellites>"); + extendedInfo.set("satellites", satellites); } position.setExtendedInfo(extendedInfo.toString()); @@ -220,7 +211,7 @@ public class Mta6ProtocolDecoder extends BaseProtocolDecoder { private Position parseFormatA1(ChannelBuffer buf, long deviceId) { Position position = new Position(); position.setDeviceId(deviceId); - StringBuilder extendedInfo = new StringBuilder("<protocol>mta6can</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("mta6"); short flags = buf.readUnsignedByte(); @@ -246,56 +237,46 @@ public class Mta6ProtocolDecoder extends BaseProtocolDecoder { position.setAltitude((double) buf.readUnsignedShort()); position.setSpeed((double) buf.readUnsignedByte()); position.setCourse((double) buf.readByte()); - extendedInfo.append("<milage>"); - extendedInfo.append(new FloatReader().readFloat(buf)); - extendedInfo.append("</milage>"); + extendedInfo.set("milage", new FloatReader().readFloat(buf)); } if (checkBit(flags, 1)) { new FloatReader().readFloat(buf); // fuel consumtion - extendedInfo.append("<hours>").append(new FloatReader().readFloat(buf)).append("</hours>"); - extendedInfo.append("<tank>").append(buf.readUnsignedByte() * 0.4).append("</tank>"); + extendedInfo.set("hours", new FloatReader().readFloat(buf)); + extendedInfo.set("tank", buf.readUnsignedByte() * 0.4); } if (checkBit(flags, 2)) { - extendedInfo.append("<engine>").append(buf.readUnsignedShort() * 0.125).append("</engine>"); - extendedInfo.append("<pedals>").append(buf.readUnsignedByte()).append("</pedals>"); - extendedInfo.append("<temperature>").append(buf.readUnsignedByte() - 40).append("</temperature>"); + extendedInfo.set("engine", buf.readUnsignedShort() * 0.125); + extendedInfo.set("pedals", buf.readUnsignedByte()); + extendedInfo.set("temperature", buf.readUnsignedByte() - 40); buf.readUnsignedShort(); // service milage } if (checkBit(flags, 3)) { - extendedInfo.append("<fuel>").append(buf.readUnsignedShort()).append("</fuel>"); - extendedInfo.append("<adc2>").append(buf.readUnsignedShort()).append("</adc2>"); - extendedInfo.append("<adc3>").append(buf.readUnsignedShort()).append("</adc3>"); - extendedInfo.append("<adc4>").append(buf.readUnsignedShort()).append("</adc4>"); + extendedInfo.set("fuel", buf.readUnsignedShort()); + extendedInfo.set("adc2", buf.readUnsignedShort()); + extendedInfo.set("adc3", buf.readUnsignedShort()); + extendedInfo.set("adc4", buf.readUnsignedShort()); } if (checkBit(flags, 4)) { - extendedInfo.append("<temperature>"); - extendedInfo.append(buf.readByte()); - extendedInfo.append("</temperature>"); + extendedInfo.set("temperature", buf.readByte()); buf.getUnsignedByte(buf.readerIndex()); // control (>> 4) - extendedInfo.append("<sensor>"); - extendedInfo.append(buf.readUnsignedShort() & 0x0fff); - extendedInfo.append("</sensor>"); + extendedInfo.set("sensor", buf.readUnsignedShort() & 0x0fff); buf.readUnsignedShort(); // old sensor state (& 0x0fff) } if (checkBit(flags, 5)) { - extendedInfo.append("<battery>"); - extendedInfo.append(buf.getUnsignedByte(buf.readerIndex()) >> 2); - extendedInfo.append("</battery>"); + extendedInfo.set("battery", buf.getUnsignedByte(buf.readerIndex()) >> 2); position.setPower((double) (buf.readUnsignedShort() & 0x03ff)); buf.readByte(); // microcontroller temperature - extendedInfo.append("<gsm>"); - extendedInfo.append(buf.getUnsignedByte(buf.readerIndex()) >> 5); - extendedInfo.append("</gsm>"); + extendedInfo.set("gsm", buf.getUnsignedByte(buf.readerIndex()) >> 5); int satellites = buf.readUnsignedByte() & 0x1f; position.setValid(satellites >= 3); - extendedInfo.append("<satellites>").append(satellites).append("</satellites>"); + extendedInfo.set("satellites", satellites); } // TODO: process other data diff --git a/src/org/traccar/protocol/NavigilProtocolDecoder.java b/src/org/traccar/protocol/NavigilProtocolDecoder.java index 58ea6e577..34642496a 100644 --- a/src/org/traccar/protocol/NavigilProtocolDecoder.java +++ b/src/org/traccar/protocol/NavigilProtocolDecoder.java @@ -25,6 +25,7 @@ import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Crc; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class NavigilProtocolDecoder extends BaseProtocolDecoder { @@ -79,7 +80,7 @@ public class NavigilProtocolDecoder extends BaseProtocolDecoder { private Position parseUnitReport(ChannelBuffer buf, long deviceId, int sequenceNumber) { Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>navigil</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("navigil"); position.setValid(true); position.setId((long) sequenceNumber); @@ -116,7 +117,7 @@ public class NavigilProtocolDecoder extends BaseProtocolDecoder { private Position parseTg2Report(ChannelBuffer buf, long deviceId, int sequenceNumber) { Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>navigil</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("navigil"); position.setValid(true); position.setId((long) sequenceNumber); @@ -155,7 +156,7 @@ public class NavigilProtocolDecoder extends BaseProtocolDecoder { private Position parsePositionReport(ChannelBuffer buf, long deviceId, int sequenceNumber, long timestamp) { Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>navigil</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("navigil"); position.setId((long) sequenceNumber); position.setDeviceId(deviceId); @@ -179,7 +180,7 @@ public class NavigilProtocolDecoder extends BaseProtocolDecoder { private Position parsePositionReport2(ChannelBuffer buf, long deviceId, int sequenceNumber, long timestamp) { Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>navigil</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("navigil"); position.setId((long) sequenceNumber); position.setDeviceId(deviceId); @@ -206,7 +207,7 @@ public class NavigilProtocolDecoder extends BaseProtocolDecoder { private Position parseSnapshot4(ChannelBuffer buf, long deviceId, int sequenceNumber) { Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>navigil</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("navigil"); position.setId((long) sequenceNumber); position.setDeviceId(deviceId); @@ -247,7 +248,7 @@ public class NavigilProtocolDecoder extends BaseProtocolDecoder { private Position parseTrackingData(ChannelBuffer buf, long deviceId, int sequenceNumber, long timestamp) { Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>navigil</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("navigil"); position.setId((long) sequenceNumber); position.setDeviceId(deviceId); diff --git a/src/org/traccar/protocol/NavisProtocolDecoder.java b/src/org/traccar/protocol/NavisProtocolDecoder.java index 1c384969d..9de70595a 100644 --- a/src/org/traccar/protocol/NavisProtocolDecoder.java +++ b/src/org/traccar/protocol/NavisProtocolDecoder.java @@ -28,11 +28,9 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; -/** - * Navis protocol decoder - */ public class NavisProtocolDecoder extends BaseProtocolDecoder { private String prefix; @@ -43,9 +41,6 @@ public class NavisProtocolDecoder extends BaseProtocolDecoder { private String imei; private Long databaseDeviceId; - /** - * Initialize - */ public NavisProtocolDecoder(ServerManager serverManager) { super(serverManager); } @@ -70,7 +65,7 @@ public class NavisProtocolDecoder extends BaseProtocolDecoder { private Position parsePosition(ChannelBuffer buf) { Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>navis</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("navis"); position.setDeviceId(databaseDeviceId); position.setAltitude(0.0); @@ -82,16 +77,12 @@ public class NavisProtocolDecoder extends BaseProtocolDecoder { } else { format = buf.readUnsignedByte(); } - extendedInfo.append("<format>"); - extendedInfo.append(format); - extendedInfo.append("</format>"); + extendedInfo.set("format", format); position.setId(buf.readUnsignedInt()); // sequence number // Event type - extendedInfo.append("<event>"); - extendedInfo.append(buf.readUnsignedShort()); - extendedInfo.append("</event>"); + extendedInfo.set("event", buf.readUnsignedShort()); // Event time Calendar time = Calendar.getInstance(TimeZone.getTimeZone("UTC")); @@ -102,67 +93,44 @@ public class NavisProtocolDecoder extends BaseProtocolDecoder { time.set(Calendar.DAY_OF_MONTH, buf.readUnsignedByte()); time.set(Calendar.MONTH, buf.readUnsignedByte()); time.set(Calendar.YEAR, 2000 + buf.readUnsignedByte()); - extendedInfo.append("<time>"); - extendedInfo.append(time.getTimeInMillis()); - extendedInfo.append("</time>"); + extendedInfo.set("time", time.getTimeInMillis()); // Alarm status - extendedInfo.append("<alarm>"); - extendedInfo.append(buf.readUnsignedByte()); - extendedInfo.append("</alarm>"); + extendedInfo.set("alarm", buf.readUnsignedByte()); // Modules status - extendedInfo.append("<status>"); - extendedInfo.append(buf.readUnsignedByte()); - extendedInfo.append("</status>"); + extendedInfo.set("status", buf.readUnsignedByte()); // GSM signal - extendedInfo.append("<gsm>"); - extendedInfo.append(buf.readUnsignedByte()); - extendedInfo.append("</gsm>"); + extendedInfo.set("gsm", buf.readUnsignedByte()); // Output - extendedInfo.append("<output>"); if (isFormat(format, F10, F20, F30)) { - extendedInfo.append(buf.readUnsignedShort()); + extendedInfo.set("output", buf.readUnsignedShort()); } else if (isFormat(format, F40, F50, F51, F52)) { - extendedInfo.append(buf.readUnsignedByte()); + extendedInfo.set("output", buf.readUnsignedByte()); } - extendedInfo.append("</output>"); // Input - extendedInfo.append("<input>"); if (isFormat(format, F10, F20, F30, F40)) { - extendedInfo.append(buf.readUnsignedShort()); + extendedInfo.set("input", buf.readUnsignedShort()); } else if (isFormat(format, F50, F51, F52)) { - extendedInfo.append(buf.readUnsignedByte()); + extendedInfo.set("input", buf.readUnsignedByte()); } - extendedInfo.append("</input>"); position.setPower(buf.readUnsignedShort() / 1000.0); // power // Battery power - extendedInfo.append("<battery>"); - extendedInfo.append(buf.readUnsignedShort()); - extendedInfo.append("</battery>"); + extendedInfo.set("battery", buf.readUnsignedShort()); // Temperature if (isFormat(format, F10, F20, F30)) { - extendedInfo.append("<temperature>"); - extendedInfo.append(buf.readShort()); - extendedInfo.append("</temperature>"); + extendedInfo.set("temperature", buf.readShort()); } if (isFormat(format, F10, F20, F50, F52)) { - // ADC 1 - extendedInfo.append("<adc1>"); - extendedInfo.append(buf.readUnsignedShort()); - extendedInfo.append("</adc1>"); - - // ADC 2 - extendedInfo.append("<adc2>"); - extendedInfo.append(buf.readUnsignedShort()); - extendedInfo.append("</adc2>"); + extendedInfo.set("adc1", buf.readUnsignedShort()); + extendedInfo.set("adc2", buf.readUnsignedShort()); } if (isFormat(format, F20, F50, F51, F52)) { @@ -193,14 +161,10 @@ public class NavisProtocolDecoder extends BaseProtocolDecoder { position.setCourse((double) buf.readUnsignedShort()); // Milage - extendedInfo.append("<milage>"); - extendedInfo.append(buf.readFloat()); - extendedInfo.append("</milage>"); + extendedInfo.set("milage", buf.readFloat()); // Last segment - extendedInfo.append("<segment>"); - extendedInfo.append(buf.readFloat()); - extendedInfo.append("</segment>"); + extendedInfo.set("segment", buf.readFloat()); // Segment times buf.readUnsignedShort(); @@ -308,9 +272,7 @@ public class NavisProtocolDecoder extends BaseProtocolDecoder { } } - /** - * Decode message - */ + @Override protected Object decode( ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception { diff --git a/src/org/traccar/protocol/ProgressProtocolDecoder.java b/src/org/traccar/protocol/ProgressProtocolDecoder.java index 312886591..87fc0ae44 100644 --- a/src/org/traccar/protocol/ProgressProtocolDecoder.java +++ b/src/org/traccar/protocol/ProgressProtocolDecoder.java @@ -32,6 +32,7 @@ import org.traccar.ServerManager; import org.traccar.helper.AdvancedConnection; import org.traccar.helper.Log; import org.traccar.helper.NamedParameterStatement; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; /** @@ -139,15 +140,15 @@ public class ProgressProtocolDecoder extends BaseProtocolDecoder { for (int j = 0; j < recordCount; j++) { Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>progress</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("progress"); position.setDeviceId(deviceId); // Message index if (type == MSG_LOGMSG) { - extendedInfo.append("<archive>true</archive>"); + extendedInfo.set("archive", true); int subtype = buf.readUnsignedShort(); if (subtype == MSG_ALARM) { - extendedInfo.append("<alarm>true</alarm>"); + extendedInfo.set("alarm", true); } if (buf.readUnsignedShort() > buf.readableBytes()) { lastIndex += 1; @@ -182,22 +183,16 @@ public class ProgressProtocolDecoder extends BaseProtocolDecoder { // Satellites int satellitesNumber = buf.readUnsignedByte(); - extendedInfo.append("<satellites>"); - extendedInfo.append(satellitesNumber); - extendedInfo.append("</satellites>"); + extendedInfo.set("satellites", satellitesNumber); // Validity position.setValid(satellitesNumber >= 3); // TODO: probably wrong // Cell signal - extendedInfo.append("<gsm>"); - extendedInfo.append(buf.readUnsignedByte()); - extendedInfo.append("</gsm>"); + extendedInfo.set("gsm", buf.readUnsignedByte()); // Milage - extendedInfo.append("<milage>"); - extendedInfo.append(buf.readUnsignedInt()); - extendedInfo.append("</milage>"); + extendedInfo.set("milage", buf.readUnsignedInt()); long extraFlags = buf.readLong(); @@ -205,9 +200,7 @@ public class ProgressProtocolDecoder extends BaseProtocolDecoder { if ((extraFlags & 0x1) == 0x1) { int count = buf.readUnsignedShort(); for (int i = 1; i <= count; i++) { - extendedInfo.append("<adc").append(i).append(">"); - extendedInfo.append(buf.readUnsignedShort()); - extendedInfo.append("</adc").append(i).append(">"); + extendedInfo.set("adc" + i, buf.readUnsignedShort()); } } @@ -215,9 +208,7 @@ public class ProgressProtocolDecoder extends BaseProtocolDecoder { // CAN adapter if ((extraFlags & 0x2) == 0x2) { int size = buf.readUnsignedShort(); - extendedInfo.append("<can>"); - extendedInfo.append(buf.toString(buf.readerIndex(), size, Charset.defaultCharset())); - extendedInfo.append("</can>"); + extendedInfo.set("can", buf.toString(buf.readerIndex(), size, Charset.defaultCharset())); buf.skipBytes(size); } @@ -233,9 +224,7 @@ public class ProgressProtocolDecoder extends BaseProtocolDecoder { hex.append(HEX_CHARS.charAt((b & 0x0F))); } - extendedInfo.append("<passenger>"); - extendedInfo.append(hex); - extendedInfo.append("</passenger>"); + extendedInfo.set("passenger", hex); buf.skipBytes(size); } @@ -245,7 +234,7 @@ public class ProgressProtocolDecoder extends BaseProtocolDecoder { byte[] response = {(byte)0xC9,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; channel.write(ChannelBuffers.wrappedBuffer(response)); - extendedInfo.append("<alarm>true</alarm>"); + extendedInfo.set("alarm", true); } // Skip CRC diff --git a/src/org/traccar/protocol/Pt502ProtocolDecoder.java b/src/org/traccar/protocol/Pt502ProtocolDecoder.java index a00913ae4..1d9a7a058 100644 --- a/src/org/traccar/protocol/Pt502ProtocolDecoder.java +++ b/src/org/traccar/protocol/Pt502ProtocolDecoder.java @@ -25,24 +25,15 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder;
import org.traccar.ServerManager;
import org.traccar.helper.Log;
+import org.traccar.model.ExtendedInfoFormatter;
import org.traccar.model.Position;
-/**
- * PT502 tracker protocol decoder
- */
public class Pt502ProtocolDecoder extends BaseProtocolDecoder {
- /**
- * Initialize
- */
public Pt502ProtocolDecoder(ServerManager serverManager) {
super(serverManager);
}
- /**
- * Regular expressions pattern
- */
- //$POS,6094,205523.000,A,1013.6223,N,06728.4248,W,0.0,99.3,011112,,,A/00000,00000/0/23895000//
static private Pattern pattern = Pattern.compile(
"\\$POS," + // Data Frame start
"(\\d+)," + // Id
@@ -57,9 +48,7 @@ public class Pt502ProtocolDecoder extends BaseProtocolDecoder { "(\\d{2})(\\d{2})(\\d{2})," + // Date
".*");
- /*
- * Decode message
- */
+ @Override
protected Object decode(
ChannelHandlerContext ctx, Channel channel, Object msg)
throws Exception {
@@ -75,7 +64,7 @@ public class Pt502ProtocolDecoder extends BaseProtocolDecoder { // Create new position
Position position = new Position();
- StringBuilder extendedInfo = new StringBuilder("<protocol>pt502</protocol>");
+ ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("pt502");
Integer index = 1;
diff --git a/src/org/traccar/protocol/SkypatrolProtocolDecoder.java b/src/org/traccar/protocol/SkypatrolProtocolDecoder.java index 11f9424aa..fedb411a6 100644 --- a/src/org/traccar/protocol/SkypatrolProtocolDecoder.java +++ b/src/org/traccar/protocol/SkypatrolProtocolDecoder.java @@ -24,6 +24,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; /** @@ -84,13 +85,11 @@ public class SkypatrolProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>skypatrol</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("skypatrol"); // Status code if (checkBit(mask, 1)) { - extendedInfo.append("<status>"); - extendedInfo.append(buf.readUnsignedInt()); - extendedInfo.append("</status>"); + extendedInfo.set("status", buf.readUnsignedInt()); } // Device id @@ -183,9 +182,7 @@ public class SkypatrolProtocolDecoder extends BaseProtocolDecoder { // Satellites if (checkBit(mask, 16)) { - extendedInfo.append("<satellites>"); - extendedInfo.append(buf.readUnsignedByte()); - extendedInfo.append("</satellites>"); + extendedInfo.set("satellites", buf.readUnsignedByte()); } // Battery percentage @@ -195,16 +192,12 @@ public class SkypatrolProtocolDecoder extends BaseProtocolDecoder { // Trip milage if (checkBit(mask, 20)) { - extendedInfo.append("<trip>"); - extendedInfo.append(buf.readUnsignedInt()); - extendedInfo.append("</trip>"); + extendedInfo.set("trip", buf.readUnsignedInt()); } // Milage if (checkBit(mask, 21)) { - extendedInfo.append("<milage>"); - extendedInfo.append(buf.readUnsignedInt()); - extendedInfo.append("</milage>"); + extendedInfo.set("milage", buf.readUnsignedInt()); } // Time of message generation diff --git a/src/org/traccar/protocol/St210ProtocolDecoder.java b/src/org/traccar/protocol/St210ProtocolDecoder.java index bea7d1ad6..5e1ac1bf6 100644 --- a/src/org/traccar/protocol/St210ProtocolDecoder.java +++ b/src/org/traccar/protocol/St210ProtocolDecoder.java @@ -12,6 +12,7 @@ import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; import org.traccar.model.DataManager; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class St210ProtocolDecoder extends BaseProtocolDecoder { @@ -645,7 +646,7 @@ public class St210ProtocolDecoder extends BaseProtocolDecoder { Position position = new Position(); position.setAltitude(0D); - position.setExtendedInfo(""); + position.setExtendedInfo(new ExtendedInfoFormatter("st210").toString()); position.setValid(true); Integer index = 0; diff --git a/src/org/traccar/protocol/SyrusProtocolDecoder.java b/src/org/traccar/protocol/SyrusProtocolDecoder.java index 7e809212a..66d6872e4 100644 --- a/src/org/traccar/protocol/SyrusProtocolDecoder.java +++ b/src/org/traccar/protocol/SyrusProtocolDecoder.java @@ -25,6 +25,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class SyrusProtocolDecoder extends BaseProtocolDecoder { @@ -127,7 +128,7 @@ public class SyrusProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>syrus</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("syrus"); position.setDeviceId(deviceId); Integer index = 1; diff --git a/src/org/traccar/protocol/TeltonikaProtocolDecoder.java b/src/org/traccar/protocol/TeltonikaProtocolDecoder.java index 100792cb9..4d9e72588 100644 --- a/src/org/traccar/protocol/TeltonikaProtocolDecoder.java +++ b/src/org/traccar/protocol/TeltonikaProtocolDecoder.java @@ -26,6 +26,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class TeltonikaProtocolDecoder extends BaseProtocolDecoder { @@ -65,32 +66,26 @@ public class TeltonikaProtocolDecoder extends BaseProtocolDecoder { for (int i = 0; i < count; i++) { Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>teltonika</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("teltonika"); position.setDeviceId(deviceId); position.setTime(new Date(buf.readLong())); - - extendedInfo.append("<priority>"); - extendedInfo.append(buf.readUnsignedByte()); - extendedInfo.append("</priority>"); + + extendedInfo.set("priority", buf.readUnsignedByte()); position.setLongitude(buf.readUnsignedInt() / 10000000.0); position.setLatitude(buf.readUnsignedInt() / 10000000.0); position.setAltitude((double) buf.readUnsignedShort()); position.setCourse((double) buf.readUnsignedShort()); - extendedInfo.append("<satellites>"); int satellites = buf.readUnsignedByte(); - extendedInfo.append(satellites); - extendedInfo.append("</satellites>"); + extendedInfo.set("satellites", satellites); position.setValid(satellites != 0); position.setSpeed((double) buf.readUnsignedShort()); - - extendedInfo.append("<event>"); - extendedInfo.append(buf.readUnsignedByte()); - extendedInfo.append("</event>"); + + extendedInfo.set("event", buf.readUnsignedByte()); // Skip IO data buf.readUnsignedByte(); // total IO data records diff --git a/src/org/traccar/protocol/Tk102ProtocolDecoder.java b/src/org/traccar/protocol/Tk102ProtocolDecoder.java index f30acd486..fd760e795 100644 --- a/src/org/traccar/protocol/Tk102ProtocolDecoder.java +++ b/src/org/traccar/protocol/Tk102ProtocolDecoder.java @@ -24,6 +24,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class Tk102ProtocolDecoder extends BaseProtocolDecoder { @@ -74,7 +75,7 @@ public class Tk102ProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>tk102</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("tk102"); position.setDeviceId(deviceId); Integer index = 1; diff --git a/src/org/traccar/protocol/Tk103ProtocolDecoder.java b/src/org/traccar/protocol/Tk103ProtocolDecoder.java index 6f58b17d2..92febe756 100644 --- a/src/org/traccar/protocol/Tk103ProtocolDecoder.java +++ b/src/org/traccar/protocol/Tk103ProtocolDecoder.java @@ -24,6 +24,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class Tk103ProtocolDecoder extends BaseProtocolDecoder { @@ -32,9 +33,6 @@ public class Tk103ProtocolDecoder extends BaseProtocolDecoder { super(serverManager); } - /** - * Regular expressions pattern - */ static private Pattern pattern = Pattern.compile( "(\\d{12})" + // Device ID ".{4}" + // Command @@ -75,7 +73,7 @@ public class Tk103ProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>tk103</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("tk103"); Integer index = 1; // Get device by IMEI @@ -130,14 +128,10 @@ public class Tk103ProtocolDecoder extends BaseProtocolDecoder { position.setCourse(Double.valueOf(parser.group(index++))); // State - extendedInfo.append("<state>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</state>"); + extendedInfo.set("state", parser.group(index++)); // Milage - extendedInfo.append("<milage>"); - extendedInfo.append(Integer.parseInt(parser.group(index++), 16)); - extendedInfo.append("</milage>"); + extendedInfo.set("milage", Integer.parseInt(parser.group(index++), 16)); position.setExtendedInfo(extendedInfo.toString()); return position; diff --git a/src/org/traccar/protocol/Tlt2hProtocolDecoder.java b/src/org/traccar/protocol/Tlt2hProtocolDecoder.java index 66146b6fb..e38b3ab7b 100644 --- a/src/org/traccar/protocol/Tlt2hProtocolDecoder.java +++ b/src/org/traccar/protocol/Tlt2hProtocolDecoder.java @@ -26,6 +26,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class Tlt2hProtocolDecoder extends BaseProtocolDecoder { @@ -34,9 +35,6 @@ public class Tlt2hProtocolDecoder extends BaseProtocolDecoder { super(serverManager); } - /** - * Regular expressions pattern - */ static private Pattern pattern = Pattern.compile( "#([0-9a-f]+)?" + // Cell info "\\$GPRMC," + @@ -75,16 +73,13 @@ public class Tlt2hProtocolDecoder extends BaseProtocolDecoder { Matcher parser = pattern.matcher(message); if (parser.matches()) { Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>tlt2h</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("tlt2h"); position.setDeviceId(deviceId); Integer index = 1; // Cell - String cell = parser.group(index++); - if (cell != null) { - extendedInfo.append("<cell>").append(cell).append("</cell>"); - } + extendedInfo.set("cell", parser.group(index++)); // Time Calendar time = Calendar.getInstance(TimeZone.getTimeZone("UTC")); diff --git a/src/org/traccar/protocol/Tr20ProtocolDecoder.java b/src/org/traccar/protocol/Tr20ProtocolDecoder.java index 95935cd29..5b48566b7 100644 --- a/src/org/traccar/protocol/Tr20ProtocolDecoder.java +++ b/src/org/traccar/protocol/Tr20ProtocolDecoder.java @@ -24,16 +24,11 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; -/** - * TR20 tracker protocol decoder - */ public class Tr20ProtocolDecoder extends BaseProtocolDecoder { - /** - * Initialize - */ public Tr20ProtocolDecoder(ServerManager serverManager) { super(serverManager); } @@ -41,8 +36,6 @@ public class Tr20ProtocolDecoder extends BaseProtocolDecoder { static private Pattern patternPing = Pattern.compile( "\\%\\%[^,]+,(\\d+)"); - //%%TR-10,A,050916070549,N2240.8887E11359.2994,0,000,NA,D3800000,150,CFG:resend| - //%%123456789012345,A,120101121800,N6000.0000E13000.0000,0,000,0,01034802,150,[Message] static private Pattern patternData = Pattern.compile( "\\%\\%" + "([^,]+)," + // Id @@ -57,9 +50,7 @@ public class Tr20ProtocolDecoder extends BaseProtocolDecoder { "(\\d+)," + // Course ".*"); - /** - * Decode message - */ + @Override protected Object decode( ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception { @@ -86,7 +77,7 @@ public class Tr20ProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>tr20</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("tr20"); Integer index = 1; diff --git a/src/org/traccar/protocol/V680ProtocolDecoder.java b/src/org/traccar/protocol/V680ProtocolDecoder.java index 40549857a..205036ebb 100644 --- a/src/org/traccar/protocol/V680ProtocolDecoder.java +++ b/src/org/traccar/protocol/V680ProtocolDecoder.java @@ -24,6 +24,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class V680ProtocolDecoder extends BaseProtocolDecoder { @@ -67,7 +68,7 @@ public class V680ProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>V680</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("v680"); Integer index = 1; // Get device by IMEI @@ -80,27 +81,19 @@ public class V680ProtocolDecoder extends BaseProtocolDecoder { } // User - extendedInfo.append("<user>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</user>"); + extendedInfo.set("user", parser.group(index++)); // Validity position.setValid(parser.group(index++).compareTo("1") == 0 ? true : false); // Password - extendedInfo.append("<password>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</password>"); + extendedInfo.set("password", parser.group(index++)); // Packet number - extendedInfo.append("<packet>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</packet>"); + extendedInfo.set("packet", parser.group(index++)); // GSM base station - extendedInfo.append("<gsm>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</gsm>"); + extendedInfo.set("gsm", parser.group(index++)); // Longitude Double lonlitude = Double.valueOf(parser.group(index++)); diff --git a/src/org/traccar/protocol/WialonProtocolDecoder.java b/src/org/traccar/protocol/WialonProtocolDecoder.java index c3ea94624..cb89693f7 100644 --- a/src/org/traccar/protocol/WialonProtocolDecoder.java +++ b/src/org/traccar/protocol/WialonProtocolDecoder.java @@ -24,6 +24,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class WialonProtocolDecoder extends BaseProtocolDecoder { @@ -93,7 +94,7 @@ public class WialonProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>wialon</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("wialon"); position.setDeviceId(deviceId); Integer index = 1; @@ -133,9 +134,7 @@ public class WialonProtocolDecoder extends BaseProtocolDecoder { // Satellites int satellites = Integer.valueOf(parser.group(index++)); position.setValid(satellites >= 3); - extendedInfo.append("<satellites>"); - extendedInfo.append(satellites); - extendedInfo.append("</satellites>"); + extendedInfo.set("satellites", satellites); // Extended info position.setExtendedInfo(extendedInfo.toString()); diff --git a/src/org/traccar/protocol/WondexProtocolDecoder.java b/src/org/traccar/protocol/WondexProtocolDecoder.java index ebae99bb4..65fb3526d 100644 --- a/src/org/traccar/protocol/WondexProtocolDecoder.java +++ b/src/org/traccar/protocol/WondexProtocolDecoder.java @@ -24,6 +24,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class WondexProtocolDecoder extends BaseProtocolDecoder { @@ -32,9 +33,6 @@ public class WondexProtocolDecoder extends BaseProtocolDecoder { super(serverManager); } - /** - * Regular expressions pattern - */ static private Pattern pattern = Pattern.compile( "[^\\d]*" + // Header "(\\d+)," + // Device Identifier @@ -66,7 +64,7 @@ public class WondexProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>wondex</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("wondex"); int index = 1; // Device identifier @@ -99,40 +97,23 @@ public class WondexProtocolDecoder extends BaseProtocolDecoder { // Satellites int satellites = Integer.valueOf(parser.group(index++)); position.setValid(satellites >= 3); - extendedInfo.append("<satellites>").append(satellites).append("</satellites>"); + extendedInfo.set("satellites", satellites); // Event - extendedInfo.append("<event>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</event>"); + extendedInfo.set("event", parser.group(index++)); // Milage - String milage = parser.group(index++); - if (milage != null) { - extendedInfo.append("<milage>").append(milage).append("</milage>"); - } + extendedInfo.set("milage", parser.group(index++)); // Input - String input = parser.group(index++); - if (input != null) { - extendedInfo.append("<input>").append(input).append("</input>"); - } + extendedInfo.set("input", parser.group(index++)); // ADC - String adc1 = parser.group(index++); - if (adc1 != null) { - extendedInfo.append("<adc1>").append(adc1).append("</adc1>"); - } - String adc2 = parser.group(index++); - if (adc2 != null) { - extendedInfo.append("<adc2>").append(adc2).append("</adc2>"); - } + extendedInfo.set("adc1", parser.group(index++)); + extendedInfo.set("adc2", parser.group(index++)); // Output - String output = parser.group(index++); - if (output != null) { - extendedInfo.append("<output>").append(output).append("</output>"); - } + extendedInfo.set("output", parser.group(index++)); position.setExtendedInfo(extendedInfo.toString()); return position; diff --git a/src/org/traccar/protocol/Xexun2ProtocolDecoder.java b/src/org/traccar/protocol/Xexun2ProtocolDecoder.java index 6981c8d42..900315d20 100644 --- a/src/org/traccar/protocol/Xexun2ProtocolDecoder.java +++ b/src/org/traccar/protocol/Xexun2ProtocolDecoder.java @@ -24,6 +24,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class Xexun2ProtocolDecoder extends BaseProtocolDecoder { @@ -32,13 +33,10 @@ public class Xexun2ProtocolDecoder extends BaseProtocolDecoder { super(serverManager); } - /** - * Regular expressions pattern - */ static private Pattern pattern = Pattern.compile( "[\r\n]*" + "(\\d+)," + // Serial - "(\\+?\\d+)," + // Number + "(\\+?\\d+)," + // Number "GPRMC," + "(\\d{2})(\\d{2})(\\d{2})\\.(\\d{3})," + // Time (HHMMSS.SSS) "([AV])," + // Validity @@ -55,8 +53,8 @@ public class Xexun2ProtocolDecoder extends BaseProtocolDecoder { ".*imei:" + "(\\d+)," + // IMEI "(\\d+)," + // Satellites - "(-?\\d+\\.\\d+)," + // Altitude - "[FL]:(\\d+\\.\\d+)V," + // Power + "(-?\\d+\\.\\d+)," + // Altitude + "[FL]:(\\d+\\.\\d+)V," + // Power ".*" + "[\r\n]*"); @@ -74,19 +72,15 @@ public class Xexun2ProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>xexun2</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("xexun2"); Integer index = 1; // Serial - extendedInfo.append("<serial>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</serial>"); + extendedInfo.set("serial", parser.group(index++)); // Number - extendedInfo.append("<number>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</number>"); + extendedInfo.set("number", parser.group(index++)); // Time Calendar time = Calendar.getInstance(TimeZone.getTimeZone("UTC")); @@ -129,14 +123,10 @@ public class Xexun2ProtocolDecoder extends BaseProtocolDecoder { position.setTime(time.getTime()); // Signal - extendedInfo.append("<signal>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</signal>"); + extendedInfo.set("signal", parser.group(index++)); // Alarm - extendedInfo.append("<alarm>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</alarm>"); + extendedInfo.set("alarm", parser.group(index++)); // Get device by IMEI String imei = parser.group(index++); @@ -148,9 +138,7 @@ public class Xexun2ProtocolDecoder extends BaseProtocolDecoder { } // Satellites - extendedInfo.append("<satellites>"); - extendedInfo.append(parser.group(index++).replaceFirst ("^0*(?![\\.$])", "")); - extendedInfo.append("</satellites>"); + extendedInfo.set("satellites", parser.group(index++).replaceFirst ("^0*(?![\\.$])", "")); // Altitude position.setAltitude(Double.valueOf(parser.group(index++))); diff --git a/src/org/traccar/protocol/Xt7ProtocolDecoder.java b/src/org/traccar/protocol/Xt7ProtocolDecoder.java index 79f793d8a..a47577c5e 100644 --- a/src/org/traccar/protocol/Xt7ProtocolDecoder.java +++ b/src/org/traccar/protocol/Xt7ProtocolDecoder.java @@ -26,6 +26,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class Xt7ProtocolDecoder extends BaseProtocolDecoder { @@ -66,7 +67,7 @@ public class Xt7ProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>xt7</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("xt7"); // Get device by id String id = buf.readBytes(16).toString(Charset.defaultCharset()).trim(); @@ -130,42 +131,28 @@ public class Xt7ProtocolDecoder extends BaseProtocolDecoder { position.setTime(time.getTime()); // IMSI - extendedInfo.append("<imsi>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</imsi>"); + extendedInfo.set("imsi", parser.group(index++)); // Cell - extendedInfo.append("<cell>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</cell>"); + extendedInfo.set("cell", parser.group(index++)); // GSM signal quality - extendedInfo.append("<gsm>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</gsm>"); + extendedInfo.set("gsm", parser.group(index++)); // Battery position.setPower(Double.valueOf(parser.group(index++))); // Flags - extendedInfo.append("<flags>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</flags>"); + extendedInfo.set("flags", parser.group(index++)); // Sensors - extendedInfo.append("<sensors>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</sensors>"); + extendedInfo.set("sensors", parser.group(index++)); // Fuel - extendedInfo.append("<fuel>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</fuel>"); + extendedInfo.set("fuel", parser.group(index++)); // Alarm - extendedInfo.append("<alarm>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</alarm>"); + extendedInfo.set("alarm", parser.group(index++)); // Extended info position.setExtendedInfo(extendedInfo.toString()); diff --git a/src/org/traccar/protocol/YwtProtocolDecoder.java b/src/org/traccar/protocol/YwtProtocolDecoder.java index c28c7b7d7..c93545f50 100644 --- a/src/org/traccar/protocol/YwtProtocolDecoder.java +++ b/src/org/traccar/protocol/YwtProtocolDecoder.java @@ -24,6 +24,7 @@ import org.jboss.netty.channel.ChannelHandlerContext; import org.traccar.BaseProtocolDecoder; import org.traccar.ServerManager; import org.traccar.helper.Log; +import org.traccar.model.ExtendedInfoFormatter; import org.traccar.model.Position; public class YwtProtocolDecoder extends BaseProtocolDecoder { @@ -32,10 +33,6 @@ public class YwtProtocolDecoder extends BaseProtocolDecoder { super(serverManager); } - /** - * Regular expressions pattern - */ - //%GP,3000012345:0,090723182813,E114.602345,N22.069725,,30,160,4,0,00,,2794-10FF-46000,3>0-0 static private Pattern pattern = Pattern.compile( "%(..)," + // Type "(\\d+):" + // Unit identifier @@ -69,7 +66,7 @@ public class YwtProtocolDecoder extends BaseProtocolDecoder { // Create new position Position position = new Position(); - StringBuilder extendedInfo = new StringBuilder("<protocol>ywt</protocol>"); + ExtendedInfoFormatter extendedInfo = new ExtendedInfoFormatter("ywt"); Integer index = 1; String type = parser.group(index++); @@ -122,15 +119,13 @@ public class YwtProtocolDecoder extends BaseProtocolDecoder { // Satellites int satellites = Integer.valueOf(parser.group(index++)); position.setValid(satellites >= 3); - extendedInfo.append("<satellites>").append(satellites).append("</satellites>"); + extendedInfo.set("satellites", satellites); // Report identifier String reportId = parser.group(index++); // Status - extendedInfo.append("<status>"); - extendedInfo.append(parser.group(index++)); - extendedInfo.append("</status>"); + extendedInfo.set("status", parser.group(index++)); // Send response if (type.equals("KP") || type.equals("EP") || type.equals("EP")) { diff --git a/test/org/traccar/protocol/IntellitracProtocolDecoderTest.java b/test/org/traccar/protocol/IntellitracProtocolDecoderTest.java index 098c9415e..22f4f8463 100644 --- a/test/org/traccar/protocol/IntellitracProtocolDecoderTest.java +++ b/test/org/traccar/protocol/IntellitracProtocolDecoderTest.java @@ -43,6 +43,9 @@ public class IntellitracProtocolDecoderTest { assertNotNull(decoder.decode(null, null, "1010000001,20030105092129,121.651598,25.052325,0,0,33,0,1,0,0")); + + assertNotNull(decoder.decode(null, null, + "1010000001,20030105092129,-121.651598,-25.052325,0,0,33,0,1,0,0")); } |