From dfb7d34f88efbb3eb7632ae628ccfd4576824477 Mon Sep 17 00:00:00 2001
From: ulrich
Date: Thu, 08 Apr 2021 10:37:10 +0000
Subject: [PATCH] REST-Konformitaet des StorageHandler verbessert

---
 src/de/uhilger/mediaz/store/Storage.java |   70 ++++++++++++++++++++++++++++++++--
 1 files changed, 65 insertions(+), 5 deletions(-)

diff --git a/src/de/uhilger/mediaz/store/Storage.java b/src/de/uhilger/mediaz/store/Storage.java
index 8e66c8a..3f63bc8 100644
--- a/src/de/uhilger/mediaz/store/Storage.java
+++ b/src/de/uhilger/mediaz/store/Storage.java
@@ -1,21 +1,50 @@
 /*
- * 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.
+  Mediazentrale - 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 <https://www.gnu.org/licenses/>.
  */
 package de.uhilger.mediaz.store;
 
+import com.google.gson.reflect.TypeToken;
 import de.uhilger.mediaz.entity.Entity;
 import java.util.List;
 
 /**
- * Eine Ablage, die wie folgt organisiert ist
+ * Eine Ablage fuer serialisierte Objekte, die wie folgt organisiert ist
  * 
  * [Ort]/[Typ]/[Name]
  * 
  * Ort ist der Ablagort, an dem sich die folgende Struktur findet
  * Typ ist eine der Klassen der Package entity
  * Name muss identisch mit dem Element laut Entity.getName() sein
+ * 
+ * Einzelne Objekte werden nach JSON serialisiert und in Dateien oder je nach 
+ * Typ der Storage aehnliche 'Behaeltnisse' geschrieben. Die Dateinamen werden 
+ * ohne Dateierweiterung geschrieben.
+ * 
+ * In einer Gruppe identischer Typen muss jede Entitaet eindeutig benannt sein. 
+ * Als weitere Konvention soll jede Entitaet nur Buchstaben, Zahlen 
+ * oder Bindestrich (-) im Namen enthalten.
+ * 
+ * Erlaubter-1-Name-123<br>
+ * <br>
+ * Nicht-erlaubter-Name.1-4 (Punkt)<br>
+ * Nicht erlaubt (Leerzeichen)<br>
+ * AuchNicht?erlaubt (Fragezeichen)<br>
+ * Ebenfalls&amp;verboten (&amp;)<br>
+ * usw.
  *
  * @author Ulrich Hilger
  * @version 1, 5.4.2021
@@ -27,7 +56,7 @@
    * @param e das Objekt, das geschrieben werden soll
    * @return ein Antwortobjekt oder null
    */
-  public Object write(Entity e);
+  public Object write(Entity e, boolean overwrite);
   
   /**
    * Ein Objekt aus der Ablage lesen
@@ -38,10 +67,41 @@
   public Entity read(String typ, String name);
   
   /**
+   * Ein Objekt als JSON lesen
+   * @param typ 
+   * @param name
+   * @return das gewuenschte Objekt als JSON
+   */
+  public String readJson(String typ, String name);
+  
+  /**
    * Die Namen der Elemente eines gegebenen Typs auflisten
    * @param typ der gewuenschte Typ
    * @return die Liste mit Namen
    */
   public List<String> list(String typ);
   
+  /**
+   * Alle Objekte eines Typs auflisten
+   * @param typ der gewuenschte Typ
+   * @return die Liste mit Objekten 
+   */
+  public List listObjects(String typ);
+  
+  /**
+   * Fuer einen gegebenen Namen den Typ bestimmen
+   * @param name  der Name des gewuenschten Typs 
+   * @return der Typ zum Namen
+   */
+  public TypeToken typeFromName(String name);
+  
+  /**
+   * Ein Objekt aus der Ablage loeschen
+   * @param typ  Objekttyp
+   * @param name  Name des Objekts, das geloscht werden soll
+   * @return true, wenn geloeschn, false wenn nicht
+   */
+  public boolean delete(String typ, String name);
+  
+  public boolean exists(String typ, String name);
 }

--
Gitblit v1.9.3