Version 3.19.0

Neues in Faktor-IPS 3.19

Die Version 3.19 beinhaltet einige technische Umbauten, die unter Anderem nötig waren um die Unterstützung der Produktvorlagen auszubauen.

Wertebereiche und Vorbelegungen in Vorlagen

In Faktor-IPS 3.17 wurden Vorlagen für Produktbausteine eingeführt. Ab diesem Release können in Vorlagen Wertebereiche und Vorbelegungen getrennt von einander vorgegeben werden. Im Screenshot wird beispielsweise die Wertemenge von „Zahlweise“ durch die Vorlage definiert. Der Vorbelegungswert dagegen wird nicht angegeben, er erhält also keinen Vorlagenwert.

VorbelegungUndWerteBereichInVorlage

Überarbeitete API der Builder für Produkte und Verträge

Die API der in Faktor-IPS 3.17 experimentell eingeführten Builder wurde überarbeitet um die Lesbarkeit zu erhöhen. Das Beispiel aus der Ankündigung sähe jetzt so aus:

        // Erstellt einen HausratVertrag mit Postleitzahl und Zahlweise
        IHausratVertrag hausratVertrag = IHausratVertrag.NEW.builder()
             .plz("12345")
             .zahlweise(12)
             .getResult();

        // Erzeugt ein Deckungsobjekt und fügt es dem Vertrag hinzu
        hausratVertrag.modify().associate().hausratGrunddeckung(); 

        // Erzeugt ein konfiguriertes HausratGrunddeckungsobjekt und fügt es dem Vertrag hinzu. Zusätzlich wird an 
        // dieser Deckung die Wohnfläche gesetzt und ein weiteres referenziertes Objekt (ZuNa) hinzugefügt. 
        hausratVertrag.modify(repository)      
            .associate().hausratGrunddeckung("beispiel.Basis 2015-06")      
            .wohnflaeche(120)      
            .associate().zuNa();

Speicherplatzoptimierung für Faktor-IPS Produktdaten

Das XML basierte Format für Faktor-IPS Objekte wurde optimiert, wodurch die betreffenden Dateien ca. 40% weniger Speicherplatz verbrauchen. Insbesondere bei großen Tabellen wird die Dateigröße deutlich reduziert. Diese Optimierung ist sowohl für die Faktor-IPS Entwicklungsumgebung (Größe des Workspaces), als auch zur Laufzeit (Speicherverbrauch Serverseite) interessant.

Zeitstempel aus .properties-Dateien entfernt

In den .properties-Dateien (z.B. Übersetzungsdateien wie labels-and-descriptions.properties) wurde bisher ein Zeitstempel generiert, der zu unnötigen Konflikten bei der Verwaltung von Sourcecode geführt hat. Seit Faktor-IPS 3.18.4 wurden Zeitstempel aus Übersetzungsdateien (.properties-Dateien) entfernt. Die Dateien werden nicht automatisch migriert sondern beim nächsten Speichern angepasst (siehe auch Abschnitt Migration).

Modularisierung Product Release Plugin

Neuere Eclipse Versionen werden ohne das SourceCodeManagement System CVS ausgeliefert. Aus diesem Grund wurde für Faktor-IPS 3.19 das Product Release Plugin umgebaut. Ab sofort gibt es eine eigene Variante des Release Plugins für CVS. So können einerseits bestehende CVS Workflows weiter unterstützt werden, andererseits bleibt das Faktor-IPS Release Plugin auch mit neueren Eclipse Versionen und SVN kompatibel.

Retention Policy für Extension Properties

Extension Properties wurden bisher immer in die Source Dateien generiert. Um unnötige Einträge im Source Code zu vermeiden, wurde die Möglichkeit entwickelt Extension Properties mit einer „Retention Policy“ zu versehen. Diese gibt an zu welchem Zeitpunkt Extension Properties vorhanden sind und ausgelesen werden können. Der Wert RUNTIME entspricht dem gewohnten Verhalten, dass Extension Properties sowohl in Faktor-IPS als auch zur Laufzeit zur Verfügung stehen. Der Wert DEFINITION ermöglicht nun, dass Extension Properties auschließlich zur Design-Zeit, also bei der Modell- und Produktdefinition vorhanden sind. Sie werden damit weder in die Quelldateien geschrieben, noch sind sie zur Laufzeit vorhanden. Ein Beispiel ist das Produktvarianten Plugin, dessen Extension Properties zur Laufzeit nicht benötigt werden. Durch die neue Einstellung werden keine unnötigen Annotationen in den Code geschrieben.

Annotation zur Auszeichnung von Utility Klassen

Utility Klassen sind für unterschiedliche Aspekte hilfreich. Ein häufiges Problem: nicht immer findet man das richtige Util und oft werden daher Utilities mehrfach an unterschiedlichen Stellen implementiert. In Faktor-IPS gibt es dazu jetzt eine Annotation namens @UtilityClass mit der unsere Utility Klassen ausgezeichnet werden. Diese Annotation nutzen wir nicht nur intern sondern kann auch über die Faktor-IPS Abhängigkeiten in Faktor-IPS Projekten verwendet werden.

Migration

Beim Umstieg auf Faktor-IPS 3.19 muss eine automatisierte Migration durchgeführt werden. Bei dieser Migration werden alle Faktor-IPS Dateien neu geschrieben um das optimierte Format anzunehmen.

Außerdem wurden (bereits in Version 3.18.4) die Zeitstempel aus den Übersetzungsdateien (.properties-Dateien) entfernt. Betroffen sind label-and-descriptions.properties, validation-messages.properties und .properties-Dateien für mehrsprachige Enums. Aus technischen Gründen kann hierfür keine automatische Migration bereitgestellt werden. Bestehende .properties-Dateien bleiben zunächst unverändert. Erst nach dem Löschen des Zeitstempels (oder Veränderung der betreffenden Faktor-IPS Quelldatei) werden die .properties-Dateien ohne Zeitstempel erzeugt. Für eine vollständige Migration können sämtliche .properties-Dateien gelöscht und durch Bauen des Projekts („Clean-Build“) neu erzeugen werden.

WICHTIG: Wenn Sie die Erweiterung für Produktvarianten benötigen, müssen Sie direkt die Version 3.19.1 installieren und beachten bitte zusätzlich die Anleitung zur Migration für 3.19.1.

Bugs

  • Enum generiert public List VALUES (FIPS-5089)
  • Enum Filter geht nicht bei nicht änderbarem Enum (FIPS-5090)
  • Annotationen @Ips… für Modell Informationen auch bei @customizedAnnotations generieren (FIPS-5100)
  • ObjectUtil soll NullObjectSupport unterstützen (FIPS-5102)
  • isProductRelevant liefert das falsche Ergebnis für überschriebene Attribute (FIPS-5110)
  • JodaUtil verarbeitet nicht Format HH:mm:ss.SSSZZ beim Laden der Produktvarianten (FIPS-5114)
  • MultiValue Attribute sollten in der Runtime generic Type zurück geben (FIPS-5133)
  • Description von ProductComponent laden und speichern (FIPS-5135)
  • InitDescription in ProductComponent fixen (FIPS-5171)
  • org.faktorips.value.Money wirft NullPointerException (FIPS-5197)
  • Ableiten von Produktvorlagen scheitert bei Bausteinen mit produktkonfigurierten Vertragsattributen (FIPS-5200)
  • IpsModel.getEnumType wirft NullPointerException (FIPS-5205)
  • NPE beim Erzeugen eines neuen Produktbausteins aus dem Baustein-Editor (FIPS-5221)
  • Runtime PolicyCmptType#isConfiguredByPolicyCmptType muss isConfiguredByProductCmptType heißen (FIPS-5235)
  • Gültigkeit von referenzierten Produktbausteinen wird bei statischen Beziehungen nicht geprüft (FIPS-5247)
  • TableBuilder schreibt die Dokumentation nicht mehr in das JavaDoc der Klasse (FIPS-5268)
  • Falsches Verhalten von AnnotationGenerator in Runtime falls keine Interfaces erzeugt werden (FIPS-5269)
  • @since-Annotation fehlt bei Enums und Tabellen (FIPS-5287)

Improvements

  • CVS-Abhängigkeiten lösen (FIPS-1354)
  • Keinen Zeitstempel in die validation-messages.properties generieren (FIPS-1430)
  • Default Locale und Fallback bei DefaultInternationalString (FIPS-4657)
  • Checkboxes in Editoren für Produkt- und Vertragsklassen sollten nicht über die gesamte Breite gehen. (FIPS-5131)
  • Nacharbeiten: Default Locale und Fallback bei DefaultInternationalString (FIPS-5143)
  • Entfernen von isNull=“false“ aus dem XML (FIPS-5187)
  • Neue Namen für generierte Builder Methoden (FIPS-5201)
  • Minor Runtime API cleanup (FIPS-5281)

New Features

  • Config Elements in ConfiguredDefaultValue und ConfiguredValueSet aufteilen und in Templates verwenden (FIPS-4556)
  • ExtensionProperties ohne Generierung in die Runtime (FIPS-5239)

Tasks