Version 3.18.0

Neues in Faktor-IPS 3.18

Die Version 3.18 zeichnet sich vor allem durch technische Änderungen für Anwendungsentwickler aus. Daneben wurden ein paar kleinere Bugs gefixt, die allerdings auch in die Patch Releases von 3.17 eingeflossen sind.

Modellinformationen zur Laufzeit

Die sogenannten ModelTypes liefern zur Laufzeit Modellinformationen zu Vertrags- und Produktklassen. Sie können daher dafür verwendet werden um generisch auf Vertragsobjekte und Produktbausteine zuzugreifen. Mit Faktor-IPS 3.18 wurden die ModelTypes (in Zukunft Types genannt) überarbeitet und mit neuen Funktionen versehen.

Neue Funktionen

  • Vertragsklassen: bieten nun Informationen zu Vorbelegungswert und Wertemenge von konfigurierten Vertragsattributen
  • Produktklassen
    • Ermittlung von Produktbeziehungen
    • Modellinformationen bezüglich Tabellenverwendungen
    • generischer Aufruf der Getter Methoden von Attributen, Beziehungen und Tabellen

Modellinformationen als Annotationen

Modellinformationen werden als Annotationen an generierten Klassen geschrieben. Dies verbessert die Navigation zwischen den generierten Klassen. Zusätzlich ist für die Ermittlung der Modellinformationen kein RuntimeRepository mehr nötig. Stattdessen sind alle Modellinformationen über die Klasse org.faktorips.runtime.model.IpsModel verfügbar. Durch diese Umstellung sind für Modellklassen keine zusätzlichen XML Dateien mehr notwendig. Lediglich für die Dokumentation von Labels und Beschreibungen werden je verwendete Sprache eine Property-Datei generiert.

Beispiele (PolicyCmptType)

// Modellinformationen für hausratVertrag ermitteln
PolicyCmptType policyCmptTypeVertrag = IpsModel.getPolicyCmptType(hausratVertrag);

// Modellinformationen zur Beziehung "GrundDeckung" ermitteln
PolicyAssociation associationGrundDeckung = policyCmptTypeVertrag.getAssociation("GrundDeckung");

// Die Assoziation zur Ermittlung des von hausratVertrag referenzierten Deckungsobjekts verwenden
IModelObject grundDeckung = associationGrundDeckung.getTargetObjects(hausratVertrag).get(0);

// Modellinformationen zur verknüpften Deckung ermitteln
PolicyCmptType policyCmptTypeDeckung = associationGrundDeckung.getTarget();

// Modellinformationen zum Attribut "Versicherungssumme" ermitteln
PolicyAttribute attributeVersicherungssumme = policyCmptTypeDeckung.getAttribute("Versicherungssumme");

// Aktuellen Wert, Vorbelegungs-Wert und Wertemenge der Versicherungssumme an grundDeckung ermitteln
Object value = attributeVersicherungssumme.getValue(grundDeckung);
Object defaultValue = attributeVersicherungssumme.getDefaultValue(hausratVertrag);
ValueSet<?> valueSet = attributeVersicherungssumme.getValueSet(grundDeckung, new ValidationContext());

(Klassennamen und API Faktor-IPS 3.18.2+, siehe API Änderungen)

Tabellen

In Version 3.18 wurden analog zu den bisherigen ModelTypes für Vertrags- und Produktklassen Möglichkeiten für den generischen Zugriff auf Tabellen geschaffen (FIPS-4845). Dazu kann mit einem Table-Objekt (oder der Klasse) von org.faktorips.runtime.model.IpsModel#getTableStructure ein TableStructure ermittelt werden, das neben allgemeinen Informationen zur Tabelle Auskunft über die Namen und Datentypen der Spalten, sowie generischen Zugriff auf die Werte einer konkreten Tabellen gibt. Auch hier werden die dazu notwendigen Informationen in neuen Annotationen an den generierten Tabellenklassen generiert.

Aufzählungen

Auch für Aufzählungen können nun Modell-Informationen zur Laufzeit abgerufen werden (FIPS-4847). Mit einem Aufzählungswert oder einer Aufzählungsklasse (sowohl „echte“ Java-Enums als auch durch Produktkonfiguration erweiterbare) gibt org.faktorips.runtime.model.IpsModel#getEnumType ein EnumType zurück, das Attributinformationen bereitstellt (z.B. welches Attribut zur Identifikation bzw. zur Darstellung verwendet wird) und generischen Zugriff auf die entsprechenden Werte der Aufzählungen ermöglicht.

Schnittstellen und API Änderungen

Die bisherige API von IModelType, IModelTypeAssociation und IModelTypeAttribute boten bisher die gemeinsame Schnittstelle für die Vertrags- und Produktklassen sowie Beziehungen und Attribute. Allgemeine Abfragen wurden auch weiter in diesen Schnittstellen belassen und sind damit in der API kompatibel. Durch die Erweiterungen zur generischen Abfrage von Produkteigenschaften wurden jedoch spezifische Elemente für Produkt oder Vertrag in davon abgeleitete Schnittstellen gezogen. Damit ergeben sich folgende Schnittstellen:

Beschreibung Allgemein Vertragsteilklasse Produktklasse
Modellinformationen IpsModel
Typ / Klasse Type PolicyCmptType ProductCmptType
Attribute Attribute PolicyAttribute ProductAttribute
Beziehungen Association PolicyAssociation ProductAssociation
Tabellen  TableStructure, TableColumn TableUsage
Aufzählungen  EnumType, EnumAttribute

(Klassennamen und API Faktor-IPS 3.18.2+, siehe API Änderungen)

Eine weitere Änderung ergibt sich im Zusammenhang mit überschriebenen Attributen und Beziehungen. Wenn von einem Typ alle Attribute/Beziehungen mit getAttributes() bzw. getAssociations() abgefragt werden, wurden bisher überschriebene Elemente doppelt zurückgegeben (ein mal für das überschreibende Element, ein mal für das überschriebene Element). Dieser Fehler wurde behoben, es werden nur noch die überschreibenden Elemente zurück gegeben.

Verbesserter Tabelleneditor

Der Editor für Tabellen kann jetzt besser mit großen Tabelleninhalten umgehen. Dazu wurde die Darstellung beschleunigt (FIPS-1959) und für sehr große Tabellen die automatische Validierung der Eindeutigkeit von Schlüsseln deaktiviert – sie kann explizit über einen Button aufgerufen werden, wenn man mit der aktuellen Bearbeitung fertig ist (FIPS-4864).

TabellenValidierung

Zusätzlich bietet der Tabelleneditor über eine Eingabezeile die Möglichkeit, die Tabelle nach bestimmten (Teil-)Begriffen zu filtern:

TabellenFilter

Refactoring von fehlerhaften Objekten

Das Refactoring von Objekten wurde fehlertoleranter gemacht. Damit ist es nun möglich Objekte zu überarbeiten, obwohl Validierungs-Fehler vorhanden sind. Das Ergebnis der Validierung für den Zustand nach dem Refactoring werden dem Nutzer angezeigt, bevor er sich für die endgültige Durchführung entscheidet.

Migration

Für die neue Generierung der Modellinformationen werden Labels und Beschreibungen in Property Dateien geschrieben. Damit solche Property Dateien nicht den gleichen Namen bekommen, werden sie zunächst in die unterschiedlich eingestellten Basispakete (eingestellt am Source Entry in der .ipsproject Datei) geschrieben. Eine Validierung sorgt dafür, dass die unterschiedlichen Basispakete unterschiedlich sind. Sollten dabei Konflikte erkannt werden, muss in dem entsprechenden Eintrag in der .ipsproject Datei ein Qualifier angegeben werden.

<IpsObjectPath basePackageDerived=“org.faktorips.test“ basePackageMergable=“org.faktorips.test“ …>
<Entry … uniqueQualifier=“basis“/>
</IpsObjectPath>

Wenn mehrere Source Entries in einem Projekt das gleiche BasePackage verwenden, dann wird bei der automatischen Migration der Name des Source Folders als Qualifier eingetragen. Bei gleichnamigen BasePackages in unterschiedlichen Projekten muss der Qualifier manuell angegeben werden (z.B. nach Sparte).

Darüber hinaus werden bei der Migration automatisch veraltete, nicht mehr benötigte Einstellungen aus der .ipsproject Datei entfernt.

Runtime

Die Möglichkeiten zum Zugriff auf Modellinformationen haben ein paar inkompatible Änderungen der API zur Folge. So weit es möglich war wurde die alte API als Deprecated markiert und weiter erhalten. Es wird allgemein empfohlen auf das neue API umzustellen.

Release Notes – Faktor-IPS – Version 3.18.0

Bugs

  • ModelTypes liefern überschriebene Attribute doppelt zurück (FIPS-1156)
  • Handle Leak in MessageHoverService.Hover.setText(String) (FIPS-4947)
  • TemplateStatusButton ist nicht mehr anklickbar, wenn man ein Link löscht (FIPS-5033)
  • Faktor-IPS für Eclipse Neon (4.6) kompatibel machen (FIPS-5038)
  • NPE ProductModel getDeclaredMethods (FIPS-5041)
  • Link Product Component Type auf dem Tab Settings eines Produktbausteins navigiert zum Policy Component Type (FIPS-5043)
  • Deadlock wenn ein Bausteinänderung ein Fix-Differences auslöst (FIPS-5046)
  • Move Refactoring von EnumTypes fehlerhaft (FIPS-5072)
  • NPE wenn Marker nicht gefunden wird (FIPS-5075)

Improvements

  • Verwendung von SWT Virtual Tables (FIPS-1959)
  • Rückmeldung anzahl importierter Zeilen beim Tabellen/Enum Import (FIPS-4459)
  • Filtern und suchen in Tabellen/Enums (FIPS-4464)
  • ModelType per Annotationen (FIPS-4844)
  • UniqueKey Validierung in großen Tabellen nur explizit anstoßen (FIPS-4864)
  • Faktor-IPS Ant Plugin Projektimport ohne kopieren in Workspace (FIPS-5034)

New Features

  • Builder für TableStructures auf Templates umstellen (FIPS-4400)
  • ModelType Annotationen für Tabellen (FIPS-4845)
  • ModelType Annotationen für Enums (FIPS-4847)