Major
Nice to have
Detail
Major
#25533
Singletons in-app anlegen
Die Konfiguration für Singletons kann zwar (rudimentär) erstellt werden, das eigentliche Objekt wird dabei aber nicht angelegt.
Um in-app Baumstrukturen zu definieren, ist es konvenient, wenn man in seiner Struktur auch ein Root-Singleton hat um als Business-Objekt des Baumknotens verwendet werden zu können. Die Konstante null ist als Business-Objekt für Baumknoten ungeeignet. Ein String "root" funktioniert zwar, hat aber hässliche Fallunterscheidungen zur Folge.
Code-Migration
Modell-Konfiguration
- Ein Modul hat keine Eigenschaft factory mehr. Stattdessen muss die Einstellung über eine factory-Annotation erreicht werden:
!ModelService Settings
- In den Zusatzeinstellungen eines Moduls gibt es nicht mehr explizit die Eigenschaften factory und main-properties. Stattdessen können in den Modul-Einstellungen im tl:ModelService beliebige Annotationen für ein Modul gesetzt werden:
Die main-properties müssen als Annotation jeweiligen Typ gesetzt werden:
Modell-Konfiguration
- Ein Singleton darf keine mandatory Attribut ohne Default-Wert haben. Insbesondere gilt das jetzt auch für das quasi implizite name-Attribut. Da die Tabelle StructuredElement eine mandatory Name-Spalte hat, müssen alle Singletons, die in dieser Tabelle gespeichert werden ein name-Attribut mit einem Default-Wert deklarieren:
Die Sektion <section name="StructureRootNodeNames"> aus der Anwendungskonfiguration ist entfallen. Stattdessen muss der entsprechende Wert für den Namen des Root-Elementes im Default-Wert für das Namens-Attribut angegeben werden.
Für bestehende Datenbestände ist das irrelevant, da die Root-Elemente schon nach dem alten Schema angelegt wurden. Daher ist keine Datenmigration erforderlich.
Generierte Modell-Klassen
- Die Factories für Module sind keine konfigurierten Klassen mehr. Stattdessen dürfen sie nur noch einen public Default-Konstruktor haben. Entweder kann der bestehende Konstruktor ersatzlos entfernt werden, oder die Factory kann neu generiert werden.
- Die Root-Lookup-Methoden in StructuredElementFactory benötigen nicht mehr den Modulnamen als Argument. Das betrifft insbesondere auch die generierten Factories.
FastList-Attachement
- Das Feature, das `TLEnumeration`s aka. `FastList`s an Objekte attached werden können ist enfallen. `TLEnumeration`s können lokal in Modulen deklariert werden. Alles was darüberhinaus gebraucht wird, muss die Anwendung selbst definieren.
Daten-Migration
Rollen werden nicht mehr im Scope von Singletons, sondern im Scope von Modulen definiert. Die entsprechenden Assoziationen müssen umgehängt werden. Wird automatisch von /com.top_logic.element/webapp/WEB-INF/kbase/migration/tl-element/Ticket_25533_Move_Roles_from_Singletons_to_Modules.migration.xml erledigt.
Test
- com.top_logic.demo/src/test/com/top_logic/demo/scripted/model/TestInAppSingleton.script.xml