aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbyss777 <abyss@fox5.ru>2017-09-07 11:33:22 +0500
committerAbyss777 <abyss@fox5.ru>2017-09-07 11:33:22 +0500
commit9ebd2a934a5ca3a61863f839733bff321ba30296 (patch)
tree265352fda7b704c240018f57e53c6626f166470d
parentf0578c7b5f8737e019a9cf05935d2caaa940f0ca (diff)
downloadtrackermap-server-9ebd2a934a5ca3a61863f839733bff321ba30296.tar.gz
trackermap-server-9ebd2a934a5ca3a61863f839733bff321ba30296.tar.bz2
trackermap-server-9ebd2a934a5ca3a61863f839733bff321ba30296.zip
Handle correct and incorrect attribute types
-rw-r--r--src/org/traccar/database/DeviceManager.java45
-rw-r--r--src/org/traccar/model/ExtendedModel.java2
-rw-r--r--src/org/traccar/notification/NotificationMail.java2
-rw-r--r--src/org/traccar/notification/PropertiesProvider.java10
-rw-r--r--src/org/traccar/protocol/OsmAndProtocolDecoder.java12
-rw-r--r--test/org/traccar/ProtocolTest.java4
-rw-r--r--test/org/traccar/protocol/OsmAndProtocolDecoderTest.java3
7 files changed, 45 insertions, 33 deletions
diff --git a/src/org/traccar/database/DeviceManager.java b/src/org/traccar/database/DeviceManager.java
index a485d6dc6..9bc221aa3 100644
--- a/src/org/traccar/database/DeviceManager.java
+++ b/src/org/traccar/database/DeviceManager.java
@@ -262,59 +262,44 @@ public class DeviceManager extends BaseObjectManager<Device> implements Identity
public boolean lookupAttributeBoolean(
long deviceId, String attributeName, boolean defaultValue, boolean lookupConfig) {
- String result = lookupAttribute(deviceId, attributeName, lookupConfig);
- if (result != null) {
- return Boolean.parseBoolean(result);
- }
- return defaultValue;
+ Object result = lookupAttribute(deviceId, attributeName, lookupConfig);
+ return result != null ? Boolean.parseBoolean(result.toString()) : defaultValue;
}
public String lookupAttributeString(
long deviceId, String attributeName, String defaultValue, boolean lookupConfig) {
- String result = lookupAttribute(deviceId, attributeName, lookupConfig);
- if (result != null) {
- return result;
- }
- return defaultValue;
+ Object result = lookupAttribute(deviceId, attributeName, lookupConfig);
+ return result != null ? result.toString() : defaultValue;
}
public int lookupAttributeInteger(long deviceId, String attributeName, int defaultValue, boolean lookupConfig) {
- String result = lookupAttribute(deviceId, attributeName, lookupConfig);
- if (result != null) {
- return Integer.parseInt(result);
- }
- return defaultValue;
+ Object result = lookupAttribute(deviceId, attributeName, lookupConfig);
+ return result != null ? Integer.parseInt(result.toString()) : defaultValue;
}
public long lookupAttributeLong(
long deviceId, String attributeName, long defaultValue, boolean lookupConfig) {
- String result = lookupAttribute(deviceId, attributeName, lookupConfig);
- if (result != null) {
- return Long.parseLong(result);
- }
- return defaultValue;
+ Object result = lookupAttribute(deviceId, attributeName, lookupConfig);
+ return result != null ? Long.parseLong(result.toString()) : defaultValue;
}
public double lookupAttributeDouble(
long deviceId, String attributeName, double defaultValue, boolean lookupConfig) {
- String result = lookupAttribute(deviceId, attributeName, lookupConfig);
- if (result != null) {
- return Double.parseDouble(result);
- }
- return defaultValue;
+ Object result = lookupAttribute(deviceId, attributeName, lookupConfig);
+ return result != null ? Double.parseDouble(result.toString()) : defaultValue;
}
- private String lookupAttribute(long deviceId, String attributeName, boolean lookupConfig) {
- String result = null;
+ private Object lookupAttribute(long deviceId, String attributeName, boolean lookupConfig) {
+ Object result = null;
Device device = getById(deviceId);
if (device != null) {
- result = device.getString(attributeName);
+ result = device.getAttributes().get(attributeName);
if (result == null && lookupGroupsAttribute) {
long groupId = device.getGroupId();
while (groupId != 0) {
Group group = Context.getGroupsManager().getById(groupId);
if (group != null) {
- result = group.getString(attributeName);
+ result = group.getAttributes().get(attributeName);
if (result != null) {
break;
}
@@ -329,7 +314,7 @@ public class DeviceManager extends BaseObjectManager<Device> implements Identity
result = Context.getConfig().getString(attributeName);
} else {
Server server = Context.getPermissionsManager().getServer();
- result = server.getString(attributeName);
+ result = server.getAttributes().get(attributeName);
}
}
}
diff --git a/src/org/traccar/model/ExtendedModel.java b/src/org/traccar/model/ExtendedModel.java
index a4bf00e70..2ce503eea 100644
--- a/src/org/traccar/model/ExtendedModel.java
+++ b/src/org/traccar/model/ExtendedModel.java
@@ -100,7 +100,7 @@ public class ExtendedModel extends BaseModel {
public boolean getBoolean(String key) {
if (attributes.containsKey(key)) {
- return Boolean.parseBoolean(attributes.get(key).toString());
+ return (Boolean) attributes.get(key);
} else {
return false;
}
diff --git a/src/org/traccar/notification/NotificationMail.java b/src/org/traccar/notification/NotificationMail.java
index d7f3bf64c..fc70a6115 100644
--- a/src/org/traccar/notification/NotificationMail.java
+++ b/src/org/traccar/notification/NotificationMail.java
@@ -43,7 +43,7 @@ public final class NotificationMail {
if (host != null) {
properties.put("mail.transport.protocol", provider.getString("mail.transport.protocol", "smtp"));
properties.put("mail.smtp.host", host);
- properties.put("mail.smtp.port", provider.getString("mail.smtp.port", "25"));
+ properties.put("mail.smtp.port", String.valueOf(provider.getInteger("mail.smtp.port", 25)));
String starttlsEnable = provider.getString("mail.smtp.starttls.enable");
if (starttlsEnable != null) {
diff --git a/src/org/traccar/notification/PropertiesProvider.java b/src/org/traccar/notification/PropertiesProvider.java
index 2fea901af..1a4104d2b 100644
--- a/src/org/traccar/notification/PropertiesProvider.java
+++ b/src/org/traccar/notification/PropertiesProvider.java
@@ -48,4 +48,14 @@ public class PropertiesProvider {
return value;
}
+ public int getInteger(String key, int defaultValue) {
+ if (config != null) {
+ return config.getInteger(key, defaultValue);
+ } else if (extendedModel.getAttributes().containsKey(key)) {
+ return Integer.parseInt(extendedModel.getAttributes().get(key).toString());
+ } else {
+ return defaultValue;
+ }
+ }
+
}
diff --git a/src/org/traccar/protocol/OsmAndProtocolDecoder.java b/src/org/traccar/protocol/OsmAndProtocolDecoder.java
index c06582a15..15a71c88b 100644
--- a/src/org/traccar/protocol/OsmAndProtocolDecoder.java
+++ b/src/org/traccar/protocol/OsmAndProtocolDecoder.java
@@ -135,7 +135,17 @@ public class OsmAndProtocolDecoder extends BaseProtocolDecoder {
try {
position.set(entry.getKey(), Double.parseDouble(value));
} catch (NumberFormatException e) {
- position.set(entry.getKey(), value);
+ switch (value) {
+ case "true":
+ position.set(entry.getKey(), true);
+ break;
+ case "false":
+ position.set(entry.getKey(), false);
+ break;
+ default:
+ position.set(entry.getKey(), value);
+ break;
+ }
}
break;
}
diff --git a/test/org/traccar/ProtocolTest.java b/test/org/traccar/ProtocolTest.java
index a2c7e4f21..7bff41acd 100644
--- a/test/org/traccar/ProtocolTest.java
+++ b/test/org/traccar/ProtocolTest.java
@@ -241,6 +241,10 @@ public class ProtocolTest extends BaseTest {
Assert.assertTrue(attributes.get(Position.KEY_CHARGE) instanceof Boolean);
}
+ if (attributes.containsKey(Position.KEY_IGNITION)) {
+ Assert.assertTrue(attributes.get(Position.KEY_IGNITION) instanceof Boolean);
+ }
+
if (attributes.containsKey(Position.KEY_MOTION)) {
Assert.assertTrue(attributes.get(Position.KEY_MOTION) instanceof Boolean);
}
diff --git a/test/org/traccar/protocol/OsmAndProtocolDecoderTest.java b/test/org/traccar/protocol/OsmAndProtocolDecoderTest.java
index 2d0ef0adf..af860f371 100644
--- a/test/org/traccar/protocol/OsmAndProtocolDecoderTest.java
+++ b/test/org/traccar/protocol/OsmAndProtocolDecoderTest.java
@@ -37,6 +37,9 @@ public class OsmAndProtocolDecoderTest extends ProtocolTest {
verifyPosition(decoder, request(
"/?id=123456&timestamp=1377177267&location=60.0,30.0"));
+ verifyPosition(decoder, request(
+ "/?id=123456789012345&timestamp=1504763810&lat=40.7232948571&lon=-74.0061408571&bearing=7.19889788244&speed=40&ignition=true&rpm=933&fuel=24"));
+
}
}