Skip to content

Commit

Permalink
datamanagement: deprecate control api (eclipse-edc#1113)
Browse files Browse the repository at this point in the history
* datamanagement: deprecate control api

* Replace control api with data management api

* PR remarks

* Update samples/04.1-file-transfer-listener/README.md

Co-authored-by: Florian Rusch (ZF Friedrichshafen AG) <[email protected]>

Co-authored-by: Florian Rusch (ZF Friedrichshafen AG) <[email protected]>
  • Loading branch information
ndr-brt and florianrusch authored Apr 13, 2022
1 parent fa6b01a commit f5d8d0a
Show file tree
Hide file tree
Showing 55 changed files with 658 additions and 945 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
import java.util.Objects;
import java.util.concurrent.CompletableFuture;

import static java.lang.String.format;
import static java.util.concurrent.CompletableFuture.failedFuture;

/**
Expand Down Expand Up @@ -183,7 +184,7 @@ public CompletableFuture<R> send(M request, MessageContext context) {
.build();

// Execute call
CompletableFuture<R> future = new CompletableFuture<>();
var future = new CompletableFuture<R>();

httpClient.newCall(httpRequest).enqueue(new FutureCallback<>(future, r -> {
try (r) {
Expand All @@ -200,12 +201,7 @@ public CompletableFuture<R> send(M request, MessageContext context) {
future.completeExceptionally(e);
}
} else {
if (r.code() == 403) {
// forbidden
future.completeExceptionally(new EdcException("Received not authorized from connector"));
} else {
future.completeExceptionally(new EdcException("Received an error from connector:" + r.code()));
}
future.completeExceptionally(new EdcException(format("Received an error from connector (%s): %s %s", requestUrl, r.code(), r.message())));
}
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ public boolean canHandle(@NotNull MultipartRequest multipartRequest) {
}

// extract target from contract request
var permission = contractRequest.getPermission().get(0);
var permission = contractRequest.getPermission().stream().findFirst().orElse(null);
if (permission == null) {
monitor.debug("ContractRequestHandler: Contract Request is invalid");
return createBadParametersErrorMultipartResponse(message);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.eclipse.dataspaceconnector.spi.types.domain.contract.negotiation.ContractOfferRequest;
import org.eclipse.dataspaceconnector.spi.types.domain.transfer.DataRequest;

@Deprecated
@OpenAPIDefinition
public interface ClientApi {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import jakarta.ws.rs.container.AsyncResponse;
import jakarta.ws.rs.container.Suspended;

@Deprecated
@OpenAPIDefinition
public interface ClientControlCatalogApi {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import java.util.concurrent.CompletableFuture;
import java.util.function.BiConsumer;

@Deprecated
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
@Path("/control")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@

import java.util.Objects;


@Deprecated
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
@Path("/control")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import java.security.SecureRandom;
import java.util.function.Predicate;

@Deprecated
public class ControlApiServiceExtension implements ServiceExtension {

@EdcSetting
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
/**
* Response for requesting the status of a {@link ContractNegotiation}.
*/
@Deprecated
public class NegotiationStatusResponse {

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ public class DataManagementApiConfigurationExtension implements ServiceExtension
@Inject(required = false)
private AuthenticationService service;

@Override
public String name() {
return "Data Management API configuration";
}

@Override
public void initialize(ServiceExtensionContext context) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,12 @@ public class ContractAgreementApiExtension implements ServiceExtension {
@Inject
ContractNegotiationStore store;


@Override
public String name() {
return "Data Management API: Contract Agreement";
}

@Override
public void initialize(ServiceExtensionContext context) {
transformerRegistry.register(new ContractAgreementToContractAgreementDtoTransformer());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ public class ContractDefinitionApiExtension implements ServiceExtension {
@Inject(required = false)
TransactionContext transactionContext;

@Override
public String name() {
return "Data Management API: Contract Definition";
}

@Override
public void initialize(ServiceExtensionContext context) {
transformerRegistry.register(new ContractDefinitionToContractDefinitionDtoTransformer());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ public void declineNegotiation(@PathParam("id") String id) {

private boolean isValid(NegotiationInitiateRequestDto initiateDto) {
return StringUtils.isNoneBlank(initiateDto.getConnectorId(), initiateDto.getConnectorAddress(), initiateDto.getProtocol(),
initiateDto.getOffer().getOfferId(), initiateDto.getOffer().getAssetId(), initiateDto.getOffer().getPolicyId());
initiateDto.getOffer().getOfferId(), initiateDto.getOffer().getAssetId());
}

private void handleFailedResult(ServiceResult<ContractNegotiation> result, String id) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,12 @@ public class ContractNegotiationApiExtension implements ServiceExtension {
@Inject(required = false)
private TransactionContext transactionContext;


@Override
public String name() {
return "Data Management API: Contract Negotiation";
}

@Override
public void initialize(ServiceExtensionContext context) {
transformerRegistry.register(new ContractNegotiationToContractNegotiationDtoTransformer());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.net.URI;

public class NegotiationInitiateRequestDtoToDataRequestTransformer implements DtoTransformer<NegotiationInitiateRequestDto, ContractOfferRequest> {
@Override
public Class<NegotiationInitiateRequestDto> getInputType() {
Expand All @@ -43,6 +45,8 @@ public Class<ContractOfferRequest> getOutputType() {
.asset(Asset.Builder.newInstance().id(object.getOffer().getAssetId()).build())
.policyId(object.getOffer().getPolicyId())
.policy(object.getOffer().getPolicy())
.consumer(URI.create("http://localhost")) // TODO: this needs to be obtained
.provider(URI.create("http://localhost")) // TODO: this needs to be obtained
.build();
return ContractOfferRequest.Builder.newInstance()
.connectorId(object.getConnectorId())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,13 @@ public class TransferProcessApiExtension implements ServiceExtension {
private TransferProcessManager manager;

@Inject(required = false)
TransactionContext transactionContext;
private TransactionContext transactionContext;


@Override
public String name() {
return "Data Management API: Transfer Process";
}

@Override
public void initialize(ServiceExtensionContext context) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

import org.eclipse.dataspaceconnector.api.result.ServiceResult;
import org.eclipse.dataspaceconnector.spi.query.QuerySpec;
import org.eclipse.dataspaceconnector.spi.response.StatusResult;
import org.eclipse.dataspaceconnector.spi.result.AbstractResult;
import org.eclipse.dataspaceconnector.spi.transaction.TransactionContext;
import org.eclipse.dataspaceconnector.spi.transfer.TransferProcessManager;
Expand Down Expand Up @@ -78,7 +77,7 @@ public TransferProcessServiceImpl(TransferProcessStore transferProcessStore, Tra
@Override
public @NotNull ServiceResult<String> initiateTransfer(DataRequest request) {
return transactionContext.execute(() -> {
StatusResult<String> transferInitiateResult = manager.initiateConsumerRequest(request);
var transferInitiateResult = manager.initiateConsumerRequest(request);
return Optional.ofNullable(transferInitiateResult)
.filter(AbstractResult::succeeded)
.map(AbstractResult::getContent)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ void deprovision_notFound() {
@Test
void deprovision_conflict(TransferProcessStore store) {
store.create(createTransferProcess(PROCESS_ID, INITIAL.code()));

baseRequest()
.contentType(JSON)
.post("/transferprocess/" + PROCESS_ID + "/deprovision")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
package org.eclipse.dataspaceconnector.api.datamanagement.transferprocess.service;

import com.github.javafaker.Faker;
import org.eclipse.dataspaceconnector.api.result.ServiceResult;
import org.eclipse.dataspaceconnector.spi.query.QuerySpec;
import org.eclipse.dataspaceconnector.spi.response.StatusResult;
import org.eclipse.dataspaceconnector.spi.transaction.NoopTransactionContext;
Expand All @@ -32,22 +31,12 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import org.junit.jupiter.params.provider.MethodSource;
import org.mockito.ArgumentCaptor;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.stream.Stream;

import static org.assertj.core.api.Assertions.assertThat;
import static org.eclipse.dataspaceconnector.spi.types.domain.transfer.TransferProcessStates.CANCELLED;
import static org.eclipse.dataspaceconnector.spi.types.domain.transfer.TransferProcessStates.COMPLETED;
import static org.eclipse.dataspaceconnector.spi.types.domain.transfer.TransferProcessStates.DEPROVISIONED;
import static org.eclipse.dataspaceconnector.spi.types.domain.transfer.TransferProcessStates.DEPROVISIONING;
import static org.eclipse.dataspaceconnector.spi.types.domain.transfer.TransferProcessStates.ENDED;
import static org.eclipse.dataspaceconnector.spi.types.domain.transfer.TransferProcessStates.ERROR;
import static org.junit.jupiter.params.provider.EnumSource.Mode.EXCLUDE;
import static org.junit.jupiter.params.provider.EnumSource.Mode.INCLUDE;
import static org.mockito.ArgumentMatchers.any;
Expand Down
2 changes: 1 addition & 1 deletion launchers/basic/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ val jupiterVersion: String by project
dependencies {
implementation(project(":core"))
implementation(project(":data-protocols:ids"))
implementation(project(":extensions:api:control"))
implementation(project(":extensions:api:data-management"))
implementation(project(":extensions:api:observability"))
implementation(project(":extensions:api:data-management"))

Expand Down
28 changes: 14 additions & 14 deletions launchers/ids-connector/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,24 @@ for one, you can set up and configure a local DAPS instance for testing. To do s
The following modules are used for this launcher:

### Core
| Name | Description |
| ---- | ----------- |
| Name | Description |
|------|---------------------------------------------------------------------------------------------------------------|
| core | all core modules, including e.g. the BaseRuntime as well as the modules for transfer and contract negotiation |

### Extensions

| Name | Description |
| ---- | ----------- |
| extensions:in-memory:transfer-store-memory | store for persisting `TransferProcesses` |
| extensions:in-memory:assetindex-memory | store for persisting `Assets` |
| extensions:in-memory:negotiation-store-memory | store for persisting `ContractNegotiations` |
| extensions:in-memory:contractdefinition-store-memory | store for persisting `ContractDefinitions` |
| extensions:data-protocols:ids | contains all IDS modules, e.g. for dispatching and handling IDS multipart messages |
| extensions:filesystem:configuration-fs | reads configuration properties from a file in the file-system |
| extensions:filesystem:vault-fs | file-system based vault, required for using a certificate from the file-system |
| extensions:iam:oauth2:oauth2-core | provides OAuth2 authentication, required as DAPS is OAuth2 based |
| extensions:iam:daps | provides the DAPS specific extension for OAuth2 |
| extensions:api:control | provides endpoints e.g. for initiating a contract negotiation or a data transfer |
| Name | Description |
|------------------------------------------------------|------------------------------------------------------------------------------------|
| extensions:in-memory:transfer-store-memory | store for persisting `TransferProcesses` |
| extensions:in-memory:assetindex-memory | store for persisting `Assets` |
| extensions:in-memory:negotiation-store-memory | store for persisting `ContractNegotiations` |
| extensions:in-memory:contractdefinition-store-memory | store for persisting `ContractDefinitions` |
| extensions:data-protocols:ids | contains all IDS modules, e.g. for dispatching and handling IDS multipart messages |
| extensions:filesystem:configuration-fs | reads configuration properties from a file in the file-system |
| extensions:filesystem:vault-fs | file-system based vault, required for using a certificate from the file-system |
| extensions:iam:oauth2:oauth2-core | provides OAuth2 authentication, required as DAPS is OAuth2 based |
| extensions:iam:daps | provides the DAPS specific extension for OAuth2 |
| extensions:api:data-management | provides endpoints e.g. for initiating a contract negotiation or a data transfer |

All stores used in this launcher are in-memory implementations, meaning **all data will be lost
once the connector is shut down**. If you want data to be persisted even after the connector shuts
Expand Down
2 changes: 1 addition & 1 deletion launchers/ids-connector/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ dependencies {
implementation(project(":extensions:iam:oauth2:oauth2-core"))
implementation(project(":extensions:iam:daps"))

implementation(project(":extensions:api:control"))
implementation(project(":extensions:api:data-management"))

testImplementation("org.junit.jupiter:junit-jupiter-api:${jupiterVersion}")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${jupiterVersion}")
Expand Down
5 changes: 2 additions & 3 deletions launchers/ids-connector/config.properties
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@ web.http.ids.port=8282
web.http.ids.path=/api/v1/ids
ids.webhook.address=http://localhost:8282

### Authentication for control API endpoints ###
edc.api.control.auth.apikey.key=X-Api-Key
edc.api.control.auth.apikey.value=password
### Authentication for Dat Management API endpoints ###
edc.api.auth.key=password

### OAuth2 ###
edc.oauth.token.url=<daps-url>/token
Expand Down
Loading

0 comments on commit f5d8d0a

Please sign in to comment.