From 1b07199934d180870536d80f5308458f7aa13587 Mon Sep 17 00:00:00 2001
From: "Riabokon Stanislav(EPAM)" <stanislav_riabokon@epam.com>
Date: Wed, 2 Sep 2020 19:57:42 -0400
Subject: [PATCH] https://jiraeu.epam.com/browse/GONRG-539 Moved credentials
 classes into core-lib-gcp.

---
 provider/legal-gcp/pom.xml                    |  2 +-
 .../di/DatastoreCredentialsCacheFactory.java  | 23 ++++++
 .../LegalTagRepositoryFactoryGcpImpl.java     | 71 +++++++++--------
 .../tags/LegalTagRepositoryFactoryTest.java   | 78 ++++++++++++-------
 4 files changed, 111 insertions(+), 63 deletions(-)
 create mode 100644 provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/di/DatastoreCredentialsCacheFactory.java

diff --git a/provider/legal-gcp/pom.xml b/provider/legal-gcp/pom.xml
index e69077e0b..05a0b9e36 100644
--- a/provider/legal-gcp/pom.xml
+++ b/provider/legal-gcp/pom.xml
@@ -52,7 +52,7 @@
         <dependency>
             <groupId>org.opengroup.osdu</groupId>
             <artifactId>core-lib-gcp</artifactId>
-            <version>0.1.21</version>
+            <version>0.3.21</version>
         </dependency>
         <dependency>
             <groupId>javax.servlet</groupId>
diff --git a/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/di/DatastoreCredentialsCacheFactory.java b/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/di/DatastoreCredentialsCacheFactory.java
new file mode 100644
index 000000000..ef979fbdb
--- /dev/null
+++ b/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/di/DatastoreCredentialsCacheFactory.java
@@ -0,0 +1,23 @@
+package org.opengroup.osdu.legal.di;
+
+import org.opengroup.osdu.core.common.cache.ICache;
+import org.opengroup.osdu.core.common.cache.VmCache;
+import org.opengroup.osdu.core.gcp.multitenancy.credentials.DatastoreCredential;
+import org.springframework.beans.factory.config.AbstractFactoryBean;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DatastoreCredentialsCacheFactory extends
+    AbstractFactoryBean<ICache<String, DatastoreCredential>> {
+
+  @Override
+  public Class<?> getObjectType() {
+    return ICache.class;
+  }
+
+  @Override
+  protected ICache<String, DatastoreCredential> createInstance() throws Exception {
+    return new VmCache<>(5 * 60, 20);
+  }
+}
+
diff --git a/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryGcpImpl.java b/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryGcpImpl.java
index b13ff2b09..716998773 100644
--- a/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryGcpImpl.java
+++ b/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryGcpImpl.java
@@ -1,16 +1,15 @@
 package org.opengroup.osdu.legal.tags;
 
+import com.google.cloud.datastore.Datastore;
 import java.util.HashMap;
 import java.util.Map;
-
-import com.google.cloud.datastore.Datastore;
-
+import java.util.Objects;
 import org.apache.commons.lang3.StringUtils;
-import org.opengroup.osdu.core.common.model.http.DpsHeaders;
 import org.opengroup.osdu.core.common.model.http.AppException;
-import org.opengroup.osdu.core.gcp.multitenancy.DatastoreFactory;
+import org.opengroup.osdu.core.common.model.http.DpsHeaders;
+import org.opengroup.osdu.core.common.model.tenant.TenantInfo;
+import org.opengroup.osdu.core.common.provider.interfaces.ITenantFactory;
 import org.opengroup.osdu.core.gcp.multitenancy.IDatastoreFactory;
-import org.opengroup.osdu.core.gcp.multitenancy.TenantFactory;
 import org.opengroup.osdu.legal.provider.interfaces.ILegalTagRepository;
 import org.opengroup.osdu.legal.provider.interfaces.ILegalTagRepositoryFactory;
 import org.opengroup.osdu.legal.tags.dataaccess.DatastoreLegalTagRepository;
@@ -22,37 +21,43 @@ import org.springframework.stereotype.Service;
 @Primary
 public class LegalTagRepositoryFactoryGcpImpl implements ILegalTagRepositoryFactory {
 
-    private final IDatastoreFactory factory;
-    private final Map<String, ILegalTagRepository> tenantRepositories = new HashMap<>();
+  private final Map<String, ILegalTagRepository> tenantRepositories = new HashMap<>();
 
-    public LegalTagRepositoryFactoryGcpImpl(){
-        this(new DatastoreFactory(new TenantFactory()));
-    }
+  private TenantInfo tenantInfo;
+  private IDatastoreFactory factory;
+  private ITenantFactory tenantFactory;
 
-    LegalTagRepositoryFactoryGcpImpl(IDatastoreFactory factory){
-        this.factory = factory;
-    }
+  public LegalTagRepositoryFactoryGcpImpl(TenantInfo tenantInfo, IDatastoreFactory factory,
+      ITenantFactory tenantFactory) {
+    this.tenantInfo = tenantInfo;
+    this.factory = factory;
+    this.tenantFactory = tenantFactory;
+  }
 
-    @Override
-    public ILegalTagRepository get(String tenantName){
-        if(StringUtils.isBlank(tenantName))
-            throw invalidTenantGivenException(tenantName);
-        if(!tenantRepositories.containsKey(tenantName)){
-            addRepository(tenantName);
-        }
-        return tenantRepositories.get(tenantName);
+  @Override
+  public ILegalTagRepository get(String tenantName) {
+    if (StringUtils.isBlank(tenantName)) {
+      throw invalidTenantGivenException(tenantName);
     }
-
-    private void addRepository(String tenantName) {
-        Datastore ds = factory.getDatastore(tenantName, tenantName);
-        if(ds == null)
-            throw invalidTenantGivenException(tenantName);
-        ILegalTagRepository repo = new ResilientLegalTagRepository(new DatastoreLegalTagRepository(ds));
-        tenantRepositories.put(tenantName, repo);
+    if (!tenantRepositories.containsKey(tenantName)) {
+      addRepository(tenantName);
     }
-
-    AppException invalidTenantGivenException(String tenantName){
-        return new AppException(403, "Forbidden", String.format("You do not have access to the %s value given %s",
-                DpsHeaders.ACCOUNT_ID, tenantName));
+    return tenantRepositories.get(tenantName);
+  }
+
+  private void addRepository(String tenantName) {
+    TenantInfo tenantInfo = tenantFactory.getTenantInfo(tenantName);
+    Datastore ds = factory.getDatastore(tenantInfo);
+    if (Objects.isNull(ds)) {
+      throw invalidTenantGivenException(tenantName);
     }
+    ILegalTagRepository repo = new ResilientLegalTagRepository(new DatastoreLegalTagRepository(ds));
+    tenantRepositories.put(tenantName, repo);
+  }
+
+  AppException invalidTenantGivenException(String tenantName) {
+    return new AppException(403, "Forbidden",
+        String.format("You do not have access to the %s value given %s",
+            DpsHeaders.ACCOUNT_ID, tenantName));
+  }
 }
diff --git a/provider/legal-gcp/src/test/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryTest.java b/provider/legal-gcp/src/test/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryTest.java
index f944636df..e330b00a5 100644
--- a/provider/legal-gcp/src/test/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryTest.java
+++ b/provider/legal-gcp/src/test/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryTest.java
@@ -7,48 +7,68 @@ import static org.mockito.Mockito.verify;
 import static org.powermock.api.mockito.PowerMockito.when;
 
 import com.google.cloud.datastore.Datastore;
-
+import org.junit.Before;
 import org.junit.Test;
-import org.opengroup.osdu.core.gcp.multitenancy.DatastoreFactory;
 import org.opengroup.osdu.core.common.model.http.AppException;
+import org.opengroup.osdu.core.common.model.tenant.TenantInfo;
+import org.opengroup.osdu.core.common.provider.interfaces.ITenantFactory;
+import org.opengroup.osdu.core.gcp.multitenancy.DatastoreFactory;
 import org.opengroup.osdu.legal.provider.interfaces.ILegalTagRepository;
 import org.opengroup.osdu.legal.provider.interfaces.ILegalTagRepositoryFactory;
 
 public class LegalTagRepositoryFactoryTest {
 
-    private static final String TENANT_1 = "tenant1";
+  private static final String TENANT_1 = "tenant1";
+  private DatastoreFactory factory;
+  private ITenantFactory tenantFactory;
 
-    @Test(expected = AppException.class)
-    public void should_throwAppException_when_givenBlankName(){
-        DatastoreFactory factory = mock(DatastoreFactory.class);
-        ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(factory);
-        sut.get("");
-    }
+  @Before
+  public void init() {
+    factory = mock(DatastoreFactory.class);
+    tenantFactory = mock(ITenantFactory.class);
+  }
 
-    @Test(expected = AppException.class)
-    public void should_throwAppException_when_tenantDoesNotExist(){
-        DatastoreFactory factory = mock(DatastoreFactory.class);
-        when(factory.getDatastore(TENANT_1, TENANT_1)).thenReturn(null);
+  @Test(expected = AppException.class)
+  public void should_throwAppException_when_givenBlankName() {
+    TenantInfo tenantInfo = new TenantInfo();
+    tenantInfo.setName(TENANT_1);
+    when(factory.getDatastore(tenantInfo)).thenReturn(null);
+    when(tenantFactory.getTenantInfo(TENANT_1)).thenReturn(null);
+    ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(tenantInfo, factory,
+        tenantFactory);
+    sut.get("");
+  }
 
-        ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(factory);
-        sut.get(TENANT_1);
-    }
+  @Test(expected = AppException.class)
+  public void should_throwAppException_when_tenantDoesNotExist() {
+    TenantInfo tenantInfo = new TenantInfo();
+    tenantInfo.setName(TENANT_1);
+    when(factory.getDatastore(tenantInfo)).thenReturn(null);
+    when(tenantFactory.getTenantInfo(TENANT_1)).thenReturn(null);
 
-    @Test
-    public void should_returnExistingRepo_when_requestingTenantThatHasPreviouslyBeenRequested(){
-        Datastore ds = mock(Datastore.class);
-        DatastoreFactory factory = mock(DatastoreFactory.class);
-        when(factory.getDatastore(TENANT_1, TENANT_1)).thenReturn(ds);
+    ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(tenantInfo, factory,
+        tenantFactory);
+    sut.get(TENANT_1);
+  }
 
-        ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(factory);
-        ILegalTagRepository result = sut.get(TENANT_1);
-        assertNotNull(result);
-        verify(factory, times(1)).getDatastore(TENANT_1, TENANT_1);
+  @Test
+  public void should_returnExistingRepo_when_requestingTenantThatHasPreviouslyBeenRequested() {
+    Datastore ds = mock(Datastore.class);
+    DatastoreFactory factory = mock(DatastoreFactory.class);
+    TenantInfo tenantInfo = new TenantInfo();
+    tenantInfo.setName(TENANT_1);
+    when(factory.getDatastore(tenantInfo)).thenReturn(ds);
+    when(tenantFactory.getTenantInfo(TENANT_1)).thenReturn(tenantInfo);
+    ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(tenantInfo, factory,
+        tenantFactory);
+    ILegalTagRepository result = sut.get(TENANT_1);
+    assertNotNull(result);
+    verify(factory, times(1)).getDatastore(tenantInfo);
 
-        result = sut.get(TENANT_1);
-        assertNotNull(result);
-        verify(factory, times(1)).getDatastore(TENANT_1, TENANT_1);
+    result = sut.get(TENANT_1);
+    assertNotNull(result);
+    verify(factory, times(1)).getDatastore(tenantInfo);
 
-    }
+  }
 
 }
-- 
GitLab