| | |
| | | /* |
| | | * 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&verboten (&)<br> |
| | | * usw. |
| | | * |
| | | * @author Ulrich Hilger |
| | | * @version 1, 5.4.2021 |
| | |
| | | * @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 |
| | |
| | | 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); |
| | | } |