Persoenliche Mediazentrale
ulrich
2021-04-05 e1e37319f34f17946a8338b8001cfc9daed08ee4
commit | author | age
081606 1 /*
e1e373 2   Mediazentrale - Personal Media Center
U 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/>.
081606 17  */
U 18 package de.uhilger.mediaz.store;
19
20 import de.uhilger.mediaz.entity.Entity;
21 import java.util.List;
22
23 /**
e1e373 24  * Eine Ablage fuer serialisierte Objekte, die wie folgt organisiert ist
081606 25  * 
U 26  * [Ort]/[Typ]/[Name]
27  * 
28  * Ort ist der Ablagort, an dem sich die folgende Struktur findet
29  * Typ ist eine der Klassen der Package entity
30  * Name muss identisch mit dem Element laut Entity.getName() sein
e1e373 31  * 
U 32  * Einzelne Objekte werden nach JSON serialisiert und in Dateien oder je nach 
33  * Typ der Storage aehnliche 'Behaeltnisse' geschrieben. Die Dateinamen werden 
34  * ohne Dateierweiterung geschrieben.
35  * 
36  * In einer Gruppe identischer Typen muss jede Entitaet eindeutig benannt sein. 
37  * Als weitere Konvention soll jede Entitaet nur Buchstaben, Zahlen 
38  * oder Bindestrich (-) im Namen enthalten.
39  * 
40  * Erlaubter-1-Name-123<br>
41  * <br>
42  * Nicht-erlaubter-Name.1-4 (Punkt)<br>
43  * Nicht erlaubt (Leerzeichen)<br>
44  * AuchNicht?erlaubt (Fragezeichen)<br>
45  * Ebenfalls&amp;verboten (&amp;)<br>
46  * usw.
081606 47  *
U 48  * @author Ulrich Hilger
49  * @version 1, 5.4.2021
50  */
51 public interface Storage {
52   
53   /**
54    * Ein Objekt in die Ablage schreiben
55    * @param e das Objekt, das geschrieben werden soll
56    * @return ein Antwortobjekt oder null
57    */
58   public Object write(Entity e);
59   
60   /**
61    * Ein Objekt aus der Ablage lesen
62    * @param typ
63    * @param name
64    * @return das eingelesene Objekt
65    */
66   public Entity read(String typ, String name);
67   
68   /**
69    * Die Namen der Elemente eines gegebenen Typs auflisten
70    * @param typ der gewuenschte Typ
71    * @return die Liste mit Namen
72    */
73   public List<String> list(String typ);
74   
75 }