/* Tango - 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 . */ package de.uhilger.tango.api; import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import de.uhilger.tango.App; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.ResourceBundle; import java.util.logging.Logger; /** * * @author Ulrich Hilger * @version 1, 8.4.2021 */ public abstract class AbstractHandler extends JsonHelper implements HttpHandler { 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"; public static final int RTC_OK = 200; public static final int RTC_NOT_FOUND = 404; protected int returnCode; private ResourceBundle rb; public AbstractHandler() { this.returnCode = RTC_OK; } @Override public void handle(HttpExchange e) throws IOException { String method = e.getRequestMethod(); String response = ""; switch(method) { case HTTP_GET: String json = get(e); if(json != null) { response = json; } else { response = "nicht gefunden"; //returnCode = RTC_NOT_FOUND; } break; case HTTP_PUT: response = put(e); break; case HTTP_POST: response = post(e); break; case HTTP_DELETE: boolean geloescht = delete(e); if(geloescht) { response = "geloescht"; } else { response = "nicht geloescht"; } break; } logger.fine(response); Headers headers = e.getResponseHeaders(); headers.add("Content-Type", "application/json"); e.sendResponseHeaders(getReturnCode(), response.length()); OutputStream os = e.getResponseBody(); os.write(response.getBytes()); os.close(); } protected void setReturnCode(int code) { this.returnCode = code; } protected int getReturnCode() { return returnCode; } protected 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(); String json = sb.toString(); return json; } protected String put(HttpExchange e) throws IOException { setReturnCode(RTC_NOT_FOUND); return "nicht unterstuetzt"; } protected String post(HttpExchange e) { setReturnCode(RTC_NOT_FOUND); return "nicht unterstuetzt"; } protected boolean delete(HttpExchange e) { setReturnCode(RTC_NOT_FOUND); return false; } 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); */ protected String getResString(String key) { if(rb == null) { rb = ResourceBundle.getBundle(App.RB_NAME); } return rb.getString(key); } }