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