Persoenliche Mediazentrale
ulrich
2021-04-23 0c14c00bab23e52508e0d30ef5fdf82399096612
Ablageorte werden im laufenden Betrieb ein- und ausgeklinkt
3 files modified
58 ■■■■■ changed files
src/de/uhilger/mediaz/App.java 10 ●●●●● patch | view | raw | blame | history
src/de/uhilger/mediaz/Server.java 13 ●●●●● patch | view | raw | blame | history
src/de/uhilger/mediaz/api/StorageHandler.java 35 ●●●●● patch | view | raw | blame | history
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;
  }
}
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();
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);
  }