/* * 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.App; import de.uhilger.mediaz.Server; import de.uhilger.mediaz.store.FileStorage; import de.uhilger.mediaz.entity.Ablageort; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author ulrich */ public class StorageHandler implements HttpHandler { private static final Logger logger = Logger.getLogger(StorageHandler.class.getName()); /* HTTP GET: lies einen Ablageort und schreibe JSON HTTP PUT: schreibe einen neuen Ablageort auf die Platte HTTP POST: schreibe Aenderungen auf die Platte HTTP DELETE: loesche den Ablageort Beispiele: HTTP GET an /mz/api/store/Ablageort/Katalog liest den Ablageort namens "Katalog" HTTP POST an /mz/api/store/Ablageort schreibt den neuen Ablageort im Body der Anfrage (Neu) HTTP PUT an /mz/api/store/Ablageort sucht den Ablageort mit dem Namen laut Body der Anfrage und schreibt den Inhalt aus der Anfrage in die Datei (Aenderung) HTTP DELETE an /mz/api/store/Ablageort/Katalog löscht den Ablageort namens "Katalog" */ public static final String HTTP_GET = "GET"; public static final String HTTP_PUT = "PUT"; public static final String HTTP_POST = "POST"; public static final String HTTP_DELETE = "DELETE"; @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 = ""; FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF))); switch(method) { case HTTP_GET: type = elems[elems.length - 2]; elemName = elems[elems.length - 1]; //this.readFromFile(file); fs.read(type, elemName); break; case HTTP_PUT: type = elems[elems.length - 1]; elemName = "noch bauen: lesen aus Body"; break; case HTTP_POST: type = elems[elems.length - 1]; elemName = bodyLesen(e); if(type.equalsIgnoreCase("Ablageort")) { Gson gson = new Gson(); Ablageort ort = gson.fromJson(elemName, Ablageort.class); elemName = ort.getName(); Object o = fs.write(ort); if(o instanceof File) { File file = (File) o; logger.log(Level.INFO, "Datei {0} geschrieben.", file.getAbsolutePath()); } } break; case HTTP_DELETE: type = elems[elems.length - 2]; elemName = elems[elems.length - 1]; break; } String response = "Method: " + method + ", Path: " + path + ", Type: " + type + ", elemName: " + elemName; logger.info(response); e.sendResponseHeaders(200, response.length()); OutputStream os = e.getResponseBody(); os.write(response.getBytes()); os.close(); } private String bodyLesen(HttpExchange e) throws IOException { InputStream is = e.getRequestBody(); BufferedReader r = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = r.readLine(); while(line != null) { sb.append(line); 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.info("json: " + json); return json; } }