From 5f70da71c8e71990715dcb4be5cc433284abdede Mon Sep 17 00:00:00 2001
From: ulrich
Date: Mon, 05 Apr 2021 12:35:50 +0000
Subject: [PATCH] Lesen und neu fuer Ablageort fertig
---
src/de/uhilger/mediaz/api/StorageHandler.java | 79 +++++++++++++++-----------
src/de/uhilger/mediaz/store/FileStorage.java | 47 +++++++++------
src/de/uhilger/mediaz/store/Storage.java | 2
src/de/uhilger/mediaz/api/StoreTestHandler.java | 2
4 files changed, 75 insertions(+), 55 deletions(-)
diff --git a/src/de/uhilger/mediaz/api/StorageHandler.java b/src/de/uhilger/mediaz/api/StorageHandler.java
index f2936eb..22d9de0 100644
--- a/src/de/uhilger/mediaz/api/StorageHandler.java
+++ b/src/de/uhilger/mediaz/api/StorageHandler.java
@@ -1,7 +1,19 @@
/*
- * 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.
+ Mediazentrale - Personal Media Center
+ Copyright (C) 2021 Ulrich Hilger
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.uhilger.mediaz.api;
@@ -11,7 +23,6 @@
import de.uhilger.mediaz.App;
import de.uhilger.mediaz.Server;
import de.uhilger.mediaz.store.FileStorage;
-import de.uhilger.mediaz.entity.Ablageort;
import de.uhilger.mediaz.entity.Entity;
import java.io.BufferedReader;
import java.io.File;
@@ -23,8 +34,10 @@
import java.util.logging.Logger;
/**
- *
- * @author ulrich
+ * HttpHandler fuer die Ablage von Entitaeten der Mediazentrale
+ *
+ * @author Ulrich Hilger
+ * @version 1, 5.4.2021
*/
public class StorageHandler implements HttpHandler {
@@ -63,50 +76,44 @@
@Override
public void handle(HttpExchange e) throws IOException {
String method = e.getRequestMethod();
- String path = e.getRequestURI().toString();
- String[] elems = path.split(App.getRs(Server.RB_SLASH));
- String type = "";
- String elemName = "";
- String body = "";
- FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF)));
+ String response = "";
+ int code = 200;
switch(method) {
case HTTP_GET:
- type = elems[elems.length - 2];
- elemName = elems[elems.length - 1];
- //this.readFromFile(file);
- fs.read(type, elemName);
+ String json = lesen(e);
+ if(json != null) {
+ response = json;
+ } else {
+ response = "nicht gefunden";
+ code = 404;
+ }
break;
case HTTP_PUT:
- type = elems[elems.length - 1];
- elemName = "noch bauen: lesen aus Body";
+ response = "PUT noch bauen.";
break;
case HTTP_POST:
- neu(e);
+ response = neu(e);
break;
case HTTP_DELETE:
- type = elems[elems.length - 2];
- elemName = elems[elems.length - 1];
+ response = "DELETE noch bauen.";
break;
}
-
-
- String response = "Method: " + method + ", Path: " + path +
- ", Type: " + type + ", elemName: " + elemName;
logger.info(response);
- e.sendResponseHeaders(200, response.length());
+ e.sendResponseHeaders(code, response.length());
OutputStream os = e.getResponseBody();
os.write(response.getBytes());
os.close();
}
- private void neu(HttpExchange e) throws IOException {
+ private String neu(HttpExchange e) throws IOException {
String path = e.getRequestURI().toString();
String[] elems = path.split(App.getRs(Server.RB_SLASH));
String type = elems[elems.length - 1];
String body = bodyLesen(e);
+ String filename = "";
FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF)));
Gson gson = new Gson();
logger.log(Level.INFO, "type: {0}", type);
@@ -116,8 +123,10 @@
if(antwortObjekt instanceof File) {
File file = (File) antwortObjekt;
logger.log(Level.INFO, "Datei {0} geschrieben.", file.getAbsolutePath());
+ filename = file.getName();
}
}
+ return type + FileHandler.STR_BLANK + filename;
}
private void aendern() {
@@ -128,8 +137,15 @@
}
- private Entity lesen() {
- return null;
+ private String lesen(HttpExchange e) {
+ String path = e.getRequestURI().toString();
+ String[] elems = path.split(App.getRs(Server.RB_SLASH));
+ String type = elems[elems.length - 2];
+ String elemName = elems[elems.length - 1];
+ FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF)));
+ //Entity entity = fs.read(type, elemName);
+ //return entity;
+ return fs.readJson(type, elemName);
}
@@ -143,11 +159,6 @@
line = r.readLine();
}
r.close();
- // {"Ablageort":{"name":"test1","ort":"test2","url":"test3"}}
- //String data = sb.toString();
- //data = data.substring(1, data.length() - 1);
- //String json = data.substring(data.indexOf("{"));
- // {"name":"test1","ort":"test2","url":"test3"}
String json = sb.toString();
logger.log(Level.INFO, "json: {0}", json);
return json;
diff --git a/src/de/uhilger/mediaz/api/StoreTestHandler.java b/src/de/uhilger/mediaz/api/StoreTestHandler.java
index af7f54c..156e06c 100644
--- a/src/de/uhilger/mediaz/api/StoreTestHandler.java
+++ b/src/de/uhilger/mediaz/api/StoreTestHandler.java
@@ -35,7 +35,7 @@
FileStorage store = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF)));
File file = store.writeToFile(ort);
try {
- Entity elem = store.readFromFile(file);
+ Entity elem = store.entityFromFile(file);
logger.log(Level.INFO, "Typ: {0}, Name: {1}",
new Object[]{elem.getClass().getSimpleName(), elem.getName()});
} catch (ClassNotFoundException ex) {
diff --git a/src/de/uhilger/mediaz/store/FileStorage.java b/src/de/uhilger/mediaz/store/FileStorage.java
index 0282ed7..3819699 100644
--- a/src/de/uhilger/mediaz/store/FileStorage.java
+++ b/src/de/uhilger/mediaz/store/FileStorage.java
@@ -49,7 +49,7 @@
public FileStorage(String base) {
this.fileBase = base;
- //TypeToken<List<String>> list = new TypeToken<List<String>>() {};
+ // Beispiel: TypeToken<List<String>> list = new TypeToken<List<String>>() {};
TypeToken<Ablageort> ttAblageort = new TypeToken<Ablageort>() {};
types = new HashMap();
types.put(Ablageort.class.getSimpleName(), ttAblageort);
@@ -69,7 +69,6 @@
* @param o
*/
public File writeToFile(Entity o) throws IOException {
- Gson gson = new Gson();
String className = o.getClass().getSimpleName();
logger.finer(className);
File dir = new File(fileBase, className);
@@ -79,34 +78,29 @@
file.delete();
}
FileWriter fw = new FileWriter(file);
+ Gson gson = new Gson();
fw.write(gson.toJson(o));
fw.flush();
fw.close();
return file;
}
- public Entity readFromFile(File file) throws ClassNotFoundException, FileNotFoundException, IOException {
- String type = typeNameFromPath(file);
+ public String readFromFile(File file) throws IOException {
StringBuilder sb = new StringBuilder();
- FileReader in = new FileReader(file);
- BufferedReader r = new BufferedReader(in);
+ BufferedReader r = new BufferedReader(new FileReader(file));
String line = r.readLine();
while(line != null) {
sb.append(line);
line = r.readLine();
}
r.close();
- in.close();
- String json = sb.toString();
+ return sb.toString();
+ }
+
+ public Entity entityFromFile(File file) throws ClassNotFoundException, FileNotFoundException, IOException {
+ String json = readFromFile(file);
Gson gson = new Gson();
- switch(type) {
- case ST_ABLAGEORT:
- return gson.fromJson(json, Ablageort.class);
- default:
- Ablageort ablage = new Ablageort();
- ablage.setName("Test");
- return ablage;
- }
+ return gson.fromJson(json, typeFromName(typeNameFromPath(file)).getType());
}
private String typeNameFromPath(File file) {
@@ -127,11 +121,8 @@
@Override
public Entity read(String typ, String name) {
- File base = new File(fileBase);
- File dir = new File(base, typ);
- File file = new File(dir, name);
try {
- return readFromFile(file);
+ return entityFromFile(getFile(typ, name));
} catch (ClassNotFoundException | IOException ex) {
logger.log(Level.SEVERE, null, ex);
return null;
@@ -155,6 +146,22 @@
return types.get(name);
}
+ @Override
+ public String readJson(String typ, String name) {
+ try {
+ return readFromFile(getFile(typ, name));
+ } catch (IOException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ return null;
+ }
+ }
+
+ private File getFile(String typ, String name) {
+ File base = new File(fileBase);
+ File dir = new File(base, typ);
+ return new File(dir, name);
+ }
+
}
diff --git a/src/de/uhilger/mediaz/store/Storage.java b/src/de/uhilger/mediaz/store/Storage.java
index 2e41528..d892954 100644
--- a/src/de/uhilger/mediaz/store/Storage.java
+++ b/src/de/uhilger/mediaz/store/Storage.java
@@ -66,6 +66,8 @@
*/
public Entity read(String typ, String name);
+ public String readJson(String typ, String name);
+
/**
* Die Namen der Elemente eines gegebenen Typs auflisten
* @param typ der gewuenschte Typ
--
Gitblit v1.9.3