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

feat(Edr API): associates contractNegotiationId EdrEntry #847

Merged
merged 3 commits into from
Oct 25, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
52 changes: 26 additions & 26 deletions DEPENDENCIES
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
maven/mavencentral/com.apicatalog/carbon-did/0.0.2, Apache-2.0, approved, #9239

Check warning on line 1 in DEPENDENCIES

View workflow job for this annotation

GitHub Actions / verify / verify-dependencies / Dash-Verify-Licenses

Restricted Dependencies found

Some dependencies are marked 'restricted' - please review them
maven/mavencentral/com.apicatalog/iron-verifiable-credentials/0.8.1, Apache-2.0, approved, #9234
maven/mavencentral/com.apicatalog/titanium-json-ld/1.0.0, Apache-2.0, approved, clearlydefined
maven/mavencentral/com.apicatalog/titanium-json-ld/1.3.1, Apache-2.0, approved, #8912
Expand Down Expand Up @@ -452,52 +452,52 @@
maven/mavencentral/org.yaml/snakeyaml/2.0, Apache-2.0 AND (Apache-2.0 OR BSD-3-Clause OR EPL-1.0 OR GPL-2.0-or-later OR LGPL-2.1-or-later), approved, #7275
maven/mavencentral/org.yaml/snakeyaml/2.2, Apache-2.0 AND (Apache-2.0 OR BSD-3-Clause OR EPL-1.0 OR GPL-2.0-or-later OR LGPL-2.1-or-later), approved, #10232
maven/mavencentral/software.amazon.awssdk/annotations/2.20.146, Apache-2.0, approved, #8598
maven/mavencentral/software.amazon.awssdk/annotations/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/annotations/2.21.5, Apache-2.0, approved, #11137
maven/mavencentral/software.amazon.awssdk/apache-client/2.20.146, Apache-2.0, approved, #8609
maven/mavencentral/software.amazon.awssdk/apache-client/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/apache-client/2.21.5, Apache-2.0, approved, #11133
maven/mavencentral/software.amazon.awssdk/arns/2.20.146, Apache-2.0, approved, #8616
maven/mavencentral/software.amazon.awssdk/arns/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/arns/2.21.5, Apache-2.0, approved, #11143
maven/mavencentral/software.amazon.awssdk/auth/2.20.146, Apache-2.0, approved, #8602
maven/mavencentral/software.amazon.awssdk/auth/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/auth/2.21.5, Apache-2.0, approved, #11139
maven/mavencentral/software.amazon.awssdk/aws-core/2.20.146, Apache-2.0, approved, #8612
maven/mavencentral/software.amazon.awssdk/aws-core/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/aws-core/2.21.5, Apache-2.0, approved, #11126
maven/mavencentral/software.amazon.awssdk/aws-query-protocol/2.20.146, Apache-2.0, approved, #8629
maven/mavencentral/software.amazon.awssdk/aws-query-protocol/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/aws-query-protocol/2.21.5, Apache-2.0, approved, #11123
maven/mavencentral/software.amazon.awssdk/aws-xml-protocol/2.20.146, Apache-2.0, approved, #8624
maven/mavencentral/software.amazon.awssdk/aws-xml-protocol/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/checksums-spi/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/checksums/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/aws-xml-protocol/2.21.5, Apache-2.0, approved, #11124
maven/mavencentral/software.amazon.awssdk/checksums-spi/2.21.5, Apache-2.0, approved, #11131
maven/mavencentral/software.amazon.awssdk/checksums/2.21.5, Apache-2.0, approved, #11134
maven/mavencentral/software.amazon.awssdk/crt-core/2.20.146, Apache-2.0, approved, #8627
maven/mavencentral/software.amazon.awssdk/crt-core/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/crt-core/2.21.5, Apache-2.0, approved, #11130
maven/mavencentral/software.amazon.awssdk/endpoints-spi/2.20.146, Apache-2.0, approved, #8604
maven/mavencentral/software.amazon.awssdk/endpoints-spi/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/http-auth-aws/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/http-auth-spi/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/http-auth/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/endpoints-spi/2.21.5, Apache-2.0, approved, #11118
maven/mavencentral/software.amazon.awssdk/http-auth-aws/2.21.5, Apache-2.0, approved, #11145
maven/mavencentral/software.amazon.awssdk/http-auth-spi/2.21.5, Apache-2.0, approved, #11128
maven/mavencentral/software.amazon.awssdk/http-auth/2.21.5, Apache-2.0, approved, #11120
maven/mavencentral/software.amazon.awssdk/http-client-spi/2.20.146, Apache-2.0, approved, #8608
maven/mavencentral/software.amazon.awssdk/http-client-spi/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/http-client-spi/2.21.5, Apache-2.0, approved, #11132
maven/mavencentral/software.amazon.awssdk/iam/2.20.146, Apache-2.0, approved, #9271
maven/mavencentral/software.amazon.awssdk/identity-spi/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/identity-spi/2.21.5, Apache-2.0, approved, #11129
maven/mavencentral/software.amazon.awssdk/json-utils/2.20.146, Apache-2.0, approved, #8614
maven/mavencentral/software.amazon.awssdk/json-utils/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/json-utils/2.21.5, Apache-2.0, approved, #11119
maven/mavencentral/software.amazon.awssdk/metrics-spi/2.20.146, Apache-2.0, approved, #8636
maven/mavencentral/software.amazon.awssdk/metrics-spi/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/metrics-spi/2.21.5, Apache-2.0, approved, #11144
maven/mavencentral/software.amazon.awssdk/netty-nio-client/2.20.146, Apache-2.0, approved, #8613
maven/mavencentral/software.amazon.awssdk/netty-nio-client/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/netty-nio-client/2.21.5, Apache-2.0, approved, #11140
maven/mavencentral/software.amazon.awssdk/profiles/2.20.146, Apache-2.0, approved, #8600
maven/mavencentral/software.amazon.awssdk/profiles/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/profiles/2.21.5, Apache-2.0, approved, #11148
maven/mavencentral/software.amazon.awssdk/protocol-core/2.20.146, Apache-2.0, approved, #8635
maven/mavencentral/software.amazon.awssdk/protocol-core/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/protocol-core/2.21.5, Apache-2.0, approved, #11141
maven/mavencentral/software.amazon.awssdk/regions/2.20.146, Apache-2.0, approved, #8632
maven/mavencentral/software.amazon.awssdk/regions/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/regions/2.21.5, Apache-2.0, approved, #11142
maven/mavencentral/software.amazon.awssdk/s3-transfer-manager/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/s3/2.20.146, Apache-2.0, approved, #8623
maven/mavencentral/software.amazon.awssdk/s3/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/s3/2.21.5, Apache-2.0, approved, #11135
maven/mavencentral/software.amazon.awssdk/sdk-core/2.20.146, Apache-2.0, approved, #8611
maven/mavencentral/software.amazon.awssdk/sdk-core/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/sdk-core/2.21.5, Apache-2.0, approved, #11121
maven/mavencentral/software.amazon.awssdk/sts/2.20.146, Apache-2.0, approved, #9269
maven/mavencentral/software.amazon.awssdk/third-party-jackson-core/2.20.146, Apache-2.0, approved, #8622
maven/mavencentral/software.amazon.awssdk/third-party-jackson-core/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/third-party-jackson-core/2.21.5, Apache-2.0, approved, #11127
maven/mavencentral/software.amazon.awssdk/utils/2.20.146, Apache-2.0, approved, #8625
maven/mavencentral/software.amazon.awssdk/utils/2.21.5, , restricted, clearlydefined
maven/mavencentral/software.amazon.awssdk/utils/2.21.5, Apache-2.0, approved, #11136
maven/mavencentral/software.amazon.eventstream/eventstream/1.0.1, Apache-2.0, approved, clearlydefined
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,25 @@ public <T> Predicate<T> convert(Criterion criterion) {
case "=" -> equalPredicate(criterion);
case "in" -> inPredicate(criterion);
case "like" -> likePredicate(criterion);
default -> throw new IllegalArgumentException(format("Operator [%s] is not supported by this converter!", criterion.getOperator()));
default ->
throw new IllegalArgumentException(format("Operator [%s] is not supported by this converter!", criterion.getOperator()));
};
}

protected Object property(String key, Object object) {
if (object instanceof EndpointDataReferenceEntry entry) {
return switch (key) {
case "assetId" -> entry.getAssetId();
wolf4ood marked this conversation as resolved.
Show resolved Hide resolved
case "agreementId" -> entry.getAgreementId();
case "providerId" -> entry.getProviderId();
case "contractNegotiationId" -> entry.getContractNegotiationId();
case "state" -> entry.getState();
default -> null;
};
}
throw new IllegalArgumentException("Can only handle objects of type " + EndpointDataReferenceEntry.class.getSimpleName() + " but received an " + object.getClass().getSimpleName());
}

@NotNull
private <T> Predicate<T> equalPredicate(Criterion criterion) {
return t -> {
Expand Down Expand Up @@ -117,17 +132,4 @@ private <T> Predicate<T> likePredicate(Criterion criterion) {
return false;
};
}

protected Object property(String key, Object object) {
if (object instanceof EndpointDataReferenceEntry entry) {
return switch (key) {
case "assetId" -> entry.getAssetId();
case "agreementId" -> entry.getAgreementId();
case "providerId" -> entry.getProviderId();
case "state" -> entry.getState();
default -> null;
};
}
throw new IllegalArgumentException("Can only handle objects of type " + EndpointDataReferenceEntry.class.getSimpleName() + " but received an " + object.getClass().getSimpleName());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public interface EdrApi {
@ApiResponse(responseCode = "400", description = "Request was malformed",
content = @Content(array = @ArraySchema(schema = @Schema(implementation = ApiErrorDetail.class)))) }
)
JsonArray queryEdrs(String assetId, String agreementId, String providerId);
JsonArray queryEdrs(String assetId, String agreementId, String contractNegotiationId, String providerId);

@Operation(description = "Gets an EDR with the given transfer process ID",
responses = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import static org.eclipse.tractusx.edc.api.edr.dto.NegotiateEdrRequestDto.EDR_REQUEST_DTO_TYPE;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.AGREEMENT_ID;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.ASSET_ID;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.CONTRACT_NEGOTIATION_ID;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.PROVIDER_ID;

@Consumes({ MediaType.APPLICATION_JSON })
Expand Down Expand Up @@ -89,11 +90,14 @@ public JsonObject initiateEdrNegotiation(JsonObject requestObject) {

@GET
@Override
public JsonArray queryEdrs(@QueryParam("assetId") String assetId, @QueryParam("agreementId") String agreementId, @QueryParam("providerId") String providerId) {
if (assetId == null && agreementId == null) {
throw new InvalidRequestException("At least one of this query parameter is required [assetId,agreementId]");
public JsonArray queryEdrs(@QueryParam("assetId") String assetId,
@QueryParam("agreementId") String agreementId,
@QueryParam("contractNegotiationId") String contractNegotiationId,
@QueryParam("providerId") String providerId) {
if (assetId == null && agreementId == null && contractNegotiationId == null) {
throw new InvalidRequestException("At least one of this query parameter is required [assetId, agreementId, contractNegotiationId]");
}
return edrService.findBy(querySpec(assetId, agreementId, providerId))
return edrService.findBy(querySpec(assetId, agreementId, contractNegotiationId, providerId))
.orElseThrow(exceptionMapper(EndpointDataReferenceEntry.class))
.stream()
.map(edrCached -> transformerRegistry.transform(edrCached, JsonObject.class))
Expand Down Expand Up @@ -124,14 +128,17 @@ private void logIfError(Result<?> result) {
result.onFailure(f -> monitor.warning(f.getFailureDetail()));
}

private QuerySpec querySpec(String assetId, String agreementId, String providerId) {
private QuerySpec querySpec(String assetId, String agreementId, String contractNegotiationId, String providerId) {
var queryBuilder = QuerySpec.Builder.newInstance();
if (assetId != null) {
queryBuilder.filter(fieldFilter(ASSET_ID, assetId));
}
if (agreementId != null) {
queryBuilder.filter(fieldFilter(AGREEMENT_ID, agreementId));
}
if (contractNegotiationId != null) {
queryBuilder.filter(fieldFilter(CONTRACT_NEGOTIATION_ID, contractNegotiationId));
}
if (providerId != null) {
queryBuilder.filter(fieldFilter(PROVIDER_ID, providerId));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.TYPE;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.EDR_ENTRY_AGREEMENT_ID;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.EDR_ENTRY_ASSET_ID;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.EDR_ENTRY_CONTRACT_NEGOTIATION_ID;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.EDR_ENTRY_EXPIRATION_DATE;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.EDR_ENTRY_PROVIDER_ID;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.EDR_ENTRY_STATE;
Expand All @@ -40,15 +41,24 @@ public JsonObjectFromEndpointDataReferenceEntryTransformer() {

@Override
public @Nullable JsonObject transform(@NotNull EndpointDataReferenceEntry dto, @NotNull TransformerContext context) {
return Json.createObjectBuilder()

var builder = Json.createObjectBuilder()
.add(TYPE, EDR_ENTRY_TYPE)
.add(EDR_ENTRY_AGREEMENT_ID, dto.getAgreementId())
.add(EDR_ENTRY_TRANSFER_PROCESS_ID, dto.getTransferProcessId())
.add(EDR_ENTRY_ASSET_ID, dto.getAssetId())
.add(EDR_ENTRY_PROVIDER_ID, dto.getProviderId())
.add(EDR_ENTRY_STATE, dto.getEdrState())
.add(EDR_ENTRY_EXPIRATION_DATE, dto.getExpirationTimestamp())
.build();
.add(EDR_ENTRY_EXPIRATION_DATE, dto.getExpirationTimestamp());

if (dto.getProviderId() != null) {
builder.add(EDR_ENTRY_PROVIDER_ID, dto.getProviderId());
}

if (dto.getContractNegotiationId() != null) {
builder.add(EDR_ENTRY_CONTRACT_NEGOTIATION_ID, dto.getContractNegotiationId());
}

return builder.build();
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,10 @@
import static org.eclipse.tractusx.edc.edr.spi.CoreConstants.TX_NAMESPACE;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.AGREEMENT_ID;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.ASSET_ID;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.CONTRACT_NEGOTIATION_ID;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.EDR_ENTRY_AGREEMENT_ID;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.EDR_ENTRY_ASSET_ID;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.EDR_ENTRY_CONTRACT_NEGOTIATION_ID;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.EDR_ENTRY_PROVIDER_ID;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.EDR_ENTRY_STATE;
import static org.eclipse.tractusx.edc.edr.spi.types.EndpointDataReferenceEntry.EDR_ENTRY_TRANSFER_PROCESS_ID;
Expand Down Expand Up @@ -269,6 +271,53 @@ void queryEdrs_shouldReturnCachedEntries_whenAgreementIdIsProvided() {
.body("[0].'edc:providerId'", is(entry.getProviderId()));
}

@Test
void queryEdrs_shouldReturnCachedEntries_whenContractNegotiationIdIsProvided() {
var assetId = "assetId";
var transferProcessId = "transferProcessId";
var agreementId = "agreementId";
var providerId = "providerId";
var contractNegotiationId = "contractNegotiationId";

var entry = EndpointDataReferenceEntry.Builder.newInstance()
.transferProcessId(transferProcessId)
.agreementId(agreementId)
.assetId(assetId)
.providerId(providerId)
.contractNegotiationId(contractNegotiationId)
.build();


var response = Json.createObjectBuilder()
.add(TYPE, EDR_ENTRY_TYPE)
.add(EDR_ENTRY_ASSET_ID, entry.getAssetId())
.add(EDR_ENTRY_TRANSFER_PROCESS_ID, entry.getTransferProcessId())
.add(EDR_ENTRY_AGREEMENT_ID, entry.getAgreementId())
.add(EDR_ENTRY_CONTRACT_NEGOTIATION_ID, entry.getContractNegotiationId())
.add(EDR_ENTRY_PROVIDER_ID, entry.getProviderId())
.build();

var filter = QuerySpec.Builder.newInstance()
.filter(fieldFilter(CONTRACT_NEGOTIATION_ID, contractNegotiationId))
.filter(fieldFilter(PROVIDER_ID, entry.getProviderId()))
.build();

when(edrService.findBy(eq(filter))).thenReturn(ServiceResult.success(List.of(entry)));
when(transformerRegistry.transform(any(EndpointDataReferenceEntry.class), eq(JsonObject.class))).thenReturn(Result.success(response));

baseRequest()
.contentType(MediaType.APPLICATION_JSON)
.get(EDR_PATH + format("?=contractNegotiationId=%s&providerId=%s", entry.getContractNegotiationId(), entry.getProviderId()))
.then()
.log().all(true)
.statusCode(200)
.body("[0].'edc:transferProcessId'", is(entry.getTransferProcessId()))
.body("[0].'edc:agreementId'", is(entry.getAgreementId()))
.body("[0].'edc:contractNegotiationId'", is(entry.getContractNegotiationId()))
.body("[0].'edc:assetId'", is(entry.getAssetId()))
.body("[0].'edc:providerId'", is(entry.getProviderId()));
}

@Test
void deleteEdr() {
var transferProcessId = "id";
Expand Down