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 tracker; + private ServiceTracker coreTracker; + private ServiceTracker 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 dbTracker; private Logger logger = LoggerFactory.getLogger(WebModule.class.getName()); private ICore core; private Server server; - private final int port = 8090; - WebModule(ServiceTracker tracker) { - core = tracker.getService(); + WebModule(ServiceTracker coreTracker, ServiceTracker 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")) {