From e96ffbc568537ede72f7b7880faf0d5f50d6290b Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sun, 12 Mar 2017 20:54:56 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20API=20=D0=BE=D1=82=20=D0=B2=D0=B5=D0=B1=20?= =?UTF-8?q?=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mcserver-manager/build.gradle | 2 +- .../main/java/asys/mcsmanager/Activator.java | 17 +-- webinterface/build.gradle | 2 +- .../java/asys/webinterface/Activator.java | 13 +- .../java/asys/webinterface/AppJsHandler.java | 4 +- .../java/asys/webinterface/IndexHandler.java | 5 +- .../java/asys/webinterface/MainMenuImpl.java | 38 ------ .../java/asys/webinterface/WebServer.java | 10 +- .../asys/webinterface/WebinterfaceImpl.java | 114 ++++++++++++++++++ .../java/asys/webinterface/api/MainMenu.java | 9 -- .../asys/webinterface/api/Webinterface.java | 16 +++ webinterface/src/main/resources/index.html | 1 + 12 files changed, 159 insertions(+), 72 deletions(-) delete mode 100644 webinterface/src/main/java/asys/webinterface/MainMenuImpl.java create mode 100644 webinterface/src/main/java/asys/webinterface/WebinterfaceImpl.java delete mode 100644 webinterface/src/main/java/asys/webinterface/api/MainMenu.java create mode 100644 webinterface/src/main/java/asys/webinterface/api/Webinterface.java 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 serviceTracker; + private ServiceTracker 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}>