diff --git a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/di/SubscriptionAPIConfigBean.java b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/di/SubscriptionAPIConfigBean.java new file mode 100644 index 0000000000000000000000000000000000000000..defba2e99c441ea726bade6f38f4bdcb7df23a01 --- /dev/null +++ b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/di/SubscriptionAPIConfigBean.java @@ -0,0 +1,34 @@ +package org.opengroup.osdu.notification.provider.azure.di; + +import lombok.Data; +import org.opengroup.osdu.core.common.notification.SubscriptionAPIConfig; +import org.opengroup.osdu.notification.provider.interfaces.IAppProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.AbstractFactoryBean; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties +public class SubscriptionAPIConfigBean extends AbstractFactoryBean<SubscriptionAPIConfig> { + + @Autowired + private IAppProperties config; + + private String apiKey; + + @Override + public Class<?> getObjectType() { + return SubscriptionAPIConfig.class; + } + + @Override + protected SubscriptionAPIConfig createInstance() throws Exception { + return SubscriptionAPIConfig + .builder() + .rootUrl(config.getRegisterAPI()) + .apiKey(apiKey) + .build(); + } +} diff --git a/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/di/SubscriptionFactoryAzure.java b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/di/SubscriptionFactoryAzure.java new file mode 100644 index 0000000000000000000000000000000000000000..d85c345f177951979583ad9b24b269d3376c98dd --- /dev/null +++ b/provider/notification-azure/src/main/java/org/opengroup/osdu/notification/provider/azure/di/SubscriptionFactoryAzure.java @@ -0,0 +1,48 @@ +// Copyright © Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package org.opengroup.osdu.notification.provider.azure.di; + +import org.opengroup.osdu.core.common.http.IHttpClient; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.notification.ISubscriptionFactory; +import org.opengroup.osdu.core.common.notification.ISubscriptionService; +import org.opengroup.osdu.core.common.notification.SubscriptionAPIConfig; +import org.opengroup.osdu.core.common.notification.SubscriptionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +import java.util.Objects; + +@Component +@Primary +public class SubscriptionFactoryAzure implements ISubscriptionFactory { + + private final SubscriptionAPIConfig config; + private final IHttpClient client; + + @Autowired + public SubscriptionFactoryAzure(final SubscriptionAPIConfig subscriptionConfig, final IHttpClient httpClient) { + Objects.requireNonNull(subscriptionConfig, "SubscriptionAPIConfig cannot be null"); + this.config = subscriptionConfig; + this.client = httpClient; + } + + @Override + public ISubscriptionService create(final DpsHeaders dpsHeaders) { + Objects.requireNonNull(dpsHeaders, "headers cannot be null"); + return new SubscriptionService(this.config, this.client, dpsHeaders); + } +} diff --git a/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/di/SubscriptionFactoryAzureTest.java b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/di/SubscriptionFactoryAzureTest.java new file mode 100644 index 0000000000000000000000000000000000000000..7b81af533f8c16680da3ec1311111325e6e489ad --- /dev/null +++ b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/di/SubscriptionFactoryAzureTest.java @@ -0,0 +1,45 @@ +package org.opengroup.osdu.notification.di; + +import org.junit.Assert; +import org.junit.Test; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.notification.ISubscriptionService; +import org.opengroup.osdu.core.common.notification.SubscriptionAPIConfig; +import org.opengroup.osdu.notification.provider.azure.di.SubscriptionFactoryAzure; + +public class SubscriptionFactoryAzureTest { + + @Test + public void constructor_should_work_when_config_is_not_null() { + SubscriptionAPIConfig subscriptionAPIConfig = SubscriptionAPIConfig.builder().build(); + subscriptionAPIConfig.setApiKey("apiKey"); + subscriptionAPIConfig.setRootUrl("rootUrl"); + SubscriptionFactoryAzure subscriptionFactoryAzure = new SubscriptionFactoryAzure(subscriptionAPIConfig, null); + Assert.assertNotNull(subscriptionFactoryAzure); + } + + @Test(expected = NullPointerException.class) + public void constructor_should_throw_npe_if_config_is_null() { + SubscriptionFactoryAzure subscriptionFactoryAzure = new SubscriptionFactoryAzure(null, null); + } + + @Test + public void create_subscriptionService_instance_dpsHeaders_is_not_null() { + DpsHeaders dpsHeaders = new DpsHeaders(); + SubscriptionAPIConfig subscriptionAPIConfig = SubscriptionAPIConfig.builder().build(); + subscriptionAPIConfig.setApiKey("apiKey"); + subscriptionAPIConfig.setRootUrl("rootUrl"); + SubscriptionFactoryAzure subscriptionFactoryAzure = new SubscriptionFactoryAzure(subscriptionAPIConfig, null); + ISubscriptionService subscriptionService = subscriptionFactoryAzure.create(dpsHeaders); + Assert.assertNotNull(subscriptionService); + } + + @Test(expected = NullPointerException.class) + public void create_subscriptionService_should_throw_npe_if_headers_is_null() { + SubscriptionAPIConfig subscriptionAPIConfig = SubscriptionAPIConfig.builder().build(); + subscriptionAPIConfig.setApiKey("apiKey"); + subscriptionAPIConfig.setRootUrl("rootUrl"); + SubscriptionFactoryAzure subscriptionFactoryAzure = new SubscriptionFactoryAzure(subscriptionAPIConfig, null); + ISubscriptionService subscriptionService = subscriptionFactoryAzure.create(null); + } +} \ No newline at end of file