diff --git a/NOTICE b/NOTICE index de074d6854ae3a372ddc2da36154a71944051cad..64b7c06ce1e6c76eab12ad977dc08567f570e5c4 100644 --- a/NOTICE +++ b/NOTICE @@ -31,6 +31,7 @@ Apache-2.0 ======================================================================== The following software have components provided under the terms of this license: +- AHC/Client (from https://repo1.maven.org/maven2/org/asynchttpclient/async-http-client) - AMQP 1.0 JMS Spring Boot AutoConfiguration (from https://repo1.maven.org/maven2/org/amqphub/spring/amqp-10-jms-spring-boot-autoconfigure) - AMQP 1.0 JMS Spring Boot Starter (from https://repo1.maven.org/maven2/org/amqphub/spring/amqp-10-jms-spring-boot-starter) - ASM Analysis (from http://asm.ow2.io/) @@ -75,7 +76,6 @@ The following software have components provided under the terms of this license: - Apache Log4j SLF4J Binding (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-slf4j-impl) - Apache Log4j to SLF4J Adapter (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-to-slf4j) - AssertJ Core (from ${project.organization.url}#${project.artifactId}) -- Asynchronous Http Client (from https://repo1.maven.org/maven2/org/asynchttpclient/async-http-client) - Asynchronous Http Client Netty Utils (from https://repo1.maven.org/maven2/org/asynchttpclient/async-http-client-netty-utils) - AutoValue Annotations (from https://github.com/google/auto/tree/master/value, https://repo1.maven.org/maven2/com/google/auto/value/auto-value-annotations) - BSON (from http://bsonspec.org, https://bsonspec.org) @@ -383,7 +383,7 @@ The following software have components provided under the terms of this license: - Hamcrest (from http://hamcrest.org/JavaHamcrest/) - Hamcrest Core (from http://hamcrest.org/, http://hamcrest.org/JavaHamcrest/, https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core) - Jackson module: Afterburner (from http://wiki.fasterxml.com/JacksonHome, https://github.com/FasterXML/jackson-modules-base) -- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://github.com/jakartaee/jaf-api, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) - Jakarta Annotations API (from https://projects.eclipse.org/projects/ee4j.ca) - Jakarta RESTful WS API (from https://github.com/eclipse-ee4j/jaxrs-api) - Jakarta XML Binding API (from https://repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api, https://repo1.maven.org/maven2/org/jboss/spec/javax/xml/bind/jboss-jaxb-api_2.3_spec) @@ -477,7 +477,7 @@ CDDL-1.0 The following software have components provided under the terms of this license: - Apache Log4j Core (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core) -- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://github.com/jakartaee/jaf-api, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) - Java Architecture for XML Binding (from http://jaxb.java.net/, https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api) - JavaBeans Activation Framework (from https://repo1.maven.org/maven2/com/sun/activation/javax.activation) - JavaBeans(TM) Activation Framework (from http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp) @@ -524,7 +524,7 @@ The following software have components provided under the terms of this license: - JUnit Jupiter Params (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Platform Commons (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Platform Engine API (from http://junit.org/junit5/, https://junit.org/junit5/) -- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://github.com/jakartaee/jaf-api, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) - Jakarta Annotations API (from https://projects.eclipse.org/projects/ee4j.ca) - Jakarta Bean Validation API (from https://beanvalidation.org) - Jakarta XML Binding API (from https://repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api, https://repo1.maven.org/maven2/org/jboss/spec/javax/xml/bind/jboss-jaxb-api_2.3_spec) @@ -560,7 +560,7 @@ The following software have components provided under the terms of this license: - JUnit Jupiter Params (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Platform Commons (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Platform Engine API (from http://junit.org/junit5/, https://junit.org/junit5/) -- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://github.com/jakartaee/jaf-api, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) - Jakarta Annotations API (from https://projects.eclipse.org/projects/ee4j.ca) - Jakarta Bean Validation API (from https://beanvalidation.org) - Jakarta RESTful WS API (from https://github.com/eclipse-ee4j/jaxrs-api) @@ -628,7 +628,7 @@ The following software have components provided under the terms of this license: - Expression Language 3.0 API (from http://uel-spec.java.net, http://uel.java.net) - HK2 Implementation Utilities (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-utils) - HK2 core module (from https://repo1.maven.org/maven2/org/glassfish/hk2/hk2-core) -- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://github.com/jakartaee/jaf-api, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) - Jakarta Annotations API (from https://projects.eclipse.org/projects/ee4j.ca) - Jakarta Bean Validation API (from https://beanvalidation.org) - Jakarta RESTful WS API (from https://github.com/eclipse-ee4j/jaxrs-api) @@ -871,4 +871,4 @@ unknown The following software have components provided under the terms of this license: - JUnit Jupiter (Aggregator) (from https://junit.org/junit5/) -- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://github.com/jakartaee/jaf-api, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) diff --git a/pom.xml b/pom.xml index d139a0933113dabc241f203060ef68ace67218c9..1c7fd25d74808be176b81cc65f861ba2c1bfa1e1 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- <springfox.version>3.0.0</springfox.version> --> <openapi.version>1.6.9</openapi.version> - <osdu.oscorecommon.version>0.18.0</osdu.oscorecommon.version> + <osdu.oscorecommon.version>0.19.0-rc3</osdu.oscorecommon.version> <log4j2.version>2.17.1</log4j2.version> <gson.version>2.8.9</gson.version> <json-smart.version>2.4.7</json-smart.version> diff --git a/provider/register-azure/pom.xml b/provider/register-azure/pom.xml index 33e9db8910cf8fb93a79ccc89d090b22af3f02c4..09d6d49b180044caf0e999d378234bc2602f8b69 100644 --- a/provider/register-azure/pom.xml +++ b/provider/register-azure/pom.xml @@ -30,7 +30,7 @@ <version>0.19.0-SNAPSHOT</version> <properties> <osdu.corelibazure.version>0.18.0</osdu.corelibazure.version> - <osdu.oscorecommon.version>0.15.0</osdu.oscorecommon.version> + <osdu.oscorecommon.version>0.19.0-rc3</osdu.oscorecommon.version> <junit-jupiter.version>5.6.0</junit-jupiter.version> <mockito-junit-jupiter.version>2.23.0</mockito-junit-jupiter.version> <oauth2-oidc-sdk.version>6.5</oauth2-oidc-sdk.version> diff --git a/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/subscriber/TopicsRepositoryImpl.java b/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/subscriber/TopicsRepositoryImpl.java index 400e4bb336d5af4a40d213e9ceeff2c414d2cd72..4ca782f98271343b318893ba20cfbb011ab2b861 100644 --- a/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/subscriber/TopicsRepositoryImpl.java +++ b/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/subscriber/TopicsRepositoryImpl.java @@ -15,12 +15,10 @@ package org.opengroup.osdu.register.provider.azure.subscriber; import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import lombok.RequiredArgsConstructor; +import org.opengroup.osdu.core.common.feature.IFeatureFlag; import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; import org.opengroup.osdu.core.common.model.http.DpsHeaders; import org.opengroup.osdu.core.common.model.notification.Topic; @@ -39,18 +37,30 @@ public class TopicsRepositoryImpl implements ITopicsRepository { private final JaxRsDpsLog log; private final DpsHeaders headers; + private final IFeatureFlag featureFlag; + private final String FEATURE_FLAG_NAME = "collaborations-enabled"; + private final String TOPIC_NAME = "recordstopic-v2"; private Map<String, List<Topic>> topicsMap = new HashMap<>(); public List<Topic> listMessages() { final String partitionId = headers.getPartitionId(); - if (topicsMap.containsKey(partitionId)) { - return topicsMap.get(partitionId); + List<Topic> template = new ArrayList<>(); + List<Topic> output = new ArrayList<>(); + + if (!topicsMap.containsKey(partitionId)) { + template = getTopicTemplate(); + topicsMap.put(partitionId, template); } - final List<Topic> template = getTopicTemplate(); + for (Topic topic: topicsMap.get(partitionId)) { + output.add(topic); + } - topicsMap.put(partitionId, template); - return template; + if (!featureFlag.isFeatureEnabled(FEATURE_FLAG_NAME)){ + output.removeIf(topic -> topic.getName().equals(TOPIC_NAME)); + } + + return output; } List<Topic> getTopicTemplate() { @@ -58,4 +68,5 @@ public class TopicsRepositoryImpl implements ITopicsRepository { }.getType(); return new Gson().fromJson(FileUtil.readFile("topics.json", log), type); } + } diff --git a/provider/register-azure/src/main/resources/application.properties b/provider/register-azure/src/main/resources/application.properties index 597266b2db889629d7536adc5bf49aae2022cebc..9235215539001222492195a184d34a6bb0e1b078 100644 --- a/provider/register-azure/src/main/resources/application.properties +++ b/provider/register-azure/src/main/resources/application.properties @@ -80,4 +80,7 @@ management.metrics.enable.all=${enable_metrics:false} # Entitlements cache settings app.maxExpireTime=60 -app.maxCacheSize=1000 \ No newline at end of file +app.maxCacheSize=1000 + +#Partition Feature Flag +featureFlag.strategy=dataPartition diff --git a/provider/register-azure/src/main/resources/topics.json b/provider/register-azure/src/main/resources/topics.json index 9fd676b0a174f71d0df4dbd14c09249625377d5e..d8244a9fe0622b654d546ddcd8c1bee6ec2b9796 100644 --- a/provider/register-azure/src/main/resources/topics.json +++ b/provider/register-azure/src/main/resources/topics.json @@ -10,22 +10,22 @@ "op": "create" }, { - "id": "osdu:abc:345", - "kind": "osdu:petrel:regularheightfieldsurface:1.0.1", - "op": "update", - "previousVersionKind": "osdu:petrel:regularheightfieldsurface:1.0.0" + "id": "osdu:abc:345", + "kind": "osdu:petrel:regularheightfieldsurface:1.0.1", + "op": "update", + "previousVersionKind": "osdu:petrel:regularheightfieldsurface:1.0.0" }, { - "id": "osdu:abc:567", - "kind": "osdu:petrel:regularheightfieldsurface:1.0.0", - "op": "delete", - "deletionType": "soft" + "id": "osdu:abc:567", + "kind": "osdu:petrel:regularheightfieldsurface:1.0.0", + "op": "delete", + "deletionType": "soft" }, { - "id": "osdu:abc:789", - "kind": "osdu:petrel:regularheightfieldsurface:1.0.0", - "op": "delete", - "deletionType": "hard" + "id": "osdu:abc:789", + "kind": "osdu:petrel:regularheightfieldsurface:1.0.0", + "op": "delete", + "deletionType": "hard" } ] }, @@ -57,7 +57,7 @@ "recordIdVersion": "1610537924768407", "stage": "STORAGE_SYNC", "status": "FAILED", - "message": "acl is not valid", + "message": "acl is not valid", "errorCode ": 400, "timestamp ": 1622118996000 } @@ -70,9 +70,30 @@ "dataSetIdVersion": "1", "dataSetType": "FILE", "recordCount": 10, - "timestamp ": 1622118996000 + "timestamp ": 1622118996000 } } ] + }, + { + "name": "recordstopic-v2", + "description": "This notification is sent whenever a new record or record version is created, updated or deleted in storage for all collaboration and non-collaboration context changes. The collaboration context will be provided as part of the message properties if exist. 'previousVersionKind' is noted upon 'kind' update. Record deletion is noted as a soft 'deletionType'. Record purge is noted as a hard 'deletionType'.", + "state": "ACTIVE", + "example": + { + "message": { + "data": [ + { + "id": "osdu:abc:123", + "kind": "osdu:petrel:regularheightfieldsurface:1.0.0", + "op": "create" + } + ], + "account-id": "opendes", + "data-partition-id": "opendes", + "correlation-id": "4f1982a2-cbdf-438a-b5a1-e0c6239d46fc", + "x-collaboration": "id=1e1c4e74-3b9b-4b17-a0d5-67766558ec65,application=Test App" + } + } } ] diff --git a/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/subscriber/TopicsRepositoryImplTest.java b/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/subscriber/TopicsRepositoryImplTest.java index ede5dded5a966c4139c7dd64ce20ff30bb03bd44..c81908b9171a42d4e3e6e3626b06e2bf882ef71f 100644 --- a/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/subscriber/TopicsRepositoryImplTest.java +++ b/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/subscriber/TopicsRepositoryImplTest.java @@ -1,12 +1,12 @@ package org.opengroup.osdu.register.provider.azure.subscriber; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; + +import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; - -import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; +import org.opengroup.osdu.core.common.feature.IFeatureFlag; import org.opengroup.osdu.core.common.model.http.DpsHeaders; import org.opengroup.osdu.core.common.model.notification.Topic; @@ -20,27 +20,36 @@ import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) public class TopicsRepositoryImplTest { - @Mock - private JaxRsDpsLog log; - + private static final String FEATURE_FLAG_NAME = "collaborations-enabled"; + private static final String TOPIC1 = "recordstopic" ; + private static final String TOPIC2 = "testtopic"; + private static final String TOPIC3 = "recordstopic-v2"; + private static final String PARTITIONID ="partitionId" ; @Mock private DpsHeaders headers; - + @Mock + private IFeatureFlag featureFlag; + @InjectMocks private TopicsRepositoryImpl topicsRepository; - @BeforeEach - void init() { - topicsRepository = new TopicsRepositoryImpl(log, headers); - } @Test public void shouldReturnUserFriendlyTopicName() { - when(headers.getPartitionId()).thenReturn("partitionId"); - + when(headers.getPartitionId()).thenReturn(PARTITIONID); + when(featureFlag.isFeatureEnabled(FEATURE_FLAG_NAME)).thenReturn(false); List<Topic> topics = topicsRepository.listMessages(); - assertEquals(2, topics.size()); - List<String> expected = Arrays.asList("recordstopic", "testtopic"); + List<String> expected = Arrays.asList(TOPIC1, TOPIC2); + assertArrayEquals(expected.toArray(), topics.stream().map(Topic::getName).toArray()); + } + + @Test + public void shouldReturnNewTopics_when_FeatureFlagEnabled() { + when(headers.getPartitionId()).thenReturn(PARTITIONID); + when(featureFlag.isFeatureEnabled(FEATURE_FLAG_NAME)).thenReturn(true); + List<Topic> topics = topicsRepository.listMessages(); + assertEquals(3, topics.size()); + List<String> expected = Arrays.asList(TOPIC1, TOPIC2,TOPIC3); assertArrayEquals(expected.toArray(), topics.stream().map(Topic::getName).toArray()); } } diff --git a/provider/register-azure/src/test/resources/topics.json b/provider/register-azure/src/test/resources/topics.json index 98e3ea599d128a988288a781e73b0dee37fc96d4..7aeac012230ab8af5460c01956b180d5a34ecee9 100644 --- a/provider/register-azure/src/test/resources/topics.json +++ b/provider/register-azure/src/test/resources/topics.json @@ -54,5 +54,26 @@ "op" : "delete" } ] + }, + { + "name": "recordstopic-v2", + "description": "This notification is sent whenever a new record or record version is created, updated or deleted in storage for all collaboration and non-collaboration context changes. The collaboration context will be provided as part of the message properties if exist. 'previousVersionKind' is noted upon 'kind' update. Record deletion is noted as a soft 'deletionType'. Record purge is noted as a hard 'deletionType'.", + "state": "ACTIVE", + "example": + { + "message": { + "data": [ + { + "id": "osdu:abc:123", + "kind": "osdu:petrel:regularheightfieldsurface:1.0.0", + "op": "create" + } + ], + "account-id": "opendes", + "data-partition-id": "opendes", + "correlation-id": "4f1982a2-cbdf-438a-b5a1-e0c6239d46fc", + "x-collaboration": "id=1e1c4e74-3b9b-4b17-a0d5-67766558ec65,application=Test App" + } + } } ] diff --git a/register-core/pom.xml b/register-core/pom.xml index 7bdd24c1c7f4258f33d3d3d5545ff933f52369c0..5dd9fec7fc6d19371347783094c4eec620192669 100644 --- a/register-core/pom.xml +++ b/register-core/pom.xml @@ -106,7 +106,7 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>os-core-common</artifactId> - <version>${osdu.oscorecommon.version}</version> + <version>0.19.0-rc3</version> </dependency> <dependency> <groupId>com.nimbusds</groupId>