aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/traccar/Context.java24
-rw-r--r--src/org/traccar/ServerManager.java4
-rw-r--r--src/org/traccar/database/ConnectionManager.java17
-rw-r--r--src/org/traccar/database/PermissionsManager.java10
-rw-r--r--src/org/traccar/http/WebServer.java94
5 files changed, 76 insertions, 73 deletions
diff --git a/src/org/traccar/Context.java b/src/org/traccar/Context.java
index 707e6edb6..f1fe443ed 100644
--- a/src/org/traccar/Context.java
+++ b/src/org/traccar/Context.java
@@ -97,10 +97,7 @@ public class Context {
dataManager = new DataManager(config);
identityManager = dataManager;
- connectionManager = new ConnectionManager();
- if (!config.getBoolean("web.old")) {
- permissionsManager = new PermissionsManager();
- }
+ connectionManager = new ConnectionManager(dataManager);
if (config.getBoolean("geocoder.enable")) {
String type = config.getString("geocoder.type", "google");
@@ -119,22 +116,21 @@ public class Context {
}
if (config.getBoolean("web.enable")) {
- webServer = new WebServer(config);
+ if (!config.getBoolean("web.old")) {
+ permissionsManager = new PermissionsManager(dataManager);
+ webServer = new WebServer(config);
+ } else {
+ webServer = new WebServer(config, dataManager.getDataSource());
+ }
}
serverManager = new ServerManager();
-
- connectionManager.init(dataManager);
- serverManager.init();
}
- /**
- * Initialize context for unit testing
- */
- public static void init(IdentityManager identityManager) {
+ public static void init(IdentityManager testIdentityManager) {
config = new Config();
- connectionManager = new ConnectionManager();
- Context.identityManager = identityManager;
+ connectionManager = new ConnectionManager(null);
+ identityManager = testIdentityManager;
}
}
diff --git a/src/org/traccar/ServerManager.java b/src/org/traccar/ServerManager.java
index 7fbefc94e..e42e6dcd6 100644
--- a/src/org/traccar/ServerManager.java
+++ b/src/org/traccar/ServerManager.java
@@ -33,9 +33,9 @@ public class ServerManager {
private final List<TrackerServer> serverList = new LinkedList<>();
- public void init() throws Exception {
+ public ServerManager() throws Exception {
- List<String> names = new LinkedList<String>();
+ List<String> names = new LinkedList<>();
String packageName = "org.traccar.protocol";
String packagePath = packageName.replace('.', '/');
URL packageUrl = Thread.currentThread().getContextClassLoader().getResource(packagePath);
diff --git a/src/org/traccar/database/ConnectionManager.java b/src/org/traccar/database/ConnectionManager.java
index 0d357a41c..dc125d7b0 100644
--- a/src/org/traccar/database/ConnectionManager.java
+++ b/src/org/traccar/database/ConnectionManager.java
@@ -31,18 +31,19 @@ import org.traccar.model.Position;
public class ConnectionManager {
- private Map<String, ActiveDevice> activeDevices = new HashMap<>();
+ private final Map<String, ActiveDevice> activeDevices = new HashMap<>();
private final Map<Long, Position> positions = new HashMap<>();
private final Map<Long, Set<DataCacheListener>> listeners = new HashMap<>();
- public void init(DataManager dataManager) {
- try {
- Collection<Position> positions = dataManager.getLatestPositions();
- for (Position position : positions) {
- this.positions.put(position.getDeviceId(), position);
+ public ConnectionManager(DataManager dataManager) {
+ if (dataManager != null) {
+ try {
+ for (Position position : dataManager.getLatestPositions()) {
+ this.positions.put(position.getDeviceId(), position);
+ }
+ } catch (SQLException error) {
+ Log.warning(error);
}
- } catch (SQLException error) {
- Log.warning(error);
}
}
diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java
index 40783ad98..cfbbb9a39 100644
--- a/src/org/traccar/database/PermissionsManager.java
+++ b/src/org/traccar/database/PermissionsManager.java
@@ -21,13 +21,14 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import org.traccar.Context;
import org.traccar.helper.Log;
import org.traccar.model.Permission;
import org.traccar.model.User;
public class PermissionsManager {
+ private final DataManager dataManager;
+
private final Map<Long, User> users = new HashMap<>();
private final Map<Long, Set<Long>> permissions = new HashMap<>();
@@ -39,7 +40,8 @@ public class PermissionsManager {
return permissions.get(userId);
}
- public PermissionsManager() {
+ public PermissionsManager(DataManager dataManager) {
+ this.dataManager = dataManager;
refresh();
}
@@ -47,10 +49,10 @@ public class PermissionsManager {
users.clear();
permissions.clear();
try {
- for (User user : Context.getDataManager().getUsers()) {
+ for (User user : dataManager.getUsers()) {
users.put(user.getId(), user);
}
- for (Permission permission : Context.getDataManager().getPermissions()) {
+ for (Permission permission : dataManager.getPermissions()) {
getNotNull(permission.getUserId()).add(permission.getDeviceId());
}
} catch (SQLException error) {
diff --git a/src/org/traccar/http/WebServer.java b/src/org/traccar/http/WebServer.java
index a9238964c..785d817e8 100644
--- a/src/org/traccar/http/WebServer.java
+++ b/src/org/traccar/http/WebServer.java
@@ -17,6 +17,7 @@ package org.traccar.http;
import java.net.InetSocketAddress;
import javax.naming.InitialContext;
+import javax.sql.DataSource;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.HandlerList;
@@ -25,7 +26,6 @@ import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.webapp.WebAppContext;
import org.traccar.Config;
-import org.traccar.Context;
import org.traccar.helper.Log;
/**
@@ -34,8 +34,8 @@ import org.traccar.helper.Log;
public class WebServer {
private Server server;
-
- public WebServer(Config config) {
+
+ private void initServer(Config config) {
String address = config.getString("web.address");
int port = config.getInteger("web.port", 8082);
@@ -44,53 +44,57 @@ public class WebServer {
} else {
server = new Server(new InetSocketAddress(address, port));
}
+ }
+
+ public WebServer(Config config, DataSource dataSource) {
+
+ initServer(config);
+
+ try {
+ javax.naming.Context context = new InitialContext();
+ context.bind("java:/DefaultDS", dataSource);
+ } catch (Exception error) {
+ Log.warning(error);
+ }
- if (!config.getBoolean("web.old")) {
-
- ServletContextHandler servletHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
- servletHandler.setContextPath("/api");
- servletHandler.addServlet(new ServletHolder(new AsyncServlet()), "/async/*");
- servletHandler.addServlet(new ServletHolder(new ServerServlet()), "/server/*");
- servletHandler.addServlet(new ServletHolder(new UserServlet()), "/user/*");
- servletHandler.addServlet(new ServletHolder(new DeviceServlet()), "/device/*");
- servletHandler.addServlet(new ServletHolder(new PositionServlet()), "/position/*");
- servletHandler.addServlet(new ServletHolder(new CommandsServlet()), "/commands/*");
- servletHandler.addServlet(new ServletHolder(new MainServlet()), "/*");
-
- /*ResourceHandler mobileResourceHandler = new ResourceHandler();
- mobileResourceHandler.setResourceBase(properties.getProperty("web.mobile"));
- mobileResourceHandler.setWelcomeFiles(new String[] {"index.html"});
- ContextHandler mobileContext = new ContextHandler("/m");
- mobileContext.setHandler(mobileResourceHandler);*/
-
- ResourceHandler resourceHandler = new ResourceHandler();
- resourceHandler.setResourceBase(config.getString("web.path"));
- if (config.getBoolean("web.debug")) {
- resourceHandler.setWelcomeFiles(new String[] { "debug.html" });
- } else {
- resourceHandler.setWelcomeFiles(new String[] { "release.html" });
- }
-
- HandlerList handlerList = new HandlerList();
- handlerList.setHandlers(new Handler[] {servletHandler, resourceHandler});
-
- server.setHandler(handlerList);
+ WebAppContext webapp = new WebAppContext();
+ webapp.setContextPath("/");
+ webapp.setWar(config.getString("web.application"));
+ server.setHandler(webapp);
+ }
+ public WebServer(Config config) {
+
+ initServer(config);
+
+ ServletContextHandler servletHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
+ servletHandler.setContextPath("/api");
+ servletHandler.addServlet(new ServletHolder(new AsyncServlet()), "/async/*");
+ servletHandler.addServlet(new ServletHolder(new ServerServlet()), "/server/*");
+ servletHandler.addServlet(new ServletHolder(new UserServlet()), "/user/*");
+ servletHandler.addServlet(new ServletHolder(new DeviceServlet()), "/device/*");
+ servletHandler.addServlet(new ServletHolder(new PositionServlet()), "/position/*");
+ servletHandler.addServlet(new ServletHolder(new CommandsServlet()), "/commands/*");
+ servletHandler.addServlet(new ServletHolder(new MainServlet()), "/*");
+
+ /*ResourceHandler mobileResourceHandler = new ResourceHandler();
+ mobileResourceHandler.setResourceBase(properties.getProperty("web.mobile"));
+ mobileResourceHandler.setWelcomeFiles(new String[] {"index.html"});
+ ContextHandler mobileContext = new ContextHandler("/m");
+ mobileContext.setHandler(mobileResourceHandler);*/
+
+ ResourceHandler resourceHandler = new ResourceHandler();
+ resourceHandler.setResourceBase(config.getString("web.path"));
+ if (config.getBoolean("web.debug")) {
+ resourceHandler.setWelcomeFiles(new String[] { "debug.html" });
} else {
+ resourceHandler.setWelcomeFiles(new String[] { "release.html" });
+ }
- try {
- javax.naming.Context context = new InitialContext();
- context.bind("java:/DefaultDS", Context.getDataManager().getDataSource());
- } catch (Exception error) {
- Log.warning(error);
- }
-
- WebAppContext webapp = new WebAppContext();
- webapp.setContextPath("/");
- webapp.setWar(config.getString("web.application"));
- server.setHandler(webapp);
+ HandlerList handlerList = new HandlerList();
+ handlerList.setHandlers(new Handler[] {servletHandler, resourceHandler});
- }
+ server.setHandler(handlerList);
}
public void start() {