English Documentation

Release Notes

Version 25.1

With version 25.1, the following new bug fixes and improvements have been implemented. Among other things, it is now possible to declare enum attributes as mandatory or optional, adjust the sorting order for relationships, reconfigure model-defined ranges in the product configuration as enumerations, and perform mass exports of tables.

Please note: Due to the changes related to Mandatory Enum Attributes, a migration is required. For more details, please refer to the corresponding section migration.

Mandatory Attributes for Enums

It is now possible to define attributes in (content-separated) enums as either mandatory or optional and validate missing values analogously to ID and literal name. The dialog for creating new enum attributes has been extended with a mandatory-checkbox. By default, attributes are now set to mandatory. To support runtime validation, the code generator has been updated so that a "mandatory" flag is now generated in the @IPSEnumAttribute-annotation for mandatory attributes.

Due to the changes in the generated code, a migration is required. Further information on this can be found in the section Migration.

Faktor-IPS uses Project Setting for Line Endings

In Eclipse, you can now define the type of line endings (Unix: \n or Windows: \r\n) project-wide, independently of the operating system. This ensures that after a clean build, line endings for files like toc.xml and .properties are generated by Faktor-IPS according to the specified setting.

This can be configured in the UI (right-click on the project → Properties → Resource → New text file line delimiter) or by creating the file org.eclipse.core.runtime.prefs in the .settings/ directory and set the preference as follows:

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

Mass Export of Tables

Faktor-IPS now supports exporting multiple table contents. The export is initiated via the context menu and exports all selected tables or all tables within selected projects/directories. When multiple tables are selected, it is possible to specify the null representation, header rows, and a target directory as before. The names of the Excel sheets are derived from the corresponding table names.

Enumeration Value Set in Product for Model-Side Range

When a policy attribute is configurable by the product configuration and the value set is defined as a range in the model, it can now be configured as an enumeration in the product configuration - provided every value in the enumeration is a valid value in the model side range.

This only works with the generator option <Property name="valueSetMethods" value="Unified"/> is set, as with the old setting ByValueSetType the getter methods for value sets don’t allow a change of the value set type.

API-Changes

  • The IpsModel#getDatatypesDefinedInProjectProperties methods have been integrated into the interface IIpsModel to ensure a more consistent API usage.

  • The DelegatingValueHolder class has been moved to the package org.faktorips.devtools.model.productcmpt to optimize the package structure.

  • A new factory method IProductCmptTreeStructure#of has been added to IProductCmptTreeStructure. This allows for easier instantiation of the ProductCmptTreeStructure class, which implements the IProductCmptTreeStructure interface.

Generated Code

  • Line separators are generated according to project settings.

  • @IpsTableUsage has been extended to now include all table classes defined in tableClasses within the annotation. The code checks if one or more table classes are present and adds them to the annotation.

  • @IPSEnumAttribute has been extended with a mandatory flag to indicate whether enum attributes are optional or mandatory.

Runtime

  • When IModifiableRuntimeRepository#putTable(ITable<?> table) is called with a single-content table, it returns an Optional<ITable<?>>, which contains the previous value.

  • InMemoryRuntimeRepository#putTable(ITable<?> table, String qName) (deprecated since 24.7) no longer supports using single-content tables as multi-content.

  • IRuntimeRepository#getTable(Class<T> tableClass) now throws an IllegalArgumentException if called for a multi-content table.

  • IModifiableRuntimeRepository has been expanded with new remove methods, implemented via the InMemoryRuntimeRepository:

    • removeProductCmptGeneration(IProductComponentGeneration productCmptGeneration)

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

    • removeEnumValues(Class<T> enumTypeClass)

    • removeIpsTestCase(IpsTestCaseBase test)

  • The method getTableStructure() is now marked as deprecated, as it only returns a single table structure and is therefore insufficient if multiple structures are being used in a TableUsage. Instead, the new method getTableStructures() should be used, ensuring that all relevant table structures are returned as a list.

Designtime

  • The method XmlUtil#nodeToString now expects the line separator to be used as a third parameter.

Compatibility

Older Versions of Faktor-IPS

  • Due to the new annotations, the runtime is not compatible with the generated code of older versions and vice versa.

Java

  • The Design-Time (Eclipse-Plugin) requires at least Java 17. With newer Eclipse versions from 2024-06 onwards Java 21 is required.

  • The runtime requires at least Java 17. (A migration for EclipseLink is necessary. See the migration section for more information.)

Eclipse

The design time Eclipse plugin requires at least Eclipse 2023-12 and has been tested with that version and all following versions up to and including Eclipse 2024-12.

Migration

  • EclipseLink 2.5 and 2.7 versions below 2.7.13 are not compatible with Java 17. Updating the dependency to at least 2.7.13 is required to use the runtime with Java 17.

  • As described in the chapter Mandatory Attributes for Enums, it is now possible to declare enum attributes as mandatory or optional. To enable runtime validation, a "mandatory" flag is now generated in the @IPSEnumAttribute annotation for mandatory attributes, which necessitates a migration. The migration allows for a selection of whether mandatory = false/true should be configured for existing enum attributes. By default, false is set to maintain the previous state and to continue treating all existing enum attributes as optional.

Fixed Bugs

  • NumberFormatException in StringLength multiEdit.

  • Different behavior of getAllTables in repositories.

  • Local XSD Language Server.

  • IpsTestCase: Names of the test parameters are being validated incorrectly.

  • FIPS documentation created under Linux resulted in diffs on Windows.

  • initialize method error for overridden abstract PolicyCmptType attributes.

  • Corrupt character in FIPS settings when using German.

  • IRuntimeRepository#getTable(Class<T> tableClass) should exhibit different behavior for a MULTIPLE_CONTENT table.

  • Table import hangs.

  • Disappearing TOC entries and index violations.

  • Product search yields no results.

  • Exception when displaying relationship-type nodes in the Product Structure Explorer.

  • Unable to change the value set type for product-configured contract attributes.

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

  • Fix umlauts.

  • Ipsenumtype from datatype definitions with inner class enums does not work.

  • Display errors with umlauts in the test runner.

  • Runtime validation disallows null/"" as default for mandatory attributes.

  • Faktor-IPS generates MAX_ALLOWED_VALUES constant for extensible-enum multi-value product attributes.

  • initPartContainersFromXml discards all parts.

  • java.io serialization for constants in content-separated enums does not work.

  • Validation message shows "valueHolder" instead of the actual attribute name.

  • xsi:schemalocation is not migrated in ipsenumtype, ipsenumcontent, and ipstablestructure files.

  • initPartContainersFromXml still discards some parts.

  • Multi-value product attribute with "Allow Empty" offers <null> as a possible value.

  • NullPointerException when retrieving a table from an InMemoryRuntimeRepository.

  • Line breaks (\n) in .properties messages convert to \r\n on Windows.

  • Make`getDescription` in ProductComponent null-safe.

  • Overloaded formula causes NPE.

  • Migration empties faulty files

  • Exception when navigating in Eclipse

  • JMerge does not handle Java 21 code correctly

  • Exception during table import

  • IPS 25.1.0-a20241030-01 with multiple table usages

Additional Functions and Improvement

  • Eclipse 2024-12.

  • One should be able to recognize generated OrderedValueSets for UnrestrictedValueSets of enum data types.

  • Relationship validation.

  • Base class for product migration following attribute renaming.

  • Default "Table Content Required" preset to true.

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

  • Migration to version 25.1.

  • Apache Commons IO update.

  • Improve identifier performance.

  • Runtime information for multiple TableStructures in a TableUsage

  • Remove methods in IModifiableRuntimeRepository

  • Mandatory attribute for enums

  • Sorting order for relationships

  • Bulk export of tables

  • Implement InMemoryRuntimeRepository#getAllModelTypeImplementationClasses

  • Model-configured range should be reconfigurable to a compatible enumeration in the product configuration

  • Regex ValueSet for strings

  • Validate mandatory table usage in runtime

  • Update dependencies & plugin versions