Persoenliche Mediazentrale
ulrich
2021-05-07 ad3e2db5eefd3093a066e7b61df0653abc9b6f2e
commit | author | age
081606 1 /*
94b1c2 2   Tango - Personal Media Center
e1e373 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/>.
081606 17  */
94b1c2 18 package de.uhilger.tango.store;
081606 19
b1bf96 20 import com.google.gson.reflect.TypeToken;
94b1c2 21 import de.uhilger.tango.entity.Entity;
081606 22 import java.util.List;
U 23
24 /**
e1e373 25  * Eine Ablage fuer serialisierte Objekte, die wie folgt organisiert ist
081606 26  * 
U 27  * [Ort]/[Typ]/[Name]
28  * 
29  * Ort ist der Ablagort, an dem sich die folgende Struktur findet
30  * Typ ist eine der Klassen der Package entity
31  * Name muss identisch mit dem Element laut Entity.getName() sein
e1e373 32  * 
U 33  * Einzelne Objekte werden nach JSON serialisiert und in Dateien oder je nach 
34  * Typ der Storage aehnliche 'Behaeltnisse' geschrieben. Die Dateinamen werden 
35  * ohne Dateierweiterung geschrieben.
36  * 
37  * In einer Gruppe identischer Typen muss jede Entitaet eindeutig benannt sein. 
38  * Als weitere Konvention soll jede Entitaet nur Buchstaben, Zahlen 
39  * oder Bindestrich (-) im Namen enthalten.
40  * 
41  * Erlaubter-1-Name-123<br>
42  * <br>
43  * Nicht-erlaubter-Name.1-4 (Punkt)<br>
44  * Nicht erlaubt (Leerzeichen)<br>
45  * AuchNicht?erlaubt (Fragezeichen)<br>
46  * Ebenfalls&amp;verboten (&amp;)<br>
47  * usw.
081606 48  *
U 49  * @author Ulrich Hilger
50  * @version 1, 5.4.2021
51  */
52 public interface Storage {
53   
54   /**
55    * Ein Objekt in die Ablage schreiben
56    * @param e das Objekt, das geschrieben werden soll
57    * @return ein Antwortobjekt oder null
58    */
2597cd 59   public Object write(Entity e, boolean overwrite);
081606 60   
U 61   /**
62    * Ein Objekt aus der Ablage lesen
63    * @param typ
64    * @param name
65    * @return das eingelesene Objekt
66    */
67   public Entity read(String typ, String name);
68   
a43e1a 69   /**
U 70    * Ein Objekt als JSON lesen
71    * @param typ 
72    * @param name
73    * @return das gewuenschte Objekt als JSON
74    */
5f70da 75   public String readJson(String typ, String name);
U 76   
081606 77   /**
U 78    * Die Namen der Elemente eines gegebenen Typs auflisten
79    * @param typ der gewuenschte Typ
80    * @return die Liste mit Namen
81    */
82   public List<String> list(String typ);
83   
a43e1a 84   /**
f45e20 85    * Alle Objekte eines Typs auflisten
U 86    * @param typ der gewuenschte Typ
87    * @return die Liste mit Objekten 
88    */
89   public List listObjects(String typ);
90   
91   /**
a43e1a 92    * Fuer einen gegebenen Namen den Typ bestimmen
U 93    * @param name  der Name des gewuenschten Typs 
94    * @return der Typ zum Namen
95    */
b1bf96 96   public TypeToken typeFromName(String name);
2b5c60 97   
a43e1a 98   /**
U 99    * Ein Objekt aus der Ablage loeschen
100    * @param typ  Objekttyp
101    * @param name  Name des Objekts, das geloscht werden soll
102    * @return true, wenn geloeschn, false wenn nicht
103    */
2b5c60 104   public boolean delete(String typ, String name);
dfb7d3 105   
U 106   public boolean exists(String typ, String name);
081606 107 }