aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/traccar/Context.java22
-rw-r--r--src/main/java/org/traccar/MainModule.java68
-rw-r--r--src/main/java/org/traccar/geocoder/BanGeocoder.java5
-rw-r--r--src/main/java/org/traccar/geocoder/BingMapsGeocoder.java5
-rw-r--r--src/main/java/org/traccar/geocoder/FactualGeocoder.java5
-rw-r--r--src/main/java/org/traccar/geocoder/GeoapifyGeocoder.java5
-rw-r--r--src/main/java/org/traccar/geocoder/GeocodeFarmGeocoder.java6
-rw-r--r--src/main/java/org/traccar/geocoder/GeocodeXyzGeocoder.java5
-rw-r--r--src/main/java/org/traccar/geocoder/GisgraphyGeocoder.java5
-rw-r--r--src/main/java/org/traccar/geocoder/GoogleGeocoder.java5
-rw-r--r--src/main/java/org/traccar/geocoder/HereGeocoder.java6
-rw-r--r--src/main/java/org/traccar/geocoder/JsonGeocoder.java9
-rw-r--r--src/main/java/org/traccar/geocoder/MapQuestGeocoder.java5
-rw-r--r--src/main/java/org/traccar/geocoder/MapTilerGeocoder.java5
-rw-r--r--src/main/java/org/traccar/geocoder/MapboxGeocoder.java5
-rw-r--r--src/main/java/org/traccar/geocoder/MapmyIndiaGeocoder.java5
-rw-r--r--src/main/java/org/traccar/geocoder/NominatimGeocoder.java6
-rw-r--r--src/main/java/org/traccar/geocoder/OpenCageGeocoder.java6
-rw-r--r--src/main/java/org/traccar/geocoder/PositionStackGeocoder.java5
-rw-r--r--src/main/java/org/traccar/geocoder/TomTomGeocoder.java5
-rw-r--r--src/main/java/org/traccar/geolocation/GoogleGeolocationProvider.java8
-rw-r--r--src/main/java/org/traccar/geolocation/MozillaGeolocationProvider.java8
-rw-r--r--src/main/java/org/traccar/geolocation/OpenCellIdGeolocationProvider.java12
-rw-r--r--src/main/java/org/traccar/geolocation/UniversalGeolocationProvider.java12
-rw-r--r--src/main/java/org/traccar/geolocation/UnwiredGeolocationProvider.java16
-rw-r--r--src/main/java/org/traccar/notification/EventForwarder.java16
-rw-r--r--src/main/java/org/traccar/schedule/ScheduleManager.java15
-rw-r--r--src/main/java/org/traccar/schedule/ScheduleTask.java22
-rw-r--r--src/main/java/org/traccar/schedule/TaskDeviceInactivityCheck.java22
-rw-r--r--src/main/java/org/traccar/schedule/TaskHealthCheck.java23
-rw-r--r--src/main/java/org/traccar/schedule/TaskWebSocketKeepalive.java17
-rw-r--r--src/main/java/org/traccar/sms/HttpSmsClient.java23
-rw-r--r--src/main/java/org/traccar/sms/SnsSmsClient.java24
-rw-r--r--src/main/java/org/traccar/speedlimit/OverpassSpeedLimitProvider.java10
-rw-r--r--src/test/java/org/traccar/geocoder/GeocoderTest.java30
-rw-r--r--src/test/java/org/traccar/geolocation/GeolocationProviderTest.java11
-rw-r--r--src/test/java/org/traccar/speedlimit/OverpassSpeedLimitProviderTest.java11
37 files changed, 279 insertions, 189 deletions
diff --git a/src/main/java/org/traccar/Context.java b/src/main/java/org/traccar/Context.java
index 54bb2af4b..62ad01c24 100644
--- a/src/main/java/org/traccar/Context.java
+++ b/src/main/java/org/traccar/Context.java
@@ -15,7 +15,6 @@
*/
package org.traccar;
-import com.fasterxml.jackson.databind.ObjectMapper;
import org.traccar.config.Config;
import org.traccar.config.Keys;
import org.traccar.database.BaseObjectManager;
@@ -38,10 +37,6 @@ import org.traccar.notification.NotificatorManager;
import org.traccar.session.ConnectionManager;
import org.traccar.session.cache.CacheManager;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.ext.ContextResolver;
-
public final class Context {
private Context() {
@@ -101,21 +96,6 @@ public final class Context {
return notificationManager;
}
- private static Client client = ClientBuilder.newClient();
-
- public static Client getClient() {
- return client;
- }
-
- private static class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
-
- @Override
- public ObjectMapper getContext(Class<?> clazz) {
- return Main.getInjector().getInstance(ObjectMapper.class);
- }
-
- }
-
public static void init(String configFile) throws Exception {
try {
@@ -127,8 +107,6 @@ public final class Context {
throw e;
}
- client = ClientBuilder.newClient().register(new ObjectMapperContextResolver());
-
if (config.hasKey(Keys.DATABASE_URL)) {
dataManager = new DataManager(config);
}
diff --git a/src/main/java/org/traccar/MainModule.java b/src/main/java/org/traccar/MainModule.java
index 794735daf..2c88dbc13 100644
--- a/src/main/java/org/traccar/MainModule.java
+++ b/src/main/java/org/traccar/MainModule.java
@@ -30,6 +30,7 @@ import org.traccar.broadcast.BroadcastService;
import org.traccar.config.Config;
import org.traccar.config.Keys;
import org.traccar.database.LdapProvider;
+import org.traccar.database.UsersManager;
import org.traccar.helper.SanitizerModule;
import org.traccar.notification.EventForwarder;
import org.traccar.session.ConnectionManager;
@@ -64,6 +65,7 @@ import org.traccar.geolocation.UnwiredGeolocationProvider;
import org.traccar.handler.GeocoderHandler;
import org.traccar.handler.GeolocationHandler;
import org.traccar.handler.SpeedLimitHandler;
+import org.traccar.session.cache.CacheManager;
import org.traccar.sms.HttpSmsClient;
import org.traccar.sms.SmsManager;
import org.traccar.sms.SnsSmsClient;
@@ -75,6 +77,8 @@ import org.traccar.web.WebServer;
import javax.annotation.Nullable;
import javax.inject.Singleton;
import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.ext.ContextResolver;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
@@ -125,7 +129,8 @@ public class MainModule extends AbstractModule {
@Provides
public static Client provideClient() {
- return Context.getClient();
+ return ClientBuilder.newClient().register(
+ (ContextResolver<ObjectMapper>) clazz -> Main.getInjector().getInstance(ObjectMapper.class));
}
@Provides
@@ -135,11 +140,11 @@ public class MainModule extends AbstractModule {
@Singleton
@Provides
- public static SmsManager provideSmsManager(Config config) {
+ public static SmsManager provideSmsManager(Config config, Client client) {
if (config.hasKey(Keys.SMS_HTTP_URL)) {
- return new HttpSmsClient();
+ return new HttpSmsClient(config, client);
} else if (config.hasKey(Keys.SMS_AWS_REGION)) {
- return new SnsSmsClient();
+ return new SnsSmsClient(config);
}
return null;
}
@@ -163,7 +168,7 @@ public class MainModule extends AbstractModule {
@Singleton
@Provides
- public static Geocoder provideGeocoder(Config config) {
+ public static Geocoder provideGeocoder(Config config, Client client) {
if (config.getBoolean(Keys.GEOCODER_ENABLE)) {
String type = config.getString(Keys.GEOCODER_TYPE, "google");
String url = config.getString(Keys.GEOCODER_URL);
@@ -176,39 +181,39 @@ public class MainModule extends AbstractModule {
int cacheSize = config.getInteger(Keys.GEOCODER_CACHE_SIZE);
switch (type) {
case "nominatim":
- return new NominatimGeocoder(url, key, language, cacheSize, addressFormat);
+ return new NominatimGeocoder(client, url, key, language, cacheSize, addressFormat);
case "gisgraphy":
- return new GisgraphyGeocoder(url, cacheSize, addressFormat);
+ return new GisgraphyGeocoder(client, url, cacheSize, addressFormat);
case "mapquest":
- return new MapQuestGeocoder(url, key, cacheSize, addressFormat);
+ return new MapQuestGeocoder(client, url, key, cacheSize, addressFormat);
case "opencage":
- return new OpenCageGeocoder(url, key, language, cacheSize, addressFormat);
+ return new OpenCageGeocoder(client, url, key, language, cacheSize, addressFormat);
case "bingmaps":
- return new BingMapsGeocoder(url, key, cacheSize, addressFormat);
+ return new BingMapsGeocoder(client, url, key, cacheSize, addressFormat);
case "factual":
- return new FactualGeocoder(url, key, cacheSize, addressFormat);
+ return new FactualGeocoder(client, url, key, cacheSize, addressFormat);
case "geocodefarm":
- return new GeocodeFarmGeocoder(key, language, cacheSize, addressFormat);
+ return new GeocodeFarmGeocoder(client, key, language, cacheSize, addressFormat);
case "geocodexyz":
- return new GeocodeXyzGeocoder(key, cacheSize, addressFormat);
+ return new GeocodeXyzGeocoder(client, key, cacheSize, addressFormat);
case "ban":
- return new BanGeocoder(cacheSize, addressFormat);
+ return new BanGeocoder(client, cacheSize, addressFormat);
case "here":
- return new HereGeocoder(url, id, key, language, cacheSize, addressFormat);
+ return new HereGeocoder(client, url, id, key, language, cacheSize, addressFormat);
case "mapmyindia":
- return new MapmyIndiaGeocoder(url, key, cacheSize, addressFormat);
+ return new MapmyIndiaGeocoder(client, url, key, cacheSize, addressFormat);
case "tomtom":
- return new TomTomGeocoder(url, key, cacheSize, addressFormat);
+ return new TomTomGeocoder(client, url, key, cacheSize, addressFormat);
case "positionstack":
- return new PositionStackGeocoder(key, cacheSize, addressFormat);
+ return new PositionStackGeocoder(client, key, cacheSize, addressFormat);
case "mapbox":
- return new MapboxGeocoder(key, cacheSize, addressFormat);
+ return new MapboxGeocoder(client, key, cacheSize, addressFormat);
case "maptiler":
- return new MapTilerGeocoder(key, cacheSize, addressFormat);
+ return new MapTilerGeocoder(client, key, cacheSize, addressFormat);
case "geoapify":
- return new GeoapifyGeocoder(key, language, cacheSize, addressFormat);
+ return new GeoapifyGeocoder(client, key, language, cacheSize, addressFormat);
default:
- return new GoogleGeocoder(key, language, cacheSize, addressFormat);
+ return new GoogleGeocoder(client, key, language, cacheSize, addressFormat);
}
}
return null;
@@ -216,20 +221,20 @@ public class MainModule extends AbstractModule {
@Singleton
@Provides
- public static GeolocationProvider provideGeolocationProvider(Config config) {
+ public static GeolocationProvider provideGeolocationProvider(Config config, Client client) {
if (config.getBoolean(Keys.GEOLOCATION_ENABLE)) {
String type = config.getString(Keys.GEOLOCATION_TYPE, "mozilla");
String url = config.getString(Keys.GEOLOCATION_URL);
String key = config.getString(Keys.GEOLOCATION_KEY);
switch (type) {
case "google":
- return new GoogleGeolocationProvider(key);
+ return new GoogleGeolocationProvider(client, key);
case "opencellid":
- return new OpenCellIdGeolocationProvider(url, key);
+ return new OpenCellIdGeolocationProvider(client, url, key);
case "unwired":
- return new UnwiredGeolocationProvider(url, key);
+ return new UnwiredGeolocationProvider(client, url, key);
default:
- return new MozillaGeolocationProvider(key);
+ return new MozillaGeolocationProvider(client, key);
}
}
return null;
@@ -237,14 +242,14 @@ public class MainModule extends AbstractModule {
@Singleton
@Provides
- public static SpeedLimitProvider provideSpeedLimitProvider(Config config) {
+ public static SpeedLimitProvider provideSpeedLimitProvider(Config config, Client client) {
if (config.getBoolean(Keys.SPEED_LIMIT_ENABLE)) {
String type = config.getString(Keys.SPEED_LIMIT_TYPE, "overpass");
String url = config.getString(Keys.SPEED_LIMIT_URL);
switch (type) {
case "overpass":
default:
- return new OverpassSpeedLimitProvider(url);
+ return new OverpassSpeedLimitProvider(client, url);
}
}
return null;
@@ -286,9 +291,10 @@ public class MainModule extends AbstractModule {
}
@Provides
- public static EventForwarder provideEventForwarder(Config config) {
+ public static EventForwarder provideEventForwarder(
+ Config config, Client client, CacheManager cacheManager, UsersManager usersManager) {
if (config.hasKey(Keys.EVENT_FORWARD_URL)) {
- return new EventForwarder(config);
+ return new EventForwarder(config, client, cacheManager, usersManager);
}
return null;
}
diff --git a/src/main/java/org/traccar/geocoder/BanGeocoder.java b/src/main/java/org/traccar/geocoder/BanGeocoder.java
index b1f0900a4..f878a8bab 100644
--- a/src/main/java/org/traccar/geocoder/BanGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/BanGeocoder.java
@@ -22,11 +22,12 @@ package org.traccar.geocoder;
import javax.json.JsonArray;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class BanGeocoder extends JsonGeocoder {
- public BanGeocoder(int cacheSize, AddressFormat addressFormat) {
- super("https://api-adresse.data.gouv.fr/reverse/?lat=%f&lon=%f", cacheSize, addressFormat);
+ public BanGeocoder(Client client, int cacheSize, AddressFormat addressFormat) {
+ super(client, "https://api-adresse.data.gouv.fr/reverse/?lat=%f&lon=%f", cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/BingMapsGeocoder.java b/src/main/java/org/traccar/geocoder/BingMapsGeocoder.java
index 32a26ee0c..01e33c2ea 100644
--- a/src/main/java/org/traccar/geocoder/BingMapsGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/BingMapsGeocoder.java
@@ -18,11 +18,12 @@ package org.traccar.geocoder;
import javax.json.JsonArray;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class BingMapsGeocoder extends JsonGeocoder {
- public BingMapsGeocoder(String url, String key, int cacheSize, AddressFormat addressFormat) {
- super(url + "/Locations/%f,%f?key=" + key + "&include=ciso2", cacheSize, addressFormat);
+ public BingMapsGeocoder(Client client, String url, String key, int cacheSize, AddressFormat addressFormat) {
+ super(client, url + "/Locations/%f,%f?key=" + key + "&include=ciso2", cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/FactualGeocoder.java b/src/main/java/org/traccar/geocoder/FactualGeocoder.java
index f540eb8fe..384f46b0e 100644
--- a/src/main/java/org/traccar/geocoder/FactualGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/FactualGeocoder.java
@@ -17,6 +17,7 @@
package org.traccar.geocoder;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class FactualGeocoder extends JsonGeocoder {
@@ -28,8 +29,8 @@ public class FactualGeocoder extends JsonGeocoder {
return url;
}
- public FactualGeocoder(String url, String key, int cacheSize, AddressFormat addressFormat) {
- super(formatUrl(url, key), cacheSize, addressFormat);
+ public FactualGeocoder(Client client, String url, String key, int cacheSize, AddressFormat addressFormat) {
+ super(client, formatUrl(url, key), cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/GeoapifyGeocoder.java b/src/main/java/org/traccar/geocoder/GeoapifyGeocoder.java
index ef0e4c8bd..4748d6a2c 100644
--- a/src/main/java/org/traccar/geocoder/GeoapifyGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/GeoapifyGeocoder.java
@@ -17,6 +17,7 @@ package org.traccar.geocoder;
import javax.json.JsonArray;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class GeoapifyGeocoder extends JsonGeocoder {
@@ -31,8 +32,8 @@ public class GeoapifyGeocoder extends JsonGeocoder {
return url;
}
- public GeoapifyGeocoder(String key, String language, int cacheSize, AddressFormat addressFormat) {
- super(formatUrl(key, language), cacheSize, addressFormat);
+ public GeoapifyGeocoder(Client client, String key, String language, int cacheSize, AddressFormat addressFormat) {
+ super(client, formatUrl(key, language), cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/GeocodeFarmGeocoder.java b/src/main/java/org/traccar/geocoder/GeocodeFarmGeocoder.java
index 39a3300a0..2af95910f 100644
--- a/src/main/java/org/traccar/geocoder/GeocodeFarmGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/GeocodeFarmGeocoder.java
@@ -16,6 +16,7 @@
package org.traccar.geocoder;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class GeocodeFarmGeocoder extends JsonGeocoder {
@@ -30,8 +31,9 @@ public class GeocodeFarmGeocoder extends JsonGeocoder {
}
return url;
}
- public GeocodeFarmGeocoder(String key, String language, int cacheSize, AddressFormat addressFormat) {
- super(formatUrl(key, language), cacheSize, addressFormat);
+ public GeocodeFarmGeocoder(
+ Client client, String key, String language, int cacheSize, AddressFormat addressFormat) {
+ super(client, formatUrl(key, language), cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/GeocodeXyzGeocoder.java b/src/main/java/org/traccar/geocoder/GeocodeXyzGeocoder.java
index aca360c3d..96491ece3 100644
--- a/src/main/java/org/traccar/geocoder/GeocodeXyzGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/GeocodeXyzGeocoder.java
@@ -16,6 +16,7 @@
package org.traccar.geocoder;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class GeocodeXyzGeocoder extends JsonGeocoder {
@@ -27,8 +28,8 @@ public class GeocodeXyzGeocoder extends JsonGeocoder {
return url;
}
- public GeocodeXyzGeocoder(String key, int cacheSize, AddressFormat addressFormat) {
- super(formatUrl(key), cacheSize, addressFormat);
+ public GeocodeXyzGeocoder(Client client, String key, int cacheSize, AddressFormat addressFormat) {
+ super(client, formatUrl(key), cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/GisgraphyGeocoder.java b/src/main/java/org/traccar/geocoder/GisgraphyGeocoder.java
index b4881a006..0589eb000 100644
--- a/src/main/java/org/traccar/geocoder/GisgraphyGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/GisgraphyGeocoder.java
@@ -16,6 +16,7 @@
package org.traccar.geocoder;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class GisgraphyGeocoder extends JsonGeocoder {
@@ -27,8 +28,8 @@ public class GisgraphyGeocoder extends JsonGeocoder {
return url;
}
- public GisgraphyGeocoder(String url, int cacheSize, AddressFormat addressFormat) {
- super(formatUrl(url), cacheSize, addressFormat);
+ public GisgraphyGeocoder(Client client, String url, int cacheSize, AddressFormat addressFormat) {
+ super(client, formatUrl(url), cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/GoogleGeocoder.java b/src/main/java/org/traccar/geocoder/GoogleGeocoder.java
index 9494cab45..4d9ec8f36 100644
--- a/src/main/java/org/traccar/geocoder/GoogleGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/GoogleGeocoder.java
@@ -18,6 +18,7 @@ package org.traccar.geocoder;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonString;
+import javax.ws.rs.client.Client;
public class GoogleGeocoder extends JsonGeocoder {
@@ -32,8 +33,8 @@ public class GoogleGeocoder extends JsonGeocoder {
return url;
}
- public GoogleGeocoder(String key, String language, int cacheSize, AddressFormat addressFormat) {
- super(formatUrl(key, language), cacheSize, addressFormat);
+ public GoogleGeocoder(Client client, String key, String language, int cacheSize, AddressFormat addressFormat) {
+ super(client, formatUrl(key, language), cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/HereGeocoder.java b/src/main/java/org/traccar/geocoder/HereGeocoder.java
index 40390e65b..eb639995e 100644
--- a/src/main/java/org/traccar/geocoder/HereGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/HereGeocoder.java
@@ -16,6 +16,7 @@
package org.traccar.geocoder;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class HereGeocoder extends JsonGeocoder {
@@ -35,8 +36,9 @@ public class HereGeocoder extends JsonGeocoder {
}
public HereGeocoder(
- String url, String id, String key, String language, int cacheSize, AddressFormat addressFormat) {
- super(formatUrl(url, id, key, language), cacheSize, addressFormat);
+ Client client, String url, String id, String key, String language,
+ int cacheSize, AddressFormat addressFormat) {
+ super(client, formatUrl(url, id, key, language), cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/JsonGeocoder.java b/src/main/java/org/traccar/geocoder/JsonGeocoder.java
index f20aa79d6..0262de18c 100644
--- a/src/main/java/org/traccar/geocoder/JsonGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/JsonGeocoder.java
@@ -17,13 +17,12 @@ package org.traccar.geocoder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.traccar.Context;
import org.traccar.Main;
import org.traccar.database.StatisticsManager;
import javax.json.JsonObject;
import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.client.Invocation;
+import javax.ws.rs.client.Client;
import javax.ws.rs.client.InvocationCallback;
import java.util.AbstractMap;
import java.util.Collections;
@@ -34,12 +33,14 @@ public abstract class JsonGeocoder implements Geocoder {
private static final Logger LOGGER = LoggerFactory.getLogger(JsonGeocoder.class);
+ private final Client client;
private final String url;
private final AddressFormat addressFormat;
private Map<Map.Entry<Double, Double>, String> cache;
- public JsonGeocoder(String url, final int cacheSize, AddressFormat addressFormat) {
+ public JsonGeocoder(Client client, String url, final int cacheSize, AddressFormat addressFormat) {
+ this.client = client;
this.url = url;
this.addressFormat = addressFormat;
if (cacheSize > 0) {
@@ -101,7 +102,7 @@ public abstract class JsonGeocoder implements Geocoder {
Main.getInjector().getInstance(StatisticsManager.class).registerGeocoderRequest();
}
- Invocation.Builder request = Context.getClient().target(String.format(url, latitude, longitude)).request();
+ var request = client.target(String.format(url, latitude, longitude)).request();
if (callback != null) {
request.async().get(new InvocationCallback<JsonObject>() {
diff --git a/src/main/java/org/traccar/geocoder/MapQuestGeocoder.java b/src/main/java/org/traccar/geocoder/MapQuestGeocoder.java
index 8dc3f76f0..3f2554c6e 100644
--- a/src/main/java/org/traccar/geocoder/MapQuestGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/MapQuestGeocoder.java
@@ -18,6 +18,7 @@ package org.traccar.geocoder;
import javax.json.JsonArray;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class MapQuestGeocoder extends JsonGeocoder {
@@ -29,8 +30,8 @@ public class MapQuestGeocoder extends JsonGeocoder {
return url;
}
- public MapQuestGeocoder(String url, String key, int cacheSize, AddressFormat addressFormat) {
- super(formatUrl(url, key), cacheSize, addressFormat);
+ public MapQuestGeocoder(Client client, String url, String key, int cacheSize, AddressFormat addressFormat) {
+ super(client, formatUrl(url, key), cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/MapTilerGeocoder.java b/src/main/java/org/traccar/geocoder/MapTilerGeocoder.java
index 6b688a6e8..203f5f99b 100644
--- a/src/main/java/org/traccar/geocoder/MapTilerGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/MapTilerGeocoder.java
@@ -17,11 +17,12 @@ package org.traccar.geocoder;
import javax.json.JsonArray;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class MapTilerGeocoder extends JsonGeocoder {
- public MapTilerGeocoder(String key, int cacheSize, AddressFormat addressFormat) {
- super("https://api.maptiler.com/geocoding/%2$f,%1$f.json?key=" + key, cacheSize, addressFormat);
+ public MapTilerGeocoder(Client client, String key, int cacheSize, AddressFormat addressFormat) {
+ super(client, "https://api.maptiler.com/geocoding/%2$f,%1$f.json?key=" + key, cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/MapboxGeocoder.java b/src/main/java/org/traccar/geocoder/MapboxGeocoder.java
index 9b987c9d8..72bfb53f5 100644
--- a/src/main/java/org/traccar/geocoder/MapboxGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/MapboxGeocoder.java
@@ -18,6 +18,7 @@ package org.traccar.geocoder;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonString;
+import javax.ws.rs.client.Client;
public class MapboxGeocoder extends JsonGeocoder {
@@ -25,8 +26,8 @@ public class MapboxGeocoder extends JsonGeocoder {
return "https://api.mapbox.com/geocoding/v5/mapbox.places/%2$f,%1$f.json?access_token=" + key;
}
- public MapboxGeocoder(String key, int cacheSize, AddressFormat addressFormat) {
- super(formatUrl(key), cacheSize, addressFormat);
+ public MapboxGeocoder(Client client, String key, int cacheSize, AddressFormat addressFormat) {
+ super(client, formatUrl(key), cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/MapmyIndiaGeocoder.java b/src/main/java/org/traccar/geocoder/MapmyIndiaGeocoder.java
index 2b70708a1..dea295cca 100644
--- a/src/main/java/org/traccar/geocoder/MapmyIndiaGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/MapmyIndiaGeocoder.java
@@ -17,11 +17,12 @@ package org.traccar.geocoder;
import javax.json.JsonArray;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class MapmyIndiaGeocoder extends JsonGeocoder {
- public MapmyIndiaGeocoder(String url, String key, int cacheSize, AddressFormat addressFormat) {
- super(url + "/" + key + "/rev_geocode?lat=%f&lng=%f", cacheSize, addressFormat);
+ public MapmyIndiaGeocoder(Client client, String url, String key, int cacheSize, AddressFormat addressFormat) {
+ super(client, url + "/" + key + "/rev_geocode?lat=%f&lng=%f", cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/NominatimGeocoder.java b/src/main/java/org/traccar/geocoder/NominatimGeocoder.java
index 8db25bf15..b731549f7 100644
--- a/src/main/java/org/traccar/geocoder/NominatimGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/NominatimGeocoder.java
@@ -16,6 +16,7 @@
package org.traccar.geocoder;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class NominatimGeocoder extends JsonGeocoder {
@@ -33,8 +34,9 @@ public class NominatimGeocoder extends JsonGeocoder {
return url;
}
- public NominatimGeocoder(String url, String key, String language, int cacheSize, AddressFormat addressFormat) {
- super(formatUrl(url, key, language), cacheSize, addressFormat);
+ public NominatimGeocoder(
+ Client client, String url, String key, String language, int cacheSize, AddressFormat addressFormat) {
+ super(client, formatUrl(url, key, language), cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/OpenCageGeocoder.java b/src/main/java/org/traccar/geocoder/OpenCageGeocoder.java
index bbcc00cd0..fb61440aa 100644
--- a/src/main/java/org/traccar/geocoder/OpenCageGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/OpenCageGeocoder.java
@@ -18,6 +18,7 @@ package org.traccar.geocoder;
import javax.json.JsonArray;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class OpenCageGeocoder extends JsonGeocoder {
@@ -32,8 +33,9 @@ public class OpenCageGeocoder extends JsonGeocoder {
return url;
}
- public OpenCageGeocoder(String url, String key, String language, int cacheSize, AddressFormat addressFormat) {
- super(formatUrl(url, key, language), cacheSize, addressFormat);
+ public OpenCageGeocoder(
+ Client client, String url, String key, String language, int cacheSize, AddressFormat addressFormat) {
+ super(client, formatUrl(url, key, language), cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/PositionStackGeocoder.java b/src/main/java/org/traccar/geocoder/PositionStackGeocoder.java
index 2674a68ca..9778d9eda 100644
--- a/src/main/java/org/traccar/geocoder/PositionStackGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/PositionStackGeocoder.java
@@ -17,6 +17,7 @@ package org.traccar.geocoder;
import javax.json.JsonArray;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class PositionStackGeocoder extends JsonGeocoder {
@@ -24,8 +25,8 @@ public class PositionStackGeocoder extends JsonGeocoder {
return "http://api.positionstack.com/v1/reverse?access_key=" + key + "&query=%f,%f";
}
- public PositionStackGeocoder(String key, int cacheSize, AddressFormat addressFormat) {
- super(formatUrl(key), cacheSize, addressFormat);
+ public PositionStackGeocoder(Client client, String key, int cacheSize, AddressFormat addressFormat) {
+ super(client, formatUrl(key), cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geocoder/TomTomGeocoder.java b/src/main/java/org/traccar/geocoder/TomTomGeocoder.java
index 232b24396..9bb36efc2 100644
--- a/src/main/java/org/traccar/geocoder/TomTomGeocoder.java
+++ b/src/main/java/org/traccar/geocoder/TomTomGeocoder.java
@@ -17,6 +17,7 @@ package org.traccar.geocoder;
import javax.json.JsonArray;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
public class TomTomGeocoder extends JsonGeocoder {
@@ -28,8 +29,8 @@ public class TomTomGeocoder extends JsonGeocoder {
return url;
}
- public TomTomGeocoder(String url, String key, int cacheSize, AddressFormat addressFormat) {
- super(formatUrl(url, key), cacheSize, addressFormat);
+ public TomTomGeocoder(Client client, String url, String key, int cacheSize, AddressFormat addressFormat) {
+ super(client, formatUrl(url, key), cacheSize, addressFormat);
}
@Override
diff --git a/src/main/java/org/traccar/geolocation/GoogleGeolocationProvider.java b/src/main/java/org/traccar/geolocation/GoogleGeolocationProvider.java
index 5901b47cd..8f0f3b704 100644
--- a/src/main/java/org/traccar/geolocation/GoogleGeolocationProvider.java
+++ b/src/main/java/org/traccar/geolocation/GoogleGeolocationProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016 Anton Tananaev (anton@traccar.org)
+ * Copyright 2016 - 2022 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.
@@ -15,12 +15,14 @@
*/
package org.traccar.geolocation;
+import javax.ws.rs.client.Client;
+
public class GoogleGeolocationProvider extends UniversalGeolocationProvider {
private static final String URL = "https://www.googleapis.com/geolocation/v1/geolocate";
- public GoogleGeolocationProvider(String key) {
- super(URL, key);
+ public GoogleGeolocationProvider(Client client, String key) {
+ super(client, URL, key);
}
}
diff --git a/src/main/java/org/traccar/geolocation/MozillaGeolocationProvider.java b/src/main/java/org/traccar/geolocation/MozillaGeolocationProvider.java
index c6a73a52b..3b4ba4e1f 100644
--- a/src/main/java/org/traccar/geolocation/MozillaGeolocationProvider.java
+++ b/src/main/java/org/traccar/geolocation/MozillaGeolocationProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2015 - 2016 Anton Tananaev (anton@traccar.org)
+ * Copyright 2015 - 2022 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.
@@ -15,12 +15,14 @@
*/
package org.traccar.geolocation;
+import javax.ws.rs.client.Client;
+
public class MozillaGeolocationProvider extends UniversalGeolocationProvider {
private static final String URL = "https://location.services.mozilla.com/v1/geolocate";
- public MozillaGeolocationProvider(String key) {
- super(URL, key != null ? key : "test");
+ public MozillaGeolocationProvider(Client client, String key) {
+ super(client, URL, key != null ? key : "test");
}
}
diff --git a/src/main/java/org/traccar/geolocation/OpenCellIdGeolocationProvider.java b/src/main/java/org/traccar/geolocation/OpenCellIdGeolocationProvider.java
index 2535970d3..82fcf42ab 100644
--- a/src/main/java/org/traccar/geolocation/OpenCellIdGeolocationProvider.java
+++ b/src/main/java/org/traccar/geolocation/OpenCellIdGeolocationProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2015 - 2018 Anton Tananaev (anton@traccar.org)
+ * Copyright 2015 - 2022 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.
@@ -15,18 +15,20 @@
*/
package org.traccar.geolocation;
-import org.traccar.Context;
import org.traccar.model.CellTower;
import org.traccar.model.Network;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
import javax.ws.rs.client.InvocationCallback;
public class OpenCellIdGeolocationProvider implements GeolocationProvider {
- private String url;
+ private final Client client;
+ private final String url;
- public OpenCellIdGeolocationProvider(String url, String key) {
+ public OpenCellIdGeolocationProvider(Client client, String url, String key) {
+ this.client = client;
if (url == null) {
url = "http://opencellid.org/cell/get";
}
@@ -41,7 +43,7 @@ public class OpenCellIdGeolocationProvider implements GeolocationProvider {
String request = String.format(url, cellTower.getMobileCountryCode(), cellTower.getMobileNetworkCode(),
cellTower.getLocationAreaCode(), cellTower.getCellId());
- Context.getClient().target(request).request().async().get(new InvocationCallback<JsonObject>() {
+ client.target(request).request().async().get(new InvocationCallback<JsonObject>() {
@Override
public void completed(JsonObject json) {
if (json.containsKey("lat") && json.containsKey("lon")) {
diff --git a/src/main/java/org/traccar/geolocation/UniversalGeolocationProvider.java b/src/main/java/org/traccar/geolocation/UniversalGeolocationProvider.java
index 33cd84a47..7a3f71ee1 100644
--- a/src/main/java/org/traccar/geolocation/UniversalGeolocationProvider.java
+++ b/src/main/java/org/traccar/geolocation/UniversalGeolocationProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2016 - 2018 Anton Tananaev (anton@traccar.org)
+ * Copyright 2016 - 2022 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.
@@ -15,26 +15,26 @@
*/
package org.traccar.geolocation;
-import org.traccar.Context;
import org.traccar.model.Network;
import javax.json.JsonObject;
-import javax.ws.rs.client.AsyncInvoker;
+import javax.ws.rs.client.Client;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.InvocationCallback;
public class UniversalGeolocationProvider implements GeolocationProvider {
+ private final Client client;
private final String url;
- public UniversalGeolocationProvider(String url, String key) {
+ public UniversalGeolocationProvider(Client client, String url, String key) {
+ this.client = client;
this.url = url + "?key=" + key;
}
@Override
public void getLocation(Network network, final LocationProviderCallback callback) {
- AsyncInvoker invoker = Context.getClient().target(url).request().async();
- invoker.post(Entity.json(network), new InvocationCallback<JsonObject>() {
+ client.target(url).request().async().post(Entity.json(network), new InvocationCallback<JsonObject>() {
@Override
public void completed(JsonObject json) {
if (json.containsKey("error")) {
diff --git a/src/main/java/org/traccar/geolocation/UnwiredGeolocationProvider.java b/src/main/java/org/traccar/geolocation/UnwiredGeolocationProvider.java
index 963bcb688..14893b6a3 100644
--- a/src/main/java/org/traccar/geolocation/UnwiredGeolocationProvider.java
+++ b/src/main/java/org/traccar/geolocation/UnwiredGeolocationProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2017 - 2018 Anton Tananaev (anton@traccar.org)
+ * Copyright 2017 - 2022 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.
@@ -19,22 +19,23 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.traccar.Context;
import org.traccar.model.CellTower;
import org.traccar.model.Network;
import org.traccar.model.WifiAccessPoint;
import javax.json.JsonObject;
+import javax.ws.rs.client.Client;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.InvocationCallback;
import java.util.Collection;
public class UnwiredGeolocationProvider implements GeolocationProvider {
- private String url;
- private String key;
+ private final Client client;
+ private final String url;
+ private final String key;
- private ObjectMapper objectMapper;
+ private final ObjectMapper objectMapper;
private abstract static class NetworkMixIn {
@JsonProperty("mcc")
@@ -73,7 +74,8 @@ public class UnwiredGeolocationProvider implements GeolocationProvider {
abstract Integer getSignalStrength();
}
- public UnwiredGeolocationProvider(String url, String key) {
+ public UnwiredGeolocationProvider(Client client, String url, String key) {
+ this.client = client;
this.url = url;
this.key = key;
@@ -88,7 +90,7 @@ public class UnwiredGeolocationProvider implements GeolocationProvider {
ObjectNode json = objectMapper.valueToTree(network);
json.put("token", key);
- Context.getClient().target(url).request().async().post(Entity.json(json), new InvocationCallback<JsonObject>() {
+ client.target(url).request().async().post(Entity.json(json), new InvocationCallback<JsonObject>() {
@Override
public void completed(JsonObject json) {
if (json.getString("status").equals("error")) {
diff --git a/src/main/java/org/traccar/notification/EventForwarder.java b/src/main/java/org/traccar/notification/EventForwarder.java
index b0494d74d..5afff1b7b 100644
--- a/src/main/java/org/traccar/notification/EventForwarder.java
+++ b/src/main/java/org/traccar/notification/EventForwarder.java
@@ -17,10 +17,9 @@ package org.traccar.notification;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.traccar.Context;
-import org.traccar.Main;
import org.traccar.config.Config;
import org.traccar.config.Keys;
+import org.traccar.database.UsersManager;
import org.traccar.model.Device;
import org.traccar.model.Event;
import org.traccar.model.Geofence;
@@ -28,6 +27,7 @@ import org.traccar.model.Maintenance;
import org.traccar.model.Position;
import org.traccar.session.cache.CacheManager;
+import javax.ws.rs.client.Client;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.InvocationCallback;
@@ -42,12 +42,16 @@ public class EventForwarder {
private final String url;
private final String header;
+ private final Client client;
private final CacheManager cacheManager;
+ private final UsersManager usersManager;
- public EventForwarder(Config config) {
+ public EventForwarder(Config config, Client client, CacheManager cacheManager, UsersManager usersManager) {
+ this.client = client;
+ this.cacheManager = cacheManager;
+ this.usersManager = usersManager;
url = config.getString(Keys.EVENT_FORWARD_URL);
header = config.getString(Keys.EVENT_FORWARD_HEADERS);
- cacheManager = Main.getInjector().getInstance(CacheManager.class);
}
private static final String KEY_POSITION = "position";
@@ -59,7 +63,7 @@ public class EventForwarder {
public final void forwardEvent(Event event, Position position, Set<Long> users) {
- Invocation.Builder requestBuilder = Context.getClient().target(url).request();
+ Invocation.Builder requestBuilder = client.target(url).request();
if (header != null && !header.isEmpty()) {
for (String line: header.split("\\r?\\n")) {
@@ -105,7 +109,7 @@ public class EventForwarder {
data.put(KEY_MAINTENANCE, maintenance);
}
}
- data.put(KEY_USERS, Context.getUsersManager().getItems(users));
+ data.put(KEY_USERS, usersManager.getItems(users));
return data;
}
diff --git a/src/main/java/org/traccar/schedule/ScheduleManager.java b/src/main/java/org/traccar/schedule/ScheduleManager.java
index 154de603a..6412a186a 100644
--- a/src/main/java/org/traccar/schedule/ScheduleManager.java
+++ b/src/main/java/org/traccar/schedule/ScheduleManager.java
@@ -15,24 +15,31 @@
*/
package org.traccar.schedule;
+import com.google.inject.Injector;
import org.traccar.LifecycleObject;
+import javax.inject.Inject;
import javax.inject.Singleton;
+import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@Singleton
public class ScheduleManager implements LifecycleObject {
+ private final Injector injector;
private ScheduledExecutorService executor;
+ @Inject
+ public ScheduleManager(Injector injector) {
+ this.injector = injector;
+ }
+
@Override
public void start() {
executor = Executors.newSingleThreadScheduledExecutor();
-
- new TaskDeviceInactivityCheck().schedule(executor);
- new TaskWebSocketKeepalive().schedule(executor);
- new TaskHealthCheck().schedule(executor);
+ List.of(TaskDeviceInactivityCheck.class, TaskWebSocketKeepalive.class, TaskHealthCheck.class)
+ .forEach(task -> injector.getInstance(task).schedule(executor));
}
@Override
diff --git a/src/main/java/org/traccar/schedule/ScheduleTask.java b/src/main/java/org/traccar/schedule/ScheduleTask.java
new file mode 100644
index 000000000..1b537213b
--- /dev/null
+++ b/src/main/java/org/traccar/schedule/ScheduleTask.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2022 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.schedule;
+
+import java.util.concurrent.ScheduledExecutorService;
+
+public interface ScheduleTask extends Runnable {
+ void schedule(ScheduledExecutorService executor);
+}
diff --git a/src/main/java/org/traccar/schedule/TaskDeviceInactivityCheck.java b/src/main/java/org/traccar/schedule/TaskDeviceInactivityCheck.java
index 80641d7d4..f2ed3c3b3 100644
--- a/src/main/java/org/traccar/schedule/TaskDeviceInactivityCheck.java
+++ b/src/main/java/org/traccar/schedule/TaskDeviceInactivityCheck.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 Anton Tananaev (anton@traccar.org)
+ * Copyright 2020 - 2022 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.
@@ -15,17 +15,19 @@
*/
package org.traccar.schedule;
-import org.traccar.Context;
+import org.traccar.database.DeviceManager;
+import org.traccar.database.NotificationManager;
import org.traccar.model.Device;
import org.traccar.model.Event;
import org.traccar.model.Position;
+import javax.inject.Inject;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
-public class TaskDeviceInactivityCheck implements Runnable {
+public class TaskDeviceInactivityCheck implements ScheduleTask {
public static final String ATTRIBUTE_DEVICE_INACTIVITY_START = "deviceInactivityStart";
public static final String ATTRIBUTE_DEVICE_INACTIVITY_PERIOD = "deviceInactivityPeriod";
@@ -33,6 +35,16 @@ public class TaskDeviceInactivityCheck implements Runnable {
private static final long CHECK_PERIOD_MINUTES = 15;
+ private final DeviceManager deviceManager;
+ private final NotificationManager notificationManager;
+
+ @Inject
+ public TaskDeviceInactivityCheck(DeviceManager deviceManager, NotificationManager notificationManager) {
+ this.deviceManager = deviceManager;
+ this.notificationManager = notificationManager;
+ }
+
+ @Override
public void schedule(ScheduledExecutorService executor) {
executor.scheduleAtFixedRate(this, CHECK_PERIOD_MINUTES, CHECK_PERIOD_MINUTES, TimeUnit.MINUTES);
}
@@ -43,7 +55,7 @@ public class TaskDeviceInactivityCheck implements Runnable {
long checkPeriod = TimeUnit.MINUTES.toMillis(CHECK_PERIOD_MINUTES);
Map<Event, Position> events = new HashMap<>();
- for (Device device : Context.getDeviceManager().getAllDevices()) {
+ for (Device device : deviceManager.getAllDevices()) {
if (device.getLastUpdate() != null && checkDevice(device, currentTime, checkPeriod)) {
Event event = new Event(Event.TYPE_DEVICE_INACTIVE, device.getId());
event.set(ATTRIBUTE_LAST_UPDATE, device.getLastUpdate().getTime());
@@ -51,7 +63,7 @@ public class TaskDeviceInactivityCheck implements Runnable {
}
}
- Context.getNotificationManager().updateEvents(events);
+ notificationManager.updateEvents(events);
}
private boolean checkDevice(Device device, long currentTime, long checkPeriod) {
diff --git a/src/main/java/org/traccar/schedule/TaskHealthCheck.java b/src/main/java/org/traccar/schedule/TaskHealthCheck.java
index 087cd3e63..a8c9873ce 100644
--- a/src/main/java/org/traccar/schedule/TaskHealthCheck.java
+++ b/src/main/java/org/traccar/schedule/TaskHealthCheck.java
@@ -19,23 +19,31 @@ import com.sun.jna.Library;
import com.sun.jna.Native;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.traccar.Context;
+import org.traccar.config.Config;
import org.traccar.config.Keys;
+import javax.inject.Inject;
+import javax.ws.rs.client.Client;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
-public class TaskHealthCheck implements Runnable {
+public class TaskHealthCheck implements ScheduleTask {
private static final Logger LOGGER = LoggerFactory.getLogger(TaskHealthCheck.class);
+ private final Config config;
+ private final Client client;
+
private SystemD systemD;
private boolean enabled;
private long period;
- public TaskHealthCheck() {
- if (!Context.getConfig().getBoolean(Keys.WEB_DISABLE_HEALTH_CHECK)
+ @Inject
+ public TaskHealthCheck(Config config, Client client) {
+ this.config = config;
+ this.client = client;
+ if (!config.getBoolean(Keys.WEB_DISABLE_HEALTH_CHECK)
&& System.getProperty("os.name").toLowerCase().startsWith("linux")) {
try {
systemD = Native.load("systemd", SystemD.class);
@@ -54,11 +62,12 @@ public class TaskHealthCheck implements Runnable {
}
private String getUrl() {
- String address = Context.getConfig().getString(Keys.WEB_ADDRESS, "localhost");
- int port = Context.getConfig().getInteger(Keys.WEB_PORT);
+ String address = config.getString(Keys.WEB_ADDRESS, "localhost");
+ int port = config.getInteger(Keys.WEB_PORT);
return "http://" + address + ":" + port + "/api/server";
}
+ @Override
public void schedule(ScheduledExecutorService executor) {
if (enabled) {
executor.scheduleAtFixedRate(this, period, period, TimeUnit.MILLISECONDS);
@@ -68,7 +77,7 @@ public class TaskHealthCheck implements Runnable {
@Override
public void run() {
LOGGER.debug("Health check running");
- int status = Context.getClient().target(getUrl()).request().get().getStatus();
+ int status = client.target(getUrl()).request().get().getStatus();
if (status == 200) {
int result = systemD.sd_notify(0, "WATCHDOG=1");
if (result < 0) {
diff --git a/src/main/java/org/traccar/schedule/TaskWebSocketKeepalive.java b/src/main/java/org/traccar/schedule/TaskWebSocketKeepalive.java
index 953b0efea..e6c2e8b6d 100644
--- a/src/main/java/org/traccar/schedule/TaskWebSocketKeepalive.java
+++ b/src/main/java/org/traccar/schedule/TaskWebSocketKeepalive.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2021 Anton Tananaev (anton@traccar.org)
+ * Copyright 2021 - 2022 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.
@@ -15,22 +15,31 @@
*/
package org.traccar.schedule;
-import org.traccar.Context;
+import org.traccar.session.ConnectionManager;
+import javax.inject.Inject;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
-public class TaskWebSocketKeepalive implements Runnable {
+public class TaskWebSocketKeepalive implements ScheduleTask {
private static final long PERIOD_SECONDS = 55;
+ private final ConnectionManager connectionManager;
+
+ @Inject
+ public TaskWebSocketKeepalive(ConnectionManager connectionManager) {
+ this.connectionManager = connectionManager;
+ }
+
+ @Override
public void schedule(ScheduledExecutorService executor) {
executor.scheduleAtFixedRate(this, PERIOD_SECONDS, PERIOD_SECONDS, TimeUnit.SECONDS);
}
@Override
public void run() {
- Context.getConnectionManager().sendKeepalive();
+ connectionManager.sendKeepalive();
}
}
diff --git a/src/main/java/org/traccar/sms/HttpSmsClient.java b/src/main/java/org/traccar/sms/HttpSmsClient.java
index 5c3cef747..51b161594 100644
--- a/src/main/java/org/traccar/sms/HttpSmsClient.java
+++ b/src/main/java/org/traccar/sms/HttpSmsClient.java
@@ -16,11 +16,12 @@
*/
package org.traccar.sms;
-import org.traccar.Context;
+import org.traccar.config.Config;
import org.traccar.config.Keys;
import org.traccar.helper.DataConverter;
import org.traccar.notification.MessageException;
+import javax.ws.rs.client.Client;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.core.MediaType;
@@ -31,6 +32,7 @@ import java.nio.charset.StandardCharsets;
public class HttpSmsClient implements SmsManager {
+ private final Client client;
private final String url;
private final String authorizationHeader;
private final String authorization;
@@ -38,14 +40,15 @@ public class HttpSmsClient implements SmsManager {
private final boolean encode;
private final MediaType mediaType;
- public HttpSmsClient() {
- url = Context.getConfig().getString(Keys.SMS_HTTP_URL);
- authorizationHeader = Context.getConfig().getString(Keys.SMS_HTTP_AUTHORIZATION_HEADER);
- if (Context.getConfig().hasKey(Keys.SMS_HTTP_AUTHORIZATION)) {
- authorization = Context.getConfig().getString(Keys.SMS_HTTP_AUTHORIZATION);
+ public HttpSmsClient(Config config, Client client) {
+ this.client = client;
+ url = config.getString(Keys.SMS_HTTP_URL);
+ authorizationHeader = config.getString(Keys.SMS_HTTP_AUTHORIZATION_HEADER);
+ if (config.hasKey(Keys.SMS_HTTP_AUTHORIZATION)) {
+ authorization = config.getString(Keys.SMS_HTTP_AUTHORIZATION);
} else {
- String user = Context.getConfig().getString(Keys.SMS_HTTP_USER);
- String password = Context.getConfig().getString(Keys.SMS_HTTP_PASSWORD);
+ String user = config.getString(Keys.SMS_HTTP_USER);
+ String password = config.getString(Keys.SMS_HTTP_PASSWORD);
if (user != null && password != null) {
authorization = "Basic "
+ DataConverter.printBase64((user + ":" + password).getBytes(StandardCharsets.UTF_8));
@@ -53,7 +56,7 @@ public class HttpSmsClient implements SmsManager {
authorization = null;
}
}
- template = Context.getConfig().getString(Keys.SMS_HTTP_TEMPLATE).trim();
+ template = config.getString(Keys.SMS_HTTP_TEMPLATE).trim();
if (template.charAt(0) == '{' || template.charAt(0) == '[') {
encode = false;
mediaType = MediaType.APPLICATION_JSON_TYPE;
@@ -78,7 +81,7 @@ public class HttpSmsClient implements SmsManager {
}
private Invocation.Builder getRequestBuilder() {
- Invocation.Builder builder = Context.getClient().target(url).request();
+ Invocation.Builder builder = client.target(url).request();
if (authorization != null) {
builder = builder.header(authorizationHeader, authorization);
}
diff --git a/src/main/java/org/traccar/sms/SnsSmsClient.java b/src/main/java/org/traccar/sms/SnsSmsClient.java
index 49889ac89..ed5a325cc 100644
--- a/src/main/java/org/traccar/sms/SnsSmsClient.java
+++ b/src/main/java/org/traccar/sms/SnsSmsClient.java
@@ -27,7 +27,7 @@ import com.amazonaws.services.sns.model.PublishRequest;
import com.amazonaws.services.sns.model.PublishResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.traccar.Context;
+import org.traccar.config.Config;
import org.traccar.config.Keys;
import java.util.HashMap;
@@ -38,19 +38,12 @@ public class SnsSmsClient implements SmsManager {
private final AmazonSNSAsync snsClient;
- public SnsSmsClient() {
- if (Context.getConfig().hasKey(Keys.SMS_AWS_REGION)
- && Context.getConfig().hasKey(Keys.SMS_AWS_ACCESS)
- && Context.getConfig().hasKey(Keys.SMS_AWS_SECRET)) {
- BasicAWSCredentials awsCredentials =
- new BasicAWSCredentials(Context.getConfig().getString(Keys.SMS_AWS_ACCESS),
- Context.getConfig().getString(Keys.SMS_AWS_SECRET));
- snsClient = AmazonSNSAsyncClientBuilder.standard()
- .withRegion(Context.getConfig().getString(Keys.SMS_AWS_REGION))
- .withCredentials(new AWSStaticCredentialsProvider(awsCredentials)).build();
- } else {
- throw new RuntimeException("SNS Not Configured Properly. Please provide valid config.");
- }
+ public SnsSmsClient(Config config) {
+ BasicAWSCredentials awsCredentials = new BasicAWSCredentials(
+ config.getString(Keys.SMS_AWS_ACCESS), config.getString(Keys.SMS_AWS_SECRET));
+ snsClient = AmazonSNSAsyncClientBuilder.standard()
+ .withRegion(config.getString(Keys.SMS_AWS_REGION))
+ .withCredentials(new AWSStaticCredentialsProvider(awsCredentials)).build();
}
@Override
@@ -64,11 +57,12 @@ public class SnsSmsClient implements SmsManager {
PublishRequest publishRequest = new PublishRequest().withMessage(message)
.withPhoneNumber(destAddress).withMessageAttributes(smsAttributes);
- snsClient.publishAsync(publishRequest, new AsyncHandler<PublishRequest, PublishResult>() {
+ snsClient.publishAsync(publishRequest, new AsyncHandler<>() {
@Override
public void onError(Exception exception) {
LOGGER.error("SMS send failed", exception);
}
+
@Override
public void onSuccess(PublishRequest request, PublishResult result) {
}
diff --git a/src/main/java/org/traccar/speedlimit/OverpassSpeedLimitProvider.java b/src/main/java/org/traccar/speedlimit/OverpassSpeedLimitProvider.java
index 429a47c76..edf089f37 100644
--- a/src/main/java/org/traccar/speedlimit/OverpassSpeedLimitProvider.java
+++ b/src/main/java/org/traccar/speedlimit/OverpassSpeedLimitProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 Anton Tananaev (anton@traccar.org)
+ * Copyright 2020 - 2022 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.
@@ -15,19 +15,21 @@
*/
package org.traccar.speedlimit;
-import org.traccar.Context;
import org.traccar.helper.UnitsConverter;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.ws.rs.client.AsyncInvoker;
+import javax.ws.rs.client.Client;
import javax.ws.rs.client.InvocationCallback;
public class OverpassSpeedLimitProvider implements SpeedLimitProvider {
+ private final Client client;
private final String url;
- public OverpassSpeedLimitProvider(String url) {
+ public OverpassSpeedLimitProvider(Client client, String url) {
+ this.client = client;
this.url = url + "?data=[out:json];way[maxspeed](around:100.0,%f,%f);out%%20tags;";
}
@@ -46,7 +48,7 @@ public class OverpassSpeedLimitProvider implements SpeedLimitProvider {
@Override
public void getSpeedLimit(double latitude, double longitude, SpeedLimitProviderCallback callback) {
String formattedUrl = String.format(url, latitude, longitude);
- AsyncInvoker invoker = Context.getClient().target(formattedUrl).request().async();
+ AsyncInvoker invoker = client.target(formattedUrl).request().async();
invoker.get(new InvocationCallback<JsonObject>() {
@Override
public void completed(JsonObject json) {
diff --git a/src/test/java/org/traccar/geocoder/GeocoderTest.java b/src/test/java/org/traccar/geocoder/GeocoderTest.java
index 6a85777b1..ff33b1f1c 100644
--- a/src/test/java/org/traccar/geocoder/GeocoderTest.java
+++ b/src/test/java/org/traccar/geocoder/GeocoderTest.java
@@ -3,6 +3,8 @@ package org.traccar.geocoder;
import org.junit.Ignore;
import org.junit.Test;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
import java.util.Locale;
import static org.junit.Assert.assertEquals;
@@ -13,10 +15,12 @@ public class GeocoderTest {
Locale.setDefault(Locale.US);
}
+ private final Client client = ClientBuilder.newClient();
+
@Ignore
@Test
public void testGoogle() {
- Geocoder geocoder = new GoogleGeocoder(null, null, 0, new AddressFormat());
+ Geocoder geocoder = new GoogleGeocoder(client, null, null, 0, new AddressFormat());
String address = geocoder.getAddress(31.776797, 35.211489, null);
assertEquals("1 Ibn Shaprut St, Jerusalem, Jerusalem District, IL", address);
}
@@ -24,7 +28,7 @@ public class GeocoderTest {
@Ignore
@Test
public void testNominatim() {
- Geocoder geocoder = new NominatimGeocoder(null, null, null, 0, new AddressFormat());
+ Geocoder geocoder = new NominatimGeocoder(client, null, null, null, 0, new AddressFormat());
String address = geocoder.getAddress(40.7337807, -73.9974401, null);
assertEquals("35 West 9th Street, NYC, New York, US", address);
}
@@ -32,7 +36,7 @@ public class GeocoderTest {
@Ignore
@Test
public void testGisgraphy() {
- Geocoder geocoder = new GisgraphyGeocoder(null, 0, new AddressFormat());
+ Geocoder geocoder = new GisgraphyGeocoder(client, null, 0, new AddressFormat());
String address = geocoder.getAddress(48.8530000, 2.3400000, null);
assertEquals("Rue du Jardinet, Paris, Île-de-France, FR", address);
}
@@ -41,7 +45,7 @@ public class GeocoderTest {
@Test
public void testOpenCage() {
Geocoder geocoder = new OpenCageGeocoder(
- "http://api.opencagedata.com/geocode/v1", "SECRET", null, 0, new AddressFormat());
+ client, "http://api.opencagedata.com/geocode/v1", "SECRET", null, 0, new AddressFormat());
String address = geocoder.getAddress(34.116302, -118.051519, null);
assertEquals("Charleston Road, California, US", address);
}
@@ -49,7 +53,7 @@ public class GeocoderTest {
@Ignore
@Test
public void testGeocodeFarm() {
- Geocoder geocoder = new GeocodeFarmGeocoder(null, null, 0, new AddressFormat());
+ Geocoder geocoder = new GeocodeFarmGeocoder(client, null, null, 0, new AddressFormat());
String address = geocoder.getAddress(34.116302, -118.051519, null);
assertEquals("Estrella Avenue, Arcadia, California, United States", address);
}
@@ -57,7 +61,7 @@ public class GeocoderTest {
@Ignore
@Test
public void testGeocodeXyz() {
- Geocoder geocoder = new GeocodeXyzGeocoder(null, 0, new AddressFormat());
+ Geocoder geocoder = new GeocodeXyzGeocoder(client, null, 0, new AddressFormat());
String address = geocoder.getAddress(34.116302, -118.051519, null);
assertEquals("605 ESTRELLA AVE, ARCADIA, California United States of America, US", address);
}
@@ -65,7 +69,7 @@ public class GeocoderTest {
@Ignore
@Test
public void testBan() {
- Geocoder geocoder = new BanGeocoder(0, new AddressFormat("%f [%d], %c"));
+ Geocoder geocoder = new BanGeocoder(client, 0, new AddressFormat("%f [%d], %c"));
String address = geocoder.getAddress(48.8575, 2.2944, null);
assertEquals("8 Avenue Gustave Eiffel 75007 Paris [75, Paris, Île-de-France], FR", address);
}
@@ -73,7 +77,7 @@ public class GeocoderTest {
@Ignore
@Test
public void testHere() {
- Geocoder geocoder = new HereGeocoder(null, "", "", null, 0, new AddressFormat());
+ Geocoder geocoder = new HereGeocoder(client, null, "", "", null, 0, new AddressFormat());
String address = geocoder.getAddress(48.8575, 2.2944, null);
assertEquals("6 Avenue Gustave Eiffel, Paris, Île-de-France, FRA", address);
}
@@ -81,7 +85,7 @@ public class GeocoderTest {
@Ignore
@Test
public void testMapmyIndia() {
- Geocoder geocoder = new MapmyIndiaGeocoder("", "", 0, new AddressFormat("%f"));
+ Geocoder geocoder = new MapmyIndiaGeocoder(client, "", "", 0, new AddressFormat("%f"));
String address = geocoder.getAddress(28.6129602407977, 77.2294557094574, null);
assertEquals("New Delhi, Delhi. 1 m from India Gate pin-110001 (India)", address);
}
@@ -89,7 +93,7 @@ public class GeocoderTest {
@Ignore
@Test
public void testPositionStack() {
- Geocoder geocoder = new PositionStackGeocoder("", 0, new AddressFormat("%f"));
+ Geocoder geocoder = new PositionStackGeocoder(client, "", 0, new AddressFormat("%f"));
String address = geocoder.getAddress(28.6129602407977, 77.2294557094574, null);
assertEquals("India Gate, New Delhi, India", address);
}
@@ -97,7 +101,7 @@ public class GeocoderTest {
@Ignore
@Test
public void testMapbox() {
- Geocoder geocoder = new MapboxGeocoder("", 0, new AddressFormat("%f"));
+ Geocoder geocoder = new MapboxGeocoder(client, "", 0, new AddressFormat("%f"));
String address = geocoder.getAddress(40.733, -73.989, null);
assertEquals("120 East 13th Street, New York, New York 10003, United States", address);
}
@@ -105,7 +109,7 @@ public class GeocoderTest {
@Ignore
@Test
public void testMapTiler() {
- Geocoder geocoder = new MapTilerGeocoder("", 0, new AddressFormat());
+ Geocoder geocoder = new MapTilerGeocoder(client, "", 0, new AddressFormat());
String address = geocoder.getAddress(40.733, -73.989, null);
assertEquals("East 13th Street, New York City, New York, United States", address);
}
@@ -113,7 +117,7 @@ public class GeocoderTest {
@Ignore
@Test
public void testGeoapify() {
- Geocoder geocoder = new GeoapifyGeocoder("", null, 0, new AddressFormat());
+ Geocoder geocoder = new GeoapifyGeocoder(client, "", null, 0, new AddressFormat());
String address = geocoder.getAddress(40.733, -73.989, null);
assertEquals("114 East 13th Street, New York, New York, US", address);
}
diff --git a/src/test/java/org/traccar/geolocation/GeolocationProviderTest.java b/src/test/java/org/traccar/geolocation/GeolocationProviderTest.java
index 2729052d6..1ceac41cc 100644
--- a/src/test/java/org/traccar/geolocation/GeolocationProviderTest.java
+++ b/src/test/java/org/traccar/geolocation/GeolocationProviderTest.java
@@ -6,19 +6,24 @@ import org.traccar.BaseTest;
import org.traccar.model.CellTower;
import org.traccar.model.Network;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
public class GeolocationProviderTest extends BaseTest {
+ private final Client client = ClientBuilder.newClient();
+
@Ignore
@Test
public void test() throws Exception {
- testLocationProvider();
+ testMozilla();
}
- public void testLocationProvider() throws Exception {
- MozillaGeolocationProvider provider = new MozillaGeolocationProvider(null);
+ public void testMozilla() throws Exception {
+ MozillaGeolocationProvider provider = new MozillaGeolocationProvider(client, null);
Network network = new Network(CellTower.from(208, 1, 2, 1234567));
diff --git a/src/test/java/org/traccar/speedlimit/OverpassSpeedLimitProviderTest.java b/src/test/java/org/traccar/speedlimit/OverpassSpeedLimitProviderTest.java
index dcac78f80..aa0be23cf 100644
--- a/src/test/java/org/traccar/speedlimit/OverpassSpeedLimitProviderTest.java
+++ b/src/test/java/org/traccar/speedlimit/OverpassSpeedLimitProviderTest.java
@@ -3,19 +3,24 @@ package org.traccar.speedlimit;
import org.junit.Ignore;
import org.junit.Test;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
public class OverpassSpeedLimitProviderTest {
+ private final Client client = ClientBuilder.newClient();
+
@Ignore
@Test
public void test() throws Exception {
- testLocationProvider();
+ testOverpass();
}
- public void testLocationProvider() throws Exception {
- SpeedLimitProvider provider = new OverpassSpeedLimitProvider("http://8.8.8.8/api/interpreter");
+ public void testOverpass() throws Exception {
+ SpeedLimitProvider provider = new OverpassSpeedLimitProvider(client, "http://8.8.8.8/api/interpreter");
provider.getSpeedLimit(34.74767, -82.48098, new SpeedLimitProvider.SpeedLimitProviderCallback() {
@Override