From 0c14c00bab23e52508e0d30ef5fdf82399096612 Mon Sep 17 00:00:00 2001 From: ulrich Date: Fri, 23 Apr 2021 17:57:31 +0000 Subject: [PATCH] Ablageorte werden im laufenden Betrieb ein- und ausgeklinkt --- src/de/uhilger/mediaz/api/StorageHandler.java | 35 +++++++++++++++++++++++++++++++++-- src/de/uhilger/mediaz/App.java | 10 +++++++++- src/de/uhilger/mediaz/Server.java | 13 ++++++++++++- 3 files changed, 54 insertions(+), 4 deletions(-) diff --git a/src/de/uhilger/mediaz/App.java b/src/de/uhilger/mediaz/App.java index 92f151f..042fcdf 100644 --- a/src/de/uhilger/mediaz/App.java +++ b/src/de/uhilger/mediaz/App.java @@ -48,6 +48,9 @@ /* Name des ResourceBundles dieser App */ private static final String RB_NAME = "mediaz"; + /* Der Server dieser App */ + private static Server server; + /* ResourceBundle-Kennungen */ public static final String RB_PARAM_FEHLT = "msgParamFehlt"; public static final String RB_AP_PORT = "appParamPort"; @@ -80,7 +83,8 @@ String portStr = getInitParameter(getRs(RB_AP_PORT)); if (portStr != null) { - Server server = new Server(Integer.parseInt(portStr)); + //Server server = new Server(Integer.parseInt(portStr)); + server = new Server(Integer.parseInt(portStr)); try { String ctxName = getInitParameter(getRs(RB_AP_CTX)); if (ctxName != null) { @@ -130,5 +134,9 @@ public static String getRs(String key) { return rb.getString(key); } + + public static Server getServer() { + return server; + } } diff --git a/src/de/uhilger/mediaz/Server.java b/src/de/uhilger/mediaz/Server.java index a3f1b1c..a758078 100644 --- a/src/de/uhilger/mediaz/Server.java +++ b/src/de/uhilger/mediaz/Server.java @@ -63,6 +63,8 @@ private int port; private String ctx; + + private HttpServer server; /** * Ein neues Objekt der Kalsse Server erzeugen @@ -110,7 +112,7 @@ String wwwData = App.getInitParameter(App.getRs(App.RB_AP_WWW_DATA)); File wwwDir = new File(wwwData); - HttpServer server = HttpServer.create(new InetSocketAddress(port), 0); + server = HttpServer.create(new InetSocketAddress(port), 0); server.createContext(ctx + App.getRs(RB_WEBROOT), new FileHandler(wwwDir.getAbsolutePath())); ablageorteEinklinken(server); server.createContext(ctx + App.getRs(RB_STORE), new StorageHandler()); @@ -121,7 +123,16 @@ server.setExecutor(Executors.newFixedThreadPool(20)); server.start(); } + + public void ablageortEntfernen(String url) { + server.removeContext(ctx + url); + } + public void ablageortHinzufuegen(Ablageort ort) { + server.createContext(ctx + ort.getUrl(), + new ListFileHandler(new File(ort.getOrt()).getAbsolutePath())); + } + private void ablageorteEinklinken(HttpServer server) throws ClassNotFoundException, IOException { String typ = Ablageort.class.getSimpleName(); diff --git a/src/de/uhilger/mediaz/api/StorageHandler.java b/src/de/uhilger/mediaz/api/StorageHandler.java index a8bc567..f84629f 100644 --- a/src/de/uhilger/mediaz/api/StorageHandler.java +++ b/src/de/uhilger/mediaz/api/StorageHandler.java @@ -23,6 +23,7 @@ import static de.uhilger.mediaz.App.RB_EP_LISTE; import static de.uhilger.mediaz.App.RB_EP_LISTE_ALLES; import de.uhilger.mediaz.Server; +import de.uhilger.mediaz.entity.Ablageort; import de.uhilger.mediaz.store.FileStorage; import de.uhilger.mediaz.entity.Entity; import de.uhilger.mediaz.entity.Geraet; @@ -73,11 +74,33 @@ Object o = gson.fromJson(bodyLesen(e), fs.typeFromName(type).getType()); if(o instanceof Entity) { Entity entity = (Entity) o; - if(fs.exists(type, elemName)) { + if(fs.exists(type, elemName)) { // Aenderung fs.delete(type, elemName); + // wenn Ablageort, hier noch alten Kontext entfernen + if(type.equalsIgnoreCase(FileStorage.ST_ABLAGEORT)) { + Entity aoe = fs.read(type, elemName); + if(aoe instanceof Ablageort) { + Ablageort ablageort = (Ablageort) aoe; + App.getServer().ablageortEntfernen(ablageort.getUrl()); + } + } fs.write(entity, true); - } else { + // wenn Ablageort, hier noch neuen Kontext anlegen + if(type.equalsIgnoreCase(FileStorage.ST_ABLAGEORT)) { + if(entity instanceof Ablageort) { + Ablageort ablageort = (Ablageort) entity; + App.getServer().ablageortHinzufuegen(ablageort); + } + } + } else { // Neu fs.write(entity, false); + // wenn Ablageort, hier noch neuen Kontext anlegen + if(type.equalsIgnoreCase(FileStorage.ST_ABLAGEORT)) { + if(entity instanceof Ablageort) { + Ablageort ablageort = (Ablageort) entity; + App.getServer().ablageortHinzufuegen(ablageort); + } + } } return type + Server.SLASH + entity.getName(); } else { @@ -94,6 +117,14 @@ String type = elems[elems.length - 2]; String elemName = elems[elems.length - 1]; FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF))); + if(type.equalsIgnoreCase(FileStorage.ST_ABLAGEORT)) { + // im laufenden Server den Context entfernen + Entity entity = fs.read(type, elemName); + if(entity instanceof Ablageort) { + Ablageort ablageort = (Ablageort) entity; + App.getServer().ablageortEntfernen(ablageort.getUrl()); + } + } return fs.delete(type, elemName); } -- Gitblit v1.9.3