Dateiverwaltung fuer neon
ulrich
2024-11-19 b3d917571a5f952531ce3e060861e1a158bc04c7
src/de/uhilger/neon/fm/AbstractFileActor.java
@@ -41,13 +41,30 @@
  protected HttpHelper h;
  protected String base;
  public void run(HttpExchange exchange) {
  /**
   * Hilfsmittel bereitstellen, die beim Ausfuehren eines Actors fuer Dateioperationen
   * immer benoetigt werden.
   *
   * Von dieser Klasse abgeleitete Actos sollten mit super.run(exchange) stets diese
   * Methode ausfuehren.
   *
   * @param exchange Infos zu HTTP Request, -Response, Kontext usw.
   */
  protected void init(HttpExchange exchange) {
    base = exchange.getHttpContext().getAttributes().get(FileServer.ATTR_FILE_BASE).toString();
    h = new HttpHelper();
    fileName = h.getFileName(exchange);
    file = new File(base, fileName);
  }
  /**
   * Eine Dateiliste als String Array aus einer Dateiliste im JSON-Format
   * erzeugen, die aus dem HTTP-Request-Body gelesen wurde
   *
   * @param exchange  Infos zu HTTP Request, -Response, Kontext usw.
   * @return  die Dateiliste als String Array
   * @throws IOException wenn etwas schief geht
   */
  protected String[] dateiliste(HttpExchange exchange) throws IOException {
    String body = h.bodyLesen(exchange);
    //logger.fine("dateien: " + body);
@@ -55,6 +72,14 @@
    return gson.fromJson(body, String[].class);
  }
  /**
   * Den Body eines HTTP Request in eine Datei schreiben
   *
   * TODO das evtl. noch in java.nio.file ueberfuehren..
   *
   * @param e  Infos zu HTTP Request, -Response, Kontext usw.
   * @throws IOException  wenn etwas schief geht
   */
  protected void speichern(HttpExchange e) throws IOException {
    String body = h.bodyLesen(e);
    if (new Writer().speichern(file, body) == 0) {
@@ -64,6 +89,12 @@
    }
  }
  /**
   * Eine Fehler-Antwort als HTTP Status Code 401 not found senden
   *
   * @param exchange Infos zu HTTP Request, -Response, Kontext usw.
   * @param ex der aufgetretene Fehler
   */
  protected void fehlerAntwort(HttpExchange exchange, Exception ex) {
    try {
      Logger.getLogger(AbstractFileActor.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
@@ -73,10 +104,22 @@
    }
  }
  /**
   * Eine Antwort als HTTP Response senden
   *
   * @param exchange Infos zu HTTP Request, -Response, Kontext usw.
   * @param code  HTTP Status code fuer die Antwort
   * @param text  Inhalt der Antwort
   * @throws IOException  wenn etwas schif geht
   */
  protected void antwort(HttpExchange exchange, int code, String text) throws IOException {
    new HttpResponder().antwortSenden(exchange, code, text);
  }
  /**
   * Die Zeiger auf die von einer Instanz dieser abstrakten Basisklasse
   * erzeugten Objekte wieder frei geben
   */
  protected void free() {
    file = null;
    fileName = null;