|  |  | 
 |  |  | /* | 
 |  |  |  * 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; | 
 |  |  |  | 
 |  |  | 
 |  |  | 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; | 
 |  |  | 
 |  |  | 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  { | 
 |  |  |    | 
 |  |  | 
 |  |  |   @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); | 
 |  |  | 
 |  |  |       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() { | 
 |  |  | 
 |  |  |      | 
 |  |  |   } | 
 |  |  |    | 
 |  |  |   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); | 
 |  |  |   } | 
 |  |  |    | 
 |  |  |    | 
 |  |  | 
 |  |  |       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; |