Skip to content

Commit 23251c1

Browse files
authored
Use generator service to register Azure Storage destination type. (#237)
* Use generator service to register Azure Storage destination type. * Update DEPENDENCIES file. * Update DEPENDENCIES file. * Update DEPENDENCIES file. * Update DEPENDENCIES file. * Update DEPENDENCIES file. * Update DEPENDENCIES file. * Update DEPENDENCIES file to latest gen. * Update DEPENDENCIES file to latest gen. * Update DEPENDENCIES file to latest gen. * Update DEPENDENCIES file to latest gen.
1 parent ec266d9 commit 23251c1

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

extensions/data-plane/data-plane-azure-storage/src/main/java/org/eclipse/edc/connector/dataplane/azure/storage/DataPlaneAzureStorageExtension.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,20 @@
1515
package org.eclipse.edc.connector.dataplane.azure.storage;
1616

1717
import dev.failsafe.RetryPolicy;
18+
import org.eclipse.edc.azure.blob.AzureBlobStoreSchema;
1819
import org.eclipse.edc.azure.blob.api.BlobStoreApi;
1920
import org.eclipse.edc.connector.dataplane.azure.storage.metadata.BlobMetadataProvider;
2021
import org.eclipse.edc.connector.dataplane.azure.storage.metadata.BlobMetadataProviderImpl;
2122
import org.eclipse.edc.connector.dataplane.azure.storage.metadata.CommonBlobMetadataDecorator;
2223
import org.eclipse.edc.connector.dataplane.azure.storage.pipeline.AzureStorageDataSinkFactory;
2324
import org.eclipse.edc.connector.dataplane.azure.storage.pipeline.AzureStorageDataSourceFactory;
25+
import org.eclipse.edc.connector.dataplane.spi.Endpoint;
26+
import org.eclipse.edc.connector.dataplane.spi.iam.PublicEndpointGeneratorService;
2427
import org.eclipse.edc.connector.dataplane.spi.pipeline.DataTransferExecutorServiceContainer;
2528
import org.eclipse.edc.connector.dataplane.spi.pipeline.PipelineService;
2629
import org.eclipse.edc.runtime.metamodel.annotation.Extension;
2730
import org.eclipse.edc.runtime.metamodel.annotation.Inject;
31+
import org.eclipse.edc.runtime.metamodel.annotation.Setting;
2832
import org.eclipse.edc.spi.security.Vault;
2933
import org.eclipse.edc.spi.system.ServiceExtension;
3034
import org.eclipse.edc.spi.system.ServiceExtensionContext;
@@ -36,6 +40,9 @@
3640
@Extension(value = DataPlaneAzureStorageExtension.NAME)
3741
public class DataPlaneAzureStorageExtension implements ServiceExtension {
3842

43+
@Setting(value = "Base url of the public API endpoint without the trailing slash.")
44+
private static final String PUBLIC_ENDPOINT = "edc.dataplane.api.public.baseurl";
45+
3946
public static final String NAME = "Data Plane Azure Storage";
4047
@Inject
4148
private RetryPolicy retryPolicy;
@@ -55,6 +62,9 @@ public class DataPlaneAzureStorageExtension implements ServiceExtension {
5562
@Inject
5663
private TypeManager typeManager;
5764

65+
@Inject
66+
private PublicEndpointGeneratorService generatorService;
67+
5868
@Override
5969
public String name() {
6070
return NAME;
@@ -68,6 +78,9 @@ public void initialize(ServiceExtensionContext context) {
6878
context.registerService(BlobMetadataProvider.class, metadataProvider);
6979
metadataProvider.registerDecorator(new CommonBlobMetadataDecorator(typeManager, context));
7080

81+
var endpoint = Endpoint.url(context.getSetting(PUBLIC_ENDPOINT, null));
82+
generatorService.addGeneratorFunction(AzureBlobStoreSchema.TYPE, dataAddress -> endpoint);
83+
7184
var sourceFactory = new AzureStorageDataSourceFactory(blobStoreApi, retryPolicy, monitor, vault);
7285
pipelineService.registerFactory(sourceFactory);
7386
var sinkFactory = new AzureStorageDataSinkFactory(blobStoreApi, executorContainer.getExecutorService(), 5, monitor, vault, typeManager, metadataProvider);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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)
12+
*
13+
*/
14+
15+
package org.eclipse.edc.connector.dataplane.azure.storage;
16+
17+
import org.eclipse.edc.azure.blob.AzureBlobStoreSchema;
18+
import org.eclipse.edc.connector.dataplane.azure.storage.pipeline.AzureStorageDataSinkFactory;
19+
import org.eclipse.edc.connector.dataplane.azure.storage.pipeline.AzureStorageDataSourceFactory;
20+
import org.eclipse.edc.connector.dataplane.spi.iam.PublicEndpointGeneratorService;
21+
import org.eclipse.edc.connector.dataplane.spi.pipeline.PipelineService;
22+
import org.eclipse.edc.junit.extensions.DependencyInjectionExtension;
23+
import org.eclipse.edc.spi.system.ServiceExtensionContext;
24+
import org.junit.jupiter.api.BeforeEach;
25+
import org.junit.jupiter.api.Test;
26+
import org.junit.jupiter.api.extension.ExtendWith;
27+
28+
import java.util.function.Function;
29+
30+
import static org.mockito.ArgumentMatchers.eq;
31+
import static org.mockito.ArgumentMatchers.isA;
32+
import static org.mockito.Mockito.mock;
33+
import static org.mockito.Mockito.verify;
34+
35+
@ExtendWith(DependencyInjectionExtension.class)
36+
class DataPlaneAzureStorageExtensionTest {
37+
38+
private final PipelineService pipelineService = mock();
39+
private final PublicEndpointGeneratorService generatorService = mock();
40+
41+
@BeforeEach
42+
void setup(ServiceExtensionContext context) {
43+
context.registerService(PipelineService.class, pipelineService);
44+
context.registerService(PublicEndpointGeneratorService.class, generatorService);
45+
}
46+
47+
@Test
48+
void shouldProvidePipelineServices(DataPlaneAzureStorageExtension extension, ServiceExtensionContext context) {
49+
extension.initialize(context);
50+
51+
verify(pipelineService).registerFactory(isA(AzureStorageDataSourceFactory.class));
52+
verify(pipelineService).registerFactory(isA(AzureStorageDataSinkFactory.class));
53+
}
54+
55+
@Test
56+
void shouldInvokePublicEndpointGeneratorService(DataPlaneAzureStorageExtension extension, ServiceExtensionContext context) {
57+
extension.initialize(context);
58+
59+
verify(generatorService).addGeneratorFunction(eq(AzureBlobStoreSchema.TYPE), isA(Function.class));
60+
}
61+
62+
}

0 commit comments

Comments
 (0)