Onboarding foundation changes 91/30791/2
authorsheetalm <sheetal.mudholkar@amdocs.com>
Thu, 8 Feb 2018 04:00:02 +0000 (09:30 +0530)
committerAvi Gaffa <avi.gaffa@amdocs.com>
Thu, 8 Feb 2018 12:38:37 +0000 (12:38 +0000)
1. Adding OnboardingSessionContextFilter which sets tenant(kespace) for
   onboarding application
2. Different services can extend SessionContextFilter to set their own
   keyspace
3. These changes in onboarding are done to support services like
   ActivitySpec

Change-Id: Ia62557354ab05235d027250af94a2835d741b7fa
Issue-ID: SDC-1005
Signed-off-by: sheetalm <sheetal.mudholkar@amdocs.com>
19 files changed:
openecomp-be/api/openecomp-sdc-rest-webapp/healthcheck-rest/healthcheck-rest-services/src/main/java/org/openecomp/sdcrests/health/rest/services/HealthCheckImpl.java
openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/java/org/openecomp/server/filters/OnboardingSessionContextFilter.java [new file with mode: 0644]
openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/java/org/openecomp/server/listeners/OnboardingAppStartupListener.java
openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/webapp/WEB-INF/web.xml
openecomp-be/api/openecomp-sdc-rest-webapp/openecomp-sdc-common-rest/pom.xml
openecomp-be/api/openecomp-sdc-rest-webapp/openecomp-sdc-common-rest/src/main/java/org/openecomp/sdcrests/filters/SessionContextFilter.java [moved from openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/java/org/openecomp/server/filters/SessionContextFilter.java with 76% similarity]
openecomp-be/backend/openecomp-sdc-item-permissions-manager/src/test/java/org/openecomp/sdc/itempermissions/dao/impl/ItemPermissionsManagerImplTest.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/impl/NetworkManagerImplTest.java
openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-api/src/main/java/org/openecomp/core/dao/types/UniqueValueEntity.java
openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/pom.xml
openecomp-be/lib/openecomp-core-lib/openecomp-nosqldb-lib/openecomp-nosqldb-core/src/main/java/org/openecomp/core/nosqldb/impl/cassandra/CassandraSessionFactory.java
openecomp-be/lib/openecomp-core-lib/openecomp-session-lib/src/main/java/org/openecomp/sdc/common/session/SessionContextProvider.java
openecomp-be/lib/openecomp-core-lib/openecomp-session-lib/src/main/java/org/openecomp/sdc/common/session/impl/AsdcSessionContextProvider.java
openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-api/src/main/java/org/openecomp/core/zusammen/api/ZusammenUtil.java
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-core/src/main/java/org/openecomp/sdc/healing/impl/HealingManagerImpl.java
openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/dao/ServiceModelDaoFactoryTest.java
openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImplTest.java
openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/dao/impl/zusammen/VersionZusammenDaoImplTest.java
openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/impl/ItemManagerImplTest.java

index b50913a..bb2d9ea 100644 (file)
@@ -21,6 +21,7 @@
 package org.openecomp.sdcrests.health.rest.services;
 
 import org.apache.cxf.jaxrs.impl.ResponseBuilderImpl;
+import org.openecomp.sdc.common.session.SessionContext;
 import org.openecomp.sdc.common.session.SessionContextProviderFactory;
 import org.openecomp.sdc.health.HealthCheckManager;
 import org.openecomp.sdc.health.HealthCheckManagerFactory;
@@ -32,10 +33,10 @@ import org.openecomp.sdc.logging.api.LoggerFactory;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Service;
 
-import javax.inject.Named;
-import javax.ws.rs.core.Response;
 import java.util.Arrays;
 import java.util.Collection;
+import javax.inject.Named;
+import javax.ws.rs.core.Response;
 
 @Named
 @Service("healthCheck")
@@ -56,7 +57,12 @@ public class HealthCheckImpl implements org.openecomp.sdcrests.health.rest.Healt
   @Override
   public Response checkHealth() {
     HealthCheckResult healthCheckResult = new HealthCheckResult();
-    SessionContextProviderFactory.getInstance().createInterface().create("public");
+
+    SessionContext context =
+        SessionContextProviderFactory.getInstance().createInterface().get();
+
+    SessionContextProviderFactory.getInstance().createInterface().create("public",
+        context.getTenant());
 
     try {
       Collection<HealthInfo> healthInfos = healthCheckManager.checkHealth();
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/java/org/openecomp/server/filters/OnboardingSessionContextFilter.java b/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/java/org/openecomp/server/filters/OnboardingSessionContextFilter.java
new file mode 100644 (file)
index 0000000..7166f62
--- /dev/null
@@ -0,0 +1,21 @@
+package org.openecomp.server.filters;
+
+import static org.openecomp.sdcrests.common.RestConstants.USER_ID_HEADER_PARAM;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.sdcrests.filters.SessionContextFilter;
+
+public class OnboardingSessionContextFilter extends SessionContextFilter {
+
+  @Override
+  public String getUser(ServletRequest servletRequest) {
+    return ((HttpServletRequest) servletRequest).getHeader(USER_ID_HEADER_PARAM);
+  }
+
+  @Override
+  public String getTenant(ServletRequest servletRequest) {
+    return "dox";
+  }
+}
index 2ea0ee2..b1c818c 100644 (file)
@@ -21,6 +21,7 @@
 package org.openecomp.server.listeners;
 
 
+import org.openecomp.sdc.common.session.SessionContextProviderFactory;
 import org.springframework.web.context.ContextLoaderListener;
 
 import javax.servlet.ServletContextEvent;
@@ -32,6 +33,8 @@ public class OnboardingAppStartupListener implements ServletContextListener {
 
   @Override
   public void contextInitialized(ServletContextEvent servletContextEvent) {
+    SessionContextProviderFactory.getInstance().createInterface().create("onboarding",
+        "dox");
     springListener = new ContextLoaderListener();
     springListener.initWebApplicationContext(servletContextEvent.getServletContext());
   }
index de88197..64be5ab 100644 (file)
@@ -83,7 +83,7 @@
     </filter-mapping>
     <filter>
         <filter-name>SessionContextFilter</filter-name>
-        <filter-class>org.openecomp.server.filters.SessionContextFilter</filter-class>
+        <filter-class>org.openecomp.server.filters.OnboardingSessionContextFilter</filter-class>
     </filter>
     <filter-mapping>
         <filter-name>SessionContextFilter</filter-name>
index da8147f..a82298b 100644 (file)
             <version>${swagger.version}</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc.core</groupId>
+            <artifactId>openecomp-session-lib</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <version>${javax.servlet.version}</version>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
@@ -1,8 +1,9 @@
-package org.openecomp.server.filters;
+package org.openecomp.sdcrests.filters;
 
 import org.openecomp.sdc.common.session.SessionContextProvider;
 import org.openecomp.sdc.common.session.SessionContextProviderFactory;
 
+import java.io.IOException;
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -10,11 +11,8 @@ import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-
-import static org.openecomp.sdcrests.common.RestConstants.USER_ID_HEADER_PARAM;
 
-public class SessionContextFilter implements Filter {
+public abstract class SessionContextFilter implements Filter {
   @Override
   public void init(FilterConfig filterConfig) throws ServletException {
 
@@ -28,8 +26,8 @@ public class SessionContextFilter implements Filter {
 
     try {
       if (servletRequest instanceof HttpServletRequest) {
-        String userName = ((HttpServletRequest) servletRequest).getHeader(USER_ID_HEADER_PARAM);
-        contextProvider.create(userName);
+
+        contextProvider.create(getUser(servletRequest),getTenant(servletRequest));
       }
 
       filterChain.doFilter(servletRequest, servletResponse);
@@ -42,4 +40,8 @@ public class SessionContextFilter implements Filter {
   public void destroy() {
 
   }
+
+  public abstract String getUser(ServletRequest servletRequest);
+
+  public abstract String getTenant(ServletRequest servletRequest);
 }
index 98154b3..439b8b6 100644 (file)
@@ -35,6 +35,7 @@ public class ItemPermissionsManagerImplTest {
   private static final String AFFECTED_USER1 = "affected_user1";
   private static final String AFFECTED_USER2 = "affected_user2";
   private static final String AFFECTED_USER3 = "affected_user3";
+  private static final String tenant = "dox";
 
   @Mock
   private PermissionsServices permissionsServicesMock;
@@ -53,7 +54,7 @@ public class ItemPermissionsManagerImplTest {
 
   @BeforeMethod
   public void setUp() throws Exception {
-    SessionContextProviderFactory.getInstance().createInterface().create(USER);
+    SessionContextProviderFactory.getInstance().createInterface().create(USER, tenant);
     MockitoAnnotations.initMocks(this);
   }
 
index 9e2cee6..b0d0b64 100644 (file)
@@ -62,6 +62,7 @@ public class NetworkManagerImplTest {
   private static final Version VERSION = new Version("version_id");
   private static final String NETWORK1_ID = "network1";
   private static final String NETWORK2_ID = "network2";
+  private static final String tenant = "dox";
 
   @Mock
   private NetworkDao networkDaoMock;
@@ -86,7 +87,7 @@ public class NetworkManagerImplTest {
   @BeforeMethod
   public void setUp() throws Exception {
     MockitoAnnotations.initMocks(this);
-    SessionContextProviderFactory.getInstance().createInterface().create(USER_ID);
+    SessionContextProviderFactory.getInstance().createInterface().create(USER_ID, tenant);
   }
 
   @AfterMethod
index 8ec9837..9969639 100644 (file)
             <scope>test</scope>
             <version>${junit.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.openecomp.sdc.core</groupId>
+            <artifactId>openecomp-session-lib</artifactId>
+            <version>1.2.0-SNAPSHOT</version>
+        </dependency>
     </dependencies>
 </project>
index 8d7b5c9..f068179 100644 (file)
@@ -26,6 +26,7 @@ import com.datastax.driver.core.policies.LoadBalancingPolicy;
 import com.datastax.driver.core.policies.TokenAwarePolicy;
 import org.openecomp.core.nosqldb.util.CassandraUtils;
 import org.openecomp.sdc.common.errors.SdcConfigurationException;
+import org.openecomp.sdc.common.session.SessionContextProviderFactory;
 import org.openecomp.sdc.logging.api.Logger;
 import org.openecomp.sdc.logging.api.LoggerFactory;
 
@@ -82,7 +83,8 @@ public class CassandraSessionFactory {
 
 
         Cluster cluster = builder.build();
-        String keyStore = CassandraUtils.getKeySpace();
+        String keyStore = SessionContextProviderFactory.getInstance().createInterface().get()
+            .getTenant();
         return cluster.connect(keyStore);
     }
 
index 53a40a1..7c4b0ec 100644 (file)
@@ -1,5 +1,7 @@
 package org.openecomp.sdc.common.session.impl;
 
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCode;
 import org.openecomp.sdc.common.session.SessionContext;
 import org.openecomp.sdc.common.session.SessionContextProvider;
 import org.openecomp.sdc.common.session.User;
@@ -7,24 +9,33 @@ import org.openecomp.sdc.common.session.User;
 public class AsdcSessionContextProvider implements SessionContextProvider {
 
   private static final ThreadLocal<String> threadUserId = new ThreadLocal<>();
+  private static final ThreadLocal<String> threadTenant = new ThreadLocal<>();
 
   @Override
-  public void create(String userId) {
+  public void create(String userId, String tenant) {
     threadUserId.set(userId);
+    threadTenant.set(tenant);
   }
 
   @Override
   public SessionContext get() {
     if (threadUserId.get() == null) {
-      throw new RuntimeException("UserId was not set for this thread");
+      throw new CoreException(new ErrorCode.ErrorCodeBuilder().withMessage("UserId was not set "
+          + "for this thread").build());
     }
 
-    return new AsdcSessionContext(new User(threadUserId.get()), "dox");
+    if (threadTenant.get() == null) {
+      throw new CoreException(new ErrorCode.ErrorCodeBuilder().withMessage("Tenant was not set "
+          + "for this thread").build());
+    }
+
+    return new AsdcSessionContext(new User(threadUserId.get()), threadTenant.get());
   }
 
   @Override
   public void close() {
     threadUserId.remove();
+    threadTenant.remove();
   }
 
   private static class AsdcSessionContext implements SessionContext {
index 623f958..494428f 100644 (file)
@@ -12,21 +12,35 @@ import org.openecomp.types.ElementPropertyName;
 
 public class ZusammenUtil {
 
+  private ZusammenUtil() {
+    throw new IllegalStateException("Utility class");
+  }
+
   public static SessionContext createSessionContext() {
     org.openecomp.sdc.common.session.SessionContext asdcSessionContext =
         SessionContextProviderFactory.getInstance().createInterface().get();
 
+    return createSessionContext(asdcSessionContext.getUser().getUserId(), asdcSessionContext
+        .getTenant());
+  }
+
+  private static SessionContext createSessionContext(String user, String tenant) {
     SessionContext sessionContext = new SessionContext();
-    sessionContext.setUser(new UserInfo(asdcSessionContext.getUser().getUserId()));
-    sessionContext.setTenant(asdcSessionContext.getTenant());
+    sessionContext.setUser(new UserInfo(user));
+    sessionContext.setTenant(tenant);
     return sessionContext;
   }
 
   public static ZusammenElement buildStructuralElement(ElementType elementType, Action action) {
+    return buildStructuralElement(elementType.name(), action);
+  }
+
+
+  public static ZusammenElement buildStructuralElement(String elementType, Action action) {
     ZusammenElement element = buildElement(null, action);
     Info info = new Info();
-    info.setName(elementType.name());
-    info.addProperty(ElementPropertyName.elementType.name(), elementType.name());
+    info.setName(elementType);
+    info.addProperty(ElementPropertyName.elementType.name(), elementType);
     element.setInfo(info);
     return element;
   }
index 9db9ea4..07122f0 100644 (file)
@@ -23,7 +23,10 @@ package org.openecomp.sdc.healing.impl;
 import org.openecomp.core.utilities.CommonMethods;
 import org.openecomp.core.utilities.file.FileUtils;
 import org.openecomp.core.utilities.json.JsonUtil;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.ErrorCode;
 import org.openecomp.sdc.common.errors.Messages;
+import org.openecomp.sdc.common.session.SessionContext;
 import org.openecomp.sdc.common.session.SessionContextProviderFactory;
 import org.openecomp.sdc.datatypes.model.ItemType;
 import org.openecomp.sdc.healing.api.HealingManager;
@@ -98,8 +101,9 @@ public class HealingManagerImpl implements HealingManager {
             : Optional.empty();
 
     if (privateFailureMessages.isPresent() || publicFailureMessages.isPresent()) {
-      throw new RuntimeException(
-          publicFailureMessages.orElse("") + " " + privateFailureMessages.orElse(""));
+      throw new CoreException(new ErrorCode.ErrorCodeBuilder().withMessage(
+          publicFailureMessages.orElse("") + " " + privateFailureMessages.orElse(""))
+          .build());
     }
   }
 
@@ -126,8 +130,10 @@ public class HealingManagerImpl implements HealingManager {
 
   private Optional<String> healPublic(String itemId, Version version,
                                       Map<String, Map<String, String>> itemHealers, String user) {
-    SessionContextProviderFactory.getInstance().createInterface()
-        .create(user + HEALING_USER_SUFFIX);
+    SessionContext context =
+        SessionContextProviderFactory.getInstance().createInterface().get();
+    SessionContextProviderFactory.getInstance().createInterface().create(user
+        + HEALING_USER_SUFFIX,context.getTenant());
 
     versioningManager.sync(itemId, version);
 
@@ -138,7 +144,7 @@ public class HealingManagerImpl implements HealingManager {
       versioningManager.publish(itemId, version, "Healing vsp");
     }
 
-    SessionContextProviderFactory.getInstance().createInterface().create(user);
+    SessionContextProviderFactory.getInstance().createInterface().create(user, context.getTenant());
     return healingFailureMessages;
   }
 
@@ -161,7 +167,8 @@ public class HealingManagerImpl implements HealingManager {
     Object result = executeHealer(itemId, version, healerClassName, healingFailureMessages);
 
     if (!healingFailureMessages.isEmpty()) {
-      throw new RuntimeException(CommonMethods.listToSeparatedString(healingFailureMessages, '\n'));
+      throw new CoreException(new ErrorCode.ErrorCodeBuilder().withMessage(CommonMethods
+          .listToSeparatedString(healingFailureMessages, '\n')).build());
     }
     return result;
   }
@@ -223,8 +230,6 @@ public class HealingManagerImpl implements HealingManager {
   }
 
   private Map<String, Map<String, String>> getItemHealers(ItemType itemType) {
-    // TODO: 11/29/2017 create objects to hold this configuration +
-    // load once from the json file and use the relevant healers (by itemType, healerType) as needed.
     Map healingConfig = FileUtils
         .readViaInputStream(HEALERS_BY_ENTITY_TYPE_FILE,
             stream -> JsonUtil.json2Object(stream, Map.class));
index 74bdeef..c249345 100644 (file)
@@ -65,10 +65,11 @@ public class ServiceModelDaoFactoryTest {
   private static final Version version = Version.valueOf("1.0");
   private static final String baseServiceTemplateName = "baseYaml.yaml";
   private static String artifact001;
+  private static final String tenant = "dox";
 
   @BeforeMethod
   public void setUp(){
-    SessionContextProviderFactory.getInstance().createInterface().create("test");
+    SessionContextProviderFactory.getInstance().createInterface().create("test", tenant);
   }
 
   @AfterMethod
index b2a27de..bfa660a 100644 (file)
@@ -36,6 +36,7 @@ public class ItemZusammenDaoImplTest {
   private static final String ITEM_VERSIONS_STATUSES = "item_versions_statuses";
   private static final String APP_PROP_1 = "app_prop1";
   private static final String APP_PROP_2 = "app_prop2";
+  private static final String tenant = "dox";
 
   @Mock
   private ZusammenAdaptor zusammenAdaptorMock;
@@ -45,7 +46,7 @@ public class ItemZusammenDaoImplTest {
   @BeforeMethod
   public void setUp() throws Exception {
     MockitoAnnotations.initMocks(this);
-    SessionContextProviderFactory.getInstance().createInterface().create(USER);
+    SessionContextProviderFactory.getInstance().createInterface().create(USER, tenant);
   }
 
   @Test
index 76e1fe5..603e2b0 100644 (file)
@@ -37,6 +37,7 @@ import static org.openecomp.sdc.versioning.dao.impl.zusammen.TestUtil.createZusa
 public class VersionZusammenDaoImplTest {
 
   private static final String USER = "user1";
+  private static final String tenant = "dox";
   @Mock
   private ZusammenAdaptor zusammenAdaptorMock;
   @InjectMocks
@@ -45,7 +46,7 @@ public class VersionZusammenDaoImplTest {
   @BeforeMethod
   public void setUp() throws Exception {
     MockitoAnnotations.initMocks(this);
-    SessionContextProviderFactory.getInstance().createInterface().create(USER);
+    SessionContextProviderFactory.getInstance().createInterface().create(USER, tenant);
   }
 
   @Test
index 6ac2ab3..95c38e4 100644 (file)
@@ -32,6 +32,7 @@ public class ItemManagerImplTest {
   private static final String ITEM_NAME = "item 1 name";
   private static final String ITEM_TYPE_A = "A";
   private static final String ITEM_TYPE_B = "B";
+  private static final String tenant = "dox";
   @Mock
   private ItemDao itemDao;
   @Mock
@@ -81,7 +82,7 @@ public class ItemManagerImplTest {
 
   @Test
   public void testCreate() throws Exception {
-    SessionContextProviderFactory.getInstance().createInterface().create(USER);
+    SessionContextProviderFactory.getInstance().createInterface().create(USER, tenant);
 
     Item returnedItem = createItem(ITEM_ID, ITEM_NAME, ITEM_TYPE_A);
     doReturn(returnedItem).when(itemDao).create(any(Item.class));