Persoenliche Mediazentrale
ulrich
2021-04-04 b379f5d6fa95c9c938c38ce592739ea732847821
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
 * 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.
 */
package de.uhilger.mediaz.api;
 
import com.google.gson.Gson;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import de.uhilger.mediaz.App;
import de.uhilger.mediaz.Server;
import de.uhilger.mediaz.conf.Store;
import de.uhilger.mediaz.entity.Ablageort;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.logging.Logger;
 
/**
 *
 * @author ulrich
 */
public class StoreHandler extends Store implements HttpHandler  {
  
  private static final Logger logger = Logger.getLogger(StoreHandler.class.getName());
 
  
  /*
  
    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
  
    Beispiele:
  
    HTTP GET an /mz/api/store/Ablageort/Katalog
    liest den Ablageort namens "Katalog"
  
    HTTP POST an /mz/api/store/Ablageort
    schreibt den neuen Ablageort im Body der Anfrage
  
    HTTP PUT an /mz/api/store/Ablageort
    sucht den Ablageort mit dem Namen laut Body der Anfrage 
    und schreibt den Inhalt aus der Anfrage in die Datei
  
    HTTP DELETE an /mz/api/store/Ablageort/Katalog
    löscht den Ablageort namens "Katalog"
  
  */
  
  public static final String HTTP_GET = "GET";
  public static final String HTTP_PUT = "PUT";
  public static final String HTTP_POST = "POST";
  public static final String HTTP_DELETE = "DELETE";
 
  @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 = "";
    switch(method) {
      case HTTP_GET:
        type = elems[elems.length - 2];
        elemName = elems[elems.length - 1];
        //this.readFromFile(file);
        break;
        
      case HTTP_PUT:
        type = elems[elems.length - 1];
        elemName = "noch bauen: lesen aus Body";
        break;
        
      case HTTP_POST:
        type = elems[elems.length - 1];
        elemName = bodyLesen(e);
        if(type.equalsIgnoreCase("Ablageort")) {
          Gson gson = new Gson();
          Ablageort ort = gson.fromJson(elemName, Ablageort.class);
          elemName = ort.getName();
        }
        break;
        
      case HTTP_DELETE:
        type = elems[elems.length - 2];
        elemName = elems[elems.length - 1];
        break;
    }
    
    
    String response = "Method: " + method + ", Path: " + path + 
            ", Type: " + type + ", elemName: " + elemName;
    logger.info(response);
    e.sendResponseHeaders(200, response.length());
    OutputStream os = e.getResponseBody();
    os.write(response.getBytes());
    os.close();        
  }
  
  
  private 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();
    // {"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.info("json: " + json);
    return json;
  }
}