Persoenliche Mediazentrale
ulrich
2021-04-08 e60cff473830164ac0f660523d02271d541f7d72
commit | author | age
8d7d35 1 /*
U 2   Mediazentrale - Personal Media Center
3   Copyright (C) 2021  Ulrich Hilger
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/>.
17  */
18 package de.uhilger.mediaz.api;
19
e60cff 20 import com.google.gson.Gson;
8d7d35 21 import com.sun.net.httpserver.HttpExchange;
e60cff 22 import de.uhilger.mediaz.App;
U 23 import de.uhilger.mediaz.Server;
24 import de.uhilger.mediaz.entity.Abspielliste;
25 import de.uhilger.mediaz.entity.Entity;
26 import de.uhilger.mediaz.entity.Titel;
27 import de.uhilger.mediaz.store.FileStorage;
8d7d35 28 import java.io.IOException;
e60cff 29 import java.util.logging.Logger;
8d7d35 30
U 31 /**
32  * Der ListHandler bearbeitet HTTP-Anfragen zu Abspiellisten
33  * 
34  * GET /mz/api/alist/[pl-name]          die Titel-Objekte der Liste [pl-name] liefern
35  * PUT /mz/api/alist/[pl-name]          den Titel im Body anfuegen an die Liste [pl-name]
36  * PUT /mz/api/alist/[pl-name]/[nr]     an der Position nr der Liste [pl-name] den Titel im Body einfuegen
37  * DELETE /mz/api/alist/[pl-name]/[nr]  den Titel an der Position [nr] aus der Liste [pl-name] entfernen  
38  *
39  * @author Ulrich Hilger
40  * @version 1, 8.4.2021
41  */
42 public class ListHandler extends AbstractHandler {
e60cff 43   
U 44   private static final Logger logger = Logger.getLogger(ListHandler.class.getName());
45
8d7d35 46
U 47   @Override
48   protected String get(HttpExchange e) {
e60cff 49     String path = e.getRequestURI().toString();
U 50     String[] elems = path.split(App.getRs(Server.RB_SLASH));
51     String plname = elems[elems.length - 1];
52     logger.finer("GET plname: " + plname);
53     FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF)));
54     String json = fs.readJson(FileStorage.ST_ABSPIELLISTE, plname);
55     logger.finer("PL json: " + json);
56     return json;
8d7d35 57   }
U 58
59   @Override
60   protected String put(HttpExchange e) throws IOException {
e60cff 61     String path = e.getRequestURI().toString();
U 62     String[] elems = path.split(App.getRs(Server.RB_SLASH));
63     String response = "ListHandler.put: ungueltiger URL";
64     logger.finer("elems.length: " + elems.length);
65     for(String elem : elems) {
66       logger.finer("elem: " + elem);
67     }
68     switch(elems.length) {
69       case 5:
70         response = addTitel(e, elems[4]);
71         break;
72         
73       case 6:
74         response = "Einfuegen noch nicht fertig.";
75         break;
76     }
77     return response;
78   }
79   
80   private String addTitel(HttpExchange e, String plname) throws IOException {
81     //String plname = elems[elems.length - 1];
82     logger.finer("plname: " + plname);
83     FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF)));
84     Entity entity = fs.read(FileStorage.ST_ABSPIELLISTE, plname);
85     String response = "Titel konnte nicht hinzugefuegt werden.";
86     if(entity instanceof Abspielliste) {
87       Abspielliste aliste = (Abspielliste) entity;
88       logger.finer("aliste: " + aliste.getName());
89       String titelJson = bodyLesen(e);
90       logger.finer("titelJson: " + titelJson);
91       Gson gson = new Gson();
92       Object o = gson.fromJson(titelJson, fs.typeFromName(Titel.class.getSimpleName()).getType());
93       if(o instanceof Titel) {
94         Titel titel = (Titel) o;
95         aliste.addTitel(titel);
96         fs.write(aliste, true);
97         response = "Titel " + titel.getName() + " der Liste " + aliste.getName() + " hinzugefuegt.";
98       }
99     }
100     return response;
8d7d35 101   }
U 102
103   @Override
104   protected String post(HttpExchange e) {
105     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
106   }
107
108   @Override
109   protected boolean delete(HttpExchange e) {
110     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
111   }
112   
113 }