| | |
| | | import com.sun.net.httpserver.HttpExchange; |
| | | import com.sun.net.httpserver.HttpHandler; |
| | | import de.uhilger.mediaz.App; |
| | | import static de.uhilger.mediaz.App.RB_EP_LISTE; |
| | | import de.uhilger.mediaz.Server; |
| | | import static de.uhilger.mediaz.Server.RB_SLASH; |
| | | import de.uhilger.mediaz.store.FileStorage; |
| | |
| | | * @author Ulrich Hilger |
| | | * @version 1, 5.4.2021 |
| | | */ |
| | | public class StorageHandler implements HttpHandler { |
| | | public class StorageHandler extends AbstractHandler implements HttpHandler { |
| | | |
| | | private static final Logger logger = Logger.getLogger(StorageHandler.class.getName()); |
| | | |
| | |
| | | Beispiele: |
| | | |
| | | HTTP GET an /mz/api/store/Ablageort/ |
| | | liefert alle Ablageort-Objekte |
| | | |
| | | HTTP GET an /mz/api/store/Ablageort/liste/ |
| | | liefert eine Liste der Namen vorhandener Ablageorte |
| | | |
| | | HTTP GET an /mz/api/store/Ablageort/Katalog |
| | |
| | | |
| | | /** Name der HTTP Methode DELETE */ |
| | | public static final String HTTP_DELETE = "DELETE"; |
| | | |
| | | public static final String EP_LISTE = "liste/"; |
| | | |
| | | @Override |
| | | public void handle(HttpExchange e) throws IOException { |
| | |
| | | } |
| | | break; |
| | | } |
| | | logger.info(response); |
| | | logger.fine(response); |
| | | e.sendResponseHeaders(code, response.length()); |
| | | OutputStream os = e.getResponseBody(); |
| | | os.write(response.getBytes()); |
| | |
| | | String filename = ""; |
| | | FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF))); |
| | | Gson gson = new Gson(); |
| | | logger.log(Level.INFO, "type: {0}", type); |
| | | logger.log(Level.FINE, "type: {0}, token: {1}", new Object[]{type, fs.typeFromName(type).getType().getTypeName()}); |
| | | Object o = gson.fromJson(body, fs.typeFromName(type).getType()); |
| | | if(o instanceof Entity) { |
| | | Object antwortObjekt = fs.write((Entity) o, overwrite); |
| | | if(antwortObjekt instanceof File) { |
| | | File file = (File) antwortObjekt; |
| | | logger.log(Level.INFO, "Datei {0} geschrieben.", file.getAbsolutePath()); |
| | | logger.log(Level.FINE, "Datei {0} geschrieben.", file.getAbsolutePath()); |
| | | filename = file.getName(); |
| | | return type + FileHandler.STR_BLANK + filename; |
| | | } |
| | |
| | | String[] elems = path.split(App.getRs(Server.RB_SLASH)); |
| | | FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF))); |
| | | if(path.endsWith(App.getRs(RB_SLASH))) { |
| | | String type = elems[elems.length - 1]; |
| | | logger.info(type); |
| | | List list = fs.list(type); |
| | | List list = null; |
| | | if(path.endsWith(App.getRs(RB_EP_LISTE))) { |
| | | String type = elems[elems.length - 2]; |
| | | logger.fine(type); |
| | | list = fs.list(type); |
| | | } else { |
| | | String type = elems[elems.length - 1]; |
| | | logger.fine(type); |
| | | list = fs.listObjects(type); |
| | | } |
| | | return jsonWithEnclosingType(list); |
| | | } else { |
| | | String type = elems[elems.length - 2]; |
| | | String elemName = elems[elems.length - 1]; |
| | | return fs.readJson(type, elemName); |
| | | } |
| | | } |
| | | |
| | | private 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(); |
| | | } |
| | | |
| | | private String bodyLesen(HttpExchange e) throws IOException { |
| | |
| | | } |
| | | r.close(); |
| | | String json = sb.toString(); |
| | | logger.log(Level.INFO, "json: {0}", json); |
| | | logger.log(Level.FINE, "json: {0}", json); |
| | | return json; |
| | | } |
| | | } |