Version 3.14.0

Faktor-IPS Version 3.14 bringt neue Modellierungsmöglichkeiten sowie diverse Fehlerbehebungen mit sich. Bereits in früheren Versionen wurde für Produktattribute und Beziehungen die Möglichkeit geschaffen, diese im Produkt ohne Änderungen im Zeitablauf (Anpassungsstufen bzw. Generationen) zu definieren. Dies wurde nun für die Angabe von Tabellen und Formeln erweitert. Alle wichtigen Neuerungen werden im Folgenden detailliert beschrieben.

Einschränken von erweiterbaren Aufzählungen an Vertragsattributen

Für produktkonfigurierte Vertragsattribute, die als Datentyp eine erweiterbare Aufzählung eingestellt haben, kann nun auch die Wertemenge im Modell eingeschränkt werden. Bislang war es nicht möglich in dieser Konstellation eine Wertemenge zu hinterlegen. Dieser Umstand hat rein technische Gründe, da die Aufzählungswerte in der Laufzeitumgebung nur über ein Produkt-Repository abgerufen werden können. Dieses ist jedoch nur über Produktbausteine erreichbar. Für produktkonfigurierte Vertragsattribute kann diese Einschränkung aufgehoben werden, da die Wertemenge dann lediglich als Vorbelegung für die Konfiguration im Produktbaustein gilt. Allerdings muss in dieser Konstellation im generierten Java Code auf die Konstante MAX_ALLOWED_VALUES… verzichtet werden, die ansonsten den im Modell maximal hinterlegten Wertebereich angibt.

Modellierung von Pflichtfeldern durch Einschränken der Wertemenge

Bei der Definition einer Wertemenge kann nun auch für „uneingeschränkte“ Wertemengen festgelegt werden, ob der Wert <null> enthalten oder ausgeschlossen sein soll. Die Einstellung kann direkt über eine Checkbox für alle Arten von Wertemengen vorgenommen werden.

f10-org-new_3_14_0-valueset_containsnull
Damit ist es zum Beispiel möglich, ein Vertrags- oder Produkt-Attribut als Pflichtfeld zu definieren. Der Ausschluss von „<null>“ bei gleichzeitiger Angabe von „<keine Vorbelegung>“ erzwingt, dass beipielsweise bei einem Produktbaustein immer ein konkreter Wert angegeben werden muss.

Vorbelegung im Copy Wizard

Für den Kopier-Wizard („Kopiere Produkt…“ und „Neue Version/Generation erzeugen…“) gibt es in den Benutzervorgaben eine neue Einstellung. Damit kann ausgewählt werden, ob für referenzierte Bausteine Kopieoder Referenz vorbelegt sein soll.
Zur Auswahl stehen dabei Kopie, Referenz und intelligenter Modus.

  • Kopie, Referenz: Bausteine werden mit „Kopie“ bzw. „Referenz“ vorbelegt.
  • Intelligenter Modus: Die Vorbelegung (Kopie oder Referenz) in Abhängigkeit vom Projekt gesetzt. Produktbausteine im gleichen Projekt werden mit „Kopie“ und alle anderen Produktbausteine mit „Referenz“ vorbelegt.

f10-org-new_3_14_0-fips-3458

Änderung im Zeitablauf für Tabelleninhalte

Wie schon bei Produktattributen, kann jetzt auch bei der Verwendung von Tabellen definiert werden, dass der im Produktbaustein eingestellte Wert über alle vorhandenen Anpassungsstufen gleich ist.

f10-org-new_3_14_0-fips-3328-1

Tabellen ohne Änderung im Zeitablauf werden anschließend im Produktbaustein-Typ mit einem „S“ für Statisch am Icon versehen.

f10-org-new_3_14_0-fips-3328-2

Im Produktbaustein markiert ebenfalls ein „S“ am Eingabefeld der Tabellenverwendung, dass der Wert des Feldes in allen Anpassungsstufen gleich ist.

f10-org-new_3_14_0-fips-3328-3

Zur Laufzeit sind Tabellen ohne Änderung im Zeitablauf über die ProductComponent erreichbar. Tabellen mit Änderung im Zeitablauf werden weiterhin von der ProductComponentGeneration bereitgestellt.

Änderung im Zeitablauf für Formeln

Auch für Methoden- und Formelsignaturen kann die im Produktbaustein eingestellte Berechnung über alle vorhandenen Anpassungsstufen gleich sein.

f10-org-new_3_14_0-fips-3329_1

Formeln ohne Änderung im Zeitablauf werden im Editor des Produktbaustein-Typs mit einem „S“ für Statisch am Icon versehen. Die Formeldeklaration ist in allen Anpassungsstufen gleich.

f10-org-new_3_14_0-fips-3329_2

Auch in dem Editor eines Produktbausteins erscheint für Formeln ohne Änderung im Zeitablauf das „S“ neben den Eingabefeld für die Formel.

f10-org-new_3_14_0-fips-3329_3

Zur Laufzeit gilt, analog zu Tabellen und Attributen, dass Formeln ohne Änderung im Zeitablauf über die ProductComponent erreichbar sind. Formeln mit Änderung im Zeitablauf werden weiterhin im generierten Code von der zugehörigen ProductComponentGeneration bereitgestellt.

Kombination von Projekten mit und ohne generierte Interfaces

In Faktor-IPS kann seit der Version 3.8 das Generieren von Interfaces deaktiviert werden. Für Vertrags- und Produktklassen wird dann nur noch die Implementierung generiert. In bestehenden Projekten, die diese Funktion nutzen wollen, ist es allerdings oft sehr aufwändig diese Umstellung für alle Projekte gleichzeitig durchzuführen.

Eine Erweiterung des Codegenerators erlaubt es nun Teilprojekte auf reine Implementierungs-Generierung umzustellen, auch wenn dessen Basisprojekte noch auf Generierung mit published Interfaces eingestellt sind. Dadurch können einzelne oder neue Projekte umgestellt werden ohne die gesamte Anwendung umbauen zu müssen.

Generierung zusätzlicher Annotationen

Ab sofort ist es möglich über alle generierten Methoden zusätzliche Annotationen generieren zu lassen. Die Funktion wurde vor allem zur Markierung des generierten Codes eingebaut, damit dieser in statischen Codeanalysen wie z.B. Checkstyle oder Findbugs ignoriert werden kann.

Die Annotationen können in den Generatoreinstellungen des Faktor-IPS Projekts unter „Generate additional annotations“ definiert werden. Ist in den generierten Klassen für die Nutzung der Annotationen ein Import notwendig, so muss die Eingabe den qualifizierten Namen der Annotation beinhalten (beispielsweise edu.umd.cs.findbugs.annotations.SuppressFBWarnings(„all“)). Die Eingabe erfolgt in jedem Fall ohne das @-Zeichen. Es ist möglich mehrere Annotationen anzugeben indem die einzelnen Annotationen durch „;“ getrennt werden.

Migration 3.14

Für die Version 3.14 wird eine Migration bereit gestellt. Die Migration kann im Kontextmenü des Package-Explorer über das Faktor-IPS Untermenü oder im Modell-Explorer direkt über das Kontextmenü auf selektierte Projekte aufgerufen werden. Während der Migration wird lediglich die .ipsproject Datei angepasst und ein Clean-Build durchgeführt.

Generierten Code und Runtime

Fehlendes @generated Tag

In den Java-Klassen von Anpassungsstufen (ProductComponentGeneration) werden für verwendete Tabellenzuordnungen Methoden mit dem Namen „doInit<RollenName>“ generiert. An diesen fehlte fälschlicherweise das JavaDoc Tag „@generated“ . Dieser Fehler wurde nun behoben.

Da Methoden ohne „@generated“ vom Code-Generator nicht automatisch angepasst oder gelöscht werden, kann es bei Änderungen von bestehenden Tabellenzuordnungen zu Fehlern im generierten Code kommen.

Das Problem kann durch manuelles Eintragen der Annotation oder durch das einmalige Löschen dieser Methoden behoben werden. Wenn in der Klasse kein manueller Code erstellt wurde, kann alternativ auch die ganze Klasse gelöscht werden. Die Methode wird danach richtig generiert.

Erweiterungen bei der Initialisierung von Tabellen

In den Tabellen von Faktor-IPS werden für die definierten Schlüssel effektive Speicherstrukturen zur Suche aufgebaut. In manchen Fällen ist es jedoch notwendig über diese Key-Maps hinaus eigene Datenstrukturen zu initialisieren. Damit dies direkt nach der Instanziierung erfolgt, wurde die Template Methode performAdditionalInitializations() in die Basisklasse Table eingefügt. Diese kann bei Bedarf in der generierten Table Klasse überschrieben werden, um spezifische Initialisierungen durchzuführen. Die Methode performAdditionalInitializations() wird bei jeder Initialisierung direkt nach initKeyMaps() aufgerufen.

Änderung des Modifiers an der Methode “getEnumValueId()“

In erweiterbaren Enums wird eine Methode getEnumValueId() generiert, die nur intern vom Runtime Repository zur Identifikation eines Auszählungswertes verwendet wird. Diese Methode war bisher als privatedeklariert und zusätzlich mit @SuppressWarnings(„unused“) annotiert, damit es nicht zu Warnungen vom Compiler kommt. Diese Annotation konnte mit den neuen, manuell eingestellten „Additional Annotations“ in Konflikt geraten. Als pragmatische Lösung wird die Methode getEnumValueId() zukünftig mit der Sichtbarkeit package-private (default Modifier) generiert, damit entfällt die @SuppressWarnings-Annotation.

Faktor-IPS Plug-In API

Der folgende Abschnitt ist vor allem für die Entwicklung von eigene Erweiterungen für Faktor-IPS interessant. Darin werden wichtige Änderungen der Plug-In API beschrieben.

Weiteres Entfernen von CoreExceptions

Am Interface IIpsProject fallen einige CoreExceptions weg, wodurch sich auch einige Methodensignaturen ändern. Eine Verwendung dieser Methoden erforderte bisher das Fangen der Exception über einen try/catch Block oder das Einführen einer throws-Klausel in der Methodensignatur. Durch den Wegfall der Exceptions kann es nun bei solchen Ausnahmebehandlung außerhalb des Faktor-IPS Codes zu Compilefehlern bzw. Warnings kommen.

Diese Änderung führt nur auf Sourcecode Ebene zu einer Inkompatibilität. Existierender Bytecode ist weiterhin lauffähig.