From f65a7dd2749fe172436050eed79cac14c030477c Mon Sep 17 00:00:00 2001 From: SaadBendou Date: Wed, 26 Jul 2023 17:19:00 +0200 Subject: [PATCH] Contract Definition Page Api Service implementation --- .../edc/ext/wrapper/WrapperExtension.java | 6 +- .../WrapperExtensionContextBuilder.java | 5 +- .../edc/ext/wrapper/api/ui/UiResource.java | 11 +++- .../api/ui/model/ContractDefinitionEntry.java | 2 +- .../ContractDefinitionApiService.java | 63 +++++++++++++++++++ 5 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/api/ui/pages/contracts/ContractDefinitionApiService.java diff --git a/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/WrapperExtension.java b/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/WrapperExtension.java index 34b237dd5..2c2153342 100644 --- a/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/WrapperExtension.java +++ b/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/WrapperExtension.java @@ -20,6 +20,7 @@ import org.eclipse.edc.connector.contract.spi.offer.store.ContractDefinitionStore; import org.eclipse.edc.connector.policy.spi.store.PolicyDefinitionStore; import org.eclipse.edc.connector.spi.contractagreement.ContractAgreementService; +import org.eclipse.edc.connector.spi.contractdefinition.ContractDefinitionService; import org.eclipse.edc.connector.spi.contractnegotiation.ContractNegotiationService; import org.eclipse.edc.connector.spi.transferprocess.TransferProcessService; import org.eclipse.edc.connector.transfer.spi.store.TransferProcessStore; @@ -60,6 +61,8 @@ public class WrapperExtension implements ServiceExtension { private TypeManager typeManager; @Inject private WebService webService; + @Inject + private ContractDefinitionService contractDefinitionService; @Override public String name() { @@ -81,7 +84,8 @@ public void initialize(ServiceExtensionContext context) { policyDefinitionStore, policyEngine, transferProcessService, - transferProcessStore + transferProcessStore, + (org.eclipse.edc.connector.contract.spi.offer.ContractDefinitionService) contractDefinitionService ); wrapperExtensionContext.jaxRsResources().forEach(resource -> diff --git a/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/WrapperExtensionContextBuilder.java b/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/WrapperExtensionContextBuilder.java index b29f79ec6..51be22ae5 100644 --- a/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/WrapperExtensionContextBuilder.java +++ b/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/WrapperExtensionContextBuilder.java @@ -19,6 +19,7 @@ import de.sovity.edc.ext.wrapper.api.ui.UiResource; import de.sovity.edc.ext.wrapper.api.ui.pages.contracts.ContractAgreementPageApiService; import de.sovity.edc.ext.wrapper.api.ui.pages.contracts.ContractAgreementTransferApiService; +import de.sovity.edc.ext.wrapper.api.ui.pages.contracts.ContractDefinitionApiService; import de.sovity.edc.ext.wrapper.api.ui.pages.contracts.services.ContractAgreementDataFetcher; import de.sovity.edc.ext.wrapper.api.ui.pages.contracts.services.ContractAgreementPageCardBuilder; import de.sovity.edc.ext.wrapper.api.ui.pages.contracts.services.TransferProcessStateService; @@ -86,6 +87,7 @@ public static WrapperExtensionContext buildContext( contractAgreementPageCardBuilder ); var transferHistoryPageApiService = new TransferHistoryPageApiService(); + var contractDefinitionApiService = new ContractDefinitionApiService(); var transformerRegistryUtils = new TransformerRegistryUtils(dtoTransformerRegistry); var contractNegotiationUtils = new ContractNegotiationUtils(contractNegotiationService); var contractAgreementUtils = new ContractAgreementUtils(contractAgreementService); @@ -103,7 +105,8 @@ public static WrapperExtensionContext buildContext( var uiResource = new UiResource( contractAgreementApiService, transferHistoryPageApiService, - contractAgreementTransferApiService + contractAgreementTransferApiService, + contractDefinitionApiService ); // Use Case API diff --git a/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/api/ui/UiResource.java b/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/api/ui/UiResource.java index e53518c14..1fc2a6dcd 100644 --- a/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/api/ui/UiResource.java +++ b/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/api/ui/UiResource.java @@ -16,9 +16,11 @@ import de.sovity.edc.ext.wrapper.api.ui.model.ContractAgreementPage; import de.sovity.edc.ext.wrapper.api.ui.model.ContractAgreementTransferRequest; +import de.sovity.edc.ext.wrapper.api.ui.model.ContractDefinitionPage; import de.sovity.edc.ext.wrapper.api.ui.model.TransferHistoryPage; import de.sovity.edc.ext.wrapper.api.ui.pages.contracts.ContractAgreementPageApiService; import de.sovity.edc.ext.wrapper.api.ui.pages.contracts.ContractAgreementTransferApiService; +import de.sovity.edc.ext.wrapper.api.ui.pages.contracts.ContractDefinitionApiService; import de.sovity.edc.ext.wrapper.api.ui.pages.transferhistory.TransferHistoryPageApiService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -38,7 +40,7 @@ public class UiResource { private final ContractAgreementPageApiService contractAgreementApiService; private final TransferHistoryPageApiService transferHistoryPageApiService; private final ContractAgreementTransferApiService contractAgreementTransferApiService; - + private final ContractDefinitionApiService contractDefinitionApiService; @GET @Path("pages/contract-agreement-page") @Produces(MediaType.APPLICATION_JSON) @@ -66,4 +68,11 @@ public IdResponseDto initiateTransfer( public TransferHistoryPage transferHistoryPageEndpoint() { return transferHistoryPageApiService.transferHistoryPage(); } + + @GET + @Path("pages/contract-definition-page") + @Produces(MediaType.APPLICATION_JSON) + public ContractDefinitionPage contractDefinitionPageEndpoint() { + return new ContractDefinitionPage(contractDefinitionApiService.getContractDefinitions()); + } } diff --git a/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/api/ui/model/ContractDefinitionEntry.java b/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/api/ui/model/ContractDefinitionEntry.java index ba12e8174..d2e66a9a7 100644 --- a/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/api/ui/model/ContractDefinitionEntry.java +++ b/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/api/ui/model/ContractDefinitionEntry.java @@ -34,7 +34,7 @@ public class ContractDefinitionEntry { private List criteria; @Schema(description = "Contract Definition ID", requiredMode = Schema.RequiredMode.REQUIRED) - private String id; + private String contractDefinitionId; } diff --git a/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/api/ui/pages/contracts/ContractDefinitionApiService.java b/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/api/ui/pages/contracts/ContractDefinitionApiService.java new file mode 100644 index 000000000..7e641c168 --- /dev/null +++ b/extensions/wrapper/wrapper/src/main/java/de/sovity/edc/ext/wrapper/api/ui/pages/contracts/ContractDefinitionApiService.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2022 sovity GmbH + * + * 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: + * sovity GmbH - initial API and implementation + * + */ + +package de.sovity.edc.ext.wrapper.api.ui.pages.contracts; + +import de.sovity.edc.ext.wrapper.api.ui.model.ContractDefinitionEntry; +import de.sovity.edc.ext.wrapper.api.ui.pages.contracts.services.ContractAgreementData; +import lombok.RequiredArgsConstructor; +import org.eclipse.edc.connector.contract.spi.negotiation.store.ContractNegotiationStore; +import org.eclipse.edc.connector.contract.spi.types.agreement.ContractAgreement; +import org.eclipse.edc.connector.contract.spi.types.negotiation.ContractNegotiation; +import org.eclipse.edc.connector.contract.spi.types.offer.ContractDefinition; +import org.eclipse.edc.connector.spi.asset.AssetService; +import org.eclipse.edc.connector.spi.contractagreement.ContractAgreementService; +import org.eclipse.edc.connector.spi.contractdefinition.ContractDefinitionService; +import org.eclipse.edc.spi.query.QuerySpec; +import org.eclipse.edc.spi.types.domain.asset.Asset; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static java.util.stream.Collectors.groupingBy; +import static java.util.stream.Collectors.toList; + + +@RequiredArgsConstructor +public class ContractDefinitionApiService { + + + private final ContractDefinitionService contractDefinitionService; + public List getContractDefinitions() { + // Obtain all contract definitions + var definitions = getAllContractDefinitons(); + return definitions.stream() + .map(definition -> { + var entry = new ContractDefinitionEntry(); + entry.setContractDefinitionId(definition.getId()); + entry.setAccessPolicyId(definition.getAccessPolicyId()); + entry.setContractPolicyId(definition.getContractPolicyId()); + entry.setCriteria(definition.getSelectorExpression().getCriteria()); // This depends on how the criteria are stored in your system + return entry; + }) + .collect(Collectors.toList()); + } + private List getAllContractDefinitons() { + return contractDefinitionService.query(QuerySpec.max()).getContent().toList(); + } + +}