Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow alternative serde for extensions #3122

Open
wants to merge 10 commits into
base: main
Choose a base branch
from

Conversation

olperr1
Copy link
Member

@olperr1 olperr1 commented Aug 27, 2024

Please check if the PR fulfills these requirements

  • The commit message follows our guidelines
  • Tests for the changes have been added (for bug fixes / features)
  • Docs have been added / updated (for bug fixes / features)

Does this PR already have an issue describing the problem?

No

What kind of change does this PR introduce?

Feature

What is the current behavior?

When an extension is added in powsybl-core, it sometimes cover the same functional perimeter as an existing extension declared in a custom project. A good practice is then to use the open-source extension instead of the custom one.
To allow working with previously generated IIDM files (containing the old extension name), a compatibility deserializer can
easily be written (it should read the data of the old extension tag and create the new extension on the network being imported).

But at this time there is no way to export the open-source extension using the old extension name, which could be needed for compatibility with other softwares.

What is the new behavior (if this is a feature change)?
Introduce a mechanism to provide an alternative SerDe for an extension.

Does this PR introduce a breaking change or deprecate an API?

  • Yes
  • No

If yes, please check if the following requirements are fulfilled

  • The Breaking Change or Deprecated label has been added
  • The migration steps are described in the following section

What changes might users need to make in their application due to this PR? (migration steps)

Other information:

To use an alternative SerDe, you need to create a new SerDe class:

  • It should be annotated with @AutoService({AlternativeExtensionSerDe.class, ExtensionSerDe.class}).
  • It should extends either:
    • AbstractAlternativeExtensionSerDe, for a non-versioned SerDe;
    • AbstractAlternativeVersionableNetworkExtensionSerDe, for a versioned SerDe.

By default, the importer is always active, but the exporter is disable.
To use the alternative SerDe at export, you should specify the version "alternative" (or ExportOptions.ALTERNATIVE_VERSION) in your export options for the real extension.

If your SerDe is versioned, the used extension version will be the default for the IIDM version. If you want another version, you should also add this version associated with the alternative extension name.

For instance, if the original extension name is "foo" and the alternative extension name is "altFoo", the configuration will look like:

var exportOptions = new ExportOptions()
                .addExtensionVersion("altFoo", "1.0")
                .addExtensionVersion("foo", ExportOptions.ALTERNATIVE_VERSION);

You can find examples in this PR:

Original SerDe Alternative SerDe Type
ActivePowerControlSerDe LegacyActivePowerControlSerDe Versioned
OperatingStatusSerDe LegacyOperatingStatusSerDe Non-versioned

They are both used by the test class AlternativeExtensionXmlTest.

@olperr1 olperr1 changed the title [WIP] Allow alternative serde for extensions Allow alternative serde for extensions Aug 28, 2024
@olperr1 olperr1 marked this pull request as ready for review August 28, 2024 14:50
@olperr1 olperr1 requested a review from flo-dup August 28, 2024 14:50
Copy link

sonarcloud bot commented Sep 18, 2024

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: In Progress
Development

Successfully merging this pull request may close these issues.

3 participants