Skip to content

Commit c79e11c

Browse files
authored
refactor: extract dsp catalog transform lib (#4551)
* refactor: extract dsp catalog transform lib * refactor: extract dsp negotiation transform lib * refactor: extract dsp transfer process transform lib * chore: javadocs
1 parent 5d4d727 commit c79e11c

File tree

94 files changed

+1107
-798
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+1107
-798
lines changed

data-protocols/dsp/dsp-catalog/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ dependencies {
2222
api(project(":data-protocols:dsp:dsp-catalog:dsp-catalog-http-dispatcher"))
2323
api(project(":data-protocols:dsp:dsp-catalog:dsp-catalog-transform"))
2424
api(project(":data-protocols:dsp:dsp-catalog:lib:dsp-catalog-validation-lib"))
25+
api(project(":data-protocols:dsp:dsp-catalog:lib:dsp-catalog-transform-lib"))
2526
}

data-protocols/dsp/dsp-catalog/dsp-catalog-transform/build.gradle.kts

+3-6
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,8 @@ plugins {
1717
}
1818

1919
dependencies {
20-
api(project(":spi:common:json-ld-spi"))
21-
api(project(":spi:control-plane:catalog-spi"))
22-
api(project(":extensions:common:json-ld"))
23-
api(project(":data-protocols:dsp:dsp-spi"))
24-
api(project(":data-protocols:dsp:dsp-http-spi"))
25-
20+
api(project(":spi:common:core-spi"))
21+
2622
implementation(project(":core:common:lib:transform-lib"))
23+
implementation(project(":data-protocols:dsp:dsp-catalog:lib:dsp-catalog-transform-lib"))
2724
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Apache License, Version 2.0 which is available at
6+
* https://www.apache.org/licenses/LICENSE-2.0
7+
*
8+
* SPDX-License-Identifier: Apache-2.0
9+
*
10+
* Contributors:
11+
* Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation
12+
*
13+
*/
14+
15+
plugins {
16+
`java-library`
17+
}
18+
19+
dependencies {
20+
api(project(":spi:common:json-ld-spi"))
21+
api(project(":data-protocols:dsp:dsp-spi"))
22+
implementation(project(":core:common:lib:transform-lib"))
23+
24+
testImplementation(project(":core:common:junit"))
25+
}
Original file line numberDiff line numberDiff line change
@@ -17,34 +17,39 @@
1717
import jakarta.json.JsonBuilderFactory;
1818
import jakarta.json.JsonObject;
1919
import org.eclipse.edc.connector.controlplane.catalog.spi.CatalogError;
20-
import org.eclipse.edc.jsonld.spi.transformer.AbstractJsonLdTransformer;
20+
import org.eclipse.edc.jsonld.spi.transformer.AbstractNamespaceAwareJsonLdTransformer;
2121
import org.eclipse.edc.transform.spi.TransformerContext;
2222
import org.jetbrains.annotations.NotNull;
2323
import org.jetbrains.annotations.Nullable;
2424

2525
import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.TYPE;
26-
import static org.eclipse.edc.protocol.dsp.spi.type.DspCatalogPropertyAndTypeNames.DSPACE_TYPE_CATALOG_ERROR;
27-
import static org.eclipse.edc.protocol.dsp.spi.type.DspPropertyAndTypeNames.DSPACE_PROPERTY_CODE;
28-
import static org.eclipse.edc.protocol.dsp.spi.type.DspPropertyAndTypeNames.DSPACE_PROPERTY_REASON;
26+
import static org.eclipse.edc.jsonld.spi.Namespaces.DSPACE_SCHEMA;
27+
import static org.eclipse.edc.protocol.dsp.spi.type.DspCatalogPropertyAndTypeNames.DSPACE_TYPE_CATALOG_ERROR_TERM;
28+
import static org.eclipse.edc.protocol.dsp.spi.type.DspPropertyAndTypeNames.DSPACE_PROPERTY_CODE_TERM;
29+
import static org.eclipse.edc.protocol.dsp.spi.type.DspPropertyAndTypeNames.DSPACE_PROPERTY_REASON_TERM;
2930

3031
/**
3132
* Transforms a {@link CatalogError} to a {@link JsonObject} in JSON-LD expanded form.
3233
*/
33-
public class JsonObjectFromCatalogErrorTransformer extends AbstractJsonLdTransformer<CatalogError, JsonObject> {
34+
public class JsonObjectFromCatalogErrorTransformer extends AbstractNamespaceAwareJsonLdTransformer<CatalogError, JsonObject> {
3435

3536
private final JsonBuilderFactory jsonFactory;
3637

3738
public JsonObjectFromCatalogErrorTransformer(JsonBuilderFactory jsonFactory) {
38-
super(CatalogError.class, JsonObject.class);
39+
this(jsonFactory, DSPACE_SCHEMA);
40+
}
41+
42+
public JsonObjectFromCatalogErrorTransformer(JsonBuilderFactory jsonFactory, String schema) {
43+
super(CatalogError.class, JsonObject.class, schema);
3944
this.jsonFactory = jsonFactory;
4045
}
4146

4247
@Override
4348
public @Nullable JsonObject transform(@NotNull CatalogError error, @NotNull TransformerContext context) {
4449
return jsonFactory.createObjectBuilder()
45-
.add(TYPE, DSPACE_TYPE_CATALOG_ERROR)
46-
.add(DSPACE_PROPERTY_CODE, error.getCode())
47-
.add(DSPACE_PROPERTY_REASON, jsonFactory.createArrayBuilder(error.getMessages()))
50+
.add(TYPE, forNamespace(DSPACE_TYPE_CATALOG_ERROR_TERM))
51+
.add(forNamespace(DSPACE_PROPERTY_CODE_TERM), error.getCode())
52+
.add(forNamespace(DSPACE_PROPERTY_REASON_TERM), jsonFactory.createArrayBuilder(error.getMessages()))
4853
.build();
4954
}
5055
}
Original file line numberDiff line numberDiff line change
@@ -17,34 +17,39 @@
1717
import jakarta.json.JsonBuilderFactory;
1818
import jakarta.json.JsonObject;
1919
import org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequestMessage;
20-
import org.eclipse.edc.jsonld.spi.transformer.AbstractJsonLdTransformer;
20+
import org.eclipse.edc.jsonld.spi.transformer.AbstractNamespaceAwareJsonLdTransformer;
2121
import org.eclipse.edc.transform.spi.TransformerContext;
2222
import org.jetbrains.annotations.NotNull;
2323
import org.jetbrains.annotations.Nullable;
2424

2525
import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.TYPE;
26-
import static org.eclipse.edc.protocol.dsp.spi.type.DspCatalogPropertyAndTypeNames.DSPACE_PROPERTY_FILTER_IRI;
27-
import static org.eclipse.edc.protocol.dsp.spi.type.DspCatalogPropertyAndTypeNames.DSPACE_TYPE_CATALOG_REQUEST_MESSAGE_IRI;
26+
import static org.eclipse.edc.jsonld.spi.Namespaces.DSPACE_SCHEMA;
27+
import static org.eclipse.edc.protocol.dsp.spi.type.DspCatalogPropertyAndTypeNames.DSPACE_PROPERTY_FILTER_TERM;
28+
import static org.eclipse.edc.protocol.dsp.spi.type.DspCatalogPropertyAndTypeNames.DSPACE_TYPE_CATALOG_REQUEST_MESSAGE_TERM;
2829

2930
/**
3031
* Transforms a {@link CatalogRequestMessage} to a {@link JsonObject} in JSON-LD expanded form.
3132
*/
32-
public class JsonObjectFromCatalogRequestMessageTransformer extends AbstractJsonLdTransformer<CatalogRequestMessage, JsonObject> {
33+
public class JsonObjectFromCatalogRequestMessageTransformer extends AbstractNamespaceAwareJsonLdTransformer<CatalogRequestMessage, JsonObject> {
3334

3435
private final JsonBuilderFactory jsonFactory;
3536

3637
public JsonObjectFromCatalogRequestMessageTransformer(JsonBuilderFactory jsonFactory) {
37-
super(CatalogRequestMessage.class, JsonObject.class);
38+
this(jsonFactory, DSPACE_SCHEMA);
39+
}
40+
41+
public JsonObjectFromCatalogRequestMessageTransformer(JsonBuilderFactory jsonFactory, String schema) {
42+
super(CatalogRequestMessage.class, JsonObject.class, schema);
3843
this.jsonFactory = jsonFactory;
3944
}
4045

4146
@Override
4247
public @Nullable JsonObject transform(@NotNull CatalogRequestMessage message, @NotNull TransformerContext context) {
4348
var builder = jsonFactory.createObjectBuilder();
44-
builder.add(TYPE, DSPACE_TYPE_CATALOG_REQUEST_MESSAGE_IRI);
49+
builder.add(TYPE, forNamespace(DSPACE_TYPE_CATALOG_REQUEST_MESSAGE_TERM));
4550

4651
if (message.getQuerySpec() != null) {
47-
builder.add(DSPACE_PROPERTY_FILTER_IRI, context.transform(message.getQuerySpec(), JsonObject.class));
52+
builder.add(forNamespace(DSPACE_PROPERTY_FILTER_TERM), context.transform(message.getQuerySpec(), JsonObject.class));
4853
}
4954

5055
return builder.build();
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import jakarta.json.JsonBuilderFactory;
1919
import jakarta.json.JsonObject;
2020
import org.eclipse.edc.connector.controlplane.catalog.spi.Catalog;
21-
import org.eclipse.edc.jsonld.spi.transformer.AbstractJsonLdTransformer;
21+
import org.eclipse.edc.jsonld.spi.transformer.AbstractNamespaceAwareJsonLdTransformer;
2222
import org.eclipse.edc.spi.agent.ParticipantIdMapper;
2323
import org.eclipse.edc.transform.spi.TransformerContext;
2424
import org.jetbrains.annotations.NotNull;
@@ -28,22 +28,27 @@
2828
import static java.util.Optional.ofNullable;
2929
import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID;
3030
import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.TYPE;
31+
import static org.eclipse.edc.jsonld.spi.Namespaces.DSPACE_SCHEMA;
3132
import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.DCAT_CATALOG_TYPE;
3233
import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.DCAT_DATASET_ATTRIBUTE;
3334
import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.DCAT_DATA_SERVICE_ATTRIBUTE;
3435
import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.DCAT_DISTRIBUTION_ATTRIBUTE;
35-
import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.DSPACE_PROPERTY_PARTICIPANT_ID;
36+
import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.DSPACE_PROPERTY_PARTICIPANT_ID_TERM;
3637

3738
/**
3839
* Converts from a {@link Catalog} to a DCAT catalog as a {@link JsonObject} in JSON-LD expanded form.
3940
*/
40-
public class JsonObjectFromCatalogTransformer extends AbstractJsonLdTransformer<Catalog, JsonObject> {
41+
public class JsonObjectFromCatalogTransformer extends AbstractNamespaceAwareJsonLdTransformer<Catalog, JsonObject> {
4142
private final JsonBuilderFactory jsonFactory;
4243
private final ObjectMapper mapper;
4344
private final ParticipantIdMapper participantIdMapper;
4445

4546
public JsonObjectFromCatalogTransformer(JsonBuilderFactory jsonFactory, ObjectMapper mapper, ParticipantIdMapper participantIdMapper) {
46-
super(Catalog.class, JsonObject.class);
47+
this(jsonFactory, mapper, participantIdMapper, DSPACE_SCHEMA);
48+
}
49+
50+
public JsonObjectFromCatalogTransformer(JsonBuilderFactory jsonFactory, ObjectMapper mapper, ParticipantIdMapper participantIdMapper, String namespace) {
51+
super(Catalog.class, JsonObject.class, namespace);
4752
this.jsonFactory = jsonFactory;
4853
this.mapper = mapper;
4954
this.participantIdMapper = participantIdMapper;
@@ -70,7 +75,7 @@ public JsonObjectFromCatalogTransformer(JsonBuilderFactory jsonFactory, ObjectMa
7075
.add(DCAT_DISTRIBUTION_ATTRIBUTE, distributions)
7176
.add(DCAT_DATA_SERVICE_ATTRIBUTE, dataServices);
7277

73-
ofNullable(catalog.getParticipantId()).ifPresent(pid -> objectBuilder.add(DSPACE_PROPERTY_PARTICIPANT_ID, participantIdMapper.toIri(pid)));
78+
ofNullable(catalog.getParticipantId()).ifPresent(pid -> objectBuilder.add(forNamespace(DSPACE_PROPERTY_PARTICIPANT_ID_TERM), participantIdMapper.toIri(pid)));
7479

7580
transformProperties(catalog.getProperties(), objectBuilder, mapper, context);
7681

Original file line numberDiff line numberDiff line change
@@ -16,31 +16,36 @@
1616

1717
import jakarta.json.JsonObject;
1818
import org.eclipse.edc.connector.controlplane.catalog.spi.CatalogRequestMessage;
19-
import org.eclipse.edc.jsonld.spi.transformer.AbstractJsonLdTransformer;
19+
import org.eclipse.edc.jsonld.spi.transformer.AbstractNamespaceAwareJsonLdTransformer;
2020
import org.eclipse.edc.spi.query.QuerySpec;
2121
import org.eclipse.edc.transform.spi.TransformerContext;
2222
import org.jetbrains.annotations.NotNull;
2323
import org.jetbrains.annotations.Nullable;
2424

2525
import java.util.Optional;
2626

27-
import static org.eclipse.edc.protocol.dsp.spi.type.DspCatalogPropertyAndTypeNames.DSPACE_PROPERTY_FILTER_IRI;
27+
import static org.eclipse.edc.jsonld.spi.Namespaces.DSPACE_SCHEMA;
28+
import static org.eclipse.edc.protocol.dsp.spi.type.DspCatalogPropertyAndTypeNames.DSPACE_PROPERTY_FILTER_TERM;
2829

2930
/**
3031
* Transforms a {@link JsonObject} in JSON-LD expanded form to a {@link CatalogRequestMessage}.
3132
*/
32-
public class JsonObjectToCatalogRequestMessageTransformer extends AbstractJsonLdTransformer<JsonObject, CatalogRequestMessage> {
33+
public class JsonObjectToCatalogRequestMessageTransformer extends AbstractNamespaceAwareJsonLdTransformer<JsonObject, CatalogRequestMessage> {
3334

3435
public JsonObjectToCatalogRequestMessageTransformer() {
35-
super(JsonObject.class, CatalogRequestMessage.class);
36+
this(DSPACE_SCHEMA);
37+
}
38+
39+
public JsonObjectToCatalogRequestMessageTransformer(String namespace) {
40+
super(JsonObject.class, CatalogRequestMessage.class, namespace);
3641
}
3742

3843
@Override
3944
public @Nullable CatalogRequestMessage transform(@NotNull JsonObject object, @NotNull TransformerContext context) {
4045
var builder = CatalogRequestMessage.Builder.newInstance();
4146

4247
Optional.of(object)
43-
.map(it -> it.get(DSPACE_PROPERTY_FILTER_IRI))
48+
.map(it -> it.get(forNamespace(DSPACE_PROPERTY_FILTER_TERM)))
4449
.map(it -> transformObject(it, QuerySpec.class, context))
4550
.ifPresent(builder::querySpec);
4651

Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626

2727
import static org.assertj.core.api.Assertions.assertThat;
2828
import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.TYPE;
29-
import static org.eclipse.edc.protocol.dsp.spi.type.DspCatalogPropertyAndTypeNames.DSPACE_TYPE_CATALOG_ERROR;
30-
import static org.eclipse.edc.protocol.dsp.spi.type.DspPropertyAndTypeNames.DSPACE_PROPERTY_CODE;
31-
import static org.eclipse.edc.protocol.dsp.spi.type.DspPropertyAndTypeNames.DSPACE_PROPERTY_REASON;
29+
import static org.eclipse.edc.protocol.dsp.spi.type.DspCatalogPropertyAndTypeNames.DSPACE_TYPE_CATALOG_ERROR_IRI;
30+
import static org.eclipse.edc.protocol.dsp.spi.type.DspPropertyAndTypeNames.DSPACE_PROPERTY_CODE_IRI;
31+
import static org.eclipse.edc.protocol.dsp.spi.type.DspPropertyAndTypeNames.DSPACE_PROPERTY_REASON_IRI;
3232
import static org.mockito.Mockito.mock;
3333

3434
class JsonObjectFromCatalogErrorTransformerTest {
@@ -54,8 +54,8 @@ void transform_returnJsonObject() {
5454
var result = transformer.transform(error, context);
5555

5656
assertThat(result).isNotNull();
57-
assertThat(result.getJsonString(TYPE).getString()).isEqualTo(DSPACE_TYPE_CATALOG_ERROR);
58-
assertThat(result.getString(DSPACE_PROPERTY_CODE)).isEqualTo("code");
59-
assertThat(result.getJsonArray(DSPACE_PROPERTY_REASON)).contains(Json.createValue("message"));
57+
assertThat(result.getJsonString(TYPE).getString()).isEqualTo(DSPACE_TYPE_CATALOG_ERROR_IRI);
58+
assertThat(result.getString(DSPACE_PROPERTY_CODE_IRI)).isEqualTo("code");
59+
assertThat(result.getJsonArray(DSPACE_PROPERTY_REASON_IRI)).contains(Json.createValue("message"));
6060
}
6161
}
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.DCAT_CATALOG_TYPE;
4040
import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.DCAT_DATASET_ATTRIBUTE;
4141
import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.DCAT_DATA_SERVICE_ATTRIBUTE;
42-
import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.DSPACE_PROPERTY_PARTICIPANT_ID;
42+
import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.DSPACE_PROPERTY_PARTICIPANT_ID_IRI;
4343
import static org.mockito.ArgumentMatchers.any;
4444
import static org.mockito.ArgumentMatchers.anyString;
4545
import static org.mockito.ArgumentMatchers.eq;
@@ -97,7 +97,7 @@ void transform_returnJsonObject() {
9797
.isInstanceOf(JsonArray.class)
9898
.matches(v -> v.asJsonArray().size() == 1)
9999
.matches(v -> v.asJsonArray().get(0).equals(dataServiceJson));
100-
assertThat(result.getString(DSPACE_PROPERTY_PARTICIPANT_ID)).isEqualTo("urn:namespace:participantId");
100+
assertThat(result.getString(DSPACE_PROPERTY_PARTICIPANT_ID_IRI)).isEqualTo("urn:namespace:participantId");
101101
assertThat(result.get(CATALOG_PROPERTY)).isNotNull();
102102

103103
verify(context, times(1)).transform(catalog.getDatasets().get(0), JsonObject.class);

0 commit comments

Comments
 (0)