Persoenliche Mediazentrale
ulrich
2021-04-08 8d7d357497e80b87f1d3be2357cb9cb2e853e582
src/de/uhilger/mediaz/api/AbstractHandler.java
@@ -6,36 +6,97 @@
package de.uhilger.mediaz.api;
import com.google.gson.Gson;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import java.io.BufferedReader;
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 AbstractHandler {
public abstract class AbstractHandler extends JsonHelper implements HttpHandler {
  
  protected 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();
    */
    return jsonWithCustomType(o, o.getClass().getSimpleName());
  private static final Logger logger = Logger.getLogger(AbstractHandler.class.getName());
  /** 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
  public void handle(HttpExchange e) throws IOException {
    String method = e.getRequestMethod();
    String response = "";
    int code = 200;
    switch(method) {
      case HTTP_GET:
        String json = get(e);
        if(json != null) {
          response = json;
        } else {
          response = "nicht gefunden";
          code = 404;
        }
        break;
      case HTTP_PUT:
        response = put(e);
        break;
      case HTTP_POST:
        response = post(e);
        code = 404;
        break;
      case HTTP_DELETE:
        boolean geloescht = delete(e);
        if(geloescht) {
          response = "geloescht";
        } else {
          response = "nicht geloescht";
        }
        break;
    }
    logger.fine(response);
    e.sendResponseHeaders(code, response.length());
    OutputStream os = e.getResponseBody();
    os.write(response.getBytes());
    os.close();
  }
  
  protected String jsonWithCustomType(Object o, String typeName) {
  protected String bodyLesen(HttpExchange e) throws IOException {
    InputStream is = e.getRequestBody();
    BufferedReader r = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();
    sb.append("{\"");
    sb.append(typeName);
    sb.append("\": ");
    Gson gson = new Gson();
    sb.append(gson.toJson(o));
    sb.append("}");
    return sb.toString();
    String line = r.readLine();
    while(line != null) {
      sb.append(line);
      line = r.readLine();
    }
    r.close();
    String json = sb.toString();
    logger.log(Level.FINE, "json: {0}", json);
    return json;
  }
  protected abstract String get(HttpExchange e);
  protected abstract String put(HttpExchange e) throws IOException;
  protected abstract String post(HttpExchange e);
  protected abstract boolean delete(HttpExchange e);
  
}