From e0dc0ef55137e9245e3feca03db2e9a6bff3d72e Mon Sep 17 00:00:00 2001 From: Paul Latzelsperger Date: Fri, 8 Nov 2024 09:46:19 +0100 Subject: [PATCH 1/4] feat: add config injection annotations --- gradle/libs.versions.toml | 2 +- .../metamodel/annotation/Configuration.java | 19 +++++++++ .../runtime/metamodel/annotation/Setting.java | 42 ++++++++++++++++--- .../metamodel/annotation/Settings.java | 17 ++++++++ 4 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Configuration.java create mode 100644 runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Settings.java diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 997307e..5d24a41 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ format.version = "1.1" [versions] jackson = "2.18.1" -edc-build = "0.10.1" +edc-build = "0.11.0-SNAPSHOT" jetbrainsAnnotation = "26.0.1" [libraries] diff --git a/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Configuration.java b/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Configuration.java new file mode 100644 index 0000000..0bff684 --- /dev/null +++ b/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Configuration.java @@ -0,0 +1,19 @@ +package org.eclipse.edc.runtime.metamodel.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * This annotation indicates that a certain field is a "configuration object", i.e. a POJO that contains fields annotated with + * {@link Setting}. These fields must be declared inside an extension class. Their respective class declaration must be annotated + * with {@link Settings}. + * Types annotated with this annotation will get instantiated by the EDC dependency injection mechanism using values from the config. + */ +@Target({ ElementType.FIELD }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Configuration { +} diff --git a/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Setting.java b/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Setting.java index 7f12fc3..a717006 100644 --- a/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Setting.java +++ b/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Setting.java @@ -22,23 +22,33 @@ import java.lang.annotation.Target; /** - * Denotes a runtime configuration setting. + * Denotes a runtime configuration setting. This can be put on config value fields and the dependency injection mechanism will + * attempt to automatically resolve them. */ -@Target({ ElementType.TYPE, ElementType.FIELD }) +@Target({ ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Setting { + String NULL = ""; /** * The setting description. + * + * @deprecated Please use {@link Setting#description()} to supply description. In future releases this property will hold the + * Setting's config key! */ - String value() default ""; + @Deprecated + String value() default NULL; /** * The setting context */ - String context() default ""; + String context() default NULL; + /** + * @deprecated this attribute is deprecated because it will be inferred from the field + */ + @Deprecated String type() default "string"; /** @@ -46,7 +56,7 @@ * * @return the setting's default value */ - String defaultValue() default ""; + String defaultValue() default NULL; long min() default Long.MIN_VALUE; @@ -55,6 +65,26 @@ /** * Returns true if the setting is required. */ - boolean required() default false; + boolean required() default true; + + /** + * The key of the property, e.g. "edc.foo.bar.baz". If this attribute is present, the dependency injection mechanism + * will attempt to resolve the config value. + */ + String key() default NULL; + /** + * The Setting's description. This is equivalent to {@link Setting#value()} in the current release, but users should + * use this attribute. + * + * @return The setting's description. + */ + String description() default NULL; + + /** + * Specify whether a warning should be issued when an optional config value is missing or when the default value is used. + * If set to false, a debug log is issued. + * Note that this is ignored on mandatory (non-optional) config values. + */ + boolean warnOnMissingConfig() default false; } diff --git a/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Settings.java b/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Settings.java new file mode 100644 index 0000000..735f258 --- /dev/null +++ b/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Settings.java @@ -0,0 +1,17 @@ +package org.eclipse.edc.runtime.metamodel.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Denotes that a certain class is a "configuration object", i.e. contains fields annotated with {@link Setting}. Note that + * if the configuration object is a record, it may ONLY contain fields annotated with {@link Setting}. + */ +@Target({ ElementType.TYPE }) +@Retention(RetentionPolicy.CLASS) +@Documented +public @interface Settings { +} From 8b443324b491352d87c85d6a4f15fa1593acbc76 Mon Sep 17 00:00:00 2001 From: Paul Latzelsperger Date: Fri, 8 Nov 2024 09:56:50 +0100 Subject: [PATCH 2/4] lic headers --- .../metamodel/annotation/Configuration.java | 14 ++++++++++++++ .../edc/runtime/metamodel/annotation/Setting.java | 5 +++-- .../edc/runtime/metamodel/annotation/Settings.java | 14 ++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Configuration.java b/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Configuration.java index 0bff684..7eb9152 100644 --- a/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Configuration.java +++ b/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Configuration.java @@ -1,3 +1,17 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * + */ + package org.eclipse.edc.runtime.metamodel.annotation; import java.lang.annotation.Documented; diff --git a/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Setting.java b/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Setting.java index a717006..33cc7b9 100644 --- a/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Setting.java +++ b/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Setting.java @@ -34,8 +34,7 @@ /** * The setting description. * - * @deprecated Please use {@link Setting#description()} to supply description. In future releases this property will hold the - * Setting's config key! + * @deprecated Please use {@link Setting#description()} to supply description. In future releases this property will hold the Setting's config key! */ @Deprecated String value() default NULL; @@ -46,6 +45,8 @@ String context() default NULL; /** + * Type of the config value + * * @deprecated this attribute is deprecated because it will be inferred from the field */ @Deprecated diff --git a/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Settings.java b/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Settings.java index 735f258..22b55de 100644 --- a/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Settings.java +++ b/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Settings.java @@ -1,3 +1,17 @@ +/* + * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * + */ + package org.eclipse.edc.runtime.metamodel.annotation; import java.lang.annotation.Documented; From fcf9e55e6c96d379c2dfa234e1a22a46451d0ced Mon Sep 17 00:00:00 2001 From: Paul Latzelsperger Date: Fri, 8 Nov 2024 10:47:24 +0100 Subject: [PATCH 3/4] pr remarks --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5d24a41..997307e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ format.version = "1.1" [versions] jackson = "2.18.1" -edc-build = "0.11.0-SNAPSHOT" +edc-build = "0.10.1" jetbrainsAnnotation = "26.0.1" [libraries] From 45e2a8d5a6be1a815378734e9ce8f771be189cee Mon Sep 17 00:00:00 2001 From: Paul Latzelsperger <43503240+paullatzelsperger@users.noreply.github.com> Date: Fri, 8 Nov 2024 12:16:27 +0100 Subject: [PATCH 4/4] Update Configuration.java Co-authored-by: Jim Marino --- .../eclipse/edc/runtime/metamodel/annotation/Configuration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Configuration.java b/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Configuration.java index 7eb9152..b603090 100644 --- a/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Configuration.java +++ b/runtime-metamodel/src/main/java/org/eclipse/edc/runtime/metamodel/annotation/Configuration.java @@ -21,7 +21,7 @@ import java.lang.annotation.Target; /** - * This annotation indicates that a certain field is a "configuration object", i.e. a POJO that contains fields annotated with + * Indicates that a certain field is a "configuration object", i.e. a POJO that contains fields annotated with * {@link Setting}. These fields must be declared inside an extension class. Their respective class declaration must be annotated * with {@link Settings}. * Types annotated with this annotation will get instantiated by the EDC dependency injection mechanism using values from the config.