From b3d917571a5f952531ce3e060861e1a158bc04c7 Mon Sep 17 00:00:00 2001
From: ulrich
Date: Tue, 19 Nov 2024 17:25:47 +0000
Subject: [PATCH] Dokumentation in Arbeit: FileCreator fertig dokumentiert, kleinere Anpassungen

---
 src/de/uhilger/neon/fm/FileCreator.java       |   26 +++++++++++-
 src/de/uhilger/neon/fm/FileEraser.java        |    2 
 src/de/uhilger/neon/fm/FileList.java          |    2 
 src/de/uhilger/neon/fm/AbstractFileActor.java |   45 ++++++++++++++++++++++
 src/de/uhilger/neon/fm/FileManipulator.java   |    2 
 5 files changed, 70 insertions(+), 7 deletions(-)

diff --git a/src/de/uhilger/neon/fm/AbstractFileActor.java b/src/de/uhilger/neon/fm/AbstractFileActor.java
index ecf0d6d..8350174 100644
--- a/src/de/uhilger/neon/fm/AbstractFileActor.java
+++ b/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;
diff --git a/src/de/uhilger/neon/fm/FileCreator.java b/src/de/uhilger/neon/fm/FileCreator.java
index cba9d45..8a6c6c7 100644
--- a/src/de/uhilger/neon/fm/FileCreator.java
+++ b/src/de/uhilger/neon/fm/FileCreator.java
@@ -26,15 +26,35 @@
 import java.util.logging.Logger;
 
 /**
+ * Eine Klasse mit Methoden zur Erzeugung von Ordnern und Dateien
  *
  * @author Ulrich Hilger
  * @version 0.1, 08.11.2024
  */
 public class FileCreator extends AbstractFileActor {
 
-  public void run(HttpExchange exchange) {
+  /**
+   * Die methode run legt Ordner und Dateien neu an, sofern im hier 
+   * uebergebenen HttpExchange Objekt die folgenden Angaben zu finden 
+   * sind:
+   * 
+   * <pre>
+   * Datei neu anlegen (ohne Ueberschreiben): 
+   * http://localhost:[port]/[kontext]/pfad/zur/datei.txt 
+   * Body: Dateiinhalt 
+   * Erzeugt eine neue Datei mit einer laufenden Nummer, 
+   * falls die per URL angegebene Datei schon existiert
+   *
+   * Ordner anlegen: 
+   * http://localhost:[port]/[kontext]/pfad/zum/ordner/ 
+   * erzeugt einen HTTP-Fehler 422, wenn der Ordner schon existiert
+   * </pre>
+   * 
+   * @param exchange Infos zu HTTP Request, -Response, Kontext usw.
+   */
+  public void create(HttpExchange exchange) {
     try {
-      super.run(exchange);
+      init(exchange);
       if (fileName.endsWith(FileServer.STR_SLASH)) { // es ist ein Ordner
         if (!file.exists()) {
           file.mkdir();
@@ -49,7 +69,7 @@
           file = trans.getNewFileName(file);
         }
         speichern(exchange);
-      }            
+      }
     } catch (IOException ex) {
       Logger.getLogger(FileCreator.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
     } finally {
diff --git a/src/de/uhilger/neon/fm/FileEraser.java b/src/de/uhilger/neon/fm/FileEraser.java
index 95ae88c..064e219 100644
--- a/src/de/uhilger/neon/fm/FileEraser.java
+++ b/src/de/uhilger/neon/fm/FileEraser.java
@@ -34,7 +34,7 @@
 
   public void run(HttpExchange exchange) {
     try {
-      super.run(exchange);
+      init(exchange);
       String[] dateiNamen = dateiliste(exchange);
       new Eraser().deleteFiles(fileName, Arrays.asList(dateiNamen), base);
       antwort(exchange, HttpResponder.SC_OK, "Dateien geloescht.");
diff --git a/src/de/uhilger/neon/fm/FileList.java b/src/de/uhilger/neon/fm/FileList.java
index de4d279..2e6348e 100644
--- a/src/de/uhilger/neon/fm/FileList.java
+++ b/src/de/uhilger/neon/fm/FileList.java
@@ -34,7 +34,7 @@
 
   public void run(HttpExchange exchange) {
     try {
-      super.run(exchange);
+      init(exchange);
       HttpContext ctx = exchange.getHttpContext();
       String base = ctx.getAttributes().getOrDefault(FileServer.ATTR_FILE_BASE, "").toString();
       if(base.length() == 0) {
diff --git a/src/de/uhilger/neon/fm/FileManipulator.java b/src/de/uhilger/neon/fm/FileManipulator.java
index dea05e7..d643b9a 100644
--- a/src/de/uhilger/neon/fm/FileManipulator.java
+++ b/src/de/uhilger/neon/fm/FileManipulator.java
@@ -58,7 +58,7 @@
 
   public void run(HttpExchange exchange) {
     try {
-      super.run(exchange);
+      init(exchange);
       String query = exchange.getRequestURI().getQuery();
       if (query != null) {
         String[] params = query.split(FileServer.STR_EQUAL);

--
Gitblit v1.9.3