package hsmw.jotto5.beleg.data;
import java.util.HashMap;
/**
* Das Model der Anwendung.
*
* Stellt einfache Abfragen bereit und verwaltet die Anbindung an ein Speicher-Backend.
* Zugriff auf Daten ist Thread-sicher. Um ständiges Zusammenbauen von Objekten
* zu vermeiden und um besser vom eigentlichen Backend zu abstrahieren sind viele
* einfache Abfragen als Methode umgesetzt.
*
* Denkbar ist zum Beispiel eine Implementation auf LDAP-Basis, oder in einer relationalen
* Datenbank.
*
* Die aktuelle Implementierung speichert alle DataObjects in einer HashMap, mit ihrer
* UID als Key. Das erlaubt schnelle forward-lookups (also Suche nach Obj mit gegebener UID),
* was die deutlich häufiger ausgeführte Operation sein sollte.
*/
public class Model {
// die Hilfsvariable für das Singleton-Pattern
private static Model model = null;
private HashMap objs;
private HashMap relations;
/**
* Singleton.
*/
public static Model getModel() {
if (model == null)
model = new Model();
return model;
}
/**
* Initialisiert ein leeres Model.
*/
public Model() {
objs = new HashMap();
relations = new HashMap();
}
/**
* Füllt das Model mit Beispieldaten.
*/
public void fillMockData() {
Group g1, g2, g3;
// Studierende
new Student("students/jotto5", "Jocelyn", "Otto").bind(this);
new Student("students/vnachn", "Vorname", "Nachname").bind(this);
new Student("students/alovel", "Ada", "Lovelace").bind(this);
new Student("students/aturin", "Alan", "Turing").bind(this);
new Student("students/dknuth", "Donald", "Knuth").bind(this);
new Student("students/ltorva", "Linus", "Torvalds").bind(this);
new Student("students/dritch", "Dennis", "Ritchie").bind(this);
// Gruppen
g1 = new Group("groups/IF24wS2-B", "Softwareentwicklung WiSe 24/25 Seminargruppe 2");
g2 = new Group("groups/admins", "Administrator:innen");
g3 = new Group("groups/alumni", "Alumni");
new Group("groups/leer", "Leere Gruppe").bind(this);
g1.bind(this);
g2.bind(this);
g3.bind(this);
g1.addMember("students/jotto5");
g2.addMember("students/vnachn");
g2.addMember("students/ltorva");
g3.addMember("students/alovel");
g3.addMember("students/aturin");
g3.addMember("students/ltorva");
}
/*
* Folgende Funktionen sind nur durch die DataObject-Objekte
* zu verwenden, und sind daher protected.
*/
/**
* Fügt ein neues DataObject hinzu, also bindet es an das Model.
*/
protected void add(DataObject a) {
// TODO: Auf doppelte UIDs überprüfen!
this.objs.put(a.uid, a);
}
/**
* Fügt eine neue Objekt-Beziehung hinzu.
*/
protected void addRelation(String a, String b) {
// TODO: Prüfen ob die Objekte existieren!
this.relations.put(a, b);
}
}