/* Tango - 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 . */ package de.uhilger.tango.store; import com.google.gson.reflect.TypeToken; import de.uhilger.tango.entity.Entity; import java.util.List; /** * 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
*
* Nicht-erlaubter-Name.1-4 (Punkt)
* Nicht erlaubt (Leerzeichen)
* AuchNicht?erlaubt (Fragezeichen)
* Ebenfalls&verboten (&)
* usw. * * @author Ulrich Hilger * @version 1, 5.4.2021 */ public interface Storage { /** * Ein Objekt in die Ablage schreiben * @param e das Objekt, das geschrieben werden soll * @return ein Antwortobjekt oder null */ public Object write(Entity e, boolean overwrite); /** * Ein Objekt aus der Ablage lesen * @param typ * @param name * @return das eingelesene Objekt */ 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 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); }