Thema dieser Dokumentation / Das FirstSpirit 5 Modul- / Komponenten-Modell / Von Gadgets, Aspects, Brokern und Agents / Arbeiten mit Referenzen / Das Interface ReferenceConstructionAgent
Das Interface ReferenceConstructionAgent
Package: de.espirit.firstspirit.client.access.editor
Über einen ReferenceConstructionAgent können Instanzen vom Typ ReferenceHolder erzeugt werden (siehe Das Interface ReferenceHolder). Ein Objekt vom Typ ReferenceConstructionAgent kann über den ValueEngineerContext geholt werden (siehe Das Interface ValueEngineerContext<F extends GomFormElement>). Dieser Kontext wird Objekten vom Typ ValueEngineer<T> während der Erzeugung übergeben. Um innerhalb der ValueEngineer-Implementierung Zugriff auf den Kontext zu haben, muss dieser bei der Erzeugung der ValueEngineer-Instanz innerhalb der ValueEngineerFactory-Implementierung weitergereicht werden (vgl. Beschreibung zu ValueEngineerFactory in Das Interface ValueEngineerFactory und die Beispiel-Implementierung in ValueEngineerFactory):
Listing: Referenzen - ValueEngineerContext übergeben (ValueEngineerFactory)
public class MyValueEngineerFactory implements ValueEngineerFactory<T, MyGom> {
...
public ValueEngineer<T> create(final ValueEngineerContext<MyGom> context) {
return new MyValueEngineer(context);
}
...
}
Der innerhalb des Konstruktors übergebene Kontext kann anschließend in der ValueEngineer-Implementierung weiterverwendet werden:
Listing: Referenzen – SpecialistsBroker über ValueEngineerContext anfordern
public class MyValueEngineer implements ValueEngineer<T>, ReferenceContaining<T> {
private ValueEngineerContext<MyGom> _context;
...
public MyValueEngineer(final ValueEngineerContext<MyGom> context) {
_context = context;
}
...
@NotNull
public List<Reference> collectReferences(@NotNull final T value) {
final SpecialistsBroker broker = _context.getBroker();
...
}
...
}
Über den ValueEngineerContext kann eine Instanz vom Typ SpecialistsBroker angefordert werden. Ein SpecialistsBroker bietet über unterschiedliche „Spezialisten“ Zugriff auf bestimmte Dienste oder Informationen. Für das Erzeugen von Referenzen, wird ein Spezialist vom Typ ReferenceConstructionAgent benötigt. Dieser kann auf dem SpecialistsBroker mithilfe der Methode <S> S requireSpecialist(SpecialistType<S> type) angefordert werden:
Listing: Referenzen - ReferenceConstructionAgent anfordern
...
final ReferenceConstructionAgent referenceConstructionAgent =
_context.getBroker().requireSpecialist(ReferenceConstructionAgent.TYPE);
...
Auf der Instanz vom Typ ReferenceConstructionAgent können anschließend Instanzen vom Typ ReferenceHolder für die Aufnahme interner oder externer Referenzen erzeugt werden (siehe Das Interface ReferenceHolder).
Das Interface bietet den Zugriff auf folgende Methoden:
- IDProviderReferenceHolder create(@NotNull IDProvider element,
@Nullable String remoteConfigName): Die Methode liefert einen Daten-Container vom Typ IDProviderReferenceHolder zurück, der das übergebene FirstSpirit-Element (vom Typ IDProvider) referenziert. Stammt das übergebene Element aus einem Remote-Projekt, muss als weiterer Parameter der symbolische Name des zugehörigen Remote-Projekts übergeben werden. Handelt es sich bei dem übergeben Element um einen FirstSpirit-Datensatz (Typ Dataset), so muss dieser aus einer „Datenquelle“ stammen, also einer an FirstSpirit angebunden Datenbank (weiterführende Informationen zu Datenquellen siehe FirstSpirit Handbuch für Entwickler (Teil 1 - Grundlagen)). - ExternalReferenceHolder create(@NotNull String resource, @Nullable String category): Analog zu FirstSpirit-internen Referenzen, können auch Referenzen auf externe Quellen (z. B.: ein externer URL) angelegt werden. Die Methode liefert einen Daten-Container vom Typ ExternalReferenceHolder zurück, der die übergebene externe Ressource referenziert. Optional kann dem ExternalReferenceHolder eine Kategorie übergeben werden, z. B. „url“ für Internetadressen oder „email“. Die hier übergebene Kategorie wird im FirstSpirit SiteArchitect beispielsweise innerhalb des Suchdialogs angezeigt (Menüpunkt: „Suche nach externen Referenzen“).
Listing: Referenzen - ReferenceHolder erzeugen (ValueEngineer-Impl.)
...
final SpecialistsBroker broker = _context.getBroker();
final ReferenceConstructionAgent agent =
broker.requireSpecialist(ReferenceConstructionAgent.TYPE);
final ExternalReferenceHolder referenceHolder = agent.create(value, "custom");
...