diff --git a/web_api/pom.xml b/web_api/pom.xml index db07264..dd6bf48 100644 --- a/web_api/pom.xml +++ b/web_api/pom.xml @@ -7,7 +7,7 @@ Web API web_api - 0.2-SNAPSHOT + 0.3-SNAPSHOT bundle 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 53378ec..1d9dbfc 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 @@ -20,18 +20,22 @@ import java.io.IOException; public class RequestRouter extends AbstractHandler { private final Gson gson = new Gson(); private Logger logger = LoggerFactory.getLogger(RequestRouter.class.getName()); + private WebModule parent; private DBMethodHandler dbHandler; - private AdminMethodHandler restMethodHandler = new AdminMethodHandler(this); + private AdminMethodHandler restMethodHandler; RequestRouter(WebModule parent) { dbHandler = new DBMethodHandler(parent); + restMethodHandler = new AdminMethodHandler(this, parent.getCore()); + this.parent = parent; } @Override public void handle(String url, Request request, HttpServletRequest httpRequest, HttpServletResponse response) throws IOException, ServletException { + if (parent.isStopping()) return; request.setHandled(true); - response.setContentType("text/html;charset=utf-8"); + response.setContentType("application/json;charset=utf-8"); // Some headers for Cross Domain Origin // TODO: переместить в конфиг response.setHeader("Access-Control-Allow-Origin", "*"); @@ -42,7 +46,9 @@ public class RequestRouter extends AbstractHandler { // We don't want to have something done if we receive an OPTIONS request if (!request.getMethod().equalsIgnoreCase("OPTIONS")) { Response response1 = route(url, request, httpRequest, response); - response.getWriter().println(response1.toJson(gson)); + if (response1 != null) { + response.getWriter().println(response1.toJson(gson)); + } } else { response.setStatus(HttpServletResponse.SC_OK); response.getWriter().println(new Response("success", "Ok").toJson(gson)); 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 3174437..4b608ad 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 @@ -33,6 +33,7 @@ public class WebModule { logger.trace("Initializing WEB-server on localhost: {}", port); server = new Server(port); + server.setStopTimeout(1000); server.setStopAtShutdown(true); server.setHandler(new RequestRouter(this)); @@ -57,6 +58,10 @@ public class WebModule { return db; } + public ICore getCore() { + return core; + } + void stop() { try { server.stop(); @@ -64,4 +69,8 @@ public class WebModule { logger.error("Error stopping JettyServer", e); } } + + public boolean isStopping() { + return server.isStopping() || server.isStopped(); + } } diff --git a/web_api/src/main/java/eu/arcadex/system/web_api/methods/AdminMethodHandler.java b/web_api/src/main/java/eu/arcadex/system/web_api/methods/AdminMethodHandler.java index 9b2936a..7b9b721 100644 --- a/web_api/src/main/java/eu/arcadex/system/web_api/methods/AdminMethodHandler.java +++ b/web_api/src/main/java/eu/arcadex/system/web_api/methods/AdminMethodHandler.java @@ -1,5 +1,6 @@ package eu.arcadex.system.web_api.methods; +import eu.arcadex.system.core.api.ICore; import eu.arcadex.system.web_api.RequestRouter; import eu.arcadex.system.web_api.Response; import org.eclipse.jetty.server.Request; @@ -22,9 +23,11 @@ public class AdminMethodHandler extends AbstractMethodHandler { private List blackList = new ArrayList<>(); private RequestRouter handler; + private ICore core; - public AdminMethodHandler(RequestRouter handler) { + public AdminMethodHandler(RequestRouter handler, ICore core) { this.handler = handler; + this.core = core; } /** @@ -93,6 +96,18 @@ public class AdminMethodHandler extends AbstractMethodHandler { response.setStatus(HttpServletResponse.SC_OK); handler.getLogger().info("Login accepted: " + userName); return (new Response("success", "Ok")); + case "reload": + handler.getLogger().info("request reload modules"); + response.setStatus(202); + response.getOutputStream().close(); + response.flushBuffer(); + new Thread(){ + @Override + public void run() { + core.reloadMoludes(); + } + }.start(); + return null; default: return (new Response("success", "Not implemented yet")); }