diff --git a/mcserver-manager/build.gradle b/mcserver-manager/build.gradle
index 008d4a4..913dc91 100644
--- a/mcserver-manager/build.gradle
+++ b/mcserver-manager/build.gradle
@@ -1,5 +1,5 @@
group = 'asys'
-version = '0.1-SNAPSHOT'
+version = '0.2-SNAPSHOT'
apply plugin: 'osgi'
diff --git a/mcserver-manager/src/main/java/asys/mcsmanager/Activator.java b/mcserver-manager/src/main/java/asys/mcsmanager/Activator.java
index d34eda3..dd68177 100644
--- a/mcserver-manager/src/main/java/asys/mcsmanager/Activator.java
+++ b/mcserver-manager/src/main/java/asys/mcsmanager/Activator.java
@@ -4,7 +4,7 @@
*/
package asys.mcsmanager;
-import asys.webinterface.api.MainMenu;
+import asys.webinterface.api.Webinterface;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceEvent;
@@ -15,15 +15,15 @@ import org.slf4j.LoggerFactory;
public class Activator implements BundleActivator, ServiceListener {
private final Logger logger = LoggerFactory.getLogger(Activator.class);
- private ServiceTracker, MainMenu> serviceTracker;
+ private ServiceTracker, Webinterface> serviceTracker;
@Override
public void start(BundleContext context) throws Exception {
logger.debug("Register service listener");
context.addServiceListener(this);
- logger.debug("Get service: {}", MainMenu.class);
- serviceTracker = new ServiceTracker<>(context, MainMenu.class, null);
+ logger.debug("Get service: {}", Webinterface.class);
+ serviceTracker = new ServiceTracker<>(context, Webinterface.class, null);
}
@Override
@@ -37,12 +37,13 @@ public class Activator implements BundleActivator, ServiceListener {
if (event.getType() == ServiceEvent.REGISTERED) {
String[] objectClass = (String[]) event.getServiceReference().getProperty("objectClass");
for (String classStr : objectClass) {
- if (classStr.equals("asys.webinterface.api.MainMenu")) {
+ if (classStr.equals(Webinterface.class.getCanonicalName())) {
try {
serviceTracker.open();
- MainMenu mainMenu = serviceTracker.waitForService(5000);
- if (mainMenu != null) {
- mainMenu.addItem("Серверы", "/modules/mcsmanager");
+ Webinterface webinterface = serviceTracker.waitForService(5000);
+ if (webinterface != null) {
+ webinterface.addMainMenuItem("mcsmanager",
+ "Серверы", "/modules/mcsmanager");
return;
} else {
logger.debug("service not found =(");
diff --git a/webinterface/build.gradle b/webinterface/build.gradle
index 68fd2d5..8996e1e 100644
--- a/webinterface/build.gradle
+++ b/webinterface/build.gradle
@@ -1,5 +1,5 @@
group = 'asys'
-version = '0.12-SNAPSHOT'
+version = '0.13-SNAPSHOT'
buildscript {
repositories {
diff --git a/webinterface/src/main/java/asys/webinterface/Activator.java b/webinterface/src/main/java/asys/webinterface/Activator.java
index 90abc3f..a6b0d8f 100644
--- a/webinterface/src/main/java/asys/webinterface/Activator.java
+++ b/webinterface/src/main/java/asys/webinterface/Activator.java
@@ -4,7 +4,7 @@
*/
package asys.webinterface;
-import asys.webinterface.api.MainMenu;
+import asys.webinterface.api.Webinterface;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
@@ -18,13 +18,14 @@ public class Activator implements BundleActivator {
@Override
public void start(BundleContext context) throws Exception {
- MainMenuImpl mainMenu = new MainMenuImpl();
- mainMenu.addItem("Модули", "#");
+ WebinterfaceImpl webinterface = new WebinterfaceImpl();
+ webinterface.addMainMenuItem("modules", "Модули", "#");
+ webinterface.addJavascript("modules", "/static/module.js");
- logger.trace("Register service: {}", MainMenu.class);
- serviceMainMenu = context.registerService(MainMenu.class, mainMenu, null);
+ logger.trace("Register service: {}", Webinterface.class);
+ serviceMainMenu = context.registerService(Webinterface.class, webinterface, null);
- webServer = new WebServer(context, mainMenu);
+ webServer = new WebServer(context, webinterface);
webServer.start(8778);
}
diff --git a/webinterface/src/main/java/asys/webinterface/AppJsHandler.java b/webinterface/src/main/java/asys/webinterface/AppJsHandler.java
index 4e08d3a..21938e5 100644
--- a/webinterface/src/main/java/asys/webinterface/AppJsHandler.java
+++ b/webinterface/src/main/java/asys/webinterface/AppJsHandler.java
@@ -18,10 +18,10 @@ public class AppJsHandler implements HttpHandler {
private String doneAppJs;
private int size;
- public AppJsHandler(MainMenuImpl mainMenu) {
+ public AppJsHandler(WebinterfaceImpl webinterface) {
try {
String appJs = IOUtils.toString(getClass().getResourceAsStream("/app.js"), "UTF-8");
- doneAppJs = appJs.replace("<{mainMenuItems}>", mainMenu.toReacJS());
+ doneAppJs = appJs.replace("<{mainMenuItems}>", webinterface.mainMenuItemsToReactJS());
size = doneAppJs.getBytes(IndexHandler.defaultCharset).length;
} catch (IOException e) {
logger.error("app.js", e);
diff --git a/webinterface/src/main/java/asys/webinterface/IndexHandler.java b/webinterface/src/main/java/asys/webinterface/IndexHandler.java
index a248bce..a663c0c 100644
--- a/webinterface/src/main/java/asys/webinterface/IndexHandler.java
+++ b/webinterface/src/main/java/asys/webinterface/IndexHandler.java
@@ -15,11 +15,12 @@ public class IndexHandler implements HttpHandler {
static final Charset defaultCharset = Charset.forName("UTF-8");
private String htmlTemplate;
- public IndexHandler() {
+ public IndexHandler(WebinterfaceImpl webinterface) {
try {
InputStream inputStream = getClass().getResourceAsStream("/index.html");
htmlTemplate = IOUtils.toString(inputStream, "UTF-8")
- .replace("<{moduleScript}>", "");
+ .replace("<{moduleScript}>", webinterface.javascriptToTags())
+ .replace("<{moduleStylesheet}>", webinterface.stylesheetToTags());
} catch (Exception e) {
throw new RuntimeException("Error load htmlTemplate", e);
}
diff --git a/webinterface/src/main/java/asys/webinterface/MainMenuImpl.java b/webinterface/src/main/java/asys/webinterface/MainMenuImpl.java
deleted file mode 100644
index b491f64..0000000
--- a/webinterface/src/main/java/asys/webinterface/MainMenuImpl.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * DmitriyMX
- * 2017-03-11
- */
-package asys.webinterface;
-
-import asys.webinterface.api.MainMenu;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.StringJoiner;
-
-public class MainMenuImpl implements MainMenu {
- private Map items = new HashMap<>();
-
- @Override
- public void addItem(String title, String href) {
- items.put(title, href);
- }
-
- public String toReacJS() {
- StringJoiner sj = new StringJoiner(",");
- for(Map.Entry entry : items.entrySet()) {
- sj.add(String.format(
- "ce(MainMenuItem, {title: '%s', href: '%s'})",
- entry.getKey().replace("'","\\'"), entry.getValue().replace("'","\\'")
- ));
- }
- return sj.toString();
- }
-
- @Override
- public String toString() {
- return "MainMenuImpl{" +
- "items=" + items +
- '}';
- }
-}
diff --git a/webinterface/src/main/java/asys/webinterface/WebServer.java b/webinterface/src/main/java/asys/webinterface/WebServer.java
index 632196c..bf69e44 100644
--- a/webinterface/src/main/java/asys/webinterface/WebServer.java
+++ b/webinterface/src/main/java/asys/webinterface/WebServer.java
@@ -13,17 +13,17 @@ import java.net.InetSocketAddress;
public class WebServer {
private HttpServer server;
private BundleContext context;
- private MainMenuImpl mainMenu;
+ private WebinterfaceImpl webinterface;
- public WebServer(BundleContext context, MainMenuImpl mainMenu) {
+ public WebServer(BundleContext context, WebinterfaceImpl webinterface) {
this.context = context;
- this.mainMenu = mainMenu;
+ this.webinterface = webinterface;
}
public void start(int port) throws IOException {
server = HttpServer.create(new InetSocketAddress(port), 0);
- server.createContext("/", new IndexHandler());
- server.createContext("/app.js", new AppJsHandler(mainMenu));
+ server.createContext("/", new IndexHandler(webinterface));
+ server.createContext("/app.js", new AppJsHandler(webinterface));
server.createContext("/static", new StaticHandler());
server.createContext("/ajax", new AjaxHandler(context));
server.start();
diff --git a/webinterface/src/main/java/asys/webinterface/WebinterfaceImpl.java b/webinterface/src/main/java/asys/webinterface/WebinterfaceImpl.java
new file mode 100644
index 0000000..ca678f7
--- /dev/null
+++ b/webinterface/src/main/java/asys/webinterface/WebinterfaceImpl.java
@@ -0,0 +1,114 @@
+/*
+ * DmitriyMX
+ * 2017-03-12
+ */
+package asys.webinterface;
+
+import asys.webinterface.api.Webinterface;
+
+import java.util.*;
+
+public class WebinterfaceImpl implements Webinterface {
+ // moduleName, links
+ private Map> javascripts = new HashMap<>();
+ private Map> stylesheets = new HashMap<>();
+ private Map> menuItems = new HashMap<>();
+
+ public class MainMenuItem {
+ public String title, link;
+ public MainMenuItem(String title, String link) {
+ this.title = title;
+ this.link = link;
+ }
+ }
+
+ @Override
+ public void addJavascript(String moduleName, String link) {
+ List list;
+ if (javascripts.containsKey(moduleName)) {
+ list = javascripts.get(moduleName);
+ } else {
+ list = new ArrayList<>();
+ javascripts.put(moduleName, list);
+ }
+ list.add(link);
+ }
+
+ @Override
+ public void removeJavascript(String moduleName) {
+ javascripts.remove(moduleName);
+ }
+
+ @Override
+ public void addStylesheet(String moduleName, String link) {
+ List list;
+ if (stylesheets.containsKey(moduleName)) {
+ list = stylesheets.get(moduleName);
+ } else {
+ list = new ArrayList<>();
+ stylesheets.put(moduleName, list);
+ }
+ list.add(link);
+ }
+
+ @Override
+ public void removeStylesheet(String moduleName) {
+ stylesheets.remove(moduleName);
+ }
+
+ @Override
+ public void addMainMenuItem(String moduleName, String title, String link) {
+ List list;
+ if (menuItems.containsKey(moduleName)) {
+ list = menuItems.get(moduleName);
+ } else {
+ list = new ArrayList<>();
+ menuItems.put(moduleName, list);
+ }
+ list.add(new MainMenuItem(title, link));
+ }
+
+ @Override
+ public void removeMainMenuItems(String moduleName) {
+ menuItems.remove(moduleName);
+ }
+
+ public String mainMenuItemsToReactJS() {
+ StringJoiner sj = new StringJoiner(",");
+
+ for(List listItems : menuItems.values()) {
+ for (MainMenuItem item : listItems) {
+ sj.add(String.format(
+ "ce(MainMenuItem, {title: '%s', href: '%s'})",
+ item.title.replace("'","\\'"), item.link.replace("'","\\'")
+ ));
+ }
+ }
+
+ return sj.toString();
+ }
+
+ public String javascriptToTags() {
+ StringJoiner sj = new StringJoiner("\n");
+
+ for (List items : javascripts.values()) {
+ for (String link : items) {
+ sj.add(String.format("", link));
+ }
+ }
+
+ return sj.toString();
+ }
+
+ public String stylesheetToTags() {
+ StringJoiner sj = new StringJoiner("\n");
+
+ for (List items : javascripts.values()) {
+ for (String link : items) {
+ sj.add(String.format("", link));
+ }
+ }
+
+ return sj.toString();
+ }
+}
diff --git a/webinterface/src/main/java/asys/webinterface/api/MainMenu.java b/webinterface/src/main/java/asys/webinterface/api/MainMenu.java
deleted file mode 100644
index 2437efe..0000000
--- a/webinterface/src/main/java/asys/webinterface/api/MainMenu.java
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * DmitriyMX
- * 2017-03-11
- */
-package asys.webinterface.api;
-
-public interface MainMenu {
- void addItem(String title, String href);
-}
diff --git a/webinterface/src/main/java/asys/webinterface/api/Webinterface.java b/webinterface/src/main/java/asys/webinterface/api/Webinterface.java
new file mode 100644
index 0000000..5582158
--- /dev/null
+++ b/webinterface/src/main/java/asys/webinterface/api/Webinterface.java
@@ -0,0 +1,16 @@
+/*
+ * DmitriyMX
+ * 2017-03-12
+ */
+package asys.webinterface.api;
+
+public interface Webinterface {
+ void addJavascript(String moduleName, String link);
+ void removeJavascript(String moduleName);
+
+ void addStylesheet(String moduleName, String link);
+ void removeStylesheet(String moduleName);
+
+ void addMainMenuItem(String moduleName, String title, String link);
+ void removeMainMenuItems(String moduleName);
+}
diff --git a/webinterface/src/main/resources/index.html b/webinterface/src/main/resources/index.html
index 28d8faa..6831f04 100644
--- a/webinterface/src/main/resources/index.html
+++ b/webinterface/src/main/resources/index.html
@@ -9,6 +9,7 @@
background: url('/static/background.png') fixed;
}
+ <{moduleStylesheet}>