diff --git a/web_api/pom.xml b/web_api/pom.xml
index 1d74966..db07264 100644
--- a/web_api/pom.xml
+++ b/web_api/pom.xml
@@ -7,7 +7,7 @@
Web API
web_api
- 0.1-SNAPSHOT
+ 0.2-SNAPSHOT
bundle
@@ -22,6 +22,11 @@
core
0.1-SNAPSHOT
+
+ eu.arcadex.system
+ database
+ 0.1-SNAPSHOT
+
org.eclipse.jetty
jetty-server
@@ -47,7 +52,11 @@
Arcadex System: ${name} ${version}
${groupId}.${artifactId}
eu.arcadex.system.web_api.Activator
- eu.arcadex.system.core.api, *
+
+ eu.arcadex.system.core.api,
+ eu.arcadex.system.database.api,
+ *
+
diff --git a/web_api/src/main/java/eu/arcadex/system/web_api/Activator.java b/web_api/src/main/java/eu/arcadex/system/web_api/Activator.java
index 7721610..caf5b29 100644
--- a/web_api/src/main/java/eu/arcadex/system/web_api/Activator.java
+++ b/web_api/src/main/java/eu/arcadex/system/web_api/Activator.java
@@ -1,5 +1,6 @@
package eu.arcadex.system.web_api;
+import eu.arcadex.system.database.api.IDatabase;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;
@@ -10,21 +11,26 @@ import eu.arcadex.system.core.api.ICore;
* 2016
*/
public class Activator implements BundleActivator {
- private ServiceTracker, ICore> tracker;
+ private ServiceTracker, ICore> coreTracker;
+ private ServiceTracker, IDatabase> dbTracker;
private WebModule webModule;
@Override
public void start(BundleContext bundleContext) throws Exception {
- tracker = new ServiceTracker(bundleContext, ICore.class.getName(), null);
- tracker.open();
+ coreTracker = new ServiceTracker(bundleContext, ICore.class.getName(), null);
+ coreTracker.open();
- webModule = new WebModule(tracker);
+ dbTracker = new ServiceTracker(bundleContext, IDatabase.class.getName(), null);
+ dbTracker.open();
+
+ webModule = new WebModule(coreTracker, dbTracker);
webModule.init();
}
@Override
public void stop(BundleContext bundleContext) throws Exception {
webModule.stop();
- tracker.close();
+ dbTracker.close();
+ coreTracker.close();
}
}
diff --git a/web_api/src/main/java/eu/arcadex/system/web_api/RequestRouter.java b/web_api/src/main/java/eu/arcadex/system/web_api/RequestRouter.java
index 3e18648..53378ec 100644
--- a/web_api/src/main/java/eu/arcadex/system/web_api/RequestRouter.java
+++ b/web_api/src/main/java/eu/arcadex/system/web_api/RequestRouter.java
@@ -21,9 +21,13 @@ public class RequestRouter extends AbstractHandler {
private final Gson gson = new Gson();
private Logger logger = LoggerFactory.getLogger(RequestRouter.class.getName());
- private DBMethodHandler dbHandler = new DBMethodHandler();
+ private DBMethodHandler dbHandler;
private AdminMethodHandler restMethodHandler = new AdminMethodHandler(this);
+ RequestRouter(WebModule parent) {
+ dbHandler = new DBMethodHandler(parent);
+ }
+
@Override
public void handle(String url, Request request, HttpServletRequest httpRequest, HttpServletResponse response) throws IOException, ServletException {
request.setHandled(true);
diff --git a/web_api/src/main/java/eu/arcadex/system/web_api/WebModule.java b/web_api/src/main/java/eu/arcadex/system/web_api/WebModule.java
index 02d386a..3174437 100644
--- a/web_api/src/main/java/eu/arcadex/system/web_api/WebModule.java
+++ b/web_api/src/main/java/eu/arcadex/system/web_api/WebModule.java
@@ -1,6 +1,7 @@
package eu.arcadex.system.web_api;
import eu.arcadex.system.core.api.ICore;
+import eu.arcadex.system.database.api.IDatabase;
import org.eclipse.jetty.server.Server;
import org.osgi.util.tracker.ServiceTracker;
import org.slf4j.Logger;
@@ -12,17 +13,20 @@ import org.slf4j.LoggerFactory;
* @author Daniil 2015
* @author DmitriyMX 2016 (порт на ArcadexSystem Reborn)
*/
-class WebModule {
+public class WebModule {
+ private final int port = 8090;
+ private ServiceTracker, IDatabase> dbTracker;
private Logger logger = LoggerFactory.getLogger(WebModule.class.getName());
private ICore core;
private Server server;
- private final int port = 8090;
- WebModule(ServiceTracker, ICore> tracker) {
- core = tracker.getService();
+ WebModule(ServiceTracker, ICore> coreTracker, ServiceTracker, IDatabase> dbTracker) {
+ core = coreTracker.getService();
if (core == null) {
throw new RuntimeException("Service \"ICore\" not found!");
}
+
+ this.dbTracker = dbTracker;
}
void init() {
@@ -30,7 +34,7 @@ class WebModule {
server = new Server(port);
server.setStopAtShutdown(true);
- server.setHandler(new RequestRouter());
+ server.setHandler(new RequestRouter(this));
try {
server.start();
@@ -39,6 +43,20 @@ class WebModule {
}
}
+ public IDatabase getDatabase() {
+ IDatabase db = null;
+ try {
+ db = dbTracker.waitForService(5000);
+ } catch (InterruptedException ignore) {
+ // ignore
+ }
+
+ if (db == null) {
+ throw new RuntimeException("Service \"IDatabase\" not found!");
+ }
+ return db;
+ }
+
void stop() {
try {
server.stop();
diff --git a/web_api/src/main/java/eu/arcadex/system/web_api/methods/DBMethodHandler.java b/web_api/src/main/java/eu/arcadex/system/web_api/methods/DBMethodHandler.java
index f784773..470ab24 100644
--- a/web_api/src/main/java/eu/arcadex/system/web_api/methods/DBMethodHandler.java
+++ b/web_api/src/main/java/eu/arcadex/system/web_api/methods/DBMethodHandler.java
@@ -1,5 +1,7 @@
package eu.arcadex.system.web_api.methods;
+import eu.arcadex.system.web_api.WebModule;
+import eu.arcadex.system.database.api.IDatabase;
import eu.arcadex.system.web_api.Response;
import org.eclipse.jetty.server.Request;
@@ -7,19 +9,21 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
-import java.util.HashMap;
/**
* Handler for Database API requests
*
* @author Daniil on 06.04.16.
+ * @author DmitriyMX 2016
*/
public class DBMethodHandler extends AbstractMethodHandler {
// TODO: Get this from cfg
private final String dbKey = "jhkljdsjklfjkljdasf";
- // TODO: Replace with module call
- private HashMap database = new HashMap<>();
+ private WebModule parent;
+ public DBMethodHandler(WebModule parent) {
+ this.parent = parent;
+ }
/**
* Handle database API requests
@@ -76,6 +80,7 @@ public class DBMethodHandler extends AbstractMethodHandler {
}
// Here comes actual DB listener
+ IDatabase database = parent.getDatabase();
String key = url.substring(4).trim();
if (request.getMethod().equalsIgnoreCase("GET")) {
@@ -88,7 +93,7 @@ public class DBMethodHandler extends AbstractMethodHandler {
return (new Response("success", database.get(key)));
}
} else if (request.getMethod().equalsIgnoreCase("POST")) {
- database.put(key, postData);
+ database.set(key, postData);
response.setStatus(HttpServletResponse.SC_OK);
return (new Response("success", "Ok"));
} else if (request.getMethod().equalsIgnoreCase("DELETE")) {