Skip to content

Commit 64cadb7

Browse files
authored
feat: add profile field (#5747)
* feat: profile field in CatalogRequest and DatasetRequest * feat: profile field in ContractRequest and ContractNegotiation * feat: profile field in Transfer Request * feat: switch to profile in mgmt v5 fixtures api * chore: update mgmt api version file * chore: fix tests * chore: pr suggiestions
1 parent d224f3e commit 64cadb7

31 files changed

Lines changed: 629 additions & 54 deletions

File tree

core/common/lib/json-ld-lib/src/main/resources/document/management-context-v2.jsonld

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@
119119
"@context": {
120120
"counterPartyAddress": "edc:counterPartyAddress",
121121
"counterPartyId": "edc:counterPartyId",
122-
"protocol": "edc:protocol"
122+
"protocol": "edc:protocol",
123+
"profile": "edc:profile"
123124
}
124125
},
125126
"CatalogRequest": {
@@ -128,6 +129,7 @@
128129
"counterPartyAddress": "edc:counterPartyAddress",
129130
"counterPartyId": "edc:counterPartyId",
130131
"protocol": "edc:protocol",
132+
"profile": "edc:profile",
131133
"additionalScopes": {
132134
"@id": "edc:additionalScopes",
133135
"@container": "@set"
@@ -148,7 +150,8 @@
148150
"@id": "edc:callbackAddresses",
149151
"@container": "@set"
150152
},
151-
"protocol": "edc:protocol"
153+
"protocol": "edc:protocol",
154+
"profile": "edc:profile"
152155
}
153156
},
154157
"QuerySpec": {
@@ -170,6 +173,7 @@
170173
"type": "edc:type",
171174
"counterPartyAddress": "edc:counterPartyAddress",
172175
"protocol": "edc:protocol",
176+
"profile": "edc:profile",
173177
"callbackAddresses": {
174178
"@id": "edc:callbackAddresses",
175179
"@container": "@set"
@@ -240,6 +244,7 @@
240244
"dataDestination": "edc:dataDestination",
241245
"contractId": "edc:contractId",
242246
"protocol": "edc:protocol",
247+
"profile": "edc:profile",
243248
"dataplaneMetadata": {
244249
"@id": "edc:dataplaneMetadata"
245250
}

core/control-plane/control-plane-transform/src/main/java/org/eclipse/edc/connector/controlplane/transform/edc/catalog/to/JsonObjectToCatalogRequestTransformer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import static org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequest.CATALOG_REQUEST_ADDITIONAL_SCOPES;
2727
import static org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequest.CATALOG_REQUEST_COUNTER_PARTY_ADDRESS;
2828
import static org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequest.CATALOG_REQUEST_COUNTER_PARTY_ID;
29+
import static org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequest.CATALOG_REQUEST_PROFILE;
2930
import static org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequest.CATALOG_REQUEST_PROTOCOL;
3031
import static org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequest.CATALOG_REQUEST_QUERY_SPEC;
3132

@@ -49,11 +50,13 @@ public JsonObjectToCatalogRequestTransformer() {
4950
.orElse(null);
5051

5152
var builder = CatalogRequest.Builder.newInstance()
52-
.protocol(transformString(object.get(CATALOG_REQUEST_PROTOCOL), context))
53+
5354
.counterPartyAddress(counterPartyAddress)
5455
.counterPartyId(counterPartyId)
5556
.querySpec(querySpec);
5657

58+
ofNullable(transformString(object.get(CATALOG_REQUEST_PROTOCOL), context)).ifPresent(builder::protocol);
59+
ofNullable(transformString(object.get(CATALOG_REQUEST_PROFILE), context)).ifPresent(builder::profile);
5760

5861
ofNullable(object.getJsonArray(CATALOG_REQUEST_ADDITIONAL_SCOPES))
5962
.ifPresent(ja -> builder.additionalScopes(ja.stream().map(this::nodeValue).toList()));

core/control-plane/control-plane-transform/src/main/java/org/eclipse/edc/connector/controlplane/transform/edc/catalog/to/JsonObjectToDatasetRequestTransformer.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@
2323

2424
import java.util.Optional;
2525

26+
import static java.util.Optional.ofNullable;
2627
import static org.eclipse.edc.connector.controlplane.catalog.spi.DatasetRequest.DATASET_REQUEST_COUNTER_PARTY_ADDRESS;
2728
import static org.eclipse.edc.connector.controlplane.catalog.spi.DatasetRequest.DATASET_REQUEST_COUNTER_PARTY_ID;
29+
import static org.eclipse.edc.connector.controlplane.catalog.spi.DatasetRequest.DATASET_REQUEST_PROFILE;
2830
import static org.eclipse.edc.connector.controlplane.catalog.spi.DatasetRequest.DATASET_REQUEST_PROTOCOL;
2931

3032
public class JsonObjectToDatasetRequestTransformer extends AbstractJsonLdTransformer<JsonObject, DatasetRequest> {
@@ -36,8 +38,10 @@ public JsonObjectToDatasetRequestTransformer() {
3638
@Override
3739
public @Nullable DatasetRequest transform(@NotNull JsonObject object, @NotNull TransformerContext context) {
3840
var builder = DatasetRequest.Builder.newInstance()
39-
.id(nodeId(object))
40-
.protocol(transformString(object.get(DATASET_REQUEST_PROTOCOL), context));
41+
.id(nodeId(object));
42+
43+
ofNullable(transformString(object.get(DATASET_REQUEST_PROTOCOL), context)).ifPresent(builder::protocol);
44+
ofNullable(transformString(object.get(DATASET_REQUEST_PROFILE), context)).ifPresent(builder::profile);
4145

4246
var counterPartyAddress = transformString(object.get(DATASET_REQUEST_COUNTER_PARTY_ADDRESS), context);
4347

core/control-plane/control-plane-transform/src/main/java/org/eclipse/edc/connector/controlplane/transform/edc/contractnegotiation/from/JsonObjectFromContractNegotiationTransformer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractNegotiation.CONTRACT_NEGOTIATION_CREATED_AT;
3636
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractNegotiation.CONTRACT_NEGOTIATION_ERRORDETAIL;
3737
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractNegotiation.CONTRACT_NEGOTIATION_NEG_TYPE;
38+
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractNegotiation.CONTRACT_NEGOTIATION_PROFILE;
3839
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractNegotiation.CONTRACT_NEGOTIATION_PROTOCOL;
3940
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractNegotiation.CONTRACT_NEGOTIATION_STATE;
4041
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractNegotiation.CONTRACT_NEGOTIATION_TYPE;
@@ -62,6 +63,7 @@ public JsonObjectFromContractNegotiationTransformer(JsonBuilderFactory jsonFacto
6263
.add(ID, contractNegotiation.getId())
6364
.add(CONTRACT_NEGOTIATION_NEG_TYPE, contractNegotiation.getType().toString())
6465
.add(CONTRACT_NEGOTIATION_PROTOCOL, contractNegotiation.getProtocol())
66+
.add(CONTRACT_NEGOTIATION_PROFILE, contractNegotiation.getProfile())
6567
.add(CONTRACT_NEGOTIATION_STATE, ContractNegotiationStates.from(contractNegotiation.getState()).name())
6668
.add(CONTRACT_NEGOTIATION_COUNTERPARTY_ID, contractNegotiation.getCounterPartyId())
6769
.add(CONTRACT_NEGOTIATION_COUNTERPARTY_ADDR, contractNegotiation.getCounterPartyAddress())

core/control-plane/control-plane-transform/src/main/java/org/eclipse/edc/connector/controlplane/transform/edc/contractnegotiation/to/JsonObjectToContractRequestTransformer.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@
2323
import org.jetbrains.annotations.NotNull;
2424
import org.jetbrains.annotations.Nullable;
2525

26+
import static java.util.Optional.ofNullable;
2627
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractRequest.CALLBACK_ADDRESSES;
2728
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractRequest.CONTRACT_REQUEST_COUNTER_PARTY_ADDRESS;
29+
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractRequest.CONTRACT_REQUEST_PROFILE;
2830
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractRequest.POLICY;
2931
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractRequest.PROTOCOL;
3032

@@ -37,8 +39,10 @@ public JsonObjectToContractRequestTransformer() {
3739
@Override
3840
public @Nullable ContractRequest transform(@NotNull JsonObject jsonObject, @NotNull TransformerContext context) {
3941
var contractRequestBuilder = ContractRequest.Builder.newInstance()
40-
.counterPartyAddress(transformString(jsonObject.get(CONTRACT_REQUEST_COUNTER_PARTY_ADDRESS), context))
41-
.protocol(transformString(jsonObject.get(PROTOCOL), context));
42+
.counterPartyAddress(transformString(jsonObject.get(CONTRACT_REQUEST_COUNTER_PARTY_ADDRESS), context));
43+
44+
ofNullable(transformString(jsonObject.get(PROTOCOL), context)).ifPresent(contractRequestBuilder::protocol);
45+
ofNullable(transformString(jsonObject.get(CONTRACT_REQUEST_PROFILE), context)).ifPresent(contractRequestBuilder::profile);
4246

4347
contractRequestBuilder.contractOffer(contractOffer(jsonObject, context));
4448

core/control-plane/control-plane-transform/src/main/java/org/eclipse/edc/connector/controlplane/transform/edc/transferprocess/to/JsonObjectToTransferRequestTransformer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import static org.eclipse.edc.connector.controlplane.transfer.spi.types.TransferRequest.TRANSFER_REQUEST_DATAPLANE_METADATA;
4040
import static org.eclipse.edc.connector.controlplane.transfer.spi.types.TransferRequest.TRANSFER_REQUEST_DATA_DESTINATION;
4141
import static org.eclipse.edc.connector.controlplane.transfer.spi.types.TransferRequest.TRANSFER_REQUEST_PRIVATE_PROPERTIES;
42+
import static org.eclipse.edc.connector.controlplane.transfer.spi.types.TransferRequest.TRANSFER_REQUEST_PROFILE;
4243
import static org.eclipse.edc.connector.controlplane.transfer.spi.types.TransferRequest.TRANSFER_REQUEST_PROTOCOL;
4344
import static org.eclipse.edc.connector.controlplane.transfer.spi.types.TransferRequest.TRANSFER_REQUEST_TRANSFER_TYPE;
4445

@@ -66,6 +67,7 @@ public JsonObjectToTransferRequestTransformer() {
6667
case TRANSFER_REQUEST_PRIVATE_PROPERTIES -> value ->
6768
transformProperties(value, builder::privateProperties, context);
6869
case TRANSFER_REQUEST_PROTOCOL -> value -> builder.protocol(transformString(value, context));
70+
case TRANSFER_REQUEST_PROFILE -> value -> builder.profile(transformString(value, context));
6971
case TRANSFER_REQUEST_TRANSFER_TYPE -> value ->
7072
builder.transferType(transformString(value, context));
7173
case TRANSFER_REQUEST_DATAPLANE_METADATA -> value ->

core/control-plane/control-plane-transform/src/test/java/org/eclipse/edc/connector/controlplane/transform/edc/catalog/to/JsonObjectToCatalogRequestTransformerTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import static org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequest.CATALOG_REQUEST_ADDITIONAL_SCOPES;
3030
import static org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequest.CATALOG_REQUEST_COUNTER_PARTY_ADDRESS;
3131
import static org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequest.CATALOG_REQUEST_COUNTER_PARTY_ID;
32+
import static org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequest.CATALOG_REQUEST_PROFILE;
3233
import static org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequest.CATALOG_REQUEST_PROTOCOL;
3334
import static org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequest.CATALOG_REQUEST_QUERY_SPEC;
3435
import static org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequest.CATALOG_REQUEST_TYPE;
@@ -73,6 +74,28 @@ void transform() {
7374
verify(context).transform(querySpecJson, QuerySpec.class);
7475
}
7576

77+
@Test
78+
void transform_withProfile() {
79+
var querySpec = QuerySpec.Builder.newInstance().build();
80+
var querySpecJson = Json.createObjectBuilder().build();
81+
when(context.transform(any(), eq(QuerySpec.class))).thenReturn(querySpec);
82+
var json = Json.createObjectBuilder()
83+
.add(TYPE, CATALOG_REQUEST_TYPE)
84+
.add(CATALOG_REQUEST_PROFILE, "profile")
85+
.add(CATALOG_REQUEST_COUNTER_PARTY_ADDRESS, "http://provider/url")
86+
.add(CATALOG_REQUEST_QUERY_SPEC, querySpecJson)
87+
.build();
88+
89+
var result = transformer.transform(json, context);
90+
91+
assertThat(result).isNotNull();
92+
assertThat(result.getProfile()).isEqualTo("profile");
93+
assertThat(result.getCounterPartyAddress()).isEqualTo("http://provider/url");
94+
assertThat(result.getCounterPartyId()).isEqualTo("http://provider/url");
95+
assertThat(result.getQuerySpec()).isEqualTo(querySpec);
96+
verify(context).transform(querySpecJson, QuerySpec.class);
97+
}
98+
7699
@Test
77100
void transform_shouldUseCounterPartyId_whenProvided() {
78101
var querySpec = QuerySpec.Builder.newInstance().build();

core/control-plane/control-plane-transform/src/test/java/org/eclipse/edc/connector/controlplane/transform/edc/catalog/to/JsonObjectToDatasetRequestTransformerTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import static org.assertj.core.api.Assertions.assertThat;
2525
import static org.eclipse.edc.connector.controlplane.catalog.spi.DatasetRequest.DATASET_REQUEST_COUNTER_PARTY_ADDRESS;
2626
import static org.eclipse.edc.connector.controlplane.catalog.spi.DatasetRequest.DATASET_REQUEST_COUNTER_PARTY_ID;
27+
import static org.eclipse.edc.connector.controlplane.catalog.spi.DatasetRequest.DATASET_REQUEST_PROFILE;
2728
import static org.eclipse.edc.connector.controlplane.catalog.spi.DatasetRequest.DATASET_REQUEST_PROTOCOL;
2829
import static org.eclipse.edc.connector.controlplane.catalog.spi.DatasetRequest.DATASET_REQUEST_TYPE;
2930
import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID;
@@ -64,6 +65,26 @@ void transform() {
6465
assertThat(result.getCounterPartyId()).isEqualTo("http://provider/url");
6566
}
6667

68+
@Test
69+
void transform_withProfile() {
70+
var querySpec = QuerySpec.Builder.newInstance().build();
71+
when(context.transform(any(), eq(QuerySpec.class))).thenReturn(querySpec);
72+
var json = Json.createObjectBuilder()
73+
.add(TYPE, DATASET_REQUEST_TYPE)
74+
.add(ID, "id")
75+
.add(DATASET_REQUEST_PROFILE, "profile")
76+
.add(DATASET_REQUEST_COUNTER_PARTY_ADDRESS, "http://provider/url")
77+
.build();
78+
79+
var result = transformer.transform(json, context);
80+
81+
assertThat(result).isNotNull();
82+
assertThat(result.getId()).isEqualTo("id");
83+
assertThat(result.getProfile()).isEqualTo("profile");
84+
assertThat(result.getCounterPartyAddress()).isEqualTo("http://provider/url");
85+
assertThat(result.getCounterPartyId()).isEqualTo("http://provider/url");
86+
}
87+
6788
@Test
6889
void transform_shouldUseCounterPartyId_whenProvided() {
6990
var querySpec = QuerySpec.Builder.newInstance().build();

core/control-plane/control-plane-transform/src/test/java/org/eclipse/edc/connector/controlplane/transform/edc/contractnegotiation/from/JsonObjectFromContractNegotiationTransformerTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractNegotiation.CONTRACT_NEGOTIATION_COUNTERPARTY_ID;
3737
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractNegotiation.CONTRACT_NEGOTIATION_CREATED_AT;
3838
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractNegotiation.CONTRACT_NEGOTIATION_NEG_TYPE;
39+
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractNegotiation.CONTRACT_NEGOTIATION_PROFILE;
3940
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractNegotiation.CONTRACT_NEGOTIATION_PROTOCOL;
4041
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractNegotiation.CONTRACT_NEGOTIATION_STATE;
4142
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractNegotiationStates.REQUESTED;
@@ -81,6 +82,7 @@ void transform() {
8182
assertThat(jsonObject.getString(CONTRACT_NEGOTIATION_AGREEMENT_ID)).isEqualTo("test-agreement");
8283
assertThat(jsonObject.getString(CONTRACT_NEGOTIATION_NEG_TYPE)).isEqualTo("PROVIDER");
8384
assertThat(jsonObject.getString(CONTRACT_NEGOTIATION_PROTOCOL)).isEqualTo("protocol");
85+
assertThat(jsonObject.getString(CONTRACT_NEGOTIATION_PROFILE)).isEqualTo("protocol");
8486
assertThat(jsonObject.getString(CONTRACT_NEGOTIATION_CORRELATION_ID)).isEqualTo(cn.getCorrelationId());
8587
assertThat(jsonObject.getString(CONTRACT_NEGOTIATION_ASSET_ID)).isEqualTo(co.getAssetId());
8688
assertThat(jsonObject.getJsonNumber(CONTRACT_NEGOTIATION_CREATED_AT).longValue()).isEqualTo(1234);

core/control-plane/control-plane-transform/src/test/java/org/eclipse/edc/connector/controlplane/transform/edc/contractnegotiation/to/JsonObjectToContractRequestTransformerTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import static org.assertj.core.api.Assertions.assertThat;
3535
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractRequest.CALLBACK_ADDRESSES;
3636
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractRequest.CONTRACT_REQUEST_COUNTER_PARTY_ADDRESS;
37+
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractRequest.CONTRACT_REQUEST_PROFILE;
3738
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractRequest.POLICY;
3839
import static org.eclipse.edc.connector.controlplane.contract.spi.types.negotiation.ContractRequest.PROTOCOL;
3940
import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID;
@@ -90,6 +91,34 @@ void transform() {
9091
assertThat(request.getContractOffer()).isSameAs(offer);
9192
}
9293

94+
@Test
95+
void transform_withProfile() {
96+
var jsonObject = Json.createObjectBuilder()
97+
.add(TYPE, ContractRequest.CONTRACT_REQUEST_TYPE)
98+
.add(CONTRACT_REQUEST_COUNTER_PARTY_ADDRESS, "test-address")
99+
.add(CONTRACT_REQUEST_PROFILE, "test-profile")
100+
.add(CALLBACK_ADDRESSES, createCallbackAddress())
101+
.add(POLICY, createPolicy())
102+
.build();
103+
when(context.transform(any(JsonObject.class), eq(CallbackAddress.class))).thenReturn(CallbackAddress.Builder.newInstance()
104+
.uri("http://test.local")
105+
.events(Set.of("foo", "bar"))
106+
.transactional(true)
107+
.build());
108+
var offer = createContractOffer("test-provider-id");
109+
when(context.transform(any(JsonValue.class), eq(ContractOffer.class))).thenReturn(offer);
110+
111+
var request = transformer.transform(jsonLd.expand(jsonObject).getContent(), context);
112+
113+
assertThat(request).isNotNull();
114+
assertThat(request.getProviderId()).isEqualTo("test-provider-id");
115+
assertThat(request.getCallbackAddresses()).isNotEmpty();
116+
assertThat(request.getProfile()).isEqualTo("test-profile");
117+
assertThat(request.getCounterPartyAddress()).isEqualTo("test-address");
118+
assertThat(request.getContractOffer()).isSameAs(offer);
119+
}
120+
121+
93122
@Test
94123
void transform_shouldSetProviderIdAsCounterPartyAddress_whenProviderIdNotDefined() {
95124
var jsonObject = Json.createObjectBuilder()

0 commit comments

Comments
 (0)