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"));
}