diff options
-rw-r--r-- | src/org/traccar/protocol/Tk103ProtocolEncoder.java | 45 | ||||
-rw-r--r-- | src/org/traccar/protocol/Tk103ProtocolEncoderAlternative.java | 70 | ||||
-rw-r--r-- | test/org/traccar/TestIdentityManager.java | 33 | ||||
-rw-r--r-- | test/org/traccar/protocol/Tk103ProtocolEncoderTest.java | 149 |
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)); |