Teil 1: Modellierung und Produktkonfiguration

Hello Faktor-IPS

Im ersten Schritt dieses Tutorials legen wir ein Faktor-IPS Projekt an, definieren eine Modellklasse und generieren Java-Sourcecode zu dieser Modellklasse.

Falls Sie Faktor-IPS noch nicht installiert haben, tun Sie das jetzt. Die Software und die Installationsanleitung finden Sie auf https://www.faktorzehn.org/de/download/. In diesem Tutorial verwenden wir Eclipse 4.28 (2023-06) und Faktor-IPS 24.1.7.release. Eclipse wird auf Englisch verwendet. Faktor-IPS hingegen auf Deutsch (also mit installiertem Language Pack). Achten Sie darauf, auch die Faktor-IPS Add-ons (m2e und Groovy) zu installieren.

Starten Sie Eclipse. Am besten verwenden Sie für dieses Tutorial einen eigenen Workspace. Wenn Faktor-IPS korrekt installiert ist, sollten Sie bei geöffneter Java-Perspektive [3] in der Toolbar folgende Symbole sehen [4]:

101icons
Figure 1. Faktor-IPS Icons

3 In der Menüleiste WindowPerspectiveOpen PerspectiveJava auswählen
4 In den Tutorials von Faktor-IPS wird von einer Installation mit Faktor-IPS German Language-Pack ausgegangen. Wenn Sie das Language-Pack installiert haben, aber trotzdem ohne die Übersetzung arbeiten wollen, können sie einfach Eclipse mit einer anderen Locale starten, z.B. mit eclipse -vmargs -Duser.language=en

Falls der Modell-Explorer nicht sichtbar ist, liegt das daran, dass Sie diesen Workspace bereits vor der Installation von Faktor-IPS verwendet haben. Rufen Sie in diesem Fall im Menü WindowPerspectiveReset Perspective auf.

Faktor-IPS-Projekte sind normale Java-Projekte oder Maven-Projekte mit einer zusätzlichen Faktor-IPS-Nature. Als erstes legen Sie also ein neues Maven-Projekt mit dem Namen „Hausratmodell“ an. Hierzu kann der Maven-Archetype für Faktor-IPS genutzt werden, der ein Maven-Projekt mit Faktor-IPS Nature erstellt.

Öffnen Sie dazu die Kommandozeile und navigieren Sie in den Ordner in dem Sie das Projekt anlegen möchten. Führen Sie dort den folgenden Befehl aus:

mvn archetype:generate -DarchetypeGroupId=org.faktorips -DarchetypeArtifactId=faktorips-maven-archetype -DarchetypeVersion=24.1.7.release -DgroupId=org.faktorips.tutorial -DartifactId=Hausratmodell -Dversion=1.0 -Dpackage=org.faktorips.tutorial.model -DJavaVersion=17 -DIPS-Language=de -DIPS-IsModelProject=true -DIPS-IsProductDefinitionProject=false -DIPS-SourceFolder=model -DIPS-RuntimeIdPrefix=hausrat. -DIPS-ConfigureIPSBuild=true

Dieser Befehl hat mit Hilfe des Faktor-IPS Archetype das Maven-Projekt „Hausratmodell“ erstellt. Dem Projekt wurde die Faktor-IPS Nature und damit die Laufzeitbibliotheken von Faktor-IPS hinzugefügt.
In diesem Projekt werden wir die Modellklassen anlegen. Das Sourceverzeichnis in dem die Modelldefinitionen abgelegt werden haben wir „model“ genannt (durch den Parameter -DIPS-SourceFolder=model). Unterhalb dieses Verzeichnisses kann die Modellbeschreibung wie in Java durch Packages (Pakete) strukturiert werden. Faktor-IPS verwendet wie Java qualifizierte Namen zur Identifikation der Klassen des Modells.
Das Basispackage für die generierten Java-Klassen wurde „org.faktorips.tutorial.model“ genannt (durch den Parameter -Dpackage=org.faktorips.tutorial.model). Als Runtime-ID-prefix haben wir „hausrat.“ gewählt. Die Bedeutung des Runtime-ID-Prefixes wird im Kapitel „Definition der Produkte" erläutert.
Die genauen Funktionen der verwendeten Parameter können in der Dokumentation des Archetype nachgelesen werden: https://www.faktorzehn.org/dokumentation/faktor-ips-projekte-mit-maven-archetypes-erstellen/.

Anschließend muss das neu erstellte Projekt in den Eclipse Workspace importiert werden. Rufen Sie dazu FileImportMavenExisting Maven Projects auf. Im Dialog wählen Sie dann den Projektordner als Root Directory aus und importieren dann das Projekt mit einem Klick auf Finish.

102import maven
Figure 2. Maven Projekt in Eclipse importieren

Bevor wir die erste Klasse „HausratVertrag“ definieren, stellen Sie noch ein, dass der Workspace automatisch gebaut wird (im Menü: ProjectBuild automatically).

Wechseln Sie zunächst in den Modell-Explorer von Faktor-IPS direkt neben dem Package-Explorer.

103overview
Figure 3. Ansicht der Projekte im Modell-Explorer

Im Modell-Explorer wird die Modelldefinition ohne die Java-Details dargestellt. In der Datei „.ipsproject“ sind die Eigenschaften des Faktor-IPS Projektes gespeichert. Hierzu gehören zum Beispiel die gerade im Add IpsNature-Dialog eingegebenen Informationen, Einstellungen für die Codegenerierung, die erlaubten Datentypen etc. Der Inhalt ist in XML abgelegt und ausführlich in der Datei dokumentiert.

Die Klassen werden wir in einem Package mit dem Namen „hausrat“ ablegen. Zum Anlegen des IPS Packages Rechtsklick auf das Sourceverzeichnis „model“, neuIPS Package. Danach den Namen des neuen Packages („hausrat“) eingeben und anschließend auf Button Finish drücken. Alternativ können Sie IPS Packages über den Button NewIpsPackageFragment , in der Toolbar, anlegen.

104ips package
Figure 4. Anlegen eines IPS Packages

Als nächstes wollen wir eine Klasse anlegen, die unseren Hausratvertrag repräsentiert. Markieren Sie dazu das neu angelegte Package im Package Explorer und drücken auf den Button NewPolicyCmptTypeWizard in der Toolbar.

105vertragsteil anlegen
Figure 5. Anlegen einer neuen Vertragsklasse

In dem Dialog sind Sourceverzeichnis und Package bereits entsprechend vorbelegt und Sie geben noch den Namen der Klasse an, also „HausratVertrag“ und klicken auf Finish. Faktor-IPS hat jetzt die neue Klasse angelegt und den Editor zur Bearbeitung geöffnet. Wechseln Sie zurück in den Package-Explorer. Sie sehen, dass die Klasse „HausratVertrag“ in einer eigenen Datei mit dem Namen „HausratVertrag.ipspolicycmpttype“ gespeichert ist.

Weiterhin hat der Codegenerator von Faktor-IPS bereits zwei Java-Sourcefiles erzeugt „org.faktorips.tutorial.model.hausrat.HausratVertrag“ und „org.faktorips.tutorial.model.hausrat.HausratVertragBuilder“.

106overview2
Figure 6. Generierte Klassen

Ein kurzer Blick in den Sourcecode von „HausratVertrag“ zeigt, dass hier schon einige Methoden generiert worden sind. Diese Methoden dienen unter anderem zur Konvertierung der Objekte in XML und zur Unterstützung von Prüfungen.

Die Klasse „HausratVertragBuilder“ erzeugt nach dem Erbauer-Entwurfsmuster Vertragsstrukturen.