Persoenliche Mediazentrale
ulrich
2022-05-11 3866a756db6c85e36d1896af8461682c8c19a2ec
commit | author | age
86bbf7 1 /*
94b1c2 2   Tango - Personal Media Center
b56bb3 3   Copyright (C) 2021  Ulrich Hilger
U 4
5   This program is free software: you can redistribute it and/or modify
6   it under the terms of the GNU Affero General Public License as
7   published by the Free Software Foundation, either version 3 of the
8   License, or (at your option) any later version.
9
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU Affero General Public License for more details.
14
15   You should have received a copy of the GNU Affero General Public License
16   along with this program.  If not, see <https://www.gnu.org/licenses/>.
86bbf7 17  */
94b1c2 18 package de.uhilger.tango.api;
86bbf7 19
095119 20 import com.sun.net.httpserver.Headers;
8d7d35 21 import com.sun.net.httpserver.HttpExchange;
U 22 import com.sun.net.httpserver.HttpHandler;
f70acb 23 import de.uhilger.tango.App;
8d7d35 24 import java.io.BufferedReader;
U 25 import java.io.IOException;
26 import java.io.InputStream;
27 import java.io.InputStreamReader;
28 import java.io.OutputStream;
f70acb 29 import java.util.ResourceBundle;
8d7d35 30 import java.util.logging.Logger;
U 31
86bbf7 32
U 33 /**
34  *
b56bb3 35  * @author Ulrich Hilger
U 36  * @version 1, 8.4.2021
86bbf7 37  */
8d7d35 38 public abstract class AbstractHandler extends JsonHelper implements HttpHandler {
86bbf7 39   
8d7d35 40   private static final Logger logger = Logger.getLogger(AbstractHandler.class.getName());
U 41
42   /** Name der HTTP Methode GET */
43   public static final String HTTP_GET = "GET";
44   
45   /** Name der HTTP Methode PUT */
46   public static final String HTTP_PUT = "PUT";
47   
48   /** Name der HTTP Methode POST */
49   public static final String HTTP_POST = "POST";
50   
51   /** Name der HTTP Methode DELETE */
52   public static final String HTTP_DELETE = "DELETE";
53   
0e9cd3 54   public static final int RTC_OK = 200;
U 55   public static final int RTC_NOT_FOUND = 404;
56   
57   protected int returnCode;
f70acb 58   
U 59   private ResourceBundle rb;
0e9cd3 60
U 61   public AbstractHandler() {
62     this.returnCode = RTC_OK;
63   }
64   
8d7d35 65   @Override
U 66   public void handle(HttpExchange e) throws IOException {
67     String method = e.getRequestMethod();
68     String response = "";
69     switch(method) {
70       case HTTP_GET:
71         String json = get(e);
72         if(json != null) {
73           response = json;
74         } else {
75           response = "nicht gefunden";
d027b5 76           //returnCode = RTC_NOT_FOUND;
8d7d35 77         }
U 78         break;
79         
80       case HTTP_PUT:
81         response = put(e);
82         break;
83         
84       case HTTP_POST:
85         response = post(e);
86         break;
87         
88       case HTTP_DELETE:
89         boolean geloescht = delete(e);
90         if(geloescht) {
91           response = "geloescht";
92         } else {
93           response = "nicht geloescht";
94         }
95         break;
96     }
78d707 97     logger.fine(response);
095119 98     Headers headers = e.getResponseHeaders();
U 99     headers.add("Content-Type", "application/json");
0e9cd3 100     e.sendResponseHeaders(getReturnCode(), response.length());
8d7d35 101     OutputStream os = e.getResponseBody();
U 102     os.write(response.getBytes());
103     os.close();        
0e9cd3 104   }
U 105   
106   protected void setReturnCode(int code) {
107     this.returnCode = code;
108   }
109   
110   protected int getReturnCode() {
111     return returnCode;
86bbf7 112   }
U 113   
8d7d35 114   protected String bodyLesen(HttpExchange e) throws IOException {
U 115     InputStream is = e.getRequestBody();
116     BufferedReader r = new BufferedReader(new InputStreamReader(is));
86bbf7 117     StringBuilder sb = new StringBuilder();
8d7d35 118     String line = r.readLine();
U 119     while(line != null) {
120       sb.append(line);
121       line = r.readLine();
122     }
123     r.close();
124     String json = sb.toString();
125     return json;
86bbf7 126   }
8d7d35 127
0e9cd3 128   protected String put(HttpExchange e) throws IOException {
U 129     setReturnCode(RTC_NOT_FOUND);
130     return "nicht unterstuetzt";
131   }
132
133   protected String post(HttpExchange e) {
134     setReturnCode(RTC_NOT_FOUND);
135     return "nicht unterstuetzt";
136   }
137
138   protected boolean delete(HttpExchange e) {
139     setReturnCode(RTC_NOT_FOUND);
140     return false;
141   }
142   
8d7d35 143   
U 144   protected abstract String get(HttpExchange e);
0e9cd3 145   /*
8d7d35 146   protected abstract String put(HttpExchange e) throws IOException;
U 147   protected abstract String post(HttpExchange e);
148   protected abstract boolean delete(HttpExchange e);
0e9cd3 149   */
86bbf7 150   
f70acb 151   protected String getResString(String key) {
U 152     if(rb == null) {
153       rb = ResourceBundle.getBundle(App.RB_NAME);
154     }
155     return rb.getString(key);
156   }
157   
86bbf7 158 }