diff --git a/webinterface/pom.xml b/webinterface/pom.xml
index 6bdeaca..b7e6ddd 100644
--- a/webinterface/pom.xml
+++ b/webinterface/pom.xml
@@ -19,7 +19,7 @@
asys
webinterface
- 0.3-SNAPSHOT
+ 0.4-SNAPSHOT
bundle
@@ -33,6 +33,13 @@
api
0.1-SNAPSHOT
+
+ com.google.code.gson
+ gson
+ 2.7
+
+
+
diff --git a/webinterface/src/main/java/asys/webinterface/AjaxHandler.java b/webinterface/src/main/java/asys/webinterface/AjaxHandler.java
new file mode 100644
index 0000000..f6342e0
--- /dev/null
+++ b/webinterface/src/main/java/asys/webinterface/AjaxHandler.java
@@ -0,0 +1,51 @@
+/*
+ * DmitriyMX
+ * 2016-12-13
+ */
+package asys.webinterface;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.charset.Charset;
+
+public class AjaxHandler implements HttpHandler {
+ private static final Charset defaultCharset = Charset.forName("UTF-8");
+ private BundleContext context;
+
+ public AjaxHandler(BundleContext context) {
+ this.context = context;
+ }
+
+ @Override
+ public void handle(HttpExchange httpExchange) throws IOException {
+ String outJson = "{}";
+
+ String jsonPath = httpExchange.getRequestURI().getPath();
+ if (jsonPath.equals("/ajax/bundles.json")) {
+ JsonArray jsonArray = new JsonArray();
+
+ for (Bundle bundle : context.getBundle(0).getBundleContext().getBundles()) {
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.addProperty("name", bundle.getHeaders().get("Bundle-Name"));
+ jsonObject.addProperty("symname", bundle.getSymbolicName());
+ jsonArray.add(jsonObject);
+ }
+
+ outJson = jsonArray.toString();
+ }
+
+ httpExchange.getResponseHeaders().add("Context-Type", "application/json;charset=utf-8");
+ httpExchange.sendResponseHeaders(200, 0);
+ OutputStream responseBody = httpExchange.getResponseBody();
+ responseBody.write(outJson.getBytes(defaultCharset));
+ responseBody.close();
+ }
+}
diff --git a/webinterface/src/main/java/asys/webinterface/IndexHandler.java b/webinterface/src/main/java/asys/webinterface/IndexHandler.java
index e06bb63..029951f 100644
--- a/webinterface/src/main/java/asys/webinterface/IndexHandler.java
+++ b/webinterface/src/main/java/asys/webinterface/IndexHandler.java
@@ -6,13 +6,9 @@ package asys.webinterface;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
-import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.URI;
+import java.io.*;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
@@ -20,38 +16,32 @@ import java.util.Map;
public class IndexHandler implements HttpHandler {
private static final Charset defaultCharset = Charset.forName("UTF-8");
private BundleContext context;
+ private String htmlTemplate;
public IndexHandler(BundleContext context) {
this.context = context;
+
+ try {
+ InputStream inputStream = getClass().getResourceAsStream("/index.html");
+ BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
+
+ StringBuilder sb = new StringBuilder();
+ String line;
+ while ((line = br.readLine()) != null) {
+ sb.append(line).append("\n");
+ }
+ htmlTemplate = sb.toString();
+ } catch (Exception e) {
+ throw new RuntimeException("Error load htmlTemplate", e);
+ }
}
@Override
public void handle(HttpExchange httpExchange) throws IOException {
- URI requestURI = httpExchange.getRequestURI();
- if (requestURI.getQuery() != null && !requestURI.getQuery().isEmpty()) {
- Map map = queryToMap(requestURI.getQuery());
- int bndid = Integer.valueOf(map.get("bnd"));
- try {
- context.getBundle(bndid).stop();
- } catch (BundleException e) {
- e.printStackTrace();
- }
- }
-
- StringBuilder htmlText = new StringBuilder("");
- htmlText.append("").append("ASys Web interface").append("
")
- .append("");
- for (Bundle bundle : context.getBundle(0).getBundleContext().getBundles()) {
- htmlText.append("- ").append(bundle.getHeaders().get("Bundle-Name"))
- .append(" [Stop]")
- .append("
");
- }
- htmlText.append("
");
-
- httpExchange.sendResponseHeaders(200, htmlText.length());
- httpExchange.setAttribute("Context-Type", "text/html;charset=utf-8");
+ httpExchange.getResponseHeaders().add("Context-Type","text/html;charset=utf-8");
+ httpExchange.sendResponseHeaders(200, htmlTemplate.length());
OutputStream responseBody = httpExchange.getResponseBody();
- responseBody.write(htmlText.toString().getBytes(defaultCharset));
+ responseBody.write(htmlTemplate.getBytes(defaultCharset));
responseBody.close();
}
diff --git a/webinterface/src/main/java/asys/webinterface/StaticHandler.java b/webinterface/src/main/java/asys/webinterface/StaticHandler.java
new file mode 100644
index 0000000..092f5a4
--- /dev/null
+++ b/webinterface/src/main/java/asys/webinterface/StaticHandler.java
@@ -0,0 +1,41 @@
+/*
+ * DmitriyMX
+ * 2016-12-12
+ */
+package asys.webinterface;
+
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public class StaticHandler implements HttpHandler {
+ @Override
+ public void handle(HttpExchange httpExchange) throws IOException {
+ String fileId = httpExchange.getRequestURI().getPath();
+ fileId = fileId.replace("../", "").replace("//", "/");
+ System.err.println(fileId);
+ InputStream inputStream = getClass().getResourceAsStream(fileId);
+ if (inputStream == null) {
+ String response = "Error 404 File not found.";
+ httpExchange.sendResponseHeaders(404, response.length());
+ OutputStream outputStream = httpExchange.getResponseBody();
+ outputStream.write(response.getBytes());
+ outputStream.flush();
+ outputStream.close();
+ } else {
+ httpExchange.sendResponseHeaders(200, 0);
+ OutputStream outputStream = httpExchange.getResponseBody();
+ final byte[] buffer = new byte[0x10000];
+ int len;
+ while((len = inputStream.read(buffer)) > 0) {
+ outputStream.write(buffer, 0, len);
+ }
+ outputStream.flush();
+ outputStream.close();
+ inputStream.close();
+ }
+ }
+}
diff --git a/webinterface/src/main/java/asys/webinterface/WebServer.java b/webinterface/src/main/java/asys/webinterface/WebServer.java
index c02b0c9..5f77bdb 100644
--- a/webinterface/src/main/java/asys/webinterface/WebServer.java
+++ b/webinterface/src/main/java/asys/webinterface/WebServer.java
@@ -21,6 +21,8 @@ public class WebServer {
public void start(int port) throws IOException {
server = HttpServer.create(new InetSocketAddress(port), 0);
server.createContext("/", new IndexHandler(context));
+ server.createContext("/static", new StaticHandler());
+ server.createContext("/ajax", new AjaxHandler(context));
server.start();
}
diff --git a/webinterface/src/main/resources/index.html b/webinterface/src/main/resources/index.html
new file mode 100644
index 0000000..3911d4a
--- /dev/null
+++ b/webinterface/src/main/resources/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+ ASys: Web interface
+
+
+
+
+
+ ASys: Web interface
+
+
+
+
\ No newline at end of file
diff --git a/webinterface/src/main/resources/static/app.js b/webinterface/src/main/resources/static/app.js
new file mode 100644
index 0000000..7fb82d3
--- /dev/null
+++ b/webinterface/src/main/resources/static/app.js
@@ -0,0 +1,2 @@
+'use strict';
+angular.module('asysApp', []);
\ No newline at end of file
diff --git a/webinterface/src/main/resources/static/bundle-list.component.js b/webinterface/src/main/resources/static/bundle-list.component.js
new file mode 100644
index 0000000..1cb6487
--- /dev/null
+++ b/webinterface/src/main/resources/static/bundle-list.component.js
@@ -0,0 +1,19 @@
+'use strict';
+
+angular.
+ module('asysApp').
+ component('bundleList', {
+ template:
+ '' +
+ '- ' +
+ '{{bundle.name}}' +
+ '
{{bundle.symname}}
' +
+ ' ' +
+ '
',
+ controller: function PhoneListController($http) {
+ var self = this;
+ $http.get('/ajax/bundles.json').then(function(response) {
+ self.bundles = response.data;
+ });
+ }
+ });
\ No newline at end of file