aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/traccar/protocol/Tk103ProtocolEncoder.java45
-rw-r--r--src/org/traccar/protocol/Tk103ProtocolEncoderAlternative.java70
-rw-r--r--test/org/traccar/TestIdentityManager.java33
-rw-r--r--test/org/traccar/protocol/Tk103ProtocolEncoderTest.java149
4 files changed, 171 insertions, 126 deletions
diff --git a/src/org/traccar/protocol/Tk103ProtocolEncoder.java b/src/org/traccar/protocol/Tk103ProtocolEncoder.java
index 26b966d48..03b12b296 100644
--- a/src/org/traccar/protocol/Tk103ProtocolEncoder.java
+++ b/src/org/traccar/protocol/Tk103ProtocolEncoder.java
@@ -26,55 +26,30 @@ public class Tk103ProtocolEncoder extends StringProtocolEncoder {
@Override
protected Object encodeCommand(Command command) {
- boolean alternative = Context.getIdentityManager().lookupAttributeBoolean(
- command.getDeviceId(), "tk103.alternative", false, true);
-
- initDevicePassword(command, "123456");
+ if (Context.getIdentityManager().lookupAttributeBoolean(
+ command.getDeviceId(), "tk103.alternative", false, true)) {
+ Tk103ProtocolEncoderAlternative alternative = new Tk103ProtocolEncoderAlternative();
+ return alternative.encodeCommand(command);
+ }
switch (command.getType()) {
case Command.TYPE_GET_VERSION:
- return alternative ? formatCommand(command, "[begin]sms2,*about*,[end]")
- : formatCommand(command, "({%s}AP07)", Command.KEY_UNIQUE_ID);
+ return formatCommand(command, "({%s}AP07)", Command.KEY_UNIQUE_ID);
case Command.TYPE_REBOOT_DEVICE:
- return alternative ? formatCommand(command, "[begin]sms2,88888888,[end]")
- : formatCommand(command, "({%s}AT00)", Command.KEY_UNIQUE_ID);
+ return formatCommand(command, "({%s}AT00)", Command.KEY_UNIQUE_ID);
case Command.TYPE_SET_ODOMETER:
return formatCommand(command, "({%s}AX01)", Command.KEY_UNIQUE_ID);
case Command.TYPE_POSITION_SINGLE:
- return alternative ? formatCommand(command, "[begin]sms2,*getposl*,[end]")
- : formatCommand(command, "({%s}AP00)", Command.KEY_UNIQUE_ID);
+ return formatCommand(command, "({%s}AP00)", Command.KEY_UNIQUE_ID);
case Command.TYPE_POSITION_PERIODIC:
- return alternative ? formatCommand(command, "[begin]sms2,*routetrack*99*,[end]")
- : formatCommand(command, "({%s}AR00%s0000)", Command.KEY_UNIQUE_ID,
+ return formatCommand(command, "({%s}AR00%s0000)", Command.KEY_UNIQUE_ID,
String.format("%04X", command.getInteger(Command.KEY_FREQUENCY)));
case Command.TYPE_POSITION_STOP:
- return alternative ? formatCommand(command, "[begin]sms2,*routetrackoff*,[end]")
- : formatCommand(command, "({%s}AR0000000000)", Command.KEY_UNIQUE_ID);
+ return formatCommand(command, "({%s}AR0000000000)", Command.KEY_UNIQUE_ID);
case Command.TYPE_ENGINE_STOP:
return formatCommand(command, "({%s}AV011)", Command.KEY_UNIQUE_ID);
case Command.TYPE_ENGINE_RESUME:
return formatCommand(command, "({%s}AV010)", Command.KEY_UNIQUE_ID);
- case Command.TYPE_CUSTOM:
- return formatCommand(command, "[begin]sms2,{%s},[end]", Command.KEY_DATA);
- case Command.TYPE_GET_DEVICE_STATUS:
- return formatCommand(command, "[begin]sms2,*status*,[end]");
- case Command.TYPE_IDENTIFICATION:
- return formatCommand(command, "[begin]sms2,999999,[end]");
- case Command.TYPE_MODE_DEEP_SLEEP:
- return formatCommand(command, command.getBoolean(Command.KEY_ENABLE)
- ? "[begin]sms2,*sleep*2*,[end]" : "[begin]sms2,*sleepoff*,[end]");
- case Command.TYPE_MODE_POWER_SAVING:
- return formatCommand(command, command.getBoolean(Command.KEY_ENABLE)
- ? "[begin]sms2,*sleepv*,[end]" : "[begin]sms2,*sleepoff*,[end]");
- case Command.TYPE_ALARM_SOS:
- return formatCommand(command, command.getBoolean(Command.KEY_ENABLE)
- ? "[begin]sms2,*soson*,[end]" : "[begin]sms2,*sosoff*,[end]");
- case Command.TYPE_SET_CONNECTION:
- return formatCommand(command, "[begin]sms2,*setip*%s*{%s}*,[end]",
- command.getString(Command.KEY_SERVER).replace(".", "*"), Command.KEY_PORT);
- case Command.TYPE_SOS_NUMBER:
- return formatCommand(command, "[begin]sms2,*master*{%s}*{%s}*,[end]",
- Command.KEY_DEVICE_PASSWORD, Command.KEY_PHONE);
default:
Log.warning(new UnsupportedOperationException(command.getType()));
break;
diff --git a/src/org/traccar/protocol/Tk103ProtocolEncoderAlternative.java b/src/org/traccar/protocol/Tk103ProtocolEncoderAlternative.java
new file mode 100644
index 000000000..68398ae84
--- /dev/null
+++ b/src/org/traccar/protocol/Tk103ProtocolEncoderAlternative.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2017 Valerii Vyshniak (val@val.one)
+ * Copyright 2017 Anton Tananaev (anton@traccar.org)
+ *
+ * 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.protocol;
+
+import org.traccar.StringProtocolEncoder;
+import org.traccar.helper.Log;
+import org.traccar.model.Command;
+
+public class Tk103ProtocolEncoderAlternative extends StringProtocolEncoder {
+
+ @Override
+ protected Object encodeCommand(Command command) {
+
+ initDevicePassword(command, "123456");
+
+ switch (command.getType()) {
+ case Command.TYPE_CUSTOM:
+ return formatCommand(command, "[begin]sms2,{%s},[end]", Command.KEY_DATA);
+ case Command.TYPE_GET_VERSION:
+ return formatCommand(command, "[begin]sms2,*about*,[end]");
+ case Command.TYPE_IDENTIFICATION:
+ return formatCommand(command, "[begin]sms2,999999,[end]");
+ case Command.TYPE_GET_DEVICE_STATUS:
+ return formatCommand(command, "[begin]sms2,*status*,[end]");
+ case Command.TYPE_REBOOT_DEVICE:
+ return formatCommand(command, "[begin]sms2,88888888,[end]");
+ case Command.TYPE_POSITION_SINGLE:
+ return formatCommand(command, "[begin]sms2,*getposl*,[end]");
+ case Command.TYPE_POSITION_PERIODIC:
+ return formatCommand(command, "[begin]sms2,*routetrack*99*,[end]");
+ case Command.TYPE_POSITION_STOP:
+ return formatCommand(command, "[begin]sms2,*routetrackoff*,[end]");
+ case Command.TYPE_MODE_DEEP_SLEEP:
+ return formatCommand(command, command.getBoolean(Command.KEY_ENABLE)
+ ? "[begin]sms2,*sleep*2*,[end]" : "[begin]sms2,*sleepoff*,[end]");
+ case Command.TYPE_MODE_POWER_SAVING:
+ return formatCommand(command, command.getBoolean(Command.KEY_ENABLE)
+ ? "[begin]sms2,*sleepv*,[end]" : "[begin]sms2,*sleepoff*,[end]");
+ case Command.TYPE_ALARM_SOS:
+ return formatCommand(command, command.getBoolean(Command.KEY_ENABLE)
+ ? "[begin]sms2,*soson*,[end]" : "[begin]sms2,*sosoff*,[end]");
+ case Command.TYPE_SET_CONNECTION:
+ return formatCommand(command, "[begin]sms2,*setip*%s*{%s}*,[end]",
+ command.getString(Command.KEY_SERVER).replace(".", "*"), Command.KEY_PORT);
+ case Command.TYPE_SOS_NUMBER:
+ return formatCommand(command, "[begin]sms2,*master*{%s}*{%s}*,[end]",
+ Command.KEY_DEVICE_PASSWORD, Command.KEY_PHONE);
+ default:
+ Log.warning(new UnsupportedOperationException(command.getType()));
+ break;
+ }
+
+ return null;
+ }
+
+}
diff --git a/test/org/traccar/TestIdentityManager.java b/test/org/traccar/TestIdentityManager.java
index c613dcb54..f9d95927d 100644
--- a/test/org/traccar/TestIdentityManager.java
+++ b/test/org/traccar/TestIdentityManager.java
@@ -3,41 +3,25 @@ package org.traccar;
import org.traccar.database.IdentityManager;
import org.traccar.model.Device;
import org.traccar.model.Position;
-import java.util.concurrent.ConcurrentHashMap;
-
-import java.util.Map;
public final class TestIdentityManager implements IdentityManager {
- private static Map<Long, Device> devicesById = new ConcurrentHashMap<>();
- private static long newDeviceId = 100;
-
- public TestIdentityManager() {
- }
-
- private static Device createDevice(long id) {
+ private static Device createDevice() {
Device device = new Device();
- device.setId(id);
+ device.setId(1);
device.setName("test");
device.setUniqueId("123456789012345");
return device;
}
- public static Device createTestDevice() {
- Device device = createDevice(newDeviceId);
- devicesById.put(newDeviceId++, device);
- return device;
- }
-
@Override
public Device getById(long id) {
- Device device = devicesById.get(id);
- return device != null ? device : createDevice(1);
+ return createDevice();
}
@Override
public Device getByUniqueId(String uniqueId) {
- return createDevice(1);
+ return createDevice();
}
@Override
@@ -53,26 +37,25 @@ public final class TestIdentityManager implements IdentityManager {
@Override
public boolean lookupAttributeBoolean(
long deviceId, String attributeName, boolean defaultValue, boolean lookupConfig) {
- Device device = devicesById.get(deviceId);
- return device != null ? device.getBoolean(attributeName) : defaultValue;
+ return defaultValue;
}
@Override
public String lookupAttributeString(
long deviceId, String attributeName, String defaultValue, boolean lookupConfig) {
- return "alarm,result";
+ return "alarm,result";
}
@Override
public int lookupAttributeInteger(
long deviceId, String attributeName, int defaultValue, boolean lookupConfig) {
- return defaultValue;
+ return defaultValue;
}
@Override
public long lookupAttributeLong(
long deviceId, String attributeName, long defaultValue, boolean lookupConfig) {
- return defaultValue;
+ return defaultValue;
}
}
diff --git a/test/org/traccar/protocol/Tk103ProtocolEncoderTest.java b/test/org/traccar/protocol/Tk103ProtocolEncoderTest.java
index a58cd9ee1..c521d4d73 100644
--- a/test/org/traccar/protocol/Tk103ProtocolEncoderTest.java
+++ b/test/org/traccar/protocol/Tk103ProtocolEncoderTest.java
@@ -33,12 +33,6 @@ public class Tk103ProtocolEncoderTest extends ProtocolTest {
Assert.assertEquals("(123456789012345AP00)", encoder.encodeCommand(command));
- Device device = TestIdentityManager.createTestDevice();
- device.set("tk103.alternative", true);
- command.setDeviceId(device.getId());
-
- Assert.assertEquals("[begin]sms2,*getposl*,[end]", encoder.encodeCommand(command));
-
}
@Test
@@ -53,12 +47,6 @@ public class Tk103ProtocolEncoderTest extends ProtocolTest {
Assert.assertEquals("(123456789012345AR00003C0000)", encoder.encodeCommand(command));
- Device device = TestIdentityManager.createTestDevice();
- device.set("tk103.alternative", true);
- command.setDeviceId(device.getId());
-
- Assert.assertEquals("[begin]sms2,*routetrack*99*,[end]", encoder.encodeCommand(command));
-
}
@Test
@@ -72,12 +60,6 @@ public class Tk103ProtocolEncoderTest extends ProtocolTest {
Assert.assertEquals("(123456789012345AR0000000000)", encoder.encodeCommand(command));
- Device device = TestIdentityManager.createTestDevice();
- device.set("tk103.alternative", true);
- command.setDeviceId(device.getId());
-
- Assert.assertEquals("[begin]sms2,*routetrackoff*,[end]", encoder.encodeCommand(command));
-
}
@Test
@@ -91,12 +73,6 @@ public class Tk103ProtocolEncoderTest extends ProtocolTest {
Assert.assertEquals("(123456789012345AP07)", encoder.encodeCommand(command));
- Device device = TestIdentityManager.createTestDevice();
- device.set("tk103.alternative", true);
- command.setDeviceId(device.getId());
-
- Assert.assertEquals("[begin]sms2,*about*,[end]", encoder.encodeCommand(command));
-
}
@Test
@@ -110,12 +86,6 @@ public class Tk103ProtocolEncoderTest extends ProtocolTest {
Assert.assertEquals("(123456789012345AT00)", encoder.encodeCommand(command));
- Device device = TestIdentityManager.createTestDevice();
- device.set("tk103.alternative", true);
- command.setDeviceId(device.getId());
-
- Assert.assertEquals("[begin]sms2,88888888,[end]", encoder.encodeCommand(command));
-
}
@Test
@@ -132,15 +102,77 @@ public class Tk103ProtocolEncoderTest extends ProtocolTest {
}
@Test
- public void testEncodeIdentification() throws Exception {
+ public void testEncodePositionSingleAlternative() throws Exception {
- Tk103ProtocolEncoder encoder = new Tk103ProtocolEncoder();
+ Tk103ProtocolEncoderAlternative encoder = new Tk103ProtocolEncoderAlternative();
+
+ Command command = new Command();
+ command.setDeviceId(1);
+ command.setType(Command.TYPE_POSITION_SINGLE);
+
+ Assert.assertEquals("[begin]sms2,*getposl*,[end]", encoder.encodeCommand(command));
+
+ }
+
+ @Test
+ public void testEncodePositionPeriodicAlternative() throws Exception {
+
+ Tk103ProtocolEncoderAlternative encoder = new Tk103ProtocolEncoderAlternative();
+
+ Command command = new Command();
+ command.setDeviceId(1);
+ command.setType(Command.TYPE_POSITION_PERIODIC);
+
+ Assert.assertEquals("[begin]sms2,*routetrack*99*,[end]", encoder.encodeCommand(command));
+
+ }
+
+ @Test
+ public void testEncodePositionStopAlternative() throws Exception {
+
+ Tk103ProtocolEncoderAlternative encoder = new Tk103ProtocolEncoderAlternative();
+
+ Command command = new Command();
+ command.setDeviceId(1);
+ command.setType(Command.TYPE_POSITION_STOP);
+
+ Assert.assertEquals("[begin]sms2,*routetrackoff*,[end]", encoder.encodeCommand(command));
+
+ }
+
+ @Test
+ public void testEncodeGetVersionAlternative() throws Exception {
+
+ Tk103ProtocolEncoderAlternative encoder = new Tk103ProtocolEncoderAlternative();
+
+ Command command = new Command();
+ command.setDeviceId(1);
+ command.setType(Command.TYPE_GET_VERSION);
+
+ Assert.assertEquals("[begin]sms2,*about*,[end]", encoder.encodeCommand(command));
+
+ }
- Device device = TestIdentityManager.createTestDevice();
- device.set("tk103.alternative", true);
+ @Test
+ public void testEncodeRebootDeviceAlternative() throws Exception {
+
+ Tk103ProtocolEncoderAlternative encoder = new Tk103ProtocolEncoderAlternative();
Command command = new Command();
- command.setDeviceId(device.getId());
+ command.setDeviceId(1);
+ command.setType(Command.TYPE_REBOOT_DEVICE);
+
+ Assert.assertEquals("[begin]sms2,88888888,[end]", encoder.encodeCommand(command));
+
+ }
+
+ @Test
+ public void testEncodeIdentificationAlternative() throws Exception {
+
+ Tk103ProtocolEncoderAlternative encoder = new Tk103ProtocolEncoderAlternative();
+
+ Command command = new Command();
+ command.setDeviceId(1);
command.setType(Command.TYPE_IDENTIFICATION);
Assert.assertEquals("[begin]sms2,999999,[end]", encoder.encodeCommand(command));
@@ -148,15 +180,12 @@ public class Tk103ProtocolEncoderTest extends ProtocolTest {
}
@Test
- public void testEncodeSosOn() throws Exception {
+ public void testEncodeSosOnAlternative() throws Exception {
- Tk103ProtocolEncoder encoder = new Tk103ProtocolEncoder();
-
- Device device = TestIdentityManager.createTestDevice();
- device.set("tk103.alternative", true);
+ Tk103ProtocolEncoderAlternative encoder = new Tk103ProtocolEncoderAlternative();
Command command = new Command();
- command.setDeviceId(device.getId());
+ command.setDeviceId(1);
command.setType(Command.TYPE_ALARM_SOS);
command.set(Command.KEY_ENABLE, true);
@@ -165,15 +194,12 @@ public class Tk103ProtocolEncoderTest extends ProtocolTest {
}
@Test
- public void testEncodeSosOff() throws Exception {
-
- Tk103ProtocolEncoder encoder = new Tk103ProtocolEncoder();
+ public void testEncodeSosOffAlternative() throws Exception {
- Device device = TestIdentityManager.createTestDevice();
- device.set("tk103.alternative", true);
+ Tk103ProtocolEncoderAlternative encoder = new Tk103ProtocolEncoderAlternative();
Command command = new Command();
- command.setDeviceId(device.getId());
+ command.setDeviceId(1);
command.setType(Command.TYPE_ALARM_SOS);
command.set(Command.KEY_ENABLE, false);
@@ -182,15 +208,12 @@ public class Tk103ProtocolEncoderTest extends ProtocolTest {
}
@Test
- public void testEncodeCustom() throws Exception {
-
- Tk103ProtocolEncoder encoder = new Tk103ProtocolEncoder();
+ public void testEncodeCustomAlternative() throws Exception {
- Device device = TestIdentityManager.createTestDevice();
- device.set("tk103.alternative", true);
+ Tk103ProtocolEncoderAlternative encoder = new Tk103ProtocolEncoderAlternative();
Command command = new Command();
- command.setDeviceId(device.getId());
+ command.setDeviceId(1);
command.setType(Command.TYPE_CUSTOM);
command.set(Command.KEY_DATA, "any text is ok");
@@ -199,15 +222,12 @@ public class Tk103ProtocolEncoderTest extends ProtocolTest {
}
@Test
- public void testEncodeSetConnection() throws Exception {
-
- Tk103ProtocolEncoder encoder = new Tk103ProtocolEncoder();
+ public void testEncodeSetConnectionAlternative() throws Exception {
- Device device = TestIdentityManager.createTestDevice();
- device.set("tk103.alternative", true);
+ Tk103ProtocolEncoderAlternative encoder = new Tk103ProtocolEncoderAlternative();
Command command = new Command();
- command.setDeviceId(device.getId());
+ command.setDeviceId(1);
command.setType(Command.TYPE_SET_CONNECTION);
command.set(Command.KEY_SERVER, "1.2.3.4");
command.set(Command.KEY_PORT, "5555");
@@ -217,19 +237,16 @@ public class Tk103ProtocolEncoderTest extends ProtocolTest {
}
@Test
- public void testEncodeSosNumber() throws Exception {
+ public void testEncodeSosNumberAlternative() throws Exception {
- Tk103ProtocolEncoder encoder = new Tk103ProtocolEncoder();
-
- Device device = TestIdentityManager.createTestDevice();
- device.set("tk103.alternative", true);
- device.set(Command.KEY_DEVICE_PASSWORD, "232323");
+ Tk103ProtocolEncoderAlternative encoder = new Tk103ProtocolEncoderAlternative();
Command command = new Command();
- command.setDeviceId(device.getId());
+ command.setDeviceId(1);
command.setType(Command.TYPE_SOS_NUMBER);
command.set(Command.KEY_INDEX, "0");
command.set(Command.KEY_PHONE, "+55555555555");
+ command.set(Command.KEY_DEVICE_PASSWORD, "232323");
Assert.assertEquals("[begin]sms2,*master*232323*+55555555555*,[end]", encoder.encodeCommand(command));