Release Notes

Version 25.1

Mit Version 25.1 werden zahlreiche Verbesserungen und Fehlerbehebungen eingeführt. So ist es nun unter anderem möglich Enum-Attribute als mandatory oder optional zu deklarieren, die Sortierreihenfolge bei Beziehungen anzupassen, modellseitig konfigurierte Ranges in der Produktkonfiguration als Enumeration umzukonfigurieren oder auch einen Massenexport von Tabellen durchzuführen.

Bitte beachten: Insbesondere durch die Anpassungen der Mandatory Enum Attributes ist eine Migration der Projekte notwendig. Näheres hierzu auch im dazugehörigen Abschnitt Migration.

Mandatory Attribute für Enums

Für Attribute in (contentseparierten) Enums ist es nun möglich, diese als mandatory oder optional zu definieren und analog zu ID und Literal-Name auf fehlende Werte zu validieren. Hierfür wurde der Dialog zur Erstellung neuer Enum-Attribute um eine mandatory-Checkbox ergänzt - Als neuer Default wird mandatory gesetzt. Um die Validierung zur Laufzeit zu ermöglichen, wurde der Codegenerator angepasst, sodass bei Pflichtattributen nun eine "mandatory"-flag in die @IPSEnumAttribute-Annotation generiert wird.

Aufgrund der Änderungen im generierten Code ist eine Migration erforderlich. Weitere Informationen hierzu im Abschnitt Migration.

Faktor-IPS beachtet Projekteinstellung für Zeilenumbrüche

In Eclipse kann systemunabhängig die Art der Zeilenumbrüche (Unix: \n oder Windows: \r\n) projektweit festgelegt werden. Faktor-IPS nutzt jetzt diese Einstellung um die Line-Endings für u. a. toc.xml, .properties dem Setting entsprechend nach einem Clean Build einheitlich zu generieren.

Die Einstellung kann in Eclipse über das UI (Rechtsklick auf das Projekt → Properties → Resource → New text file line delimiter) oder direkt über die Datei org.eclipse.core.runtime.prefs im Unterordner .settings/ wie folgt gesetzt werden:

eclipse.preferences.version=1
line.separator=\n

Massenexport von Tabellen

Faktor-IPS unterstützt nun das Exportieren von mehreren Tabelleninhalten. Der Export wird über das Kontextmenü gestartet und exportiert alle ausgewählten Tabellen, bzw. alle Tabellen in ausgewählten Projekten/Verzeichnissen. Werden mehrere Tabellen ausgewählt, so kann wie bisher die Null-Repräsentation, die Header-Zeilen, sowie ein Zielverzeichnis festgelegt werden. Die Namen der Excel-Sheets ergeben sich dabei aus den Namen der Tabellen.

Aufzählungs-Wertebereich im Produkt bei modellseitigem Bereich

Ist in einem produktkonfigurierten Vertragsattribut der Wertebereich eines Attributs als Bereich definiert kann dieser jetzt in der Produktkonfiguration auf eine Aufzählung umgestellt werden - wobei jeder Wert in der Aufzählung im Bereich liegen muss, der im Modell definiert ist.

Dies funktioniert nur, wenn die Generatoroption <Property name="valueSetMethods" value="Unified"/> gesetzt ist, da bei der alten Einstellung ByValueSetType die Value-Set-Getter-Methoden eine Typänderung nicht zulassen.

API-Änderungen

  • Die IpsModel#getDatatypesDefinedInProjectProperties Methoden wurden in die Schnittstelle IIpsModel integriert, um eine konsistentere API-Nutzung zu gewährleisten.

  • Die DelegatingValueHolder Klasse wurde in das Paket org.faktorips.devtools.model.productcmpt verschoben, um die Paketstruktur zu optimieren.

  • Eine neue Factory-Methode IProductCmptTreeStructure#of wurde in IProductCmptTreeStructure hinzugefügt. Diese ermöglicht eine einfachere Instanziierung der Klasse ProductCmptTreeStructure, die die Schnittstelle IProductCmptTreeStructure implementiert.

Generierter Code

  • Zeilenumbrüche werden entsprechend der Projekteinstellung generiert.

  • @IpsTableUsage wurde erweitert, sodass sie jetzt alle Tabellenklassen, die in tableClasses definiert sind, in die Annotation aufnimmt. Der Code prüft, ob eine oder mehrere Tabellenklassen vorliegen, und fügt sie der Annotation hinzu.

  • @IPSEnumAttribute wurde um eine mandatory flag erweitert, um zu beauskunften ob Enum-Attribute optional oder verpflichtend sind.

Runtime

  • Wird IModifiableRuntimeRepository#putTable(ITable<?> table) mit einer Single-Content-Tabelle aufgerufen wird ein ggf. vorher gesetzter Wert als Optional<ITable<?>> zurück gegeben.

  • InMemoryRuntimeRepository#putTable(ITable<?> table, String qName) (bereits seit 24.7 deprecated) erlaubt jetzt nicht mehr die Verwendung von Single-/Multi-Content-Tabellen als jeweils anderen Typ.

  • IRuntimeRepository#getTable(Class<T> tableClass) wirft jetzt eine IllegalArgumentException wenn es für eine Multi-Content-Tabelle aufgerufen wird.

  • Das IModifiableRuntimeRepository wurde um folgende remove-Methoden erweitert und via dem InMemoryRuntimeRepository implementiert:

    • removeProductCmptGeneration(IProductComponentGeneration productCmptGeneration)

    • removeCustomRuntimeObject(Class<T> type, String ipsObjectQualifiedName)

    • removeEnumValues(Class<T> enumTypeClass)

    • removeIpsTestCase(IpsTestCaseBase test)

  • Die Methode getTableStructure() ist nun als deprecated markiert, da sie nur eine einzelne Tabellenstruktur liefert und damit bei der Nutzung von mehreren Tabellenstrukturen in einer TableUsage unzureichend ist. Stattdessen sollte die neue Methode getTableStructures() verwendet werden, die sicherstellt, dass alle relevanten Tabellenstrukturen als Liste zurückgegeben werden.

Designtime

  • Die Methode XmlUtil#nodeToString erwartet jetzt den zu verwendenden Line Separator als dritten Parameter.

Kompatibilität

Ältere Faktor-IPS-Versionen

  • Aufgrund der neuen Annotationen ist die Runtime nicht mit dem generierten Code älterer Versionen kompatibel und umgekehrt.

Java

  • Die Design-Time (Eclipse-Plugin) benötigt mindestens Java 17; mit Eclipse-Versionen ab 2024-06 wird Java 21 benötigt.

  • Die Runtime benötigt mindestens Java 17. (Eine Migration für EclipseLink ist möglicherweise nötig. Siehe Abschnitt Migration für weitere Informationen)

Eclipse

Die Design-Time (Eclipse-Plugin) benötigt mindestens Eclipse 2023-12 und wurde mit diesem und allen Versionen bis einschließlich 2024-12 getestet.

Migration

  • EclipseLink 2.5 und 2.7 in Versionen unter 2.7.13 sind nicht mit Java 17 kompatibel. Eine Aktualisierung der Dependency auf mindestens 2.7.13 ist erforderlich, um die Runtime mit Java 17 zu verwenden.

  • Wie im Kapitel Mandatory Attribute für Enums beschrieben, ist es nun möglich Enum-Attribute als mandatory/optional zu deklarieren. Um die Validierung zur Laufzeit zu ermöglichen, wird bei Pflichtattributen nun eine "mandatory"-flag in die @IPSEnumAttribute-Annotation generiert und eine Migration ist somit zwingend erforderlich. Dabei erlaubt die Migration eine Auswahl, ob mandatory = false/true bei bestehenden Enum-Attributen konfiguriert werden soll. Als Default ist false gesetzt, um den bisherigen Zustand zu erhalten und alle bestehenden Enum-Attribute weiterhin als optional zu behandeln.

Behobene Fehler

  • NumberFormatException bei StringLength multiEdit.

  • Unterschiedliches Verhalten von getAllTables in Repositories.

  • Local XSD Language Server.

  • IpsTestCase: Namen des Testparameters werden falsch validiert.

  • Unter Linux geschriebene FIPS-Dokumentation führt zu Diffs unter Windows ( )).

  • initialize Methode falsch bei überschriebenen abstract PolicyCmptType Attributen.

  • Vermurkstes Zeichen in Fips-Settings auf Deutsch.

  • IRuntimeRepository#getTable(Class<T> tableClass) sollte bei einer MULTIPLE_CONTENT Tabelle ein anderes Verhalten aufzeigen.

  • Tabellenimport hängt.

  • Verschwundene TOC Einträge und IndexViolation.

  • Produktsuche findet nichts.

  • Exception beim Anzeigen der Beziehungstyp-Knoten im Produktstruktur-Explorer.

  • Typ der Wertemenge lässt sich bei Produktkonfigurierten Vertragsattributen nicht mehr ändern.

  • faktorips-util depends on javax.xml.bind:jaxb-api.

  • Umlaute fixen.

  • Ipsenumtype von Datatype Definitions mit Innerclass Enums funktionieren nicht.

  • Anzeigefehler bei Umlauten im Testrunner.

  • Runtime-Validierung erlaubt null/"" nicht als Default-Wert bei Pflichtattributen.

  • Faktor-IPS generiert MAX_ALLOWED_VALUES-Konstante für Extensible-Enum-Multi-Value-Produktattribut.

  • initPartContainersFromXml verwirft alle Parts.

  • java.io Serialisierung für Konstanten in content-separierten Enums funktioniert nicht.

  • Validierungsmessage gibt "valueHolder" statt dem eigentlichen Attributsnamen aus.

  • xsi:schemalocation in ipsenumtype, ipsenumcontent und ipstablestructure Dateien wird nicht migriert.

  • initPartContainersFromXml verwirft immer noch einige Parts.

  • Multi-Value-Produktattribut mit "Allow Empty" bietet <null> Wert als möglichen Wert an.

  • NullPointerException beim Holen einer Tabelle aus einem InMemoryRuntimeRepository.

  • Zeilenumbruch (\n) in messages .properties wird in Windows zu \r\n.

  • ProductComponent getDescription null safe machen.

  • Overload Formula causes NPE.

  • Migration leert fehlerhafte Dateien

  • Exception beim Navigieren in Eclipse

  • JMerge kommt nicht mit Java-21-Code klar

  • Exception beim Tabellen-Import

  • IPS 25.1.0-a20241030-01 mit mehrfachen Tabellenverwendungen

Weitere Funktionen und Verbesserungen

  • Eclipse 2024-12.

  • Man sollte für UnrestrictedValueSets von Enum-Datentypen generierte OrderedValueSets erkennen können.

  • Beziehungsvalidierung.

  • Basisklasse für Produktmigration Migration nach Attributsumbenennung.

  • Default Vorbelegung "Table Content Required" auf true.

  • Validate that a value set not allowing null is not configured to be empty.

  • Migration 25.1.

  • Apache-Commons-IO update.

  • Improve Identifier performance.

  • InMemoryRuntimeRepository#getAllModelTypeImplementationClasses implementieren

  • Modellseitig konfigurierter Range soll in der Produktkonfiguration in eine kompatible Enumeration umkonfiguriert werden können

  • Regex ValueSet für Strings

  • Pflicht-Tabellenverwendung in der Runtime validieren

  • Update Dependencies & Plugin versions

  • Runtime-Information über mehrere TableStructures in einer TableUsage

  • Remove-Methoden am IModifiableRuntimeRepository

  • Mandatory Attribute für Enums

  • Sortierreihenfolge bei Beziehungen

  • Massenexport von Tabellen