| /* | 
|  * 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.conf.Store; | 
| import de.uhilger.mediaz.entity.Ablageort; | 
| import java.io.BufferedReader; | 
| import java.io.IOException; | 
| import java.io.InputStream; | 
| import java.io.InputStreamReader; | 
| import java.io.OutputStream; | 
| import java.util.logging.Logger; | 
|   | 
| /** | 
|  * | 
|  * @author ulrich | 
|  */ | 
| public class StoreHandler extends Store implements HttpHandler  { | 
|    | 
|   private static final Logger logger = Logger.getLogger(StoreHandler.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 | 
|    | 
|     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 | 
|    | 
|     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 = ""; | 
|     switch(method) { | 
|       case HTTP_GET: | 
|         type = elems[elems.length - 2]; | 
|         elemName = elems[elems.length - 1]; | 
|         //this.readFromFile(file); | 
|         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(); | 
|         } | 
|         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; | 
|   } | 
| } |