From 56ba5e343c5f194412031b978833dcd793f38f01 Mon Sep 17 00:00:00 2001 From: Tim Berthold <75306992+tmberthold@users.noreply.github.com> Date: Tue, 13 Jun 2023 13:42:57 +0200 Subject: [PATCH] feat: data offer and connector detail pages (broker server api) (#377) --- CHANGELOG.md | 3 +- .../api/broker/BrokerServerResource.java | 18 ++++++ .../model/ConnectorDetailPageQuery.java | 34 +++++++++++ .../model/ConnectorDetailPageResult.java | 53 +++++++++++++++++ .../model/DataOfferDetailPageQuery.java | 37 ++++++++++++ .../model/DataOfferDetailPageResult.java | 58 +++++++++++++++++++ 6 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/ConnectorDetailPageQuery.java create mode 100644 extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/ConnectorDetailPageResult.java create mode 100644 extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/DataOfferDetailPageQuery.java create mode 100644 extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/DataOfferDetailPageResult.java diff --git a/CHANGELOG.md b/CHANGELOG.md index f25a7b80e..0c835c6b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,8 @@ All notable changes to this project will be documented in this file. ### Major Changes ### Minor Changes -- The Broker- and ClearingHouse-client-extensions can be dynamically enabled and disabled via properties (see getting-started Readme FAQ section). +- Broker-/ClearingHouse-Client: The extensions can be dynamically enabled and disabled via properties (see getting-started Readme FAQ section). +- Broker Server API: New API Endpoint `DataOfferDetailPage` and `ConnectorDetailPage` with model. ### Patch Changes diff --git a/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/BrokerServerResource.java b/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/BrokerServerResource.java index 094be3f7a..7063c0d61 100644 --- a/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/BrokerServerResource.java +++ b/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/BrokerServerResource.java @@ -16,8 +16,12 @@ import de.sovity.edc.ext.wrapper.api.broker.model.CatalogPageQuery; import de.sovity.edc.ext.wrapper.api.broker.model.CatalogPageResult; +import de.sovity.edc.ext.wrapper.api.broker.model.ConnectorDetailPageQuery; +import de.sovity.edc.ext.wrapper.api.broker.model.ConnectorDetailPageResult; import de.sovity.edc.ext.wrapper.api.broker.model.ConnectorPageQuery; import de.sovity.edc.ext.wrapper.api.broker.model.ConnectorPageResult; +import de.sovity.edc.ext.wrapper.api.broker.model.DataOfferDetailPageResult; +import de.sovity.edc.ext.wrapper.api.broker.model.DataOfferDetailPageQuery; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.ws.rs.Consumes; @@ -43,4 +47,18 @@ public interface BrokerServerResource { @Produces(MediaType.APPLICATION_JSON) @Operation(description = "Query known Connectors") ConnectorPageResult connectorPage(ConnectorPageQuery query); + + @POST + @Path("data-offer-detail-page") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Operation(description = "Query data offer details") + DataOfferDetailPageResult dataOfferDetailPage(DataOfferDetailPageQuery query); + + @POST + @Path("connector-detail-page") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Operation(description = "Query known Connectors details") + ConnectorDetailPageResult connectorDetailPage(ConnectorDetailPageQuery query); } diff --git a/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/ConnectorDetailPageQuery.java b/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/ConnectorDetailPageQuery.java new file mode 100644 index 000000000..1257800f7 --- /dev/null +++ b/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/ConnectorDetailPageQuery.java @@ -0,0 +1,34 @@ +/* + * 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.broker.model; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "Connector Page Detail Query") +public class ConnectorDetailPageQuery { + @Schema(description = "Connector Endpoint1") + private String connectorEndpoint; +} + diff --git a/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/ConnectorDetailPageResult.java b/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/ConnectorDetailPageResult.java new file mode 100644 index 000000000..fa03e7dee --- /dev/null +++ b/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/ConnectorDetailPageResult.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2023 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.broker.model; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.time.OffsetDateTime; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "Connector Detail Page Data") +public class ConnectorDetailPageResult { + @Schema(description = "Connector ID", example = "https://my-test.connector", requiredMode = Schema.RequiredMode.REQUIRED) + private String id; + + @Schema(description = "Connector Endpoint", example = "https://my-test.connector/control/ids/data", requiredMode = Schema.RequiredMode.REQUIRED) + private String endpoint; + + @Schema(description = "Creation date in Broker", requiredMode = Schema.RequiredMode.REQUIRED) + private OffsetDateTime createdAt; + + @Schema(description = "Last time the connector was successfully refreshed.") + private OffsetDateTime lastSuccessfulRefreshAt; + + @Schema(description = "Last time the connector was tried to be refreshed.") + private OffsetDateTime lastRefreshAttemptAt; + + @Schema(description = "Connector Online Status", requiredMode = Schema.RequiredMode.REQUIRED) + private ConnectorOnlineStatus onlineStatus; + + @Schema(description = "Number of known data offerings") + private Integer numContractOffers; +} diff --git a/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/DataOfferDetailPageQuery.java b/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/DataOfferDetailPageQuery.java new file mode 100644 index 000000000..c80fe6b49 --- /dev/null +++ b/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/DataOfferDetailPageQuery.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2023 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.broker.model; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "Data Offer Detail Page Query") +public class DataOfferDetailPageQuery { + @Schema(description = "Connector Endpoint") + private String connectorEndpoint; + + @Schema(description = "Asset ID") + private String assetId; +} + diff --git a/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/DataOfferDetailPageResult.java b/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/DataOfferDetailPageResult.java new file mode 100644 index 000000000..dc34f1a08 --- /dev/null +++ b/extensions/wrapper/wrapper-broker-api/src/main/java/de/sovity/edc/ext/wrapper/api/broker/model/DataOfferDetailPageResult.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023 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.broker.model; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Map; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "Data Offer Detail Page.") +public class DataOfferDetailPageResult { + @Schema(description = "ID of asset", requiredMode = Schema.RequiredMode.REQUIRED) + private String assetId; + + @Schema(description = "Connector Endpoint", example = "https://my-test.connector/control/ids/data", requiredMode = Schema.RequiredMode.REQUIRED) + private String connectorEndpoint; + + @Schema(description = "Connector Online Status", requiredMode = Schema.RequiredMode.REQUIRED) + private ConnectorOnlineStatus connectorOnlineStatus; + + @Schema(description = "Date to be displayed as last update date, for online connectors it's the last refresh date, for offline connectors it's the creation date or last successful fetch.") + private OffsetDateTime connectorOfflineSinceOrLastUpdatedAt; + + @Schema(description = "Creation date in Broker", requiredMode = Schema.RequiredMode.REQUIRED) + private OffsetDateTime createdAt; + + @Schema(description = "Update date in Broker", requiredMode = Schema.RequiredMode.REQUIRED) + private OffsetDateTime updatedAt; + + @Schema(description = "Asset properties", requiredMode = Schema.RequiredMode.REQUIRED) + private Map properties; + + @Schema(description = "Available Contract Offers", requiredMode = Schema.RequiredMode.REQUIRED) + private List contractOffers; +}