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