Persoenliche Mediazentrale
ulrich
2021-04-05 5f70da71c8e71990715dcb4be5cc433284abdede
Lesen und neu fuer Ablageort fertig
4 files modified
128 ■■■■■ changed files
src/de/uhilger/mediaz/api/StorageHandler.java 77 ●●●●● patch | view | raw | blame | history
src/de/uhilger/mediaz/api/StoreTestHandler.java 2 ●●● patch | view | raw | blame | history
src/de/uhilger/mediaz/store/FileStorage.java 47 ●●●●● patch | view | raw | blame | history
src/de/uhilger/mediaz/store/Storage.java 2 ●●●●● patch | view | raw | blame | history
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;
/**
 * HttpHandler fuer die Ablage von Entitaeten der Mediazentrale
 *
 * @author ulrich
 * @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;
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) {
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();
    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 sb.toString();
    }
  public Entity entityFromFile(File file) throws ClassNotFoundException, FileNotFoundException, IOException {
    String json = readFromFile(file);
    Gson gson = new Gson();
    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);
  }
  
  
}
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