| | |
| | | package de.uhilger.mediaz.api; |
| | | |
| | | import com.google.gson.Gson; |
| | | import com.google.gson.GsonBuilder; |
| | | import com.sun.net.httpserver.HttpExchange; |
| | | import com.sun.net.httpserver.HttpHandler; |
| | | import de.uhilger.mediaz.App; |
| | | import de.uhilger.mediaz.Server; |
| | | import static de.uhilger.mediaz.Server.RB_SLASH; |
| | | import de.uhilger.mediaz.store.FileStorage; |
| | | import de.uhilger.mediaz.entity.Entity; |
| | | import java.io.BufferedReader; |
| | |
| | | import java.io.InputStream; |
| | | import java.io.InputStreamReader; |
| | | import java.io.OutputStream; |
| | | import java.util.List; |
| | | import java.util.logging.Level; |
| | | import java.util.logging.Logger; |
| | | |
| | |
| | | |
| | | |
| | | /* |
| | | |
| | | 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 |
| | | Das REST-Muster sieht je Entitaet fuenf Faelle vor (Beispiel Ablageort): |
| | | |
| | | 1. HTTP GET Ablageort/[Name]: Liefere den Ablageort als JSON |
| | | 2. HTTP GET Ablageort/: Liefere einer Liste von Ablageorten als JSON |
| | | 3. HTTP PUT: schreibe einen neuen Ablageort auf die Platte |
| | | 4. HTTP POST: schreibe Aenderungen auf die Platte |
| | | 5. HTTP DELETE: loesche den Ablageort |
| | | |
| | | Beispiele: |
| | | |
| | | HTTP GET an /mz/api/store/Ablageort/ |
| | | liefert eine Liste der Namen vorhandener Ablageorte |
| | | |
| | | HTTP GET an /mz/api/store/Ablageort/Katalog |
| | | liest den Ablageort namens "Katalog" |
| | |
| | | |
| | | */ |
| | | |
| | | /** Name der HTTP Methode GET */ |
| | | public static final String HTTP_GET = "GET"; |
| | | |
| | | /** Name der HTTP Methode PUT */ |
| | | public static final String HTTP_PUT = "PUT"; |
| | | |
| | | /** Name der HTTP Methode POST */ |
| | | public static final String HTTP_POST = "POST"; |
| | | |
| | | /** Name der HTTP Methode DELETE */ |
| | | public static final String HTTP_DELETE = "DELETE"; |
| | | |
| | | @Override |
| | |
| | | break; |
| | | |
| | | case HTTP_PUT: |
| | | response = "PUT noch bauen."; |
| | | response = aendern(e); |
| | | break; |
| | | |
| | | case HTTP_POST: |
| | |
| | | break; |
| | | |
| | | case HTTP_DELETE: |
| | | response = "DELETE noch bauen."; |
| | | boolean geloescht = loeschen(e); |
| | | if(geloescht) { |
| | | response = "geloescht"; |
| | | } else { |
| | | response = "nicht geloescht"; |
| | | } |
| | | break; |
| | | } |
| | | logger.info(response); |
| | |
| | | return type + FileHandler.STR_BLANK + filename; |
| | | } |
| | | |
| | | private void aendern() { |
| | | |
| | | private String aendern(HttpExchange e) throws IOException { |
| | | return neu(e); // einstweilen wird einfach ueberschrieben |
| | | } |
| | | |
| | | private void loeschen() { |
| | | |
| | | } |
| | | |
| | | private String lesen(HttpExchange e) { |
| | | private boolean loeschen(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); |
| | | return fs.delete(type, elemName); |
| | | } |
| | | |
| | | private String lesen(HttpExchange e) { |
| | | String path = e.getRequestURI().toString(); |
| | | String[] elems = path.split(App.getRs(Server.RB_SLASH)); |
| | | FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF))); |
| | | if(path.endsWith(App.getRs(RB_SLASH))) { |
| | | String type = elems[elems.length - 1]; |
| | | logger.info(type); |
| | | List list = fs.list(type); |
| | | return jsonWithEnclosingType(list); |
| | | } else { |
| | | String type = elems[elems.length - 2]; |
| | | String elemName = elems[elems.length - 1]; |
| | | return fs.readJson(type, elemName); |
| | | } |
| | | } |
| | | |
| | | private String jsonWithEnclosingType(Object o) { |
| | | StringBuilder sb = new StringBuilder(); |
| | | sb.append("{\""); |
| | | sb.append(o.getClass().getSimpleName()); |
| | | sb.append("\": "); |
| | | Gson gson = new Gson(); |
| | | sb.append(gson.toJson(o)); |
| | | sb.append("}"); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | |