Release Notes

Version 20.6.0

Abstrakte Attribute in Vertragsteiltypen

Analog zu Produktbausteintypen lassen sich jetzt ebenfalls in abstrakten Vertragsteiltypen abstrakte Attribute definieren.

Wertebereiche

Abgeleitete Wertebereiche

In manchen Fällen ist es nicht möglich die Menge der erlaubten Werte für ein Vertragsattribut in der Konfiguration festzulegen, da die erlaubten Werte wiederum von den Werten anderer Attribute abhängen können. Dies kann jetzt konfiguriert werden, indem der Wertebereich des Attributs auf „abgeleitet“ gestellt wird. Im generierten Code wird der Getter für die erlaubten Werte mit @restrainedmodifiable markiert um eigenen Code direkt einfügen zu können. Werden Attribute in Unterklassen überschrieben, können deren abgeleitete Wertebereiche von unbegrenzten Wertebereichen überschrieben werden und umgekehrt.

Stringlänge-Wertebereiche

Für Attribute mit Persistenzoption wird in der Regel eine Limitierung der Maximallänge angegeben. Dies ist nun auch im Modell möglich. Die Zeichenanzahl von String-Attributen kann nun durch den Wertebereich Stringlänge auf ein Maximum begrenzt werden. Wenn null als Maximum angegeben wird, ist die Länge unbegrenzt. Eine Migration auf die Version 20.6.0 wird alle Vertragsbausteinattribute des Typs String so einstellen, dass sie mit ihren Persistenzeinstellungen übereinstimmen, sofern möglich.

Leere Bereiche

Bereiche können jetzt explizit als leer markiert werden, um z.B. ein Attribut als irrelevant zu markieren indem keine Werte mehr erlaubt werden, was bisher nur für Aufzählungen möglich war.

Konfiguration der Relevanz von Attributen

Wenn auf Basis von Faktor-IPS ein UI erstellt wird, ist es hilfreich die Relevanz von Attributen zu berücksichtigen. Benötigt eine Motorradversicherung z.B. ein Eingabefeld für die Anzahl der Türen? Dieses Konzept kann durch den erlaubten Wertebereich abgebildet werden. Ein leerer Wertebereich (keine Werte erlaubt) repräsentiert ein für dieses Produkt irrelevantes Attribut, während Ein-/Ausschluss von null ein optionales von einem Pflichtfeld unterscheidet. Dies kann jetzt in Faktor-IPS auch explizit konfiguriert werden, indem für ein Vertragsmodellattribut die Checkbox „Die Relevanz des Attributs ist in der Produktkonfiguration definiert.“ angehakt wird. Dies kann unabhängig von, oder zusätzlich zu „Der Vorbelegungswert und die Menge der erlaubten Werte sind in der Produktkonfiguration definiert.“ gewählt werden.

Relevanzen VertragsAttribut

Wenn die Relevanz in einem Produkt konfiguriert wird, wird zusätzlich zu / anstatt (abhängig von der Auswahl der bekannten Checkbox zur Produktkonfiguration der Wertemenge) des Controls zur Wahl des Wertebereichs eine Reihe von Radiobuttons angezeigt, um die Relevanz direkt zu wählen. Der zugrundeliegende Wertebereich wird dabei direkt angepasst.

Relevanz Produktkonfiguration

Cascade-Typen in Vertragsteiltyp-Beziehungen

Für Kind-zu-Eltenteil-Kompositionen können in Vertragsteiltypen keine Cascade-Typen mehr aktiviert werden. In gewissen Konstellationen hat dies bisher zu Fehlern geführt.

Validierung für doppelte Kind-ID-Version-ID-Kombinationen

Produktbausteine können in Faktor-IPS auf zwei Arten identifiziert werden: Über die Runtime-ID, welche eindeutig sein muss, und über die Kombination aus Kind-ID und Version-ID, welche aus dem unqualifizierten Bausteinnamen abgeleitet werden. Werden in unterschiedlichen Packages Bausteine mit gleichem Namen angelegt, können diese zur Laufzeit nur noch über ihre Runtime-ID unterschieden werden während der Versuch, sie mittels Kind- und Version-ID zu laden nur einen der beiden Bausteine liefert. Um dieses Problem schon während der Entwicklung zu bemerken, warnt Faktor-IPS jetzt bei uneindeutigen Namen. Der Schweregrad dieser Validierungsmeldung kann über das neue AdditionalSetting „duplicateProductComponentSeverity“ in der .ipspoject-Datei eingestellt werden.

Runtime-Groovy jetzt in Faktor-IPS Updatesite

Das Plugin faktorips-runtime-groovy, welches bisher in der faktorips-runtime-addons-Updatesite enthatlen war, kann nun direkt aus der Faktor-IPS-Updatesite installiert werden. Für Maven-Dependencies kann jetzt immer die gleiche Version wie für faktorips-runtime und -valuetypes verwendet werden.

Neue Methoden zur Modifizierung von Produktbausteinen

Produktdaten in einem InMemoryRuntimeRepository können jetzt umfangreicher als zuvor manipuliert werden, so dass z.B. zum Überschreiben von Wertebereichen in Unittests keine Subklassen mehr notwendig sind. Dies ist sowohl über generierte Methoden an den Bausteinen also auch über die Builder und generisch über das IpsModel möglich. So gibt es nun weitere Möglichkeiten produktkonfigurierte Vertragsattribute und Produktbeziehungen zu verändern. Für Vertragsattribute lässt sich die erlaubte Wertemenge und der Default-Wert mittels der setValueSet() bzw. der setDefaultValue()-Methoden in PolicyAttribute setzen. Die Produktbeziehungen können analog zu den Vertragasbeziehungen über die Klasse ProductAssociation mittels addTargetObjects() bzw. removeTargetObjects() hinzugefügt bzw. entfernt werden.

Änderungen im Codegenerator
Annotation / Methode Beschreibung Generiert für

set<AssocationName>(<AssocitationType> target, CardinalityRange cardinality)

Zum Setzen von Produktbeziehungen wird nun auch bei „zu eins“-Beziehungen eine setter-Methode mit Kardinalität generiert, sofern die Produktbeziehung einer Vertragsbeziehung zugeordnet ist, die über die Kardinalität konfiguriert wird.

ProductCmptType-Klasse bzw. Generations-Klasse

add<AssocationName>(<AssocitationType> target, CardinalityRange cardinality)

Überflüssige Adder-Methoden für Produktbeziehungen mit Kardinalität in den Produkt- bzw. Generationsklassen werden nicht mehr generiert. Kardinalitäten in Produktbeziehungen konfigurieren Vertragsbeziehungen. Daher sind Adder-Methoden für Produktbeziehungen mit Kardinalitäten überflüssig, wenn es zur Produktbeziehung keine zugehörige Vertragsbeziehung gibt.

ProductCmptType-Klasse bzw. Interface

@IpsAssociationAdder

Analog zur Vertragsseite, wird der @IpsAssociationAdder an die set/add<AssocationName>(<AssocitationType> target)-Methoden generiert, wobei das Attribut withCardinality = true gesetzt wird, wenn die Adder-Methode auch den CardinalityRange als Parameter anbietet

ProductCmptType-Klasse bzw. Generations-Klasse

remove<AssocationName>(AssocitationType target)

Analog zur Vertragsseite, generiert Faktor-IPS auch produktseitig remove-Methoden um Beziehungsziele entfernen zu können.

ProductCmptType-Klasse bzw. Generations-Klasse

@IpsAssociationRemover

Wird produktseitig an die remove-Association-Methoden annotiert.

ProductCmptType-Klasse bzw. Generations-Klasse

setDefaultValue<AtrributeName>(<ValueType> defaultValue)

Für Vertragsattribute, die produktseitig konfiguriert werden, wird in den Produkt- bzw. Generations-Klassen eine setter-Methode für den Defaultwert generiert.

ProductCmptType-Klasse bzw. Interface sowie Generations-Klasse bzw. Interface

@IpsDefaultValueSetter(„AttributeName“)

Wird an die setDefaultValue<AtrributeName>(ValueType defaultValue)-Methode annotiert.

ProductCmptType-Klasse bzw. Interface sowie Generations-Klasse bzw. Interface

setAllowedValuesFor<AtrributeName>(ValueSet<AttributeType> setOfAllowedValues<AtrributeName>);

Für Vertragsattribute, die produktseitig konfiguriert werden, wird in den Produkt- bzw. Generations-Klassen eine setAllowedValuesFor(ValueSet setOfAllowedValues)-Methode für den Wertebereich generiert.

ProductCmptType-Klasse bzw. Interface sowie Generations-Klasse bzw. Interface

@IpsAllowedValuesSetter(„<AtrributeName>“)

Wird an die setAllowedValuesFor<AtrributeName>(<AttributeType> setOfAllowedValues<AttributeName>) annotiert.

ProductCmptType-Klasse bzw. Interface sowie Generations-Klasse bzw. Interface

toString()

Für produktkonfigurierte Vertragsteilklassen wird eine Standardimplementierung mit dem Schema „Vertragsteilklasse [Produktbausteintyp]“ generiert.

PolicyCmptType-Klasse (nur produktkonfiguriert)

Weitere Funktionen und Verbesserungen

  • Produktbausteine modifizierbar machen (FIPS-6637)

  • Abstrakte Enums auch auf Vertragsseite (FIPS-5336)

  • Stringlänge sollte im Modell begrenzbar sein (FIPS-5631)

  • m2e Plugin direkt in IPS Updatesite aufnehmen (FIPS-6446)

  • getter für derived, berechnung bei jedem Methodenaufruf sollten restrainedmodifiable sein (FIPS-6498)

  • Aufzählungswerte importieren trotz invalidem Inhalt (FIPS-6508)

  • ModelObjectDelta#changedProperties in Modell-Reihenfolge sortieren (FIPS-6558)

  • Derived-ValueSet zur Definition eines Wertebereichs in Java (FIPS-6642)

  • Fehlende Aufzählungsinhalte anlegen gibt Enums doppelt aus (FIPS-6663)

  • Konfiguration von Irrelevanz im Produkt (FIPS-6668)

  • Message Builder Text und Severity nicht final (FIPS-6687)

  • final an AbstractRuntimeRepository#getExistingProductComponent entfernen (FIPS-6798)

  • Migration auf 20.6 sollte CascadeTypes bei Detail-to-Master Beziehungen löschen (FIPS-6799)

  • Setzen der Kardinalität bei Bausteinen mit 0..1 oder 1..1-Kardinalität (FIPS-6814)

  • Fehlermeldung bei bestehendem Parent verbessern (FIPS-6755)

Behobene Fehler

  • Persistenz einer Child-to-Master Beziehung soll nicht Cascade.ALL vorbelegen (FIPS-5996)

  • Identisch benannte Produktbausteine führen zu falschen Daten zur Laufzeit (FIPS-5997)

  • Fehlerhafte Generierung nach Anpassung von nicht auf Vertragsattributen basierenden Testattributen (FIPS-6251)

  • Es können keine leeren Ranges konfiguriert werden (FIPS-6517)

  • DefaultPolicyAttribute findet die IpsAllowedValues Methode nicht (FIPS-6641)

  • Erwarteter Wert im FIPS-Test darf nicht „leer“ sein, sonst NullPointerException (FIPS-6684)

  • Excel-Import liest reserviertes Datumsformat nicht (FIPS-6740)

  • Irrelevanz von Attributen mit Aufzählung lässt sich nicht über den Button einstellen (FIPS-6832)

  • Überschreiben eines Attributs ohne Null mit Produktkonfiguration generiert fehlerhaften Code (FIPS-6834)

  • NullPointerException beim Zurücksetzen der Runtime-ID auf den Standardwert (FIPS-6862)

  • Abstrakte Produktattribute mit mehreren Werten generieren fehlerhaften Code (FIPS-6819)