From d86ba2949e2d7be238e3a6ea8620872fb526d66a Mon Sep 17 00:00:00 2001
From: ulrich
Date: Sun, 04 Apr 2021 13:51:46 +0000
Subject: [PATCH] Erster Test fuer Persistenz mit Gson
---
src/de/uhilger/mediaz/api/AblageTestHandler.java | 48 +++++++++
src/de/uhilger/mediaz/entity/Ablage.java | 34 ++++++
src/de/uhilger/mediaz/conf/Store.java | 99 +++++++++++++++++++
src/mediaz_de_DE.properties | 2
src/de/uhilger/mediaz/Server.java | 7 +
src/de/uhilger/mediaz/api/StoreTestHandler.java | 51 ++++++++++
src/de/uhilger/mediaz/entity/ConfigurationElement.java | 14 ++
7 files changed, 254 insertions(+), 1 deletions(-)
diff --git a/src/de/uhilger/mediaz/Server.java b/src/de/uhilger/mediaz/Server.java
index 2ec1044..c31c9fb 100644
--- a/src/de/uhilger/mediaz/Server.java
+++ b/src/de/uhilger/mediaz/Server.java
@@ -18,12 +18,13 @@
package de.uhilger.mediaz;
import com.sun.net.httpserver.HttpServer;
+import de.uhilger.mediaz.api.AblageTestHandler;
import de.uhilger.mediaz.api.FileHandler;
import de.uhilger.mediaz.api.StopServerHandler;
+import de.uhilger.mediaz.api.StoreTestHandler;
import java.io.IOException;
import java.util.logging.Logger;
import java.net.InetSocketAddress;
-import java.util.ResourceBundle;
import java.util.concurrent.Executors;
import java.util.logging.Level;
@@ -41,6 +42,8 @@
public static final String RB_SERVER_START_MSG = "msgServerStart";
public static final String RB_WEBROOT = "webroot";
public static final String RB_STOP_SERVER = "stopServer";
+ public static final String RB_ABLAGE_TEST = "testAblage";
+ public static final String RB_STORE_TEST = "testStore";
public static final String RB_SLASH = "slash";
private int port;
@@ -91,6 +94,8 @@
HttpServer server = HttpServer.create(new InetSocketAddress(port), 0);
server.createContext(ctx + App.getRs(RB_WEBROOT), new FileHandler(App.getInitParameter(App.getRs(App.RB_AP_WWW_DATA))));
server.createContext(ctx + App.getRs(RB_STOP_SERVER), new StopServerHandler());
+ server.createContext(ctx + App.getRs(RB_ABLAGE_TEST), new AblageTestHandler());
+ server.createContext(ctx + App.getRs(RB_STORE_TEST), new StoreTestHandler());
server.setExecutor(Executors.newFixedThreadPool(20));
server.start();
}
diff --git a/src/de/uhilger/mediaz/api/AblageTestHandler.java b/src/de/uhilger/mediaz/api/AblageTestHandler.java
new file mode 100644
index 0000000..05e18e7
--- /dev/null
+++ b/src/de/uhilger/mediaz/api/AblageTestHandler.java
@@ -0,0 +1,48 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.uhilger.mediaz.api;
+
+import com.google.gson.Gson;
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import de.uhilger.mediaz.entity.Ablage;
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ *
+ * @author ulrich
+ */
+public class AblageTestHandler implements HttpHandler {
+
+ @Override
+ public void handle(HttpExchange e) throws IOException {
+ Ablage ablage = new Ablage();
+ ablage.setName("Katalog");
+ ablage.setOrt("/home/ulrich/Videos");
+
+ Gson gson = new Gson();
+ File mediaOrdner = new File(ablage.getOrt());
+ File[] files = mediaOrdner.listFiles();
+ String json = gson.toJson(files);
+
+ StringBuilder sb = new StringBuilder();
+ sb.append(json);
+
+ json = gson.toJson(ablage);
+ sb.append(json);
+
+ byte[] b = sb.toString().getBytes();
+
+ //String response = getResponseString(map, cmd, antwort);
+ e.sendResponseHeaders(200, b.length);
+ OutputStream os = e.getResponseBody();
+ os.write(b);
+ os.close();
+ }
+
+}
diff --git a/src/de/uhilger/mediaz/api/StoreTestHandler.java b/src/de/uhilger/mediaz/api/StoreTestHandler.java
new file mode 100644
index 0000000..9735b8e
--- /dev/null
+++ b/src/de/uhilger/mediaz/api/StoreTestHandler.java
@@ -0,0 +1,51 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.uhilger.mediaz.api;
+
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import de.uhilger.mediaz.conf.Store;
+import de.uhilger.mediaz.entity.Ablage;
+import de.uhilger.mediaz.entity.ConfigurationElement;
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ *
+ * @author ulrich
+ */
+public class StoreTestHandler implements HttpHandler {
+
+ private static final Logger logger = Logger.getLogger(StoreTestHandler.class.getName());
+
+
+ @Override
+ public void handle(HttpExchange e) throws IOException {
+ Ablage ablage = new Ablage();
+ ablage.setName("Katalog");
+ ablage.setOrt("/home/ulrich/Videos");
+ Store store = new Store();
+ File file = store.writeToFile(ablage);
+ try {
+ ConfigurationElement elem = store.readFromFile(file);
+ logger.log(Level.INFO, "Typ: {0}, Name: {1}",
+ new Object[]{elem.getClass().getSimpleName(), elem.getName()});
+ } catch (ClassNotFoundException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+
+ String response = "OK";
+ e.sendResponseHeaders(200, response.length());
+ OutputStream os = e.getResponseBody();
+ os.write(response.getBytes());
+ os.close();
+
+ }
+
+}
diff --git a/src/de/uhilger/mediaz/conf/Store.java b/src/de/uhilger/mediaz/conf/Store.java
new file mode 100644
index 0000000..2fd46c7
--- /dev/null
+++ b/src/de/uhilger/mediaz/conf/Store.java
@@ -0,0 +1,99 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.uhilger.mediaz.conf;
+
+import com.google.gson.Gson;
+import de.uhilger.mediaz.App;
+import de.uhilger.mediaz.Server;
+import de.uhilger.mediaz.entity.Ablage;
+import de.uhilger.mediaz.entity.ConfigurationElement;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.logging.Logger;
+
+/**
+ *
+ * @author ulrich
+ */
+public class Store {
+
+ private static final Logger logger = Logger.getLogger(Store.class.getName());
+
+
+ private static final String typeAblage = "Ablage";
+
+ /**
+ * Ein Objekt als JSON in eine Datei schreiben
+ *
+ * Es wird in den Ordner geschrieben, der von conf angegeben ist
+ *
+ * Wenn es z.B. ein Ablage-Objekt ist, wird das Objekt in die Datei
+ * [conf]/Ablage/[name der Ablage].json geschrieben
+ *
+ * Der Name der Ablage muss eindeutig sein
+ *
+ *
+ * @param o
+ */
+ public File writeToFile(ConfigurationElement o) throws IOException {
+ Gson gson = new Gson();
+ String className = o.getClass().getSimpleName();
+ logger.finer(className);
+ File dir = new File(App.getInitParameter(App.getRs(App.RB_AP_CONF)), className);
+ dir.mkdirs();
+ File file = new File(dir, o.getName());
+ if(file.exists()) {
+ file.delete();
+ }
+ FileWriter fw = new FileWriter(file);
+ fw.write(gson.toJson(o));
+ fw.flush();
+ fw.close();
+ return file;
+ }
+
+ public ConfigurationElement readFromFile(File file) throws ClassNotFoundException, FileNotFoundException, IOException {
+ String type = typeFromName(file);
+ StringBuilder sb = new StringBuilder();
+ FileReader in = new FileReader(file);
+ BufferedReader r = new BufferedReader(in);
+ String line = r.readLine();
+ while(line != null) {
+ sb.append(line);
+ line = r.readLine();
+ }
+ r.close();
+ in.close();
+ String json = sb.toString();
+ Gson gson = new Gson();
+ switch(type) {
+ case typeAblage:
+ return gson.fromJson(json, Ablage.class);
+ default:
+ Ablage ablage = new Ablage();
+ ablage.setName("Test");
+ return ablage;
+ }
+ }
+
+ private String typeFromName(File file) {
+ //String path = file.getPath();
+ //logger.info(path);
+ String[] parts = file.getPath().split(App.getRs(Server.RB_SLASH));
+ //for(String part : parts) {
+ //logger.info(part);
+ //}
+ //logger.info("" + parts.length);
+ logger.info(parts[parts.length-2]);
+ return parts[parts.length-2];
+ }
+}
diff --git a/src/de/uhilger/mediaz/entity/Ablage.java b/src/de/uhilger/mediaz/entity/Ablage.java
new file mode 100644
index 0000000..91ee34b
--- /dev/null
+++ b/src/de/uhilger/mediaz/entity/Ablage.java
@@ -0,0 +1,34 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.uhilger.mediaz.entity;
+
+/**
+ *
+ * @author ulrich
+ */
+public class Ablage implements ConfigurationElement {
+
+ private String name;
+ private String ort;
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getOrt() {
+ return ort;
+ }
+
+ public void setOrt(String ort) {
+ this.ort = ort;
+ }
+
+}
diff --git a/src/de/uhilger/mediaz/entity/ConfigurationElement.java b/src/de/uhilger/mediaz/entity/ConfigurationElement.java
new file mode 100644
index 0000000..540b087
--- /dev/null
+++ b/src/de/uhilger/mediaz/entity/ConfigurationElement.java
@@ -0,0 +1,14 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package de.uhilger.mediaz.entity;
+
+/**
+ *
+ * @author ulrich
+ */
+public interface ConfigurationElement {
+ public String getName();
+}
diff --git a/src/mediaz_de_DE.properties b/src/mediaz_de_DE.properties
index 85b3190..d126562 100644
--- a/src/mediaz_de_DE.properties
+++ b/src/mediaz_de_DE.properties
@@ -8,6 +8,8 @@
# API-Endpunkte
webroot=/
stopServer=/server/stop
+testAblage=/test/ablage
+testStore=/test/store
slash=/
dash=-
--
Gitblit v1.9.3