Thema dieser Dokumentation / Das FirstSpirit 5 Modul- / Komponenten-Modell / Von Gadgets, Aspects, Brokern und Agents / Aspekte (ValueEngineer) / Aspekt: ReferenceContaining
Aspekt: ReferenceContaining
Aspect: ReferenceContaining<T>
Package: de.espirit.firstspirit.client.access.editor
Wesentliche Funktionalitäten von FirstSpirit basieren auf dem so genannten Referenzgraph eines Projekts. Der Referenzgraph wird verwendet, um die Abhängigkeiten von Objekten innerhalb komplexer Projekte zu erkennen. Mithilfe des Aspekts ReferenceContaining können Komponentenentwickler nun erstmalig ausgehende Referenzen (References) für Eingabekomponenten implementieren (siehe Arbeiten mit Referenzen).
Dieser Aspekt kann der ValueEngineer-Implementierung über die Methode <T> T getAspect(@NotNull ValueEngineerAspectType<T> aspect) aus dem Interface ValueEngineer<T> hinzugefügt werden (siehe Das Interface ValueEngineer<T>). Die Methode liefert eine aspektorientierte Instanz des Persistenztyps zurück:
public <T> T getAspect(@NotNull final ValueEngineerAspectType<T> aspect) {
if (aspect == ReferenceContaining.TYPE) {
return aspect.cast(this);
}
return null;
}
Außerdem muss die Methode List<Reference> collectReferences(@NotNull T value) implementiert werden, die alle ausgehenden Referenzen des übergebenen Wertes als Liste zurückliefert. Die erforderlichen Referenzen müssen über die ValueEngineer-Implementierung erzeugt werden. Dazu wird eine Instanz vom Typ ReferenceConstructionAgent benötigt. Ein Objekt vom Typ ReferenceConstructionAgent kann über einen SpecialistsBroker angefordert werden. Der SpecialistsBroker steht im ValueEngineerContext zur Verfügung. Um innerhalb der ValueEngineer-Implementierung Zugriff auf den ValueEngineerContext zu haben, muss dieser bei der Erzeugung der ValueEngineer-Instanz innerhalb der ValueEngineerFactory-Implementierung weitergereicht werden (Beschreibung siehe Das Interface ReferenceConstructionAgent).
Über den ReferenceConstructionAgent können Instanzen vom Typ ReferenceHolder erzeugt werden (siehe Das Interface ReferenceHolder). Der ReferenceHolder hält die Informationen über das (interne oder externe) Objekt, das bei der Erzeugung der Instanz übergeben wurde. Die eigentliche Referenz wird erst durch den Aufruf der Methode toReference(…) auf der Instanz vom Typ ReferenceHolder erzeugt. Die Referenz kann schließlich innerhalb einer Liste zurückgeliefert werden.
@NotNull
publicList<Reference> collectReferences(@NotNullfinalString value) {
finalSpecialistsBroker broker = _context.getBroker();
finalReferenceConstructionAgent agent =
broker.requireSpecialist(ReferenceConstructionAgent.TYPE);
finalExternalReferenceHolder referenceHolder = agent.create(value, "custom");
finalReference reference = referenceHolder.toReference(null);
returnCollections.singletonList(reference);
}
Die Liste der Referenzen wird vom FirstSpirit-Framework an den Referenzmanager weitergereicht. Alle eingehenden und ausgehenden Referenzen eines SwingGadgets (bzw. der dort enthaltenen Werte) werden vom FirstSpirit Referenzmanager gesammelt und können über den Referenzgraph im FirstSpirit SiteArchitect visuell dargestellt werden, beispielsweise über den Menüeintrag „Suche – externe Referenzen“.
Eine umfangreiche Beschreibung zum Arbeiten mit Referenzen befindet sich in Arbeiten mit Referenzen.