Merge "logstash input"
authorSébastien Determe <sd378r@intl.att.com>
Tue, 11 Sep 2018 09:10:44 +0000 (09:10 +0000)
committerGerrit Code Review <gerrit@onap.org>
Tue, 11 Sep 2018 09:10:44 +0000 (09:10 +0000)
59 files changed:
extra/sql/bulkload/clds-create-db-objects.sql
extra/sql/bulkload/clds-stored-procedures.sql
extra/sql/drop/clds-drop-db-objects.sql
pom.xml
src/main/java/org/onap/clamp/clds/ClampServlet.java
src/main/java/org/onap/clamp/clds/client/OperationalPolicyDelegate.java
src/main/java/org/onap/clamp/clds/client/OperationalPolicyDeleteDelegate.java
src/main/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyAttributesConstructor.java [new file with mode: 0644]
src/main/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyYamlFormatter.java [moved from src/main/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyReq.java with 64% similarity]
src/main/java/org/onap/clamp/clds/client/req/policy/PolicyClient.java
src/main/java/org/onap/clamp/clds/config/AAFConfiguration.java
src/main/java/org/onap/clamp/clds/dao/CldsDao.java
src/main/java/org/onap/clamp/clds/model/CldsDictionary.java [new file with mode: 0644]
src/main/java/org/onap/clamp/clds/model/CldsDictionaryItem.java [new file with mode: 0644]
src/main/java/org/onap/clamp/clds/model/CldsEvent.java
src/main/java/org/onap/clamp/clds/model/CldsInfo.java
src/main/java/org/onap/clamp/clds/model/CldsModel.java
src/main/java/org/onap/clamp/clds/model/CldsToscaModel.java [new file with mode: 0644]
src/main/java/org/onap/clamp/clds/model/CldsToscaModelDetails.java [new file with mode: 0644]
src/main/java/org/onap/clamp/clds/model/CldsToscaModelRevision.java [new file with mode: 0644]
src/main/java/org/onap/clamp/clds/model/properties/PolicyItem.java
src/main/java/org/onap/clamp/clds/service/CldsDictionaryService.java [new file with mode: 0644]
src/main/java/org/onap/clamp/clds/service/CldsInfoProvider.java
src/main/java/org/onap/clamp/clds/service/CldsService.java
src/main/java/org/onap/clamp/clds/service/CldsToscaService.java [new file with mode: 0644]
src/main/java/org/onap/clamp/clds/util/ClampTimer.java [deleted file]
src/main/java/org/onap/clamp/clds/util/LoggingUtils.java
src/main/resources/META-INF/resources/designer/partials/portfolios/extra_user_info.html
src/main/resources/application-noaaf.properties
src/main/resources/application.properties
src/main/resources/clds/camel/rest/clds-services.xml
src/main/resources/clds/clds-users.json
src/main/resources/logback.xml
src/test/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyAttributesConstructorTest.java [new file with mode: 0644]
src/test/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyYamlFormatterTest.java [moved from src/test/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyReqTest.java with 57% similarity]
src/test/java/org/onap/clamp/clds/it/OperationPolicyReqItCase.java
src/test/java/org/onap/clamp/clds/it/PolicyClientItCase.java
src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java
src/test/resources/application.properties
src/test/resources/example/dao/template-doc-content.json
src/test/resources/example/operational-policy/json-policy-chain.json [new file with mode: 0644]
src/test/resources/example/sdc/blueprint-dcae/tca.yaml
src/test/resources/example/sdc/sdcCVFCResourceExample.json
src/test/resources/example/sdc/sdcCVFCResources.json
src/test/resources/example/sdc/sdcCinderVolume.json
src/test/resources/example/sdc/sdcResourceDetailsExample.json
src/test/resources/example/sdc/sdcSecurityRules.json
src/test/resources/example/sdc/sdcServiceDetailsExample.json
src/test/resources/example/sdc/sdcServicesListExample.json
src/test/resources/example/sdc/sdcVFCGenericWithAlarms.json
src/test/resources/example/sdc/sdcVFCResourceExample.json
src/test/resources/example/sdc/sdcVFCResources.json
src/test/resources/example/sdc/sdcVFCResourcesList.json
src/test/resources/example/sdc/sdcVFResources.json
src/test/resources/example/tca-policy-req/blueprint-expected.yaml
src/test/resources/example/tca-policy-req/blueprint-input.yaml
src/test/resources/example/tca-policy-req/prop-text.json
src/test/resources/http-cache/example/sdc/v1/catalog/resources&#63;resourceType=VFC/.file
src/test/resources/sql/four_templates_only.sql

index 78a1f7a..38cc466 100644 (file)
@@ -114,6 +114,53 @@ CREATE TABLE clds_service_cache (
   PRIMARY KEY (invariant_service_id)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
 
+CREATE TABLE IF NOT EXISTS tosca_model (
+  tosca_model_id VARCHAR(36) NOT NULL,
+  tosca_model_name VARCHAR(80) NOT NULL,
+  policy_type VARCHAR(80) NULL,
+  user_id VARCHAR(80),
+  timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  PRIMARY KEY (tosca_model_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+CREATE TABLE IF NOT EXISTS tosca_model_revision (
+  tosca_model_revision_id VARCHAR(36) NOT NULL,
+  tosca_model_id VARCHAR(36) NOT NULL,
+  version DOUBLE NOT NULL DEFAULT 1,
+  tosca_model_yaml MEDIUMTEXT NULL,
+  tosca_model_json MEDIUMTEXT NULL,
+  user_id VARCHAR(80),
+  createdTimestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  lastUpdatedTimestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  PRIMARY KEY (tosca_model_revision_id),
+  CONSTRAINT tosca_model_revision_ukey UNIQUE KEY (tosca_model_id, version),
+  CONSTRAINT tosca_model_revision_fkey01 FOREIGN KEY (tosca_model_id) REFERENCES tosca_model (tosca_model_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+CREATE TABLE IF NOT EXISTS dictionary (
+  dictionary_id VARCHAR(36) NOT NULL,
+  dictionary_name VARCHAR(80) NOT NULL,
+  created_by VARCHAR(80),
+  modified_by VARCHAR(80),
+  timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  PRIMARY KEY (dictionary_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
+CREATE TABLE IF NOT EXISTS dictionary_elements (
+  dict_element_id VARCHAR(36) NOT NULL,
+  dictionary_id VARCHAR(36) NOT NULL,
+  dict_element_name VARCHAR(250) NOT NULL,
+  dict_element_short_name VARCHAR(80) NOT NULL,
+  dict_element_description VARCHAR(250),
+  dict_element_type VARCHAR(80) NOT NULL,
+  created_by VARCHAR(80),
+  modified_by VARCHAR(80),
+  timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  PRIMARY KEY (dict_element_id),
+  CONSTRAINT dictionary_elements_ukey UNIQUE KEY (dict_element_name, dict_element_short_name),
+  CONSTRAINT dictionary_elements_ukey_fkey01 FOREIGN KEY (dictionary_id) REFERENCES dictionary (dictionary_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
+
 ALTER TABLE template
     ADD CONSTRAINT template_bpmn_id_fkey01
     FOREIGN KEY (template_bpmn_id)
index d09d3fc..1077174 100644 (file)
@@ -15,6 +15,10 @@ DROP PROCEDURE IF EXISTS get_model_template;
 DROP PROCEDURE IF EXISTS set_template;
 DROP PROCEDURE IF EXISTS get_template;
 DROP PROCEDURE IF EXISTS del_model;
+DROP PROCEDURE IF EXISTS set_new_tosca_model_version;
+DROP PROCEDURE IF EXISTS set_tosca_model;
+DROP PROCEDURE IF EXISTS set_dictionary;
+DROP PROCEDURE IF EXISTS set_dictionary_elements;
 DELIMITER //
 CREATE PROCEDURE get_template
   (IN v_template_name VARCHAR(80),
@@ -456,5 +460,65 @@ BEGIN
        DELETE from model_properties where model_id = v_model_id;
     DELETE from model where model_id = v_model_id;
 END
+
+CREATE PROCEDURE set_new_tosca_model_version
+  (IN v_tosca_model_id VARCHAR(36),
+   IN v_version DOUBLE,
+   IN v_tosca_model_yaml MEDIUMTEXT,
+   IN v_tosca_model_json MEDIUMTEXT,
+   IN v_user_id VARCHAR(80),
+   OUT v_revision_id VARCHAR(36))
+BEGIN
+  SET v_revision_id = UUID();
+  INSERT INTO tosca_model_revision
+    (tosca_model_revision_id, tosca_model_id, version, tosca_model_yaml, tosca_model_json, user_id)
+    VALUES (v_revision_id, v_tosca_model_id, v_version, v_tosca_model_yaml, v_tosca_model_json, v_user_id);
+END;
+
+CREATE PROCEDURE set_tosca_model
+  (IN v_tosca_model_name VARCHAR(80),
+   IN v_policy_type VARCHAR(80),
+   IN v_user_id VARCHAR(80),
+   IN v_tosca_model_yaml MEDIUMTEXT,
+   IN v_tosca_model_json MEDIUMTEXT,
+   IN v_version DOUBLE,
+   OUT v_tosca_model_id VARCHAR(36),
+   OUT v_revision_id VARCHAR(36))
+BEGIN
+  SET v_tosca_model_id = UUID();
+  INSERT INTO tosca_model
+    (tosca_model_id, tosca_model_name, policy_type, user_id)
+    VALUES (v_tosca_model_id, v_tosca_model_name, v_policy_type, v_user_id);
+  SET v_revision_id = UUID();
+  INSERT INTO tosca_model_revision
+    (tosca_model_revision_id, tosca_model_id, version, tosca_model_yaml, tosca_model_json, user_id)
+    VALUES (v_revision_id, v_tosca_model_id, v_version, v_tosca_model_yaml, v_tosca_model_json, v_user_id);
+END;
+
+CREATE PROCEDURE set_dictionary
+  (IN v_dictionary_name VARCHAR(80),
+   IN v_user_id VARCHAR(80),
+   OUT v_dictionary_id VARCHAR(36))
+BEGIN
+  SET v_dictionary_id = UUID();
+  INSERT INTO dictionary
+    (dictionary_id, dictionary_name, created_by, modified_by)
+    VALUES (v_dictionary_id, v_dictionary_name, v_user_id, v_user_id);
+END;
+
+CREATE PROCEDURE set_dictionary_elements
+  (IN v_dictionary_id VARCHAR(36),
+   IN v_dict_element_name VARCHAR(250),
+   IN v_dict_element_short_name VARCHAR(80),
+   IN v_dict_element_description VARCHAR(250),
+   IN v_dict_element_type VARCHAR(80),
+   IN v_user_id VARCHAR(80),
+   OUT v_dict_element_id VARCHAR(36))
+BEGIN
+  SET v_dict_element_id = UUID();
+  INSERT INTO dictionary_elements
+    (dict_element_id, dictionary_id, dict_element_name, dict_element_short_name, dict_element_description, dict_element_type, created_by, modified_by)
+    VALUES (v_dict_element_id, v_dictionary_id, v_dict_element_name, v_dict_element_short_name, v_dict_element_description, v_dict_element_type, v_user_id, v_user_id);
+END;
 //
 DELIMITER ;
index 478eaf0..1c173a4 100644 (file)
@@ -31,3 +31,9 @@ DROP TABLE template_doc;
 DROP TABLE template_image;
 DROP TABLE template_bpmn;
 DROP TABLE template;
+
+DROP TABLE dictionary_elements;
+DROP TABLE dictionary;
+DROP TABLE tosca_model_revision;
+DROP TABLE tosca_model;
+
diff --git a/pom.xml b/pom.xml
index 2f4818c..68b80ab 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -20,9 +20,7 @@
   ============LICENSE_END============================================
   ===================================================================
 -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-               xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
                <modelVersion>4.0.0</modelVersion>
                <groupId>org.onap.clamp</groupId>
                <artifactId>clds</artifactId>
@@ -32,7 +30,7 @@
                <parent>
                                <groupId>org.onap.oparent</groupId>
                                <artifactId>oparent</artifactId>
-                               <version>1.1.0</version>
+                               <version>1.2.0</version>
                </parent>
 
                <description>
@@ -85,7 +83,7 @@
                                <docker.skip.push>true</docker.skip.push>
                                <docker.skip.tag>true</docker.skip.tag>
                                <skip.staging.artifacts>false</skip.staging.artifacts>
-                               <python.http.proxy.param></python.http.proxy.param>
+                               <python.http.proxy.param/>
                                <tomcat.version>8.5.32</tomcat.version>
                </properties>
 
                                <dependency>
                                                <groupId>org.onap.policy.engine</groupId>
                                                <artifactId>PolicyEngineAPI</artifactId>
-                                               <version>1.2.0</version>
+                                               <version>1.2.3</version>
                                                <exclusions>
                                                                <exclusion>
                                                                                <groupId>com.google.guava</groupId>
                                <dependency>
                                                <groupId>org.onap.policy.common</groupId>
                                                <artifactId>ONAP-Logging</artifactId>
-                                               <version>1.1.3</version>
+                                               <version>1.2.3</version>
                                                <exclusions>
                                                                <exclusion>
                                                                                <artifactId>log4j</artifactId>
                                                </exclusions>
                                </dependency>
                                <dependency>
-                                               <groupId>org.onap.policy.drools-applications</groupId>
+                                               <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
                                                <artifactId>policy-yaml</artifactId>
-                                               <version>1.1.3</version>
+                                               <version>1.2.3</version>
                                                <exclusions>
                                                                <exclusion>
                                                                                <artifactId>log4j</artifactId>
                                                </exclusions>
                                </dependency>
                                <dependency>
-                                               <groupId>org.onap.policy.drools-applications</groupId>
+                                               <groupId>org.onap.policy.drools-applications.controlloop.common.model-impl</groupId>
                                                <artifactId>sdc</artifactId>
-                                               <version>1.1.3</version>
+                                               <version>1.2.3</version>
                                                <exclusions>
                                                                <exclusion>
                                                                                <artifactId>log4j</artifactId>
                                                </exclusions>
                                </dependency>
                                <dependency>
-                                               <groupId>org.onap.policy.drools-applications</groupId>
+                                               <groupId>org.onap.policy.drools-applications.controlloop.common.model-impl</groupId>
                                                <artifactId>aai</artifactId>
-                                               <version>1.1.3</version>
+                                               <version>1.2.3</version>
                                                <exclusions>
                                                                <exclusion>
                                                                                <artifactId>log4j</artifactId>
                                <dependency>
                                                <groupId>com.google.guava</groupId>
                                                <artifactId>guava</artifactId>
-                                               <version>25.1-jre</version>
+
                                </dependency>
                                <!-- Remove the MYSQL connector and replace it by Mariadb -->
                                <dependency>
                                                                                                <doctype>book</doctype>
                                                                                                <toc>left</toc>
                                                                                                <toclevels>3</toclevels>
-                                                                                               <numbered></numbered>
-                                                                                               <hardbreaks></hardbreaks>
-                                                                                               <sectlinks></sectlinks>
-                                                                                               <sectanchors></sectanchors>
+                                                                                               <numbered/>
+                                                                                               <hardbreaks/>
+                                                                                               <sectlinks/>
+                                                                                               <sectanchors/>
                                                                                                <generated>${project.build.directory}/asciidoc/generated</generated>
                                                                                </attributes>
                                                                </configuration>
index 549b12f..516325c 100644 (file)
@@ -36,9 +36,10 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.camel.component.servlet.CamelHttpTransportServlet;
+import org.onap.aaf.cadi.principal.X509Principal;
 import org.onap.clamp.clds.service.SecureServicePermission;
-import org.onap.clamp.clds.util.ClampTimer;
 import org.springframework.context.ApplicationContext;
+import org.springframework.http.HttpStatus;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.GrantedAuthority;
@@ -49,62 +50,79 @@ import org.springframework.web.context.support.WebApplicationContextUtils;
 
 public class ClampServlet extends CamelHttpTransportServlet {
 
+    /**
+     *
+     */
+    private static final long serialVersionUID = -4198841134910211542L;
+
     protected static final EELFLogger logger = EELFManager.getInstance().getLogger(ClampServlet.class);
     public static final String PERM_INSTANCE = "clamp.config.security.permission.instance";
     public static final String PERM_CL = "clamp.config.security.permission.type.cl";
     public static final String PERM_TEMPLATE = "clamp.config.security.permission.type.template";
     public static final String PERM_VF = "clamp.config.security.permission.type.filter.vf";
     public static final String PERM_MANAGE = "clamp.config.security.permission.type.cl.manage";
+    public static final String PERM_TOSCA = "clamp.config.security.permission.type.tosca";
+    private static List<SecureServicePermission> permissionList;
 
-    @Override
-    protected void doService(HttpServletRequest request, HttpServletResponse response)
-            throws ServletException, IOException {
-        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
-        List<SecureServicePermission> permissionList = new ArrayList<>();
-
-        // Get Principal info and translate it into Spring Authentication If
-        // authenticataion is null: a) the authentication info was set manually
-        // in the previous thread b) handled by Spring automatically for the 2
-        // cases above, no need for the translation, just skip the following
-        // step
-        if (null == authentication) {
-            logger.debug("Populate Spring Authenticataion info manually.");
+    private synchronized List<SecureServicePermission> getPermissionList() {
+        if (permissionList == null) {
+            permissionList=new ArrayList<>();
             ApplicationContext applicationContext = WebApplicationContextUtils
-                    .getWebApplicationContext(this.getServletContext());
-            // Start a timer to clear the authentication after 5 mins, so that
-            // the authentication will be reinitialized with AAF DB
-            new ClampTimer(300);
-            String cldsPersmissionTypeCl = applicationContext.getEnvironment().getProperty(PERM_CL);
-            String cldsPermissionTypeTemplate = applicationContext.getEnvironment().getProperty(PERM_TEMPLATE);
+                .getWebApplicationContext(getServletContext());
             String cldsPermissionInstance = applicationContext.getEnvironment().getProperty(PERM_INSTANCE);
-            String cldsPermissionTypeFilterVf = applicationContext.getEnvironment().getProperty(PERM_VF);
-            String cldsPermissionTypeClManage = applicationContext.getEnvironment().getProperty(PERM_MANAGE);
-
-            // set the stragety to Mode_Global, so that all thread is able to
-            // see the authentication
-            SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL);
-            Principal p = request.getUserPrincipal();
+            permissionList.add(SecureServicePermission.create(applicationContext.getEnvironment().getProperty(PERM_CL),
+                cldsPermissionInstance, "read"));
+            permissionList.add(SecureServicePermission.create(applicationContext.getEnvironment().getProperty(PERM_CL),
+                cldsPermissionInstance, "update"));
+            permissionList.add(SecureServicePermission.create(
+                applicationContext.getEnvironment().getProperty(PERM_TEMPLATE), cldsPermissionInstance, "read"));
+            permissionList.add(SecureServicePermission.create(
+                applicationContext.getEnvironment().getProperty(PERM_TEMPLATE), cldsPermissionInstance, "update"));
+            permissionList.add(SecureServicePermission.create(applicationContext.getEnvironment().getProperty(PERM_VF),
+                cldsPermissionInstance, "*"));
+            permissionList.add(SecureServicePermission
+                .create(applicationContext.getEnvironment().getProperty(PERM_MANAGE), cldsPermissionInstance, "*"));
+            permissionList.add(SecureServicePermission
+                .create(applicationContext.getEnvironment().getProperty(PERM_TOSCA), cldsPermissionInstance, "read"));
+            permissionList.add(SecureServicePermission
+                .create(applicationContext.getEnvironment().getProperty(PERM_TOSCA), cldsPermissionInstance, "update"));
+        }
+        return permissionList;
+    }
 
-            permissionList.add(SecureServicePermission.create(cldsPersmissionTypeCl, cldsPermissionInstance, "read"));
-            permissionList.add(SecureServicePermission.create(cldsPersmissionTypeCl, cldsPermissionInstance, "update"));
-            permissionList
-                    .add(SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance, "read"));
-            permissionList
-                    .add(SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance, "update"));
-            permissionList.add(SecureServicePermission.create(cldsPermissionTypeFilterVf, cldsPermissionInstance, "*"));
-            permissionList.add(SecureServicePermission.create(cldsPermissionTypeClManage, cldsPermissionInstance, "*"));
+    /**
+     * When AAF is enabled, request object will contain a cadi Wrapper, so queries
+     * to isUserInRole will invoke a http call to AAF server.
+     */
+    @Override
+    protected void doService(HttpServletRequest request, HttpServletResponse response)
+        throws ServletException, IOException {
 
+        Principal p = request.getUserPrincipal();
+        if (p instanceof X509Principal) {
+            // When AAF is enabled, there is a need to provision the permissions to Spring
+            // system
             List<GrantedAuthority> grantedAuths = new ArrayList<>();
-            for (SecureServicePermission perm : permissionList) {
+            for (SecureServicePermission perm : getPermissionList()) {
                 String permString = perm.toString();
                 if (request.isUserInRole(permString)) {
                     grantedAuths.add(new SimpleGrantedAuthority(permString));
                 }
             }
             Authentication auth = new UsernamePasswordAuthenticationToken(new User(p.getName(), "", grantedAuths), "",
-                    grantedAuths);
+                grantedAuths);
             SecurityContextHolder.getContext().setAuthentication(auth);
         }
-        super.doService(request, response);
+        try {
+            super.doService(request, response);
+        } catch (ServletException | IOException ioe) {
+            logger.error("Exception caught when executing doService in servlet", ioe);
+            try {
+                response.sendError(HttpStatus.INTERNAL_SERVER_ERROR.value());
+            } catch (IOException e) {
+                logger.error("Exception caught when executing HTTP sendError in servlet", e);
+            }
+        }
+
     }
 }
\ No newline at end of file
index e324b2d..39377d4 100644 (file)
@@ -17,8 +17,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  * ============LICENSE_END============================================
+ * Modifications copyright (c) 2018 Nokia
  * ===================================================================
- * 
+ *
  */
 
 package org.onap.clamp.clds.client;
@@ -31,7 +32,7 @@ import java.util.Map;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Handler;
-import org.onap.clamp.clds.client.req.policy.OperationalPolicyReq;
+import org.onap.clamp.clds.client.req.policy.OperationalPolicyAttributesConstructor;
 import org.onap.clamp.clds.client.req.policy.PolicyClient;
 import org.onap.clamp.clds.config.ClampProperties;
 import org.onap.clamp.clds.model.properties.ModelProperties;
@@ -52,16 +53,14 @@ public class OperationalPolicyDelegate {
 
     protected static final EELFLogger logger = EELFManager.getInstance().getLogger(OperationalPolicyDelegate.class);
     protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
-    /**
-     * Automatically injected by Spring, define in CldsConfiguration as a bean.
-     */
-    @Autowired
-    private PolicyClient policyClient;
-    /**
-     * Automatically injected by Spring, define in CldsConfiguration as a bean.
-     */
+    private final PolicyClient policyClient;
+    private final ClampProperties refProp;
+
     @Autowired
-    private ClampProperties refProp;
+    public OperationalPolicyDelegate(PolicyClient policyClient, ClampProperties refProp) {
+        this.policyClient = policyClient;
+        this.refProp = refProp;
+    }
 
     /**
      * Perform activity. Send Operational Policy info to policy api.
@@ -69,7 +68,7 @@ public class OperationalPolicyDelegate {
      * @param camelExchange
      *            The Camel Exchange object containing the properties
      * @throws BuilderException
-     *             In case of issues with OperationalPolicyReq
+     *             In case of issues with OperationalPolicyRequestAttributesConstructor
      * @throws UnsupportedEncodingException
      *             In case of issues with the Charset encoding
      */
@@ -80,8 +79,8 @@ public class OperationalPolicyDelegate {
         Policy policy = prop.getType(Policy.class);
         if (policy.isFound()) {
             for (PolicyChain policyChain : prop.getType(Policy.class).getPolicyChains()) {
-                Map<AttributeType, Map<String, String>> attributes = OperationalPolicyReq.formatAttributes(refProp,
-                        prop, prop.getType(Policy.class).getId(), policyChain);
+                Map<AttributeType, Map<String, String>> attributes = OperationalPolicyAttributesConstructor.formatAttributes(refProp,
+                    prop, prop.getType(Policy.class).getId(), policyChain);
                 responseMessage = policyClient.sendBrmsPolicy(attributes, prop, LoggingUtils.getRequestId());
             }
             if (responseMessage != null) {
index 08cfba1..8729993 100644 (file)
@@ -18,7 +18,7 @@
  * limitations under the License.
  * ============LICENSE_END============================================
  * ===================================================================
- * 
+ *
  */
 
 package org.onap.clamp.clds.client;
@@ -43,7 +43,7 @@ import org.springframework.stereotype.Component;
 public class OperationalPolicyDeleteDelegate {
 
     protected static final EELFLogger logger = EELFManager.getInstance()
-            .getLogger(OperationalPolicyDeleteDelegate.class);
+        .getLogger(OperationalPolicyDeleteDelegate.class);
     protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
     @Autowired
     private PolicyClient policyClient;
diff --git a/src/main/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyAttributesConstructor.java b/src/main/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyAttributesConstructor.java
new file mode 100644 (file)
index 0000000..c28f700
--- /dev/null
@@ -0,0 +1,153 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END============================================
+ * Modifications copyright (c) 2018 Nokia
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.client.req.policy;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableMap;
+
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.onap.clamp.clds.config.ClampProperties;
+import org.onap.clamp.clds.model.properties.ModelProperties;
+import org.onap.clamp.clds.model.properties.PolicyChain;
+import org.onap.clamp.clds.model.properties.PolicyItem;
+import org.onap.policy.api.AttributeType;
+import org.onap.policy.controlloop.policy.builder.BuilderException;
+
+public class OperationalPolicyAttributesConstructor {
+
+    private static final EELFLogger logger = EELFManager.getInstance()
+        .getLogger(OperationalPolicyAttributesConstructor.class);
+    public static final String TEMPLATE_NAME = "templateName";
+    public static final String CLOSED_LOOP_CONTROL_NAME = "closedLoopControlName";
+    public static final String NOTIFICATION_TOPIC = "notificationTopic";
+    public static final String OPERATION_TOPIC = "operationTopic";
+    public static final String CONTROL_LOOP_YAML = "controlLoopYaml";
+    public static final String CONTROLLER = "controller";
+    public static final String RECIPE = "Recipe";
+    public static final String MAX_RETRIES = "MaxRetries";
+    public static final String RETRY_TIME_LIMIT = "RetryTimeLimit";
+    public static final String RESOURCE_ID = "ResourceId";
+    public static final String RECIPE_TOPIC = "RecipeTopic";
+
+    private OperationalPolicyAttributesConstructor() {
+    }
+
+    public static Map<AttributeType, Map<String, String>> formatAttributes(ClampProperties refProp,
+        ModelProperties modelProperties,
+        String modelElementId, PolicyChain policyChain)
+            throws BuilderException, UnsupportedEncodingException {
+        modelProperties.setCurrentModelElementId(modelElementId);
+        modelProperties.setPolicyUniqueId(policyChain.getPolicyId());
+
+        String globalService = modelProperties.getGlobal().getService();
+
+        Map<String, String> ruleAttributes = prepareRuleAttributes(refProp, modelProperties, modelElementId,
+            policyChain, globalService);
+        Map<String, String> matchingAttributes = prepareMatchingAttributes(refProp, globalService);
+
+        return createAttributesMap(matchingAttributes, ruleAttributes);
+    }
+
+    private static Map<String, String> prepareRuleAttributes(ClampProperties clampProperties, ModelProperties modelProperties,
+        String modelElementId, PolicyChain policyChain, String globalService)
+            throws BuilderException, UnsupportedEncodingException {
+        logger.info("Preparing rule attributes...");
+        String templateName = clampProperties.getStringValue("op.templateName", globalService);
+        String operationTopic = clampProperties.getStringValue("op.operationTopic", globalService);
+        String notificationTopic = clampProperties.getStringValue("op.notificationTopic", globalService);
+
+        Map<String, String> ruleAttributes = new HashMap<>();
+        ruleAttributes.put(TEMPLATE_NAME, templateName);
+        ruleAttributes.put(CLOSED_LOOP_CONTROL_NAME, modelProperties.getControlNameAndPolicyUniqueId());
+        ruleAttributes.put(NOTIFICATION_TOPIC, notificationTopic);
+
+        ImmutableMap<String, String> attributes = createRuleAttributesFromPolicy(clampProperties, modelProperties,
+            modelElementId, policyChain, globalService, operationTopic);
+        ruleAttributes.putAll(attributes);
+        logger.info("Prepared: " + ruleAttributes);
+        return ruleAttributes;
+    }
+
+    private static Map<String, String> prepareMatchingAttributes(ClampProperties refProp, String globalService) {
+        logger.info("Preparing matching attributes...");
+        String controller = refProp.getStringValue("op.controller", globalService);
+        Map<String, String> matchingAttributes = new HashMap<>();
+        matchingAttributes.put(CONTROLLER, controller);
+        logger.info("Prepared: " + matchingAttributes);
+        return matchingAttributes;
+    }
+
+    private static Map<AttributeType, Map<String, String>> createAttributesMap(Map<String, String> matchingAttributes,
+        Map<String, String> ruleAttributes) {
+        Map<AttributeType, Map<String, String>> attributes = new HashMap<>();
+        attributes.put(AttributeType.RULE, ruleAttributes);
+        attributes.put(AttributeType.MATCHING, matchingAttributes);
+        return attributes;
+    }
+
+    private static ImmutableMap<String, String> createRuleAttributesFromPolicy(ClampProperties refProp, ModelProperties modelProperties,
+        String modelElementId, PolicyChain policyChain,
+        String globalService, String operationTopic)
+            throws BuilderException, UnsupportedEncodingException {
+        if (Strings.isNullOrEmpty(operationTopic)) {
+            // if no operationTopic, then don't format yaml - use first policy
+            String recipeTopic = refProp.getStringValue("op.recipeTopic", globalService);
+            return createRuleAttributesFromPolicyItem(
+                policyChain.getPolicyItems().get(0), recipeTopic);
+        } else {
+            return createRuleAttributesFromPolicyChain(policyChain, modelProperties,
+                modelElementId, operationTopic);
+        }
+    }
+
+    private static ImmutableMap<String, String> createRuleAttributesFromPolicyItem(PolicyItem policyItem, String recipeTopic) {
+        logger.info("recipeTopic=" + recipeTopic);
+        return ImmutableMap.<String, String>builder()
+            .put(RECIPE_TOPIC, recipeTopic)
+            .put(RECIPE, policyItem.getRecipe())
+            .put(MAX_RETRIES, String.valueOf(policyItem.getMaxRetries()))
+            .put(RETRY_TIME_LIMIT, String.valueOf(policyItem.getRetryTimeLimit()))
+            .put(RESOURCE_ID, String.valueOf(policyItem.getTargetResourceId()))
+            .build();
+    }
+
+    private static ImmutableMap<String, String> createRuleAttributesFromPolicyChain(PolicyChain policyChain,
+        ModelProperties modelProperties,
+        String modelElementId,
+        String operationTopic)
+            throws BuilderException, UnsupportedEncodingException {
+        logger.info("operationTopic=" + operationTopic);
+        String yaml = OperationalPolicyYamlFormatter.formatYaml(modelProperties, modelElementId, policyChain);
+        return ImmutableMap.<String, String>builder()
+            .put(OPERATION_TOPIC, operationTopic)
+            .put(CONTROL_LOOP_YAML, yaml)
+            .build();
+    }
+}
\ No newline at end of file
@@ -21,7 +21,6 @@
  * ===================================================================
  *
  */
-
 package org.onap.clamp.clds.client.req.policy;
 
 import com.att.eelf.configuration.EELFLogger;
@@ -37,12 +36,10 @@ import java.util.Map;
 
 import javax.ws.rs.BadRequestException;
 
-import org.onap.clamp.clds.config.ClampProperties;
 import org.onap.clamp.clds.model.properties.Global;
 import org.onap.clamp.clds.model.properties.ModelProperties;
 import org.onap.clamp.clds.model.properties.PolicyChain;
 import org.onap.clamp.clds.model.properties.PolicyItem;
-import org.onap.policy.api.AttributeType;
 import org.onap.policy.controlloop.policy.Policy;
 import org.onap.policy.controlloop.policy.PolicyResult;
 import org.onap.policy.controlloop.policy.Target;
@@ -55,83 +52,14 @@ import org.onap.policy.sdc.Resource;
 import org.onap.policy.sdc.ResourceType;
 import org.onap.policy.sdc.Service;
 
-/**
- * Construct an Operational Policy request given CLDS objects.
- */
-public class OperationalPolicyReq {
-
-    private static final EELFLogger logger = EELFManager.getInstance().getLogger(OperationalPolicyReq.class);
+public class OperationalPolicyYamlFormatter {
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(OperationalPolicyYamlFormatter.class);
 
-    protected OperationalPolicyReq() {
+    protected OperationalPolicyYamlFormatter() {
     }
-
-    /**
-     * Format Operational Policy attributes.
-     *
-     * @param refProp
-     * @param prop
-     * @param modelElementId
-     * @param policyChain
-     * @return
-     * @throws BuilderException
-     * @throws UnsupportedEncodingException
-     */
-    public static Map<AttributeType, Map<String, String>> formatAttributes(ClampProperties refProp,
-        ModelProperties prop, String modelElementId, PolicyChain policyChain)
-            throws BuilderException, UnsupportedEncodingException {
-        Global global = prop.getGlobal();
-        prop.setCurrentModelElementId(modelElementId);
-        prop.setPolicyUniqueId(policyChain.getPolicyId());
-        String templateName = refProp.getStringValue("op.templateName", global.getService());
-        String operationTopic = refProp.getStringValue("op.operationTopic", global.getService());
-        String notificationTopic = refProp.getStringValue("op.notificationTopic", global.getService());
-        String controller = refProp.getStringValue("op.controller", global.getService());
-        String recipeTopic = refProp.getStringValue("op.recipeTopic", global.getService());
-        // ruleAttributes
-        logger.info("templateName=" + templateName);
-        logger.info("notificationTopic=" + notificationTopic);
-        Map<String, String> ruleAttributes = new HashMap<>();
-        ruleAttributes.put("templateName", templateName);
-        ruleAttributes.put("closedLoopControlName", prop.getControlNameAndPolicyUniqueId());
-        ruleAttributes.put("notificationTopic", notificationTopic);
-        if (operationTopic == null || operationTopic.isEmpty()) {
-            logger.info("recipeTopic=" + recipeTopic);
-            // if no operationTopic, then don't format yaml - use first policy
-            // from list
-            PolicyItem policyItem = policyChain.getPolicyItems().get(0);
-            ruleAttributes.put("RecipeTopic", recipeTopic);
-            String recipe = policyItem.getRecipe();
-            String maxRetries = String.valueOf(policyItem.getMaxRetries());
-            String retryTimeLimit = String.valueOf(policyItem.getRetryTimeLimit());
-            String targetResourceId = String.valueOf(policyItem.getTargetResourceId());
-            logger.info("recipe=" + recipe);
-            logger.info("maxRetries=" + maxRetries);
-            logger.info("retryTimeLimit=" + retryTimeLimit);
-            logger.info("targetResourceId=" + targetResourceId);
-            ruleAttributes.put("Recipe", recipe);
-            ruleAttributes.put("MaxRetries", maxRetries);
-            ruleAttributes.put("RetryTimeLimit", retryTimeLimit);
-            ruleAttributes.put("ResourceId", targetResourceId);
-        } else {
-            logger.info("operationTopic=" + operationTopic);
-            // format yaml
-            String yaml = formatYaml(refProp, prop, modelElementId, policyChain);
-            ruleAttributes.put("operationTopic", operationTopic);
-            ruleAttributes.put("controlLoopYaml", yaml);
-        }
-        // matchingAttributes
-        Map<String, String> matchingAttributes = new HashMap<>();
-        matchingAttributes.put("controller", controller);
-        Map<AttributeType, Map<String, String>> attributes = new HashMap<>();
-        attributes.put(AttributeType.RULE, ruleAttributes);
-        attributes.put(AttributeType.MATCHING, matchingAttributes);
-        return attributes;
-    }
-
     /**
      * Format Operational OpenLoop Policy yaml.
      *
-     * @param refProp
      * @param prop
      * @param modelElementId
      * @param policyChain
@@ -139,7 +67,7 @@ public class OperationalPolicyReq {
      * @throws BuilderException
      * @throws UnsupportedEncodingException
      */
-    protected static String formatOpenLoopYaml(ClampProperties refProp, ModelProperties prop, String modelElementId,
+    public static String formatOpenLoopYaml(ModelProperties prop, String modelElementId,
         PolicyChain policyChain) throws BuilderException, UnsupportedEncodingException {
         // get property objects
         Global global = prop.getGlobal();
@@ -147,7 +75,7 @@ public class OperationalPolicyReq {
         prop.setPolicyUniqueId(policyChain.getPolicyId());
         // convert values to SDC objects
         Service service = new Service(global.getService());
-        Resource[] vfResources = convertToResource(global.getResourceVf(), ResourceType.VF);
+        Resource[] vfResources = convertToResources(global.getResourceVf(), ResourceType.VF);
         // create builder
         ControlLoopPolicyBuilder builder = ControlLoopPolicyBuilder.Factory.buildControlLoop(prop.getControlName(),
             policyChain.getTimeout(), service, vfResources);
@@ -158,18 +86,7 @@ public class OperationalPolicyReq {
         return URLEncoder.encode(results.getSpecification(), "UTF-8");
     }
 
-    /**
-     * Format Operational Policy yaml.
-     *
-     * @param refProp
-     * @param prop
-     * @param modelElementId
-     * @param policyChain
-     * @return
-     * @throws BuilderException
-     * @throws UnsupportedEncodingException
-     */
-    protected static String formatYaml(ClampProperties refProp, ModelProperties prop, String modelElementId,
+    public static String formatYaml(ModelProperties prop, String modelElementId,
         PolicyChain policyChain) throws BuilderException, UnsupportedEncodingException {
         // get property objects
         Global global = prop.getGlobal();
@@ -177,8 +94,8 @@ public class OperationalPolicyReq {
         prop.setPolicyUniqueId(policyChain.getPolicyId());
         // convert values to SDC objects
         Service service = new Service(global.getService());
-        Resource[] vfResources = convertToResource(global.getResourceVf(), ResourceType.VF);
-        Resource[] vfcResources = convertToResource(global.getResourceVfc(), ResourceType.VFC);
+        Resource[] vfResources = convertToResources(global.getResourceVf(), ResourceType.VF);
+        Resource[] vfcResources = convertToResources(global.getResourceVfc(), ResourceType.VFC);
         // create builder
         ControlLoopPolicyBuilder builder = ControlLoopPolicyBuilder.Factory.buildControlLoop(prop.getControlName(),
             policyChain.getTimeout(), service, vfResources);
@@ -209,7 +126,7 @@ public class OperationalPolicyReq {
                     + parentPolicyObj.getName() + " - created by CLDS";
                 policyObj = builder.setPolicyForPolicyResult(policyName, policyDescription, actor, target,
                     policyItem.getRecipe(), payloadMap, policyItem.getMaxRetries(), policyItem.getRetryTimeLimit(),
-                    parentPolicyObj.getId(), convertToPolicyResult(policyItem.getParentPolicyConditions()));
+                    parentPolicyObj.getId(), convertToPolicyResults(policyItem.getParentPolicyConditions()));
                 logger.info("policyObj.id=" + policyObj.getId() + "; parentPolicyObj.id=" + parentPolicyObj.getId());
             }
             policyObjMap.put(policyItem.getId(), policyObj);
@@ -220,29 +137,7 @@ public class OperationalPolicyReq {
         return URLEncoder.encode(results.getSpecification(), "UTF-8");
     }
 
-    protected static void validate(Results results) {
-        if (results.isValid()) {
-            logger.info("results.getSpecification()=" + results.getSpecification());
-        } else {
-            // throw exception with error info
-            StringBuilder sb = new StringBuilder();
-            sb.append("Operation Policy validation problem: ControlLoopPolicyBuilder failed with following messages: ");
-            for (Message message : results.getMessages()) {
-                sb.append(message.getMessage());
-                sb.append("; ");
-            }
-            throw new BadRequestException(sb.toString());
-        }
-    }
-
-    /**
-     * Order list of PolicyItems so that parents come before any of their
-     * children
-     *
-     * @param inOrigList
-     * @return
-     */
-    private static List<PolicyItem> orderParentFirst(List<PolicyItem> inOrigList) {
+    protected static List<PolicyItem> orderParentFirst(List<PolicyItem> inOrigList) {
         List<PolicyItem> inList = new ArrayList<>();
         inList.addAll(inOrigList);
         List<PolicyItem> outList = new ArrayList<>();
@@ -286,31 +181,34 @@ public class OperationalPolicyReq {
         return outList;
     }
 
-    /**
-     * Convert a List of resource strings to an array of Resource objects.
-     *
-     * @param stringList
-     * @param resourceType
-     * @return
-     */
-    protected static Resource[] convertToResource(List<String> stringList, ResourceType resourceType) {
+    protected static void validate(Results results) {
+        if (results.isValid()) {
+            logger.info("results.getSpecification()=" + results.getSpecification());
+        } else {
+            // throw exception with error info
+            StringBuilder sb = new StringBuilder();
+            sb.append("Operation Policy validation problem: ControlLoopPolicyBuilder failed with following messages: ");
+            for (Message message : results.getMessages()) {
+                sb.append(message.getMessage());
+                sb.append("; ");
+            }
+            throw new BadRequestException(sb.toString());
+        }
+    }
+
+
+    protected static Resource[] convertToResources(List<String> stringList, ResourceType resourceType) {
         if (stringList == null || stringList.isEmpty()) {
             return new Resource[0];
         }
         return stringList.stream().map(stringElem -> new Resource(stringElem, resourceType)).toArray(Resource[]::new);
     }
 
-    /**
-     * Convert a List of policy result strings to an array of PolicyResult
-     * objects.
-     *
-     * @param prList
-     * @return
-     */
-    protected static PolicyResult[] convertToPolicyResult(List<String> prList) {
+    protected static PolicyResult[] convertToPolicyResults(List<String> prList) {
         if (prList == null || prList.isEmpty()) {
             return new PolicyResult[0];
         }
         return prList.stream().map(PolicyResult::toResult).toArray(PolicyResult[]::new);
     }
+
 }
\ No newline at end of file
index cc97a7c..cd387b3 100644 (file)
@@ -18,7 +18,7 @@
  * limitations under the License.
  * ============LICENSE_END============================================
  * ===================================================================
- * 
+ *
  */
 
 package org.onap.clamp.clds.client.req.policy;
@@ -26,11 +26,8 @@ package org.onap.clamp.clds.client.req.policy;
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Date;
-import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
@@ -46,7 +43,6 @@ import org.onap.policy.api.ConfigRequestParameters;
 import org.onap.policy.api.DeletePolicyCondition;
 import org.onap.policy.api.DeletePolicyParameters;
 import org.onap.policy.api.PolicyChangeResponse;
-import org.onap.policy.api.PolicyConfig;
 import org.onap.policy.api.PolicyConfigException;
 import org.onap.policy.api.PolicyConfigType;
 import org.onap.policy.api.PolicyEngine;
@@ -95,7 +91,7 @@ public class PolicyClient {
      * @return The response message of policy
      */
     public String sendBrmsPolicy(Map<AttributeType, Map<String, String>> attributes, ModelProperties prop,
-            String policyRequestUuid) {
+        String policyRequestUuid) {
         PolicyParameters policyParameters = new PolicyParameters();
         // Set Policy Type(Mandatory)
         policyParameters.setPolicyConfigType(PolicyConfigType.BRMS_PARAM);
@@ -160,7 +156,7 @@ public class PolicyClient {
      * @return The answer from policy call
      */
     public String sendBasePolicyInOther(String configBody, String configPolicyName, ModelProperties prop,
-            String policyRequestUuid) {
+        String policyRequestUuid) {
         PolicyParameters policyParameters = new PolicyParameters();
         // Set Policy Type
         policyParameters.setPolicyConfigType(PolicyConfigType.Base);
@@ -181,7 +177,7 @@ public class PolicyClient {
 
     /**
      * Perform send of Microservice policy in OTHER type.
-     * 
+     *
      * @param configBody
      *            The config policy string body
      * @param prop
@@ -224,8 +220,7 @@ public class PolicyClient {
         String responseMessage = "";
         Date startTime = new Date();
         try {
-            List<Integer> versions = getVersions(policyNamePrefix, prop);
-            if (versions.isEmpty()) {
+            if (!checkPolicyExists(policyNamePrefix, prop)) {
                 LoggingUtils.setTargetContext("Policy", "createPolicy");
                 logger.info("Attempting to create policy for action=" + prop.getActionCd());
                 response = getPolicyEngine().createPolicy(policyParameters);
@@ -313,8 +308,8 @@ public class PolicyClient {
     }
 
     /**
-     * Use Get Config Policy API to retrieve the versions for a policy. Return
-     * versions in sorted order. Return empty list if none found.
+     * Use list Policy API to retrieve the policy. Return true if policy exists
+     * otherwise return false.
      *
      * @param policyNamePrefix
      *            The Policy Name Prefix
@@ -324,8 +319,8 @@ public class PolicyClient {
      * @throws PolicyConfigException
      *             In case of issues with policy engine
      */
-    protected List<Integer> getVersions(String policyNamePrefix, ModelProperties prop) throws PolicyConfigException {
-        ArrayList<Integer> versions = new ArrayList<>();
+    protected boolean checkPolicyExists(String policyNamePrefix, ModelProperties prop) throws PolicyConfigException {
+        boolean policyexists = false;
         ConfigRequestParameters configRequestParameters = new ConfigRequestParameters();
         String policyName = "";
         if (prop.getPolicyUniqueId() != null && !prop.getPolicyUniqueId().isEmpty()) {
@@ -336,27 +331,20 @@ public class PolicyClient {
         logger.info("Search in Policy Engine for policyName=" + policyName);
         configRequestParameters.setPolicyName(policyName);
         try {
-            Collection<PolicyConfig> response = getPolicyEngine().getConfig(configRequestParameters);
-            for (PolicyConfig policyConfig : response) {
-                if (policyConfig.getPolicyVersion() != null) {
-                    Integer version = Integer.valueOf(policyConfig.getPolicyVersion());
-                    versions.add(version);
-                } else {
-                    logger.warn("Policy version was null, unable to convert it to Integer");
-                }
+            Collection<String> response = getPolicyEngine().listConfig(configRequestParameters);
+            if (response != null && !response.isEmpty()) {
+                policyexists = true;
             }
-            Collections.sort(versions);
-            logger.info("Policy versions.size()=" + versions.size());
         } catch (PolicyConfigException e) {
             // just print warning - if no policy version found
             logger.warn("policy not found...policy name - " + policyName, e);
         }
-        return versions;
+        return policyexists;
     }
 
     /**
      * This method create a new policy engine.
-     * 
+     *
      * @return A new policy engine
      */
     private synchronized PolicyEngine getPolicyEngine() {
@@ -381,8 +369,7 @@ public class PolicyClient {
         String deletePolicyResponse = "";
         try {
             String policyNamePrefix = refProp.getStringValue(POLICY_MS_NAME_PREFIX_PROPERTY_NAME);
-            List<Integer> versions = getVersions(policyNamePrefix, prop);
-            if (!versions.isEmpty()) {
+            if (checkPolicyExists(policyNamePrefix, prop)) {
                 String policyType = refProp.getStringValue(POLICY_MSTYPE_PROPERTY_NAME);
                 deletePolicyResponse = deletePolicy(prop, policyType);
             }
@@ -415,8 +402,7 @@ public class PolicyClient {
         String deletePolicyResponse = "";
         try {
             String policyNamePrefix = refProp.getStringValue(POLICY_OP_NAME_PREFIX_PROPERTY_NAME);
-            List<Integer> versions = getVersions(policyNamePrefix, prop);
-            if (!versions.isEmpty()) {
+            if (checkPolicyExists(policyNamePrefix, prop)) {
                 String policyType = refProp.getStringValue(POLICY_OP_TYPE_PROPERTY_NAME);
                 deletePolicyResponse = deletePolicy(prop, policyType);
             }
index 13dccda..8bc6f69 100644 (file)
@@ -29,7 +29,6 @@ import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Profile;
-import org.springframework.stereotype.Component;
 
 @Configuration
 @Profile("clamp-aaf-authentication")
@@ -54,7 +53,11 @@ public class AAFConfiguration {
     public FilterRegistrationBean cadiFilterRegistration() {
         FilterRegistrationBean registration = new FilterRegistrationBean();
         registration.setFilter(cadiFilter());
-        registration.addUrlPatterns("/restservices/*");
+        registration.addUrlPatterns("/restservices/clds/v1/clds/*");
+        registration.addUrlPatterns("/restservices/clds/v1/cldsTempate/*");
+        registration.addUrlPatterns("/restservices/clds/v1/tosca/*");
+        registration.addUrlPatterns("/restservices/clds/v1/dictionary/*");
+        registration.addUrlPatterns("/restservices/clds/v1/user/*");
         //registration.addUrlPatterns("*");
         registration.setName("cadiFilter");
         registration.setOrder(0);
index a3771aa..54a5196 100644 (file)
@@ -18,7 +18,7 @@
  * limitations under the License.
  * ============LICENSE_END============================================
  * ===================================================================
- * 
+ *
  */
 
 package org.onap.clamp.clds.dao;
@@ -29,13 +29,19 @@ import com.att.eelf.configuration.EELFManager;
 import java.io.InputStream;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 import javax.sql.DataSource;
 
 import org.onap.clamp.clds.model.CldsDbServiceCache;
+import org.onap.clamp.clds.model.CldsDictionary;
+import org.onap.clamp.clds.model.CldsDictionaryItem;
 import org.onap.clamp.clds.model.CldsEvent;
 import org.onap.clamp.clds.model.CldsModel;
 import org.onap.clamp.clds.model.CldsModelInstance;
@@ -43,6 +49,7 @@ import org.onap.clamp.clds.model.CldsModelProp;
 import org.onap.clamp.clds.model.CldsMonitoringDetails;
 import org.onap.clamp.clds.model.CldsServiceData;
 import org.onap.clamp.clds.model.CldsTemplate;
+import org.onap.clamp.clds.model.CldsToscaModel;
 import org.onap.clamp.clds.model.ValueItem;
 import org.springframework.dao.EmptyResultDataAccessException;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -72,7 +79,13 @@ public class CldsDao {
     private static final String HEALTHCHECK = "Select 1";
     private static final String V_CONTROL_NAME_PREFIX = "v_control_name_prefix";
     private static final String V_CONTROL_NAME_UUID = "v_control_name_uuid";
-   
+
+    private SimpleJdbcCall procInsertToscaModel;
+    private SimpleJdbcCall procInsertNewToscaModelVersion;
+    private SimpleJdbcCall procInsertDictionary;
+    private SimpleJdbcCall procInsertDictionaryElement;
+
+    private static final String DATE_FORMAT = "MM-dd-yyyy HH:mm:ss";
     /**
      * Log message when instantiating
      */
@@ -95,6 +108,11 @@ public class CldsDao {
         this.procInsModelInstance = new SimpleJdbcCall(dataSource).withProcedureName("ins_model_instance");
         this.procDelAllModelInstances = new SimpleJdbcCall(dataSource).withProcedureName("del_all_model_instances");
         this.procDeleteModel = new SimpleJdbcCall(dataSource).withProcedureName("del_model");
+        this.procInsertToscaModel = new SimpleJdbcCall(dataSource).withProcedureName("set_tosca_model");
+        this.procInsertNewToscaModelVersion = new SimpleJdbcCall(dataSource)
+            .withProcedureName("set_new_tosca_model_version");
+        this.procInsertDictionary = new SimpleJdbcCall(dataSource).withProcedureName("set_dictionary");
+        this.procInsertDictionaryElement = new SimpleJdbcCall(dataSource).withProcedureName("set_dictionary_elements");
     }
 
     /**
@@ -116,15 +134,14 @@ public class CldsDao {
         CldsModel model = new CldsModel();
         model.setName(modelName);
         SqlParameterSource in = new MapSqlParameterSource().addValue("v_model_name", modelName)
-                .addValue(V_CONTROL_NAME_UUID, controlNameUuid);
+            .addValue(V_CONTROL_NAME_UUID, controlNameUuid);
         Map<String, Object> out = logSqlExecution(procGetModel, in);
         populateModelProperties(model, out);
         return model;
     }
 
     /**
-     * Get a model and template information from the database given the model
-     * name.
+     * Get a model and template information from the database given the model name.
      *
      * @param modelName
      * @return model
@@ -134,14 +151,12 @@ public class CldsDao {
         model.setName(modelName);
         SqlParameterSource in = new MapSqlParameterSource().addValue("v_model_name", modelName);
         Map<String, Object> out = logSqlExecution(procGetModelTemplate, in);
-        // todo : rationalize
         populateModelProperties(model, out);
         Map<String, Object> modelResults = logSqlExecution(procGetModel, in);
         Object modelResultObject = modelResults.get("#result-set-1");
-        if (modelResultObject != null && modelResultObject instanceof ArrayList) {
-            List<Object> modelInstanceRs = (List<Object>) modelResultObject;
-            for (Object currModelInstance : modelInstanceRs) {
-                if (currModelInstance != null && currModelInstance instanceof HashMap) {
+        if (modelResultObject instanceof ArrayList) {
+            for (Object currModelInstance : (List<Object>) modelResultObject) {
+                if (currModelInstance instanceof HashMap) {
                     HashMap<String, String> modelInstanceMap = (HashMap<String, String>) currModelInstance;
                     CldsModelInstance modelInstance = new CldsModelInstance();
                     modelInstance.setModelInstanceId(modelInstanceMap.get("model_instance_id"));
@@ -156,8 +171,8 @@ public class CldsDao {
     }
 
     /**
-     * Update model in the database using parameter values and return updated
-     * model object.
+     * Update model in the database using parameter values and return updated model
+     * object.
      *
      * @param model
      * @param userid
@@ -165,12 +180,12 @@ public class CldsDao {
      */
     public CldsModel setModel(CldsModel model, String userid) {
         SqlParameterSource in = new MapSqlParameterSource().addValue("v_model_name", model.getName())
-                .addValue("v_template_id", model.getTemplateId()).addValue("v_user_id", userid)
-                .addValue("v_model_prop_text", model.getPropText())
-                .addValue("v_model_blueprint_text", model.getBlueprintText())
-                .addValue("v_service_type_id", model.getTypeId()).addValue("v_deployment_id", model.getDeploymentId())
-                .addValue("v_control_name_prefix", model.getControlNamePrefix())
-                .addValue(V_CONTROL_NAME_UUID, model.getControlNameUuid());
+            .addValue("v_template_id", model.getTemplateId()).addValue("v_user_id", userid)
+            .addValue("v_model_prop_text", model.getPropText())
+            .addValue("v_model_blueprint_text", model.getBlueprintText())
+            .addValue("v_service_type_id", model.getTypeId()).addValue("v_deployment_id", model.getDeploymentId())
+            .addValue("v_control_name_prefix", model.getControlNamePrefix())
+            .addValue(V_CONTROL_NAME_UUID, model.getControlNameUuid());
         Map<String, Object> out = logSqlExecution(procSetModel, in);
         model.setControlNamePrefix((String) out.get(V_CONTROL_NAME_PREFIX));
         model.setControlNameUuid((String) out.get(V_CONTROL_NAME_UUID));
@@ -184,8 +199,8 @@ public class CldsDao {
     }
 
     /**
-     * Inserts new modelInstance in the database using parameter values and
-     * return updated model object.
+     * Inserts new modelInstance in the database using parameter values and return
+     * updated model object.
      *
      * @param model
      * @param modelInstancesList
@@ -203,9 +218,9 @@ public class CldsDao {
                 logger.debug("v_vm_name={}", currModelInstance.getVmName());
                 logger.debug("v_location={}", currModelInstance.getLocation());
                 SqlParameterSource in = new MapSqlParameterSource()
-                        .addValue(V_CONTROL_NAME_UUID, model.getControlNameUuid())
-                        .addValue("v_vm_name", currModelInstance.getVmName())
-                        .addValue("v_location", currModelInstance.getLocation());
+                    .addValue(V_CONTROL_NAME_UUID, model.getControlNameUuid())
+                    .addValue("v_vm_name", currModelInstance.getVmName())
+                    .addValue("v_location", currModelInstance.getLocation());
                 Map<String, Object> out = logSqlExecution(procInsModelInstance, in);
                 model.setId((String) (out.get("v_model_id")));
                 CldsModelInstance modelInstance = new CldsModelInstance();
@@ -230,10 +245,10 @@ public class CldsDao {
     public CldsEvent insEvent(String modelName, String controlNamePrefix, String controlNameUuid, CldsEvent cldsEvent) {
         CldsEvent event = new CldsEvent();
         SqlParameterSource in = new MapSqlParameterSource().addValue("v_model_name", modelName)
-                .addValue(V_CONTROL_NAME_PREFIX, controlNamePrefix).addValue(V_CONTROL_NAME_UUID, controlNameUuid)
-                .addValue("v_user_id", cldsEvent.getUserid()).addValue("v_action_cd", cldsEvent.getActionCd())
-                .addValue("v_action_state_cd", cldsEvent.getActionStateCd())
-                .addValue("v_process_instance_id", cldsEvent.getProcessInstanceId());
+            .addValue(V_CONTROL_NAME_PREFIX, controlNamePrefix).addValue(V_CONTROL_NAME_UUID, controlNameUuid)
+            .addValue("v_user_id", cldsEvent.getUserid()).addValue("v_action_cd", cldsEvent.getActionCd())
+            .addValue("v_action_state_cd", cldsEvent.getActionStateCd())
+            .addValue("v_process_instance_id", cldsEvent.getProcessInstanceId());
         Map<String, Object> out = logSqlExecution(procInsEvent, in);
         event.setId((String) (out.get("v_event_id")));
         return event;
@@ -253,7 +268,7 @@ public class CldsDao {
      */
     public void updEvent(String eventId, String processInstanceId) {
         SqlParameterSource in = new MapSqlParameterSource().addValue("v_event_id", eventId)
-                .addValue("v_process_instance_id", processInstanceId);
+            .addValue("v_process_instance_id", processInstanceId);
         logSqlExecution(procUpdEvent, in);
     }
 
@@ -276,9 +291,9 @@ public class CldsDao {
      */
     public void setTemplate(CldsTemplate template, String userid) {
         SqlParameterSource in = new MapSqlParameterSource().addValue("v_template_name", template.getName())
-                .addValue("v_user_id", userid).addValue("v_template_bpmn_text", template.getBpmnText())
-                .addValue("v_template_image_text", template.getImageText())
-                .addValue("v_template_doc_text", template.getPropText());
+            .addValue("v_user_id", userid).addValue("v_template_bpmn_text", template.getBpmnText())
+            .addValue("v_template_image_text", template.getImageText())
+            .addValue("v_template_doc_text", template.getPropText());
         Map<String, Object> out = logSqlExecution(procSetTemplate, in);
         template.setId((String) (out.get("v_template_id")));
         template.setBpmnUserid((String) (out.get("v_template_bpmn_user_id")));
@@ -333,10 +348,10 @@ public class CldsDao {
         try {
             String getCldsServiceSQL = "SELECT * , TIMESTAMPDIFF(SECOND, timestamp, CURRENT_TIMESTAMP()) FROM clds_service_cache where invariant_service_id  = ? ";
             cldsServiceData = jdbcTemplateObject.queryForObject(getCldsServiceSQL, new Object[] { invariantUUID },
-                    new CldsServiceDataMapper());
+                new CldsServiceDataMapper());
             if (cldsServiceData != null) {
                 logger.info("CldsServiceData found in cache for Service Invariant ID:"
-                        + cldsServiceData.getServiceInvariantUUID());
+                    + cldsServiceData.getServiceInvariantUUID());
                 return cldsServiceData;
             } else {
                 logger.warn("CldsServiceData not found in cache for Service Invariant ID:" + invariantUUID);
@@ -351,13 +366,13 @@ public class CldsDao {
 
     public void setCldsServiceCache(CldsDbServiceCache cldsDBServiceCache) {
         if (cldsDBServiceCache != null && cldsDBServiceCache.getInvariantId() != null
-                && cldsDBServiceCache.getServiceId() != null) {
+            && cldsDBServiceCache.getServiceId() != null) {
             String invariantUuid = cldsDBServiceCache.getInvariantId();
             String serviceUuid = cldsDBServiceCache.getServiceId();
             InputStream is = cldsDBServiceCache.getCldsDataInstream();
             String insertCldsServiceCacheSql = "INSERT INTO clds_service_cache"
-                    + "(invariant_service_id,service_id,timestamp,object_data) VALUES"
-                    + "(?,?,CURRENT_TIMESTAMP,?) ON DUPLICATE KEY UPDATE invariant_service_id = VALUES(invariant_service_id) , timestamp = CURRENT_TIMESTAMP , object_data = VALUES(object_data) ";
+                + "(invariant_service_id,service_id,timestamp,object_data) VALUES"
+                + "(?,?,CURRENT_TIMESTAMP,?) ON DUPLICATE KEY UPDATE invariant_service_id = VALUES(invariant_service_id) , timestamp = CURRENT_TIMESTAMP , object_data = VALUES(object_data) ";
             jdbcTemplateObject.update(insertCldsServiceCacheSql, invariantUuid, serviceUuid, is);
         }
     }
@@ -377,13 +392,13 @@ public class CldsDao {
 
     /**
      * Method to get deployed/active models with model properties.
-     * 
+     *
      * @return list of CldsModelProp
      */
     public List<CldsModelProp> getDeployedModelProperties() {
         List<CldsModelProp> cldsModelPropList = new ArrayList<>();
         String modelsSql = "select m.model_id, m.model_name, mp.model_prop_id, mp.model_prop_text FROM model m, model_properties mp, event e "
-                + "WHERE m.model_prop_id = mp.model_prop_id and m.event_id = e.event_id and e.action_cd = 'DEPLOY'";
+            + "WHERE m.model_prop_id = mp.model_prop_id and m.event_id = e.event_id and e.action_cd = 'DEPLOY'";
         List<Map<String, Object>> rows = jdbcTemplateObject.queryForList(modelsSql);
         CldsModelProp cldsModelProp = null;
         for (Map<String, Object> row : rows) {
@@ -399,23 +414,22 @@ public class CldsDao {
 
     /**
      * Method to get deployed/active models with model properties.
-     * 
+     *
      * @return list of CLDS-Monitoring-Details: CLOSELOOP_NAME | Close loop name
-     *         used in the CLDS application (prefix: ClosedLoop- + unique
-     *         ClosedLoop ID) MODEL_NAME | Model Name in CLDS application
-     *         SERVICE_TYPE_ID | TypeId returned from the DCAE application when
-     *         the ClosedLoop is submitted (DCAEServiceTypeRequest generated in
-     *         DCAE application). DEPLOYMENT_ID | Id generated when the
-     *         ClosedLoop is deployed in DCAE. TEMPLATE_NAME | Template used to
-     *         generate the ClosedLoop model. ACTION_CD | Current state of the
-     *         ClosedLoop in CLDS application.
+     *         used in the CLDS application (prefix: ClosedLoop- + unique ClosedLoop
+     *         ID) MODEL_NAME | Model Name in CLDS application SERVICE_TYPE_ID |
+     *         TypeId returned from the DCAE application when the ClosedLoop is
+     *         submitted (DCAEServiceTypeRequest generated in DCAE application).
+     *         DEPLOYMENT_ID | Id generated when the ClosedLoop is deployed in DCAE.
+     *         TEMPLATE_NAME | Template used to generate the ClosedLoop model.
+     *         ACTION_CD | Current state of the ClosedLoop in CLDS application.
      */
     public List<CldsMonitoringDetails> getCLDSMonitoringDetails() {
-        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
-        List<CldsMonitoringDetails> cldsMonitoringDetailsList = new ArrayList<CldsMonitoringDetails>();
+        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
+        List<CldsMonitoringDetails> cldsMonitoringDetailsList = new ArrayList<>();
         String modelsSql = "SELECT CONCAT(M.CONTROL_NAME_PREFIX, M.CONTROL_NAME_UUID) AS CLOSELOOP_NAME , M.MODEL_NAME, M.SERVICE_TYPE_ID, M.DEPLOYMENT_ID, T.TEMPLATE_NAME, E.ACTION_CD, E.USER_ID, E.TIMESTAMP "
-                + "FROM MODEL M, TEMPLATE T, EVENT E "
-                + "WHERE M.TEMPLATE_ID = T.TEMPLATE_ID AND M.EVENT_ID = E.EVENT_ID " + "ORDER BY ACTION_CD";
+            + "FROM MODEL M, TEMPLATE T, EVENT E " + "WHERE M.TEMPLATE_ID = T.TEMPLATE_ID AND M.EVENT_ID = E.EVENT_ID "
+            + "ORDER BY ACTION_CD";
         List<Map<String, Object>> rows = jdbcTemplateObject.queryForList(modelsSql);
         CldsMonitoringDetails cldsMonitoringDetails = null;
         for (Map<String, Object> row : rows) {
@@ -435,16 +449,15 @@ public class CldsDao {
 
     /**
      * Method to delete model from database.
-     * 
+     *
      * @param modelName
      */
     public void deleteModel(String modelName) {
         SqlParameterSource in = new MapSqlParameterSource().addValue("v_model_name", modelName);
         logSqlExecution(procDeleteModel, in);
     }
-    
+
     private void populateModelProperties(CldsModel model, Map out) {
-        // todo : rationalize
         model.setControlNamePrefix((String) out.get(V_CONTROL_NAME_PREFIX));
         model.setControlNameUuid((String) out.get(V_CONTROL_NAME_UUID));
         model.setId((String) (out.get("v_model_id")));
@@ -461,6 +474,252 @@ public class CldsDao {
         model.getEvent().setProcessInstanceId((String) out.get("v_event_process_instance_id"));
         model.getEvent().setUserid((String) out.get("v_event_user_id"));
         model.setTypeId((String) out.get("v_service_type_id"));
-        model.setDeploymentId((String) out.get("v_deployment_id"));            
-    }    
+        model.setDeploymentId((String) out.get("v_deployment_id"));
+    }
+
+    /**
+     * Method to retrieve a tosca models by Policy Type from database.
+     *
+     * @param policyType
+     * @return List of CldsToscaModel
+     */
+    public List<CldsToscaModel> getAllToscaModels() {
+        return getToscaModel(null, null);
+    }
+
+    /**
+     * Method to retrieve a tosca models by Policy Type from database.
+     *
+     * @param policyType
+     * @return List of CldsToscaModel
+     */
+    public List<CldsToscaModel> getToscaModelByPolicyType(String policyType) {
+        return getToscaModel(null, policyType);
+    }
+
+    /**
+     * Method to retrieve a tosca models by toscaModelName, version from database.
+     *
+     * @param policyType
+     * @return List of CldsToscaModel
+     */
+    public List<CldsToscaModel> getToscaModelByName(String toscaModelName) {
+        return getToscaModel(toscaModelName, null);
+    }
+
+    // Retrieve the latest tosca model for a policy type or by tosca model name
+
+    private List<CldsToscaModel> getToscaModel(String toscaModelName, String policyType) {
+        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
+        List<CldsToscaModel> cldsToscaModels = new ArrayList<>();
+        MapSqlParameterSource params = new MapSqlParameterSource();
+
+        String toscaModelSql = "SELECT tm.tosca_model_name, tm.tosca_model_id, tm.policy_type, tmr.tosca_model_revision_id, tmr.version, tmr.user_id, tmr.createdTimestamp, tmr.lastUpdatedTimestamp, tmr.tosca_model_yaml FROM tosca_model tm, tosca_model_revision tmr WHERE tm.tosca_model_id = tmr.tosca_model_id ";
+        if (toscaModelName != null) {
+            toscaModelSql += " AND tm.tosca_model_name = :toscaModelName";
+            params.addValue("toscaModelName", toscaModelName);
+        }
+        if (policyType != null) {
+            toscaModelSql += " AND tm.policy_type = :policyType";
+            params.addValue("policyType", policyType);
+        }
+        toscaModelSql += " AND tmr.version = (select max(version) from tosca_model_revision st where tmr.tosca_model_id=st.tosca_model_id)";
+
+        Optional.ofNullable(jdbcTemplateObject.queryForList(toscaModelSql, params)).orElse(Collections.emptyList()).forEach(row -> {
+            CldsToscaModel cldsToscaModel = new CldsToscaModel();
+            cldsToscaModel.setId((String) row.get("tosca_model_id"));
+            cldsToscaModel.setPolicyType((String) row.get("policy_type"));
+            cldsToscaModel.setToscaModelName((String) row.get("tosca_model_name"));
+            cldsToscaModel.setUserId((String) row.get("user_id"));
+            cldsToscaModel.setRevisionId((String) row.get("tosca_model_revision_id"));
+            cldsToscaModel.setVersion(((Double) row.get("version")));
+            cldsToscaModel.setCreatedDate(sdf.format(row.get("createdTimestamp")));
+            cldsToscaModel.setToscaModelYaml((String) row.get("tosca_model_yaml"));
+            cldsToscaModels.add(cldsToscaModel);
+        });
+        return cldsToscaModels;
+    }
+
+    /**
+     * Method to upload a new version of Tosca Model Yaml in Database
+     *
+     * @param cldsToscaModel
+     * @param userId
+     * @return CldsToscaModel
+     *
+     */
+    public CldsToscaModel updateToscaModelWithNewVersion(CldsToscaModel cldsToscaModel, String userId) {
+        SqlParameterSource in = new MapSqlParameterSource().addValue("v_tosca_model_id", cldsToscaModel.getId())
+            .addValue("v_version", cldsToscaModel.getVersion())
+            .addValue("v_tosca_model_yaml", cldsToscaModel.getToscaModelYaml())
+            .addValue("v_tosca_model_json", cldsToscaModel.getToscaModelJson()).addValue("v_user_id", userId);
+        Map<String, Object> out = logSqlExecution(procInsertNewToscaModelVersion, in);
+        cldsToscaModel.setRevisionId((String) (out.get("v_revision_id")));
+        return cldsToscaModel;
+    }
+
+    /**
+     * Method to upload a new Tosca model Yaml in DB. Default version is 1.0
+     *
+     * @param cldsToscaModel
+     * @param userId
+     * @return CldsToscaModel
+     */
+    public CldsToscaModel insToscaModel(CldsToscaModel cldsToscaModel, String userId) {
+        SqlParameterSource in = new MapSqlParameterSource()
+            .addValue("v_tosca_model_name", cldsToscaModel.getToscaModelName())
+            .addValue("v_policy_type", cldsToscaModel.getPolicyType())
+            .addValue("v_tosca_model_yaml", cldsToscaModel.getToscaModelYaml())
+            .addValue("v_tosca_model_json", cldsToscaModel.getToscaModelJson())
+            .addValue("v_version", cldsToscaModel.getVersion()).addValue("v_user_id", userId);
+        Map<String, Object> out = logSqlExecution(procInsertToscaModel, in);
+        cldsToscaModel.setId((String) (out.get("v_tosca_model_id")));
+        cldsToscaModel.setRevisionId((String) (out.get("v_revision_id")));
+        cldsToscaModel.setUserId((String) out.get("v_user_id"));
+        return cldsToscaModel;
+    }
+
+    /**
+     * Method to insert a new Dictionary in Database
+     *
+     * @param cldsDictionary
+     */
+    public void insDictionary(CldsDictionary cldsDictionary) {
+        SqlParameterSource in = new MapSqlParameterSource()
+            .addValue("v_dictionary_name", cldsDictionary.getDictionaryName())
+            .addValue("v_user_id", cldsDictionary.getCreatedBy());
+        Map<String, Object> out = logSqlExecution(procInsertDictionary, in);
+        cldsDictionary.setDictionaryId((String) (out.get("v_dictionary_id")));
+    }
+
+    /**
+     * Method to update Dictionary with new info in Database
+     *
+     * @param dictionaryId
+     * @param cldsDictionary
+     * @param userId
+     */
+    public void updateDictionary(String dictionaryId, CldsDictionary cldsDictionary, String userId) {
+        String dictionarySql = "UPDATE dictionary SET dictionary_name = :dictionary_name, modified_by = :modified_by WHERE dictionary_id = :dictionary_id";
+        SqlParameterSource namedParameters = new MapSqlParameterSource()
+            .addValue("dictionary_name", cldsDictionary.getDictionaryName()).addValue("modified_by", userId)
+            .addValue("dictionary_id", dictionaryId);
+        jdbcTemplateObject.update(dictionarySql, namedParameters);
+        cldsDictionary.setUpdatedBy(userId);
+    }
+
+    /**
+     * Method to get list of Dictionaries from the Database
+     *
+     * @param dictionaryId
+     * @param dictionaryName
+     * @return
+     */
+    public List<CldsDictionary> getDictionary(String dictionaryId, String dictionaryName) {
+        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
+        List<CldsDictionary> dictionaries = new ArrayList<>();
+        String dictionarySql = "SELECT dictionary_id, dictionary_name, created_by, modified_by, timestamp FROM dictionary WHERE ";
+        MapSqlParameterSource namedParameters = new MapSqlParameterSource();
+        Optional.ofNullable(dictionaryName).ifPresent(dn -> namedParameters.addValue("dictionary_name", dn));
+        Optional.ofNullable(dictionaryId).ifPresent(dn -> namedParameters.addValue("dictionary_id", dn));
+        dictionarySql += Optional.ofNullable(namedParameters.getParameterNames()).filter(a -> a.length > 0)
+            .map(Arrays::stream).map(s -> s.map(param -> param + " = :" + param).collect(Collectors.joining(" AND ")))
+            .orElse("1");
+
+        Optional.ofNullable(jdbcTemplateObject.queryForList(dictionarySql, namedParameters)).orElse(Collections.emptyList()).forEach(row -> {
+            CldsDictionary cldsDictionary = new CldsDictionary();
+            cldsDictionary.setDictionaryId((String) row.get("dictionary_id"));
+            cldsDictionary.setDictionaryName((String) row.get("dictionary_name"));
+            cldsDictionary.setCreatedBy((String) row.get("created_by"));
+            cldsDictionary.setUpdatedBy((String) row.get("modified_by"));
+            cldsDictionary.setLastUpdatedDate(sdf.format(row.get("timestamp")));
+            dictionaries.add(cldsDictionary);
+        });
+        return dictionaries;
+    }
+
+    /**
+     * Method to insert a new Dictionary Element for given dictionary in Database
+     *
+     * @param cldsDictionaryItem
+     * @param userId
+     */
+    public void insDictionarElements(CldsDictionaryItem cldsDictionaryItem, String userId) {
+        SqlParameterSource in = new MapSqlParameterSource()
+            .addValue("v_dictionary_id", cldsDictionaryItem.getDictionaryId())
+            .addValue("v_dict_element_name", cldsDictionaryItem.getDictElementName())
+            .addValue("v_dict_element_short_name", cldsDictionaryItem.getDictElementShortName())
+            .addValue("v_dict_element_description", cldsDictionaryItem.getDictElementDesc())
+            .addValue("v_dict_element_type", cldsDictionaryItem.getDictElementType()).addValue("v_user_id", userId);
+        Map<String, Object> out = logSqlExecution(procInsertDictionaryElement, in);
+        cldsDictionaryItem.setDictElementId((String) (out.get("v_dict_element_id")));
+    }
+
+    /**
+     * Method to update Dictionary Elements with new info for a given dictionary in
+     * Database
+     *
+     * @param dictionaryElementId
+     * @param cldsDictionaryItem
+     * @param userId
+     */
+    public void updateDictionaryElements(String dictionaryElementId, CldsDictionaryItem cldsDictionaryItem,
+        String userId) {
+
+        String dictionarySql = "UPDATE dictionary_elements SET dict_element_name = :dict_element_name, dict_element_short_name = :dict_element_short_name, dict_element_description = :dict_element_description,dict_element_type=:dict_element_type, modified_by = :modified_by WHERE dict_element_id = :dict_element_id";
+        SqlParameterSource namedParameters = new MapSqlParameterSource()
+            .addValue("dict_element_name", cldsDictionaryItem.getDictElementName())
+            .addValue("dict_element_short_name", cldsDictionaryItem.getDictElementShortName())
+            .addValue("dict_element_description", cldsDictionaryItem.getDictElementDesc())
+            .addValue("dict_element_type", cldsDictionaryItem.getDictElementType())
+            .addValue("modified_by", userId)
+            .addValue("dict_element_id", dictionaryElementId);
+        jdbcTemplateObject.update(dictionarySql, namedParameters);
+        cldsDictionaryItem.setUpdatedBy(userId);
+    }
+
+    /**
+     * Method to get list of all dictionary elements for a given dictionary in the
+     * Database
+     *
+     * @param dictionaryName
+     * @param dictionaryId
+     * @param dictElementShortName
+     * @return
+     */
+    public List<CldsDictionaryItem> getDictionaryElements(String dictionaryName, String dictionaryId,
+        String dictElementShortName) {
+        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
+        List<CldsDictionaryItem> dictionaryItems = new ArrayList<>();
+        MapSqlParameterSource namedParameters = new MapSqlParameterSource();
+        String dictionarySql = "SELECT de.dict_element_id, de.dictionary_id, de.dict_element_name, de.dict_element_short_name, de.dict_element_description, de.dict_element_type, de.created_by, de.modified_by, de.timestamp  "
+            + "FROM dictionary_elements de, dictionary d WHERE de.dictionary_id = d.dictionary_id ";
+        if (dictionaryId != null) {
+            dictionarySql+=" AND d.dictionary_id = :dictionaryId";
+            namedParameters.addValue("dictionaryId", dictionaryId);
+        }
+        if (dictElementShortName!=null) {
+            dictionarySql+=" AND de.dict_element_short_name = :dictElementShortName";
+            namedParameters.addValue("dictElementShortName", dictElementShortName);
+        }
+        if (dictionaryName!=null) {
+            dictionarySql+=" AND dictionary_name = :dictionaryName";
+            namedParameters.addValue("dictionaryName", dictionaryName);
+        }
+
+        Optional.ofNullable(jdbcTemplateObject.queryForList(dictionarySql,namedParameters)).orElse(Collections.emptyList()).forEach(row -> {
+            CldsDictionaryItem dictionaryItem = new CldsDictionaryItem();
+            dictionaryItem.setDictElementId((String) row.get("dict_element_id"));
+            dictionaryItem.setDictionaryId((String) row.get("dictionary_id"));
+            dictionaryItem.setDictElementName((String) row.get("dict_element_name"));
+            dictionaryItem.setDictElementShortName((String) row.get("dict_element_short_name"));
+            dictionaryItem.setDictElementDesc((String) row.get("dict_element_description"));
+            dictionaryItem.setDictElementType((String) row.get("dict_element_type"));
+            dictionaryItem.setCreatedBy((String) row.get("created_by"));
+            dictionaryItem.setUpdatedBy((String) row.get("modified_by"));
+            dictionaryItem.setLastUpdatedDate(sdf.format(row.get("timestamp")));
+            dictionaryItems.add(dictionaryItem);
+        });
+        return dictionaryItems;
+    }
 }
diff --git a/src/main/java/org/onap/clamp/clds/model/CldsDictionary.java b/src/main/java/org/onap/clamp/clds/model/CldsDictionary.java
new file mode 100644 (file)
index 0000000..a9b003d
--- /dev/null
@@ -0,0 +1,164 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.model;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.onap.clamp.clds.dao.CldsDao;
+
+/**
+ * Represents a CLDS Dictionary.
+ */
+@JsonInclude(Include.NON_NULL)
+public class CldsDictionary {
+
+    private String dictionaryId;
+    private String dictionaryName;
+    private String createdBy;
+    private String updatedBy;
+    private String lastUpdatedDate;
+    private List<CldsDictionaryItem> cldsDictionaryItems = new ArrayList<>();
+
+    /**
+     * Creates or updates dictionary item for a dictionary in DB
+     *
+     * @param dictionaryName
+     * @param cldsDao
+     * @param userId
+     */
+    public void save(String dictionaryName, CldsDao cldsDao, String userId) {
+        List<CldsDictionary> list = cldsDao.getDictionary(this.getDictionaryId(), dictionaryName);
+        if (list != null && !list.isEmpty()) {
+            CldsDictionary cldsDictionary = list.stream().findFirst().get();
+            if (!cldsDictionary.getDictionaryName().equalsIgnoreCase(this.getDictionaryName())) {
+                cldsDao.updateDictionary(cldsDictionary.getDictionaryId(), this, userId);
+                this.setCreatedBy(cldsDictionary.getCreatedBy());
+            } else {
+                this.setDictionaryId(cldsDictionary.getDictionaryId());
+                this.setCreatedBy(cldsDictionary.getCreatedBy());
+                this.setUpdatedBy(cldsDictionary.getUpdatedBy());
+                this.setLastUpdatedDate(cldsDictionary.getLastUpdatedDate());
+            }
+        } else {
+            this.setCreatedBy(userId);
+            this.setUpdatedBy(userId);
+            cldsDao.insDictionary(this);
+        }
+    }
+
+    /**
+     * @return the dictionaryId
+     */
+    public String getDictionaryId() {
+        return dictionaryId;
+    }
+
+    /**
+     * @param dictionaryId
+     *        the dictionaryId to set
+     */
+    public void setDictionaryId(String dictionaryId) {
+        this.dictionaryId = dictionaryId;
+    }
+
+    /**
+     * @return the dictionaryName
+     */
+    public String getDictionaryName() {
+        return dictionaryName;
+    }
+
+    /**
+     * @param dictionaryName
+     *        the dictionaryName to set
+     */
+    public void setDictionaryName(String dictionaryName) {
+        this.dictionaryName = dictionaryName;
+    }
+
+    /**
+     * @return the createdBy
+     */
+    public String getCreatedBy() {
+        return createdBy;
+    }
+
+    /**
+     * @param createdBy
+     *        the createdBy to set
+     */
+    public void setCreatedBy(String createdBy) {
+        this.createdBy = createdBy;
+    }
+
+    /**
+     * @return the updatedBy
+     */
+    public String getUpdatedBy() {
+        return updatedBy;
+    }
+
+    /**
+     * @param updatedby
+     *        the updatedBy to set
+     */
+    public void setUpdatedBy(String updatedby) {
+        updatedBy = updatedby;
+    }
+
+    /**
+     * @return the lastUpdatedDate
+     */
+    public String getLastUpdatedDate() {
+        return lastUpdatedDate;
+    }
+
+    /**
+     * @param lastUpdatedDate
+     *        the lastUpdatedDate to set
+     */
+    public void setLastUpdatedDate(String lastUpdatedDate) {
+        this.lastUpdatedDate = lastUpdatedDate;
+    }
+
+    /**
+     * @return the cldsDictionaryItems
+     */
+    public List<CldsDictionaryItem> getCldsDictionaryItems() {
+        return cldsDictionaryItems;
+    }
+
+    /**
+     * @param cldsDictionaryItems
+     *        the cldsDictionaryItems to set
+     */
+    public void setCldsDictionaryItems(List<CldsDictionaryItem> cldsDictionaryItems) {
+        this.cldsDictionaryItems = cldsDictionaryItems;
+    }
+
+}
diff --git a/src/main/java/org/onap/clamp/clds/model/CldsDictionaryItem.java b/src/main/java/org/onap/clamp/clds/model/CldsDictionaryItem.java
new file mode 100644 (file)
index 0000000..87ba9fe
--- /dev/null
@@ -0,0 +1,205 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.model;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+
+import java.util.List;
+
+import org.onap.clamp.clds.dao.CldsDao;
+
+/**
+ * Represents a CLDS Dictionary Item.
+ */
+@JsonInclude(Include.NON_NULL)
+public class CldsDictionaryItem {
+
+    private String dictElementId;
+    private String dictionaryId;
+    private String dictElementName;
+    private String dictElementShortName;
+    private String dictElementDesc;
+    private String dictElementType;
+    private String createdBy;
+    private String updatedBy;
+    private String lastUpdatedDate;
+
+    public void save(String dictionaryName, CldsDao cldsDao, String userId) {
+        // Check if dictionary exists.
+        List<CldsDictionary> list = cldsDao.getDictionary(this.getDictionaryId(), dictionaryName);
+        if (list != null && !list.isEmpty()) {
+            // Dictionary found. We can add or update the dictionary element
+            CldsDictionary cldsDictionary = list.stream().findFirst().get();
+            List<CldsDictionaryItem> dictionaryItems = cldsDao.getDictionaryElements(dictionaryName,
+                cldsDictionary.getDictionaryId(), this.getDictElementShortName());
+            if (dictionaryItems != null && !dictionaryItems.isEmpty()) {
+                CldsDictionaryItem item = dictionaryItems.stream().findFirst().get();
+                cldsDao.updateDictionaryElements(item.getDictElementId(), this, userId);
+                this.setCreatedBy(item.getCreatedBy());
+
+            } else {
+                this.setCreatedBy(userId);
+                this.setUpdatedBy(userId);
+                cldsDao.insDictionarElements(this, userId);
+            }
+        }
+    }
+
+    /**
+     * @return the dictElementId
+     */
+    public String getDictElementId() {
+        return dictElementId;
+    }
+
+    /**
+     * @param dictElementId
+     *        the dictElementId to set
+     */
+    public void setDictElementId(String dictElementId) {
+        this.dictElementId = dictElementId;
+    }
+
+    /**
+     * @return the dictionaryId
+     */
+    public String getDictionaryId() {
+        return dictionaryId;
+    }
+
+    /**
+     * @param dictionaryId
+     *        the dictionaryId to set
+     */
+    public void setDictionaryId(String dictionaryId) {
+        this.dictionaryId = dictionaryId;
+    }
+
+    /**
+     * @return the dictElementName
+     */
+    public String getDictElementName() {
+        return dictElementName;
+    }
+
+    /**
+     * @param dictElementName
+     *        the dictElementName to set
+     */
+    public void setDictElementName(String dictElementName) {
+        this.dictElementName = dictElementName;
+    }
+
+    /**
+     * @return the dictElementShortName
+     */
+    public String getDictElementShortName() {
+        return dictElementShortName;
+    }
+
+    /**
+     * @param dictElementShortName
+     *        the dictElementShortName to set
+     */
+    public void setDictElementShortName(String dictElementShortName) {
+        this.dictElementShortName = dictElementShortName;
+    }
+
+    /**
+     * @return the dictElementDesc
+     */
+    public String getDictElementDesc() {
+        return dictElementDesc;
+    }
+
+    /**
+     * @param dictElementDesc
+     *        the dictElementDesc to set
+     */
+    public void setDictElementDesc(String dictElementDesc) {
+        this.dictElementDesc = dictElementDesc;
+    }
+
+    /**
+     * @return the dictElementType
+     */
+    public String getDictElementType() {
+        return dictElementType;
+    }
+
+    /**
+     * @param dictElementType
+     *        the dictElementType to set
+     */
+    public void setDictElementType(String dictElementType) {
+        this.dictElementType = dictElementType;
+    }
+
+    /**
+     * @return the createdBy
+     */
+    public String getCreatedBy() {
+        return createdBy;
+    }
+
+    /**
+     * @param createdBy
+     *        the createdBy to set
+     */
+    public void setCreatedBy(String createdBy) {
+        this.createdBy = createdBy;
+    }
+
+    /**
+     * @return the updatedBy
+     */
+    public String getUpdatedBy() {
+        return updatedBy;
+    }
+
+    /**
+     * @param updatedby
+     *        the updatedBy to set
+     */
+    public void setUpdatedBy(String updatedby) {
+        updatedBy = updatedby;
+    }
+
+    /**
+     * @return the lastUpdatedDate
+     */
+    public String getLastUpdatedDate() {
+        return lastUpdatedDate;
+    }
+
+    /**
+     * @param lastUpdatedDate
+     *        the lastUpdatedDate to set
+     */
+    public void setLastUpdatedDate(String lastUpdatedDate) {
+        this.lastUpdatedDate = lastUpdatedDate;
+    }
+
+}
index 0867b96..8d3807b 100644 (file)
@@ -29,37 +29,38 @@ import org.onap.clamp.clds.dao.CldsDao;
  * Represent a CLDS Event.
  */
 public class CldsEvent {
-    public static final String ACTION_TEST            = "TEST";
-    public static final String ACTION_CREATE          = "CREATE";
-    public static final String ACTION_MODIFY          = "MODIFY";
-    public static final String ACTION_SUBMIT          = "SUBMIT";
+    public static final String ACTION_TEST = "TEST";
+    public static final String ACTION_CREATE = "CREATE";
+    public static final String ACTION_MODIFY = "MODIFY";
+    public static final String ACTION_SUBMIT = "SUBMIT";
     // an update before model is active
-    public static final String ACTION_RESUBMIT        = "RESUBMIT";
+    public static final String ACTION_RESUBMIT = "RESUBMIT";
     // For simplified models
-    public static final String ACTION_SUBMITDCAE      = "SUBMITDCAE";
+    public static final String ACTION_SUBMITDCAE = "SUBMITDCAE";
+    public static final String ACTION_SUBMITPOLICY = "SUBMITPOLICY";
     // only from dcae
-    public static final String ACTION_DISTRIBUTE      = "DISTRIBUTE";
+    public static final String ACTION_DISTRIBUTE = "DISTRIBUTE";
     // only from dcae
-    public static final String ACTION_DEPLOY          = "DEPLOY";
+    public static final String ACTION_DEPLOY = "DEPLOY";
     // only from dcae
-    public static final String ACTION_UNDEPLOY        = "UNDEPLOY";
-    public static final String ACTION_UPDATE          = "UPDATE";
-    public static final String ACTION_DELETE          = "DELETE";
-    public static final String ACTION_STOP            = "STOP";
-    public static final String ACTION_RESTART         = "RESTART";
+    public static final String ACTION_UNDEPLOY = "UNDEPLOY";
+    public static final String ACTION_UPDATE = "UPDATE";
+    public static final String ACTION_DELETE = "DELETE";
+    public static final String ACTION_STOP = "STOP";
+    public static final String ACTION_RESTART = "RESTART";
 
     public static final String ACTION_STATE_INITIATED = "INITIATED";
-    public static final String ACTION_STATE_SENT      = "SENT";
+    public static final String ACTION_STATE_SENT = "SENT";
     public static final String ACTION_STATE_COMPLETED = "COMPLETED";
-    public static final String ACTION_STATE_RECEIVED  = "RECEIVED";
-    public static final String ACTION_STATE_ERROR     = "ERROR";
-    public static final String ACTION_STATE_ANY       = null;
-
-    private String             id;
-    private String             actionCd;
-    private String             actionStateCd;
-    private String             processInstanceId;
-    private String             userid;
+    public static final String ACTION_STATE_RECEIVED = "RECEIVED";
+    public static final String ACTION_STATE_ERROR = "ERROR";
+    public static final String ACTION_STATE_ANY = null;
+
+    private String id;
+    private String actionCd;
+    private String actionStateCd;
+    private String processInstanceId;
+    private String userid;
 
     public String getId() {
         return id;
index 382d4e8..a24885f 100644 (file)
@@ -25,12 +25,14 @@ package org.onap.clamp.clds.model;
 
 public class CldsInfo {
 
-    private String  userName;
-    private String  cldsVersion;
+    private String userName;
+    private String cldsVersion;
     private boolean permissionReadCl;
     private boolean permissionUpdateCl;
     private boolean permissionReadTemplate;
     private boolean permissionUpdateTemplate;
+    private boolean permissionReadTosca;
+    private boolean permissionUpdateTosca;
 
     public String getUserName() {
         return userName;
@@ -80,4 +82,20 @@ public class CldsInfo {
         this.permissionUpdateTemplate = permissionUpdateTemplate;
     }
 
+    public boolean isPermissionReadTosca() {
+        return permissionReadTosca;
+    }
+
+    public void setPermissionReadTosca(boolean permissionReadTosca) {
+        this.permissionReadTosca = permissionReadTosca;
+    }
+
+    public boolean isPermissionUpdateTosca() {
+        return permissionUpdateTosca;
+    }
+
+    public void setPermissionUpdateTosca(boolean permissionUpdateTosca) {
+        this.permissionUpdateTosca = permissionUpdateTosca;
+    }
+
 }
index 8b23995..55f4dfd 100644 (file)
@@ -139,7 +139,8 @@ public class CldsModel {
         } else if (event.isActionAndStateCd(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_STATE_RECEIVED)
                 || event.isActionAndStateCd(CldsEvent.ACTION_RESTART, CldsEvent.ACTION_STATE_ANY)
                 || event.isActionAndStateCd(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STATE_ANY)
-                || event.isActionAndStateCd(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_STATE_ANY)) {
+                || event.isActionAndStateCd(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_STATE_ANY)
+                || event.isActionAndStateCd(CldsEvent.ACTION_SUBMITPOLICY, CldsEvent.ACTION_STATE_ANY)) {
             status = STATUS_ACTIVE;
         } else if (event.isActionAndStateCd(CldsEvent.ACTION_STOP, CldsEvent.ACTION_STATE_ANY)) {
             status = STATUS_STOPPED;
@@ -185,14 +186,15 @@ public class CldsModel {
                 permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMIT, CldsEvent.ACTION_TEST,
                         CldsEvent.ACTION_DELETE);
                 if (isSimplifiedModel()) {
-                    permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_TEST,
-                            CldsEvent.ACTION_DELETE);
+                    permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_SUBMITPOLICY,
+                            CldsEvent.ACTION_TEST, CldsEvent.ACTION_DELETE);
                 }
                 break;
             case CldsEvent.ACTION_MODIFY:
                 permittedActionCd = Arrays.asList(CldsEvent.ACTION_RESUBMIT, CldsEvent.ACTION_DELETE);
                 if (isSimplifiedModel()) {
-                    permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_DELETE);
+                    permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_SUBMITPOLICY,
+                            CldsEvent.ACTION_DELETE);
                 }
                 break;
             case CldsEvent.ACTION_SUBMIT:
@@ -202,6 +204,9 @@ public class CldsModel {
             case CldsEvent.ACTION_SUBMITDCAE:
                 permittedActionCd = Arrays.asList(CldsEvent.ACTION_SUBMITDCAE, CldsEvent.ACTION_DELETE);
                 break;
+            case CldsEvent.ACTION_SUBMITPOLICY:
+                permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
+                break;
             case CldsEvent.ACTION_DISTRIBUTE:
                 permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_RESUBMIT,
                         CldsEvent.ACTION_DELETE);
@@ -226,10 +231,17 @@ public class CldsModel {
             case CldsEvent.ACTION_UPDATE:
                 permittedActionCd = Arrays.asList(CldsEvent.ACTION_DEPLOY, CldsEvent.ACTION_UPDATE,
                         CldsEvent.ACTION_STOP, CldsEvent.ACTION_UNDEPLOY);
+                if (isPolicyOnly()) {
+                    permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_STOP);
+                }
                 break;
             case CldsEvent.ACTION_STOP:
                 permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_RESTART,
                         CldsEvent.ACTION_UNDEPLOY);
+                if (isPolicyOnly()) {
+                    permittedActionCd = Arrays.asList(CldsEvent.ACTION_UPDATE, CldsEvent.ACTION_RESTART,
+                            CldsEvent.ACTION_DELETE);
+                }
                 break;
             default:
                 logger.warn("Invalid current actionCd: " + actionCd);
@@ -252,6 +264,22 @@ public class CldsModel {
         return result;
     }
 
+    private boolean isPolicyOnly() {
+        boolean result = false;
+        try {
+            if (propText != null) {
+                JsonNode modelJson = JacksonUtils.getObjectMapperInstance().readTree(propText);
+                JsonNode policyOnlyJson = modelJson.get("policyOnly");
+                if (policyOnlyJson != null && policyOnlyJson.asBoolean()) {
+                    result = true;
+                }
+            }
+        } catch (IOException e) {
+            logger.error("Error while parsing propText json", e);
+        }
+        return result;
+    }
+
     /**
      * Validate requestedActionCd - determine permittedActionCd and then check
      * if contained in permittedActionCd Throw IllegalArgumentException if
diff --git a/src/main/java/org/onap/clamp/clds/model/CldsToscaModel.java b/src/main/java/org/onap/clamp/clds/model/CldsToscaModel.java
new file mode 100644 (file)
index 0000000..4a23525
--- /dev/null
@@ -0,0 +1,130 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.model;
+
+import java.util.List;
+
+import org.onap.clamp.clds.dao.CldsDao;
+
+public class CldsToscaModel extends CldsToscaModelRevision {
+
+    private String id;
+    private String policyType;
+    private String toscaModelName;
+    private String toscaModelYaml;
+
+    /**
+     * Creates or updates Tosca Model to DB
+     *
+     * @param cldsDao
+     * @param userId
+     */
+    public CldsToscaModel save(CldsDao cldsDao, String userId) {
+        CldsToscaModel cldsToscaModel = null;
+        // TODO tosca parsing logic
+        this.setToscaModelJson("{}");
+        this.setPolicyType("Aging");// TODO update with subString or node_type from the model name
+        List<CldsToscaModel> toscaModels = cldsDao.getToscaModelByName(this.getToscaModelName());
+        if (toscaModels != null && !toscaModels.isEmpty()) {
+            CldsToscaModel toscaModel = toscaModels.stream().findFirst().get();
+            // CldsToscaModelRevision modelRevision =
+            // revisions.stream().max(Comparator.comparingDouble(CldsToscaModelRevision::getVersion)).get();
+            this.setVersion(incrementVersion(toscaModel.getVersion()));
+            this.setId(toscaModel.getId());
+            this.setUserId(userId);
+            cldsToscaModel = cldsDao.updateToscaModelWithNewVersion(this, userId);
+        } else {
+            this.setVersion(1);
+            cldsToscaModel = cldsDao.insToscaModel(this, userId);
+        }
+        return cldsToscaModel;
+    }
+
+    private double incrementVersion(double curVersion) {
+        return curVersion + 1;
+    }
+
+    /**
+     * @return the id
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     *        the id to set
+     */
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    /**
+     * @return the policyType
+     */
+    public String getPolicyType() {
+        return policyType;
+    }
+
+    /**
+     * @param policyType
+     *        the policyType to set
+     */
+    public void setPolicyType(String policyType) {
+        this.policyType = policyType;
+    }
+
+    /**
+     * @return the toscaModelName
+     */
+    public String getToscaModelName() {
+        return toscaModelName;
+    }
+
+    /**
+     * @param toscaModelName
+     *        the toscaModelName to set
+     */
+    public void setToscaModelName(String toscaModelName) {
+        this.toscaModelName = toscaModelName;
+    }
+
+    /**
+     * @return the toscaModelYaml
+     */
+    @Override
+    public String getToscaModelYaml() {
+        return toscaModelYaml;
+    }
+
+    /**
+     * @param toscaModelYaml
+     *        the toscaModelYaml to set
+     */
+    @Override
+    public void setToscaModelYaml(String toscaModelYaml) {
+        this.toscaModelYaml = toscaModelYaml;
+    }
+
+}
diff --git a/src/main/java/org/onap/clamp/clds/model/CldsToscaModelDetails.java b/src/main/java/org/onap/clamp/clds/model/CldsToscaModelDetails.java
new file mode 100644 (file)
index 0000000..5c6f4aa
--- /dev/null
@@ -0,0 +1,132 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Represents a CLDS Tosca model
+ *
+ */
+public class CldsToscaModelDetails {
+
+    private String id;
+    private String toscaModelName;
+    private String policyType;
+    private List<CldsToscaModelRevision> toscaModelRevisions = new ArrayList<>();
+    private String userId;
+    private String lastUpdatedDate;
+
+    /**
+     * @return the id
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     *        the id to set
+     */
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    /**
+     * @return the toscaModelName
+     */
+    public String getToscaModelName() {
+        return toscaModelName;
+    }
+
+    /**
+     * @param toscaModelName
+     *        the toscaModelName to set
+     */
+    public void setToscaModelName(String toscaModelName) {
+        this.toscaModelName = toscaModelName;
+    }
+
+    /**
+     * @return the policyType
+     */
+    public String getPolicyType() {
+        return policyType;
+    }
+
+    /**
+     * @param policyType
+     *        the policyType to set
+     */
+    public void setPolicyType(String policyType) {
+        this.policyType = policyType;
+    }
+
+    /**
+     * @return the toscaModelRevisions
+     */
+    public List<CldsToscaModelRevision> getToscaModelRevisions() {
+        return toscaModelRevisions;
+    }
+
+    /**
+     * @param toscaModelRevisions
+     *        the toscaModelRevisions to set
+     */
+    public void setToscaModelRevisions(List<CldsToscaModelRevision> toscaModelRevisions) {
+        this.toscaModelRevisions = toscaModelRevisions;
+    }
+
+    /**
+     * @return the userId
+     */
+    public String getUserId() {
+        return userId;
+    }
+
+    /**
+     * @param userId
+     *        the userId to set
+     */
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * @return the lastUpdatedDate
+     */
+    public String getLastUpdatedDate() {
+        return lastUpdatedDate;
+    }
+
+    /**
+     * @param lastUpdatedDate
+     *        the lastUpdatedDate to set
+     */
+    public void setLastUpdatedDate(String lastUpdatedDate) {
+        this.lastUpdatedDate = lastUpdatedDate;
+    }
+
+}
diff --git a/src/main/java/org/onap/clamp/clds/model/CldsToscaModelRevision.java b/src/main/java/org/onap/clamp/clds/model/CldsToscaModelRevision.java
new file mode 100644 (file)
index 0000000..bfb0536
--- /dev/null
@@ -0,0 +1,144 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+
+/**
+ * Represents a CLDS Tosca model revision
+ *
+ */
+package org.onap.clamp.clds.model;
+
+public class CldsToscaModelRevision {
+
+    private String revisionId;
+    private String toscaModelYaml;
+    private double version;
+    private String toscaModelJson;
+    private String userId;
+    private String createdDate;
+    private String lastUpdatedDate;
+
+    /**
+     * @return the revisionId
+     */
+    public String getRevisionId() {
+        return revisionId;
+    }
+
+    /**
+     * @param revisionId
+     *        the revisionId to set
+     */
+    public void setRevisionId(String revisionId) {
+        this.revisionId = revisionId;
+    }
+
+    /**
+     * @return the toscaModelYaml
+     */
+    public String getToscaModelYaml() {
+        return toscaModelYaml;
+    }
+
+    /**
+     * @param toscaModelYaml
+     *        the toscaModelYaml to set
+     */
+    public void setToscaModelYaml(String toscaModelYaml) {
+        this.toscaModelYaml = toscaModelYaml;
+    }
+
+    /**
+     * @return the version
+     */
+    public double getVersion() {
+        return version;
+    }
+
+    /**
+     * @param version
+     *        the version to set
+     */
+    public void setVersion(double version) {
+        this.version = version;
+    }
+
+    /**
+     * @return the toscaModelJson
+     */
+    public String getToscaModelJson() {
+        return toscaModelJson;
+    }
+
+    /**
+     * @param toscaModelJson
+     *        the toscaModelJson to set
+     */
+    public void setToscaModelJson(String toscaModelJson) {
+        this.toscaModelJson = toscaModelJson;
+    }
+
+    /**
+     * @return the userId
+     */
+    public String getUserId() {
+        return userId;
+    }
+
+    /**
+     * @param userId
+     *        the userId to set
+     */
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * @return the createdDate
+     */
+    public String getCreatedDate() {
+        return createdDate;
+    }
+
+    /**
+     * @param createdDate
+     *        the createdDate to set
+     */
+    public void setCreatedDate(String createdDate) {
+        this.createdDate = createdDate;
+    }
+
+    /**
+     * @return the lastUpdatedDate
+     */
+    public String getLastUpdatedDate() {
+        return lastUpdatedDate;
+    }
+
+    /**
+     * @param lastUpdatedDate
+     *        the lastUpdatedDate to set
+     */
+    public void setLastUpdatedDate(String lastUpdatedDate) {
+        this.lastUpdatedDate = lastUpdatedDate;
+    }
+}
index 6e3e865..7caba41 100644 (file)
@@ -66,6 +66,7 @@ public class PolicyItem implements Cloneable {
     private String targetResourceId;
     private String recipeInfo;
     private String recipeLevel;
+    private String recipeInput;
     private Map<String, String> recipePayload;
     private String oapRop;
     private String oapLimit;
@@ -76,7 +77,7 @@ public class PolicyItem implements Cloneable {
      * @param node
      * @throws IOException
      */
-    public PolicyItem(JsonNode node) throws  IOException {
+    public PolicyItem(JsonNode node) throws IOException {
         id = AbstractModelElement.getValueByName(node, "_id");
         recipe = AbstractModelElement.getValueByName(node, "recipe");
         maxRetries = AbstractModelElement.getIntValueByName(node, "maxRetries");
@@ -89,11 +90,10 @@ public class PolicyItem implements Cloneable {
         }
         recipeInfo = AbstractModelElement.getValueByName(node, "recipeInfo");
         recipeLevel = AbstractModelElement.getValueByName(node, "recipeLevel");
-        String payload = AbstractModelElement.getValueByName(node, "recipeInput");
-
+        recipeInput = AbstractModelElement.getValueByName(node, "recipeInput");
+        String payload = AbstractModelElement.getValueByName(node, "recipePayload");
 
         if (payload != null && !payload.isEmpty()) {
-            //recipePayload = JacksonUtils.getObjectMapperInstance().convertValue(payload, Map.class);
             recipePayload = JacksonUtils.getObjectMapperInstance().readValue(payload, new TypeReference<Map<String, String>>(){});
         }
         oapRop = AbstractModelElement.getValueByName(node, "oapRop");
@@ -215,6 +215,10 @@ public class PolicyItem implements Cloneable {
         return recipeLevel;
     }
 
+    public String getRecipeInput() {
+        return recipeInput;
+    }
+
     public Map<String, String> getRecipePayload() {
         return recipePayload;
     }
diff --git a/src/main/java/org/onap/clamp/clds/service/CldsDictionaryService.java b/src/main/java/org/onap/clamp/clds/service/CldsDictionaryService.java
new file mode 100644 (file)
index 0000000..5d5e218
--- /dev/null
@@ -0,0 +1,149 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.service;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+
+import org.onap.clamp.clds.dao.CldsDao;
+import org.onap.clamp.clds.model.CldsDictionary;
+import org.onap.clamp.clds.model.CldsDictionaryItem;
+import org.onap.clamp.clds.util.LoggingUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+/**
+ * REST services to manage dictionary and dictionary items for Tosca Model
+ */
+@Component
+public class CldsDictionaryService extends SecureServiceBase {
+
+       @Value("${clamp.config.security.permission.type.tosca:permission-type-tosca}")
+       private String cldsPermissionTypeTosca;
+       @Value("${clamp.config.security.permission.instance:dev}")
+       private String cldsPermissionInstance;
+       private SecureServicePermission permissionReadTosca;
+       private SecureServicePermission permissionUpdateTosca;
+
+       @Autowired
+       private CldsDao cldsDao;
+
+       @PostConstruct
+       private final void initConstruct() {
+               permissionReadTosca = SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance, "read");
+        permissionUpdateTosca = SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance, "update");
+       }
+
+       /**
+        *  REST Service that creates or Updates a Dictionary
+        *  
+        * @param dictionaryName
+        * @param cldsDictionary
+        * @return CldsDictionary that was created in DB.
+        */
+       public ResponseEntity<CldsDictionary> createOrUpdateDictionary(String dictionaryName,
+                       CldsDictionary cldsDictionary) {
+               Date startTime = new Date();
+               LoggingUtils.setRequestContext("CldsDictionaryService: createOrUpdateDictionary", getPrincipalName());
+               // TODO revisit based on new permissions
+               isAuthorized(permissionUpdateTosca);
+               if (cldsDictionary == null) {
+                       cldsDictionary = new CldsDictionary();
+                       cldsDictionary.setDictionaryName(dictionaryName);
+               }
+               cldsDictionary.save(dictionaryName, cldsDao, getUserId());
+               LoggingUtils.setTimeContext(startTime, new Date());
+               LoggingUtils.setResponseContext("0", "createOrUpdateDictionary success", this.getClass().getName());
+               auditLogger.info("createOrUpdateDictionary completed");
+               return new ResponseEntity<>(cldsDictionary, HttpStatus.OK);
+       }
+
+       /**
+        * REST Service that creates or Updates a Dictionary Elements for dictionary in DB
+        * 
+        * @param dictionaryName
+        * @param dictionaryItem
+        * @return CldsDictionaryItem
+        *                      A dictionary items that was created or updated in DB
+        */
+       public ResponseEntity<CldsDictionaryItem> createOrUpdateDictionaryElements(String dictionaryName,
+                       CldsDictionaryItem dictionaryItem) {
+               Date startTime = new Date();
+               LoggingUtils.setRequestContext("CldsDictionaryService: createOrUpdateDictionaryElements", getPrincipalName());
+               // TODO revisit based on new permissions
+               isAuthorized(permissionUpdateTosca);
+               dictionaryItem.save(dictionaryName, cldsDao, getUserId());
+               LoggingUtils.setTimeContext(startTime, new Date());
+               LoggingUtils.setResponseContext("0", "createOrUpdateDictionaryElements success", this.getClass().getName());
+               auditLogger.info("createOrUpdateDictionaryElements completed");
+               return new ResponseEntity<>(dictionaryItem, HttpStatus.OK);
+       }
+
+       /**
+        * Rest Service that retrieves all CLDS dictionary in DB
+        * 
+        * @return CldsDictionary List
+        *                      List of CldsDictionary available in DB
+        */
+       public ResponseEntity<List<CldsDictionary>> getAllDictionaryNames() {
+               Date startTime = new Date();
+               LoggingUtils.setRequestContext("CldsDictionaryService: getAllDictionaryNames", getPrincipalName());
+               // TODO revisit based on new permissions
+               isAuthorized(permissionReadTosca);
+               List<CldsDictionary> dictionaries = cldsDao.getDictionary(null, null);
+               LoggingUtils.setTimeContext(startTime, new Date());
+               LoggingUtils.setResponseContext("0", "getAllDictionaryNames success", this.getClass().getName());
+               auditLogger.info("getAllDictionaryNames completed");
+               return new ResponseEntity<>(dictionaries, HttpStatus.OK);
+       }
+
+       /**
+        * Rest Service that retrieves all CLDS dictionary items in DB for a give dictionary name
+        * 
+        * @param dictionaryName
+        * @return CldsDictionaryItem list
+        *                      List of CLDS Dictionary items for a given dictionary name
+        */
+       public ResponseEntity<List<CldsDictionaryItem>> getDictionaryElementsByName(String dictionaryName) {
+               Date startTime = new Date();
+               LoggingUtils.setRequestContext("CldsDictionaryService: getDictionaryElementsByName", getPrincipalName());
+               // TODO revisit based on new permissions
+               isAuthorized(permissionReadTosca);
+               List<CldsDictionaryItem> dictionaryItems = cldsDao.getDictionaryElements(dictionaryName, null, null);
+               LoggingUtils.setTimeContext(startTime, new Date());
+               LoggingUtils.setResponseContext("0", "getAllDictionaryNames success", this.getClass().getName());
+               auditLogger.info("getAllDictionaryNames completed");
+               return new ResponseEntity<>(dictionaryItems, HttpStatus.OK);
+       }
+
+       public ResponseEntity<?> deleteDictionary() {
+               return null;
+       }
+
+}
index 6bebde9..7027cf1 100644 (file)
@@ -45,6 +45,8 @@ class CldsInfoProvider {
         cldsInfo.setPermissionUpdateCl(cldsService.isAuthorizedNoException(cldsService.permissionUpdateCl));
         cldsInfo.setPermissionReadTemplate(cldsService.isAuthorizedNoException(cldsService.permissionReadTemplate));
         cldsInfo.setPermissionUpdateTemplate(cldsService.isAuthorizedNoException(cldsService.permissionUpdateTemplate));
+        cldsInfo.setPermissionReadTosca(cldsService.isAuthorizedNoException(cldsService.permissionReadTosca));
+        cldsInfo.setPermissionUpdateTosca(cldsService.isAuthorizedNoException(cldsService.permissionUpdateTosca));
         return cldsInfo;
     }
 }
index bc58ee6..521f3ce 100644 (file)
@@ -105,6 +105,8 @@ public class CldsService extends SecureServiceBase {
     final SecureServicePermission permissionUpdateCl;
     final SecureServicePermission permissionReadTemplate;
     final SecureServicePermission permissionUpdateTemplate;
+    final SecureServicePermission permissionReadTosca;
+    final SecureServicePermission permissionUpdateTosca;
 
     private final CldsDao cldsDao;
     private final XslTransformer cldsBpmnTransformer;
@@ -125,6 +127,7 @@ public class CldsService extends SecureServiceBase {
         @Value("${clamp.config.security.permission.type.cl.event:permission-type-cl-event}") String cldsPermissionTypeClEvent,
         @Value("${clamp.config.security.permission.type.filter.vf:permission-type-filter-vf}") String cldsPermissionTypeFilterVf,
         @Value("${clamp.config.security.permission.type.template:permission-type-template}") String cldsPermissionTypeTemplate,
+            @Value("${clamp.config.security.permission.type.tosca:permission-type-tosca}") String cldsPermissionTypeTosca,
         @Value("${clamp.config.security.permission.instance:dev}") String cldsPermissionInstance) {
         this.cldsDao = cldsDao;
         this.cldsBpmnTransformer = cldsBpmnTransformer;
@@ -144,6 +147,9 @@ public class CldsService extends SecureServiceBase {
             "read");
         permissionUpdateTemplate = SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance,
             "update");
+        permissionReadTosca = SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance, "read");
+        permissionUpdateTosca = SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance,
+                "update");
     }
 
     /*
@@ -401,7 +407,7 @@ public class CldsService extends SecureServiceBase {
                 retrievedModel = CldsModel.retrieve(cldsDao, modelName, false);
             }
             if (retrievedModel != null) {
-                if (!isTest && (actionCd.equalsIgnoreCase(CldsEvent.ACTION_SUBMIT)
+                if (!isTest && !errorCase && (actionCd.equalsIgnoreCase(CldsEvent.ACTION_SUBMIT)
                     || actionCd.equalsIgnoreCase(CldsEvent.ACTION_RESUBMIT)
                     || actionCd.equalsIgnoreCase(CldsEvent.ACTION_SUBMITDCAE))) {
                     if (retrievedModel.getTemplateName().startsWith(CsarInstallerImpl.TEMPLATE_NAME_PREFIX)) {
diff --git a/src/main/java/org/onap/clamp/clds/service/CldsToscaService.java b/src/main/java/org/onap/clamp/clds/service/CldsToscaService.java
new file mode 100644 (file)
index 0000000..f33039f
--- /dev/null
@@ -0,0 +1,149 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+
+import javax.annotation.PostConstruct;
+
+import org.onap.clamp.clds.dao.CldsDao;
+import org.onap.clamp.clds.model.CldsToscaModel;
+import org.onap.clamp.clds.util.LoggingUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+/**
+ * REST services to manage Tosca Model
+ */
+@Component
+public class CldsToscaService extends SecureServiceBase {
+
+       @Value("${clamp.config.security.permission.type.tosca:permission-type-tosca}")
+       private String cldsPermissionTypeTosca;
+       @Value("${clamp.config.security.permission.instance:dev}")
+       private String cldsPermissionInstance;
+       private SecureServicePermission permissionReadTosca;
+       private SecureServicePermission permissionUpdateTosca;
+
+       @Autowired
+       private CldsDao cldsDao;
+
+       @PostConstruct
+       private final void initConstruct() {
+               permissionReadTosca = SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance, "read");
+        permissionUpdateTosca = SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance, "update");
+       }
+       
+       /**
+        * REST service to upload a new Tosca Model or update an existing Tosca model with new version.
+        * This API will parse the Tosca model yaml and generates a JSON schema out of it.
+        * 
+        * @param toscaModelName
+        *                      Tosca model name to be used as a key
+        * @param cldsToscaModel
+        *          Object containing the tosca model yaml
+        * 
+        * @return clds tosca models - list of CLDS tosca models for a given policy type 
+        */
+       public ResponseEntity<?> parseToscaModelAndSave(String toscaModelName, CldsToscaModel cldsToscaModel ) {
+        Date startTime = new Date();
+        LoggingUtils.setRequestContext("CldsToscaService: Parse Tosca model and save", getPrincipalName());
+        //TODO revisit based on new permissions
+        isAuthorized(permissionUpdateTosca);
+        cldsToscaModel.setToscaModelName(toscaModelName);
+        cldsToscaModel = cldsToscaModel.save(cldsDao, getUserId());
+        LoggingUtils.setTimeContext(startTime, new Date());
+        LoggingUtils.setResponseContext("0", "Parse Tosca model and save success", this.getClass().getName());
+        auditLogger.info("Parse Tosca model and save completed");
+        return new ResponseEntity<>(cldsToscaModel, HttpStatus.CREATED);
+       }
+       
+       /**
+        * REST service to retrieve all Tosca models from the CLDS database.
+        * 
+        * @return clds tosca models - list of CLDS tosca models 
+        */
+       public ResponseEntity<List<CldsToscaModel>> getAllToscaModels() {
+               
+               Date startTime = new Date();
+        LoggingUtils.setRequestContext("CldsToscaService: Get All tosca models", getPrincipalName());
+        //TODO revisit based on new permissions
+        isAuthorized(permissionReadTosca);
+        List<CldsToscaModel> cldsToscaModels = Optional.ofNullable(cldsDao.getAllToscaModels()).get();
+        LoggingUtils.setTimeContext(startTime, new Date());
+        LoggingUtils.setResponseContext("0", "Get All tosca models success", this.getClass().getName());
+        auditLogger.info("Get All tosca models");
+        return new ResponseEntity<>(cldsToscaModels, HttpStatus.OK);
+       }
+       
+       /**
+        * REST service that retrieves a CLDS Tosca model by model name from the database.
+        * 
+        * @param toscaModelName
+        *                      Path param with tosca model name
+        * 
+        * @return clds tosca model -  CLDS tosca model for a given tosca model name 
+        */
+       public ResponseEntity<CldsToscaModel> getToscaModel(String toscaModelName) {
+               Date startTime = new Date();
+        LoggingUtils.setRequestContext("CldsToscaService: Get tosca models by model name", getPrincipalName());
+        //TODO revisit based on new permissions
+        isAuthorized(permissionReadTosca);
+        List<CldsToscaModel> cldsToscaModels = Optional.ofNullable(cldsDao.getToscaModelByName(toscaModelName)).get();
+        LoggingUtils.setTimeContext(startTime, new Date());
+        LoggingUtils.setResponseContext("0", "Get tosca models by model name success", this.getClass().getName());
+        auditLogger.info("GET tosca models by model name completed");
+        return new ResponseEntity<>(Optional.ofNullable(cldsToscaModels).get().stream().findFirst().get(), HttpStatus.OK);
+       }
+
+       
+       /**
+        * REST service that retrieves a CLDS Tosca model lists for a policy type from the database.
+        * 
+        * @param policyType
+        * @return clds tosca model -  CLDS tosca model for a given policy type 
+        */
+       public ResponseEntity<CldsToscaModel> getToscaModelsByPolicyType(String policyType) {
+               Date startTime = new Date();
+        LoggingUtils.setRequestContext("CldsToscaService: Get tosca models by policyType", getPrincipalName());
+        //TODO revisit based on new permissions
+        isAuthorized(permissionReadTosca);
+        List<CldsToscaModel> cldsToscaModels = Optional.ofNullable(cldsDao.getToscaModelByPolicyType(policyType)).get();
+        LoggingUtils.setTimeContext(startTime, new Date());
+        LoggingUtils.setResponseContext("0", "Get tosca models by policyType success", this.getClass().getName());
+        auditLogger.info("GET tosca models by policyType completed");
+        return new ResponseEntity<>(Optional.ofNullable(cldsToscaModels).get().stream().findFirst().get(), HttpStatus.OK);
+       }
+       
+       public ResponseEntity<?> deleteToscaModelById(String toscaModeId) {
+               //TODO
+               return null;
+       }
+       
+}
diff --git a/src/main/java/org/onap/clamp/clds/util/ClampTimer.java b/src/main/java/org/onap/clamp/clds/util/ClampTimer.java
deleted file mode 100644 (file)
index 794e2b4..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2018 AT&T Intellectual Property. All rights
- *                             reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END============================================
- * ===================================================================
- *
- */
-package org.onap.clamp.clds.util;
-
-import java.util.Timer;
-import java.util.TimerTask;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-
-import org.springframework.security.core.context.SecurityContextHolder;
-
-/**
- * Define the ClampTimer and CleanupTask, to clear up the Spring Authenticataion info when time is up.
- */
-
-public class ClampTimer {
-    protected static final EELFLogger logger          = EELFManager.getInstance().getLogger(ClampTimer.class);
-    Timer timer;
-
-    public ClampTimer(int seconds) {
-        timer = new Timer();
-        timer.schedule(new CleanupTask(), seconds*1000);
-    }
-
-    class CleanupTask extends TimerTask {
-        public void run() {
-            logger.debug("Time is up, clear the Spring authenticataion settings");
-            //Clear up the spring authentication
-            SecurityContextHolder.getContext().setAuthentication(null);
-            //Terminate the timer thread
-            timer.cancel(); 
-        }
-    }
-}
\ No newline at end of file
index cdb2e29..759edb1 100644 (file)
@@ -18,7 +18,7 @@
  * limitations under the License.\r
  * ============LICENSE_END============================================\r
  * ===================================================================\r
- * \r
+ *\r
  */\r
 \r
 package org.onap.clamp.clds.util;\r
@@ -31,21 +31,21 @@ import java.net.InetAddress;
 import java.net.UnknownHostException;\r
 import java.text.DateFormat;\r
 import java.text.SimpleDateFormat;\r
-import java.util.Date;\r
-import java.util.TimeZone;\r
-import java.util.UUID;\r
 import java.time.ZoneOffset;\r
 import java.time.ZonedDateTime;\r
 import java.time.format.DateTimeFormatter;\r
-import javax.validation.constraints.NotNull;\r
+import java.util.Date;\r
+import java.util.TimeZone;\r
+import java.util.UUID;\r
+\r
 import javax.servlet.http.HttpServletRequest;\r
+import javax.validation.constraints.NotNull;\r
 \r
+import org.onap.clamp.clds.service.DefaultUserNameHandler;\r
 import org.slf4j.MDC;\r
 import org.slf4j.event.Level;\r
 import org.springframework.security.core.context.SecurityContextHolder;\r
 \r
-import org.onap.clamp.clds.service.DefaultUserNameHandler;\r
-\r
 /**\r
  * This class handles the special info that appear in the log, like RequestID,\r
  * time context, ...\r
@@ -66,7 +66,7 @@ public class LoggingUtils {
      * Constructor\r
      */\r
     public LoggingUtils(final EELFLogger loggerP) {\r
-       this.mLogger = checkNotNull(loggerP);\r
+        this.mLogger = checkNotNull(loggerP);\r
     }\r
 \r
     /**\r
@@ -86,7 +86,7 @@ public class LoggingUtils {
             MDC.put("ServerIPAddress", InetAddress.getLocalHost().getHostAddress());\r
         } catch (UnknownHostException e) {\r
             logger.error("Failed to initiate setRequestContext", e);\r
-               }\r
+        }\r
     }\r
 \r
     /**\r
@@ -149,7 +149,7 @@ public class LoggingUtils {
      * @return A string with the request ID\r
      */\r
     public static String getRequestId() {\r
-        String requestId = (String) MDC.get(ONAPLogConstants.MDCs.REQUEST_ID);\r
+        String requestId = MDC.get(ONAPLogConstants.MDCs.REQUEST_ID);\r
         if (requestId == null || requestId.isEmpty()) {\r
             requestId = UUID.randomUUID().toString();\r
             MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, requestId);\r
@@ -162,9 +162,9 @@ public class LoggingUtils {
         dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));\r
         return dateFormat;\r
     }\r
-    \r
-    \r
-    \r
+\r
+\r
+\r
     /*********************************************************************************************\r
      * Method for ONAP Application Logging Specification v1.2\r
      ********************************************************************************************/\r
@@ -181,7 +181,7 @@ public class LoggingUtils {
         final String requestID = defaultToUUID(request.getHeader(ONAPLogConstants.Headers.REQUEST_ID));\r
         final String invocationID = defaultToUUID(request.getHeader(ONAPLogConstants.Headers.INVOCATION_ID));\r
         final String partnerName = defaultToEmpty(request.getHeader(ONAPLogConstants.Headers.PARTNER_NAME));\r
-        \r
+\r
         // Default the partner name to the user name used to login to clamp\r
         if (partnerName.equalsIgnoreCase(EMPTY_MESSAGE)) {\r
             MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME, new DefaultUserNameHandler().retrieveUserName(SecurityContextHolder.getContext()));\r
@@ -192,8 +192,8 @@ public class LoggingUtils {
         // depending on where you need them to appear, OR extend the\r
         // ServiceDescriptor to add them.\r
         MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP,\r
-                ZonedDateTime.now(ZoneOffset.UTC)\r
-                        .format(DateTimeFormatter.ISO_INSTANT));\r
+            ZonedDateTime.now(ZoneOffset.UTC)\r
+            .format(DateTimeFormatter.ISO_INSTANT));\r
         MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, requestID);\r
         MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, invocationID);\r
         MDC.put(ONAPLogConstants.MDCs.CLIENT_IP_ADDRESS, defaultToEmpty(request.getRemoteAddr()));\r
@@ -203,7 +203,7 @@ public class LoggingUtils {
         // Default the service name to the requestURI, in the event that\r
         // no value has been provided.\r
         if (serviceName == null ||\r
-                       serviceName.equalsIgnoreCase(EMPTY_MESSAGE)) {\r
+            serviceName.equalsIgnoreCase(EMPTY_MESSAGE)) {\r
             MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, request.getRequestURI());\r
         }\r
 \r
@@ -217,7 +217,7 @@ public class LoggingUtils {
      */\r
     public void exiting(String code, String descrption, Level severity, ONAPLogConstants.ResponseStatus status) {\r
         try {\r
-               MDC.put(ONAPLogConstants.MDCs.RESPONSE_CODE, defaultToEmpty(code));\r
+            MDC.put(ONAPLogConstants.MDCs.RESPONSE_CODE, defaultToEmpty(code));\r
             MDC.put(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION, defaultToEmpty(descrption));\r
             MDC.put(ONAPLogConstants.MDCs.RESPONSE_SEVERITY, defaultToEmpty(severity));\r
             MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, defaultToEmpty(status));\r
@@ -241,11 +241,11 @@ public class LoggingUtils {
 \r
         // Set standard HTTP headers on (southbound request) builder.\r
         con.setRequestProperty(ONAPLogConstants.Headers.REQUEST_ID,\r
-                defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)));\r
+            defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)));\r
         con.setRequestProperty(ONAPLogConstants.Headers.INVOCATION_ID,\r
-                       invocationID);\r
+            invocationID);\r
         con.setRequestProperty(ONAPLogConstants.Headers.PARTNER_NAME,\r
-                defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME)));\r
+            defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME)));\r
 \r
         invokeContext(targetEntity, targetServiceName, invocationID);\r
 \r
@@ -314,8 +314,8 @@ public class LoggingUtils {
         MDC.put(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME, defaultToEmpty(targetServiceName));\r
         MDC.put(ONAPLogConstants.MDCs.INVOCATIONID_OUT, invocationID);\r
         MDC.put(ONAPLogConstants.MDCs.INVOKE_TIMESTAMP,\r
-                ZonedDateTime.now(ZoneOffset.UTC)\r
-                        .format(DateTimeFormatter.ISO_INSTANT));\r
+            ZonedDateTime.now(ZoneOffset.UTC)\r
+            .format(DateTimeFormatter.ISO_INSTANT));\r
     }\r
 \r
     /**\r
index bf151d7..c66047c 100644 (file)
                <b style="font-size:14px;">User Permissions:</b>
                <div ng-if="userInfo['permissionReadTemplate']">Read Template</div>
                <div ng-if="userInfo['permissionReadCl']">Read Model</div>
+               <div ng-if="userInfo['permissionReadTosca']">Read Tosca</div>
                <div ng-if="userInfo['permissionUpdateCl']">Edit Model</div>
+               <div ng-if="userInfo['permissionUpdateTemplate']">Edit Template</div>
+               <div ng-if="userInfo['permissionUpdateTosca']">Edit Tosca</div>
         </div>
     </div>
     <div attribute-test="extrauserinfof" class="modal-footer">
index 3589553..fe7eabc 100644 (file)
@@ -102,7 +102,7 @@ async.queue.capacity=500
 
 #For EELF logback file
 #com.att.eelf.logging.path=
-com.att.eelf.logging.file=logback-default.xml
+clamp.config.logback.filename=logback-default.xml
 #The log folder that will be used in logback.xml file
 clamp.config.log.path=/var/log/ONAP/clamp
 clamp.config.files.systemProperties=classpath:/system.properties
@@ -211,5 +211,6 @@ clamp.config.security.permission.type.cl.manage=org.onap.clamp.clds.cl.manage
 clamp.config.security.permission.type.cl.event=org.onap.clds.cl.event
 clamp.config.security.permission.type.filter.vf=org.onap.clamp.clds.filter.vf
 clamp.config.security.permission.type.template=org.onap.clamp.clds.template
+clamp.config.security.permission.type.tosca=org.onap.clamp.clds.tosca
 #This one indicates the type of instances (dev|prod|perf...), this must be set accordingly in clds-users.properties
 clamp.config.security.permission.instance=dev
index b506915..9e2e3c9 100644 (file)
@@ -64,7 +64,7 @@ server.ssl.key-store-type=PKCS12
 server.ssl.key-alias=clamp@clamp.onap.org
 
 ## Config part for Client certificates
-server.ssl.client-auth=need
+server.ssl.client-auth=want
 server.ssl.trust-store=classpath:/clds/aaf/truststoreONAPall.jks
 server.ssl.trust-store-password=changeit
 
@@ -118,8 +118,8 @@ async.max.pool.size=20
 async.queue.capacity=500
 
 #For EELF logback file
-#com.att.eelf.logging.path=
-com.att.eelf.logging.file=logback-default.xml
+#clamp.config.logback.path=
+clamp.config.logback.filename=logback-default.xml
 #The log folder that will be used in logback.xml file
 clamp.config.log.path=/var/log/ONAP/clamp
 clamp.config.files.systemProperties=classpath:/system.properties
@@ -228,6 +228,7 @@ clamp.config.security.permission.type.cl.manage=org.onap.clamp.clds.cl.manage
 clamp.config.security.permission.type.cl.event=org.onap.clds.cl.event
 clamp.config.security.permission.type.filter.vf=org.onap.clamp.clds.filter.vf
 clamp.config.security.permission.type.template=org.onap.clamp.clds.template
+clamp.config.security.permission.type.tosca=org.onap.clamp.clds.tosca
 #This one indicates the type of instances (dev|prod|perf...), this must be set accordingly in clds-users.properties
 clamp.config.security.permission.instance=dev
 
@@ -236,7 +237,7 @@ clamp.config.cadi.keyFile=classpath:/clds/aaf/org.onap.clamp.keyfile
 clamp.config.cadi.cadiLoglevel=DEBUG
 clamp.config.cadi.cadiLatitude=37.78187
 clamp.config.cadi.cadiLongitude=-122.26147
-clamp.config.cadi.aafLocateUrl=https://aaf-onap-beijing-test.osaaf.org
+clamp.config.cadi.aafLocateUrl=https://aaf-onap-test.osaaf.org:8095
 clamp.config.cadi.cadiKeystorePassword=enc:V_kq_EwDNb4itWp_lYfDGXIWJzemHGkhkZOxAQI9IHs
 clamp.config.cadi.cadiTruststorePassword=enc:Mj0YQqNCUKbKq2lPp1kTFQWeqLxaBXKNwd5F1yB1ukf
 #clamp.config.cadi.oauthTokenUrl=https://AAF_LOCATE_URL/AAF_NS.token:2.0/token
index 1ea8213..e67fb16 100644 (file)
 <rests xmlns="http://camel.apache.org/schema/spring">
-               <rest>
-                               <get uri="/clds/cldsDetails" outType="org.onap.clamp.clds.model.CldsMonitoringDetails" produces="application/json">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getCLDSDetails()" />
-                               </get>
-                               <get uri="/clds/cldsInfo" outType="org.onap.clamp.clds.model.CldsInfo" produces="application/json">
-                                       <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getCldsInfo()" />
-                               </get>
-                               <get uri="/healthcheck" produces="application/json">
-                                       <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsHealthcheckService?method=gethealthcheck()" />
-                               </get>
-                               <get uri="/clds/model/bpmn/{modelName}" produces="text/xml">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getBpmnXml(${header.modelName})" />
-                               </get>
-                               <get uri="/clds/model/image/{modelName}" produces="text/xml">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getImageXml(${header.modelName})" />
-                               </get>
-                               <get uri="/clds/model/{modelName}" outType="org.onap.clamp.clds.model.CldsModel" produces="application/json">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getModel(${header.modelName})" />
-                               </get>
-                               <put uri="/clds/model/{modelName}" type="org.onap.clamp.clds.model.CldsModel" consumes="application/json" outType="org.onap.clamp.clds.model.CldsModel" produces="application/json">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsService?method=putModel(${header.modelName},${body})" />
-                               </put>
-                               <get uri="/clds/model-names" outType="org.onap.clamp.clds.model.ValueItem" produces="application/json">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getModelNames()" />
-                               </get>
-                               <put uri="/clds/action/{action}/{modelName}?test={test}" type="org.onap.clamp.clds.model.CldsModel" consumes="application/json" produces="application/json">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsService?method=putModelAndProcessAction(${header.action},${header.modelName},${header.test},${body})" />
-                               </put>
-                               <post uri="/clds/dcae/event?test={test}" type="org.onap.clamp.clds.model.DcaeEvent" consumes="application/json" produces="application/json">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsService?method=postDcaeEvent(${header.test},${body})" />
-                               </post>
-                               <get uri="/clds/sdc/services" produces="application/json">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getSdcServices()" />
-                               </get>
-                               <get uri="/clds/properties" produces="application/json">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getSdcProperties()" />
-                               </get>
-                               <get uri="/clds/properties/{serviceInvariantUUID}?refresh={refresh}" produces="application/json">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getSdcPropertiesByServiceUUIDForRefresh(${header.serviceInvariantUUID},${header.refresh})" />
-                               </get>
-                               <put uri="/clds/deploy/{modelName}" type="org.onap.clamp.clds.model.CldsModel" consumes="application/json" produces="application/json">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsService?method=deployModel(${header.modelName},${body})" />
-                               </put>
-                               <put uri="/clds/undeploy/{modelName}" type="org.onap.clamp.clds.model.CldsModel" consumes="application/json" produces="application/json">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsService?method=unDeployModel(${header.modelName},${body})" />
-                               </put>
-                               
-                               
-                               
-                               
-                               <get uri="/cldsTempate/template/bpmn/{templateName}" produces="text/xml">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsTemplateService?method=getBpmnTemplate(${header.templateName})" />
-                               </get>
-                               <get uri="/cldsTempate/template/image/{templateName}" produces="text/xml">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsTemplateService?method=getImageXml(${header.templateName})" />
-                               </get>
-                               <get uri="/cldsTempate/template/{templateName}" outType="org.onap.clamp.clds.model.CldsTemplate" produces="application/json">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsTemplateService?method=getTemplate(${header.templateName})" />
-                               </get>
-                               <put uri="/cldsTempate/template/{templateName}" type="org.onap.clamp.clds.model.CldsTemplate" consumes="application/json" outType="org.onap.clamp.clds.model.CldsTemplate" produces="application/json">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsTemplateService?method=putTemplate(${header.templateName},${body})" />
-                               </put>
-                               <get uri="/cldsTempate/template-names" outType="org.onap.clamp.clds.model.ValueItem" produces="application/json">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.CldsTemplateService?method=getTemplateNames()" />
-                               </get>
-                               
-                               
-                               
-                               <get uri="/user/getUser" produces="text/plain">
-                                               <to
-                                                               uri="bean:org.onap.clamp.clds.service.UserService?method=getUser()" />
-                               </get>
-               </rest>
+       <rest>
+               <get uri="/clds/cldsDetails"
+                       outType="org.onap.clamp.clds.model.CldsMonitoringDetails"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getCLDSDetails()" />
+               </get>
+               <get uri="/clds/cldsInfo"
+                       outType="org.onap.clamp.clds.model.CldsInfo"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getCldsInfo()" />
+               </get>
+               <get uri="/healthcheck" produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsHealthcheckService?method=gethealthcheck()" />
+               </get>
+               <get uri="/clds/model/bpmn/{modelName}" produces="text/xml">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getBpmnXml(${header.modelName})" />
+               </get>
+               <get uri="/clds/model/image/{modelName}" produces="text/xml">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getImageXml(${header.modelName})" />
+               </get>
+               <get uri="/clds/model/{modelName}"
+                       outType="org.onap.clamp.clds.model.CldsModel"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getModel(${header.modelName})" />
+               </get>
+               <put uri="/clds/model/{modelName}"
+                       type="org.onap.clamp.clds.model.CldsModel"
+                       consumes="application/json"
+                       outType="org.onap.clamp.clds.model.CldsModel"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=putModel(${header.modelName},${body})" />
+               </put>
+               <get uri="/clds/model-names"
+                       outType="org.onap.clamp.clds.model.ValueItem"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getModelNames()" />
+               </get>
+               <put uri="/clds/action/{action}/{modelName}?test={test}"
+                       type="org.onap.clamp.clds.model.CldsModel"
+                       consumes="application/json" produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=putModelAndProcessAction(${header.action},${header.modelName},${header.test},${body})" />
+               </put>
+               <post uri="/clds/dcae/event?test={test}"
+                       type="org.onap.clamp.clds.model.DcaeEvent"
+                       consumes="application/json" produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=postDcaeEvent(${header.test},${body})" />
+               </post>
+               <get uri="/clds/sdc/services" produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getSdcServices()" />
+               </get>
+               <get uri="/clds/properties" produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getSdcProperties()" />
+               </get>
+               <get
+                       uri="/clds/properties/{serviceInvariantUUID}?refresh={refresh}"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=getSdcPropertiesByServiceUUIDForRefresh(${header.serviceInvariantUUID},${header.refresh})" />
+               </get>
+               <put uri="/clds/deploy/{modelName}"
+                       type="org.onap.clamp.clds.model.CldsModel"
+                       consumes="application/json" produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=deployModel(${header.modelName},${body})" />
+               </put>
+               <put uri="/clds/undeploy/{modelName}"
+                       type="org.onap.clamp.clds.model.CldsModel"
+                       consumes="application/json" produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsService?method=unDeployModel(${header.modelName},${body})" />
+               </put>
+
+
+
+
+               <get uri="/cldsTempate/template/bpmn/{templateName}"
+                       produces="text/xml">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsTemplateService?method=getBpmnTemplate(${header.templateName})" />
+               </get>
+               <get uri="/cldsTempate/template/image/{templateName}"
+                       produces="text/xml">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsTemplateService?method=getImageXml(${header.templateName})" />
+               </get>
+               <get uri="/cldsTempate/template/{templateName}"
+                       outType="org.onap.clamp.clds.model.CldsTemplate"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsTemplateService?method=getTemplate(${header.templateName})" />
+               </get>
+               <put uri="/cldsTempate/template/{templateName}"
+                       type="org.onap.clamp.clds.model.CldsTemplate"
+                       consumes="application/json"
+                       outType="org.onap.clamp.clds.model.CldsTemplate"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsTemplateService?method=putTemplate(${header.templateName},${body})" />
+               </put>
+               <get uri="/cldsTempate/template-names"
+                       outType="org.onap.clamp.clds.model.ValueItem"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsTemplateService?method=getTemplateNames()" />
+               </get>
+
+
+               <put uri="/tosca/models/{toscaModelName}"
+                       type="org.onap.clamp.clds.model.CldsToscaModel"
+                       consumes="application/json" produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsToscaService?method=parseToscaModelAndSave(${header.toscaModelName},${body})" />
+               </put>
+               <get uri="/tosca/models/policyType/{policyType}"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsToscaService?method=getToscaModelsByPolicyType(${header.policyType})" />
+               </get>
+               <get uri="/tosca/models"
+                       outType="org.onap.clamp.clds.model.CldsToscaModel"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsToscaService?method=getAllToscaModels()" />
+               </get>
+               <get uri="/tosca/models/{toscaModelName}"
+                       outType="org.onap.clamp.clds.model.CldsToscaModel"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsToscaService?method=getToscaModel(${header.toscaModelName})" />
+               </get>
+
+
+               <put uri="/dictionary/{dictionaryName}"
+                       type="org.onap.clamp.clds.model.CldsDictionary"
+                       outType="org.onap.clamp.clds.model.CldsDictionary"
+                       consumes="application/json" produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsDictionaryService?method=createOrUpdateDictionary(${header.dictionaryName},${body})" />
+               </put>
+
+               <get uri="/dictionary"
+                       outType="org.onap.clamp.clds.model.CldsDictionary"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsDictionaryService?method=getAllDictionaryNames()" />
+               </get>
+
+               <put uri="/dictionary/{dictionaryName}/items"
+                       type="org.onap.clamp.clds.model.CldsDictionaryItem"
+                       outType="org.onap.clamp.clds.model.CldsDictionaryItem"
+                       consumes="application/json" produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsDictionaryService?method=createOrUpdateDictionaryElements(${header.dictionaryName},${body})" />
+               </put>
+
+               <get uri="/dictionary/{dictionaryName}/items"
+                       outType="org.onap.clamp.clds.model.CldsDictionary"
+                       produces="application/json">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.CldsDictionaryService?method=getDictionaryElementsByName(${header.dictionaryName})" />
+               </get>
+
+               <get uri="/user/getUser" produces="text/plain">
+                       <to
+                               uri="bean:org.onap.clamp.clds.service.UserService?method=getUser()" />
+               </get>
+       </rest>
 </rests>
index 18ab7d3..b4d73a2 100644 (file)
@@ -8,7 +8,9 @@
                       "org.onap.clamp.clds.cl.manage|dev|*",
                       "org.onap.clamp.clds.filter.vf|dev|*",
                       "org.onap.clamp.clds.template|dev|read",
-                      "org.onap.clamp.clds.template|dev|update"
+                      "org.onap.clamp.clds.template|dev|update",
+                      "org.onap.clamp.clds.tosca|dev|read",
+                      "org.onap.clamp.clds.tosca|dev|update"
                    ]
        },
        {
@@ -21,7 +23,9 @@
                       "org.onap.clamp.clds.cl.manage|dev|*",
                       "org.onap.clamp.clds.filter.vf|dev|*",
                       "org.onap.clamp.clds.template|dev|read",
-                      "org.onap.clamp.clds.template|dev|update"
+                      "org.onap.clamp.clds.template|dev|update",
+                      "org.onap.clamp.clds.tosca|dev|read",
+                      "org.onap.clamp.clds.tosca|dev|update"
                    ]
        }
 ]
index dae39d3..086cc53 100644 (file)
@@ -1,9 +1,9 @@
 <configuration scan="true" scanPeriod="60 seconds"
        debug="true">
        <springProperty name="logbackFilePath"
-               source="com.att.eelf.logging.path" />
+               source="clamp.config.logback.path" />
        <springProperty name="logbackFileName"
-               source="com.att.eelf.logging.file" />
+               source="clamp.config.logback.filename" />
        <springProperty name="logDirectory"
                source="clamp.config.log.path" />
                
diff --git a/src/test/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyAttributesConstructorTest.java b/src/test/java/org/onap/clamp/clds/client/req/policy/OperationalPolicyAttributesConstructorTest.java
new file mode 100644 (file)
index 0000000..a6a209a
--- /dev/null
@@ -0,0 +1,146 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2018 Nokia Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.client.req.policy;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.ImmutableMap;
+
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.util.Map;
+
+import org.assertj.core.api.Assertions;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Matchers;
+import org.mockito.Mockito;
+import org.onap.clamp.clds.config.ClampProperties;
+import org.onap.clamp.clds.model.properties.ModelProperties;
+import org.onap.clamp.clds.model.properties.PolicyChain;
+import org.onap.clamp.clds.util.ResourceFileUtil;
+import org.onap.policy.api.AttributeType;
+import org.onap.policy.controlloop.policy.ControlLoopPolicy;
+import org.onap.policy.controlloop.policy.Policy;
+import org.onap.policy.controlloop.policy.Target;
+import org.onap.policy.controlloop.policy.TargetType;
+import org.onap.policy.controlloop.policy.builder.BuilderException;
+import org.yaml.snakeyaml.Yaml;
+
+public class OperationalPolicyAttributesConstructorTest {
+
+    private static final String CONTROL_NAME = "ClosedLoop-d4629aee-970f-11e8-86c9-02552dda865e";
+    private ModelProperties modelProperties;
+    private PolicyChain policyChain;
+
+    @Before
+    public void setUp() throws Exception {
+        String modelProp = ResourceFileUtil
+            .getResourceAsString("example/model-properties/policy/modelBpmnProperties.json");
+        modelProperties = new ModelProperties("CLAMPDemoVFW_v1_0_3af8daec-6f10-4027-a3540", CONTROL_NAME, "PUT", false,
+            "{}", modelProp);
+        policyChain = readPolicyChainFromResources();
+    }
+
+    @Test
+    public void shouldFormatRequestAttributes() throws IOException, BuilderException {
+        // given
+        ClampProperties mockClampProperties = createMockClampProperties(ImmutableMap.<String, String>builder()
+            .put("op.templateName", "ClosedLoopControlName").put("op.notificationTopic", "POLICY-CL-MGT")
+            .put("op.controller", "amsterdam").put("op.recipeTopic", "APPC").build());
+
+        // when
+        Map<AttributeType, Map<String, String>> requestAttributes = OperationalPolicyAttributesConstructor
+            .formatAttributes(mockClampProperties, modelProperties, "789875c1-e788-432f-9a76-eac8ed889734",
+                policyChain);
+        // then
+        Assertions.assertThat(requestAttributes).containsKeys(AttributeType.MATCHING, AttributeType.RULE);
+        Assertions.assertThat(requestAttributes.get(AttributeType.MATCHING))
+        .contains(Assertions.entry(OperationalPolicyAttributesConstructor.CONTROLLER, "amsterdam"));
+
+        Map<String, String> ruleParameters = requestAttributes.get(AttributeType.RULE);
+        Assertions.assertThat(ruleParameters).containsExactly(
+            Assertions.entry(OperationalPolicyAttributesConstructor.MAX_RETRIES, "3"),
+            Assertions.entry(OperationalPolicyAttributesConstructor.TEMPLATE_NAME, "ClosedLoopControlName"),
+            Assertions.entry(OperationalPolicyAttributesConstructor.NOTIFICATION_TOPIC, "POLICY-CL-MGT"),
+            Assertions.entry(OperationalPolicyAttributesConstructor.RECIPE_TOPIC, "APPC"),
+            Assertions.entry(OperationalPolicyAttributesConstructor.RECIPE, "healthCheck"),
+            Assertions.entry(OperationalPolicyAttributesConstructor.RESOURCE_ID,
+                "cdb69724-57d5-4a22-b96c-4c345150fd0e"),
+            Assertions.entry(OperationalPolicyAttributesConstructor.RETRY_TIME_LIMIT, "180"),
+            Assertions.entry(OperationalPolicyAttributesConstructor.CLOSED_LOOP_CONTROL_NAME, CONTROL_NAME + "_1"));
+    }
+
+    @Test
+    public void shouldFormatRequestAttributesWithProperControlLoopYaml() throws IOException, BuilderException {
+        // given
+        ClampProperties mockClampProperties = createMockClampProperties(
+            ImmutableMap.<String, String>builder().put("op.templateName", "ClosedLoopControlName")
+            .put("op.operationTopic", "APPP-CL").put("op.notificationTopic", "POLICY-CL-MGT")
+            .put("op.controller", "amsterdam").put("op.recipeTopic", "APPC").build());
+
+        Policy expectedPolicy = new Policy("6f76ad0b-ea9d-4a92-8d7d-6a6367ce2c77", "healthCheck Policy",
+            "healthCheck Policy - the trigger (no parent) policy - created by CLDS", "APPC", null,
+            new Target(TargetType.VM, "cdb69724-57d5-4a22-b96c-4c345150fd0e"), "healthCheck", 3, 180);
+
+        // when
+        Map<AttributeType, Map<String, String>> requestAttributes = OperationalPolicyAttributesConstructor
+            .formatAttributes(mockClampProperties, modelProperties, "789875c1-e788-432f-9a76-eac8ed889734",
+                policyChain);
+
+        // then
+        Assertions.assertThat(requestAttributes).containsKeys(AttributeType.MATCHING, AttributeType.RULE);
+        Assertions.assertThat(requestAttributes.get(AttributeType.MATCHING))
+        .contains(Assertions.entry("controller", "amsterdam"));
+
+        Map<String, String> ruleParameters = requestAttributes.get(AttributeType.RULE);
+        Assertions.assertThat(ruleParameters).contains(
+            Assertions.entry(OperationalPolicyAttributesConstructor.OPERATION_TOPIC, "APPP-CL"),
+            Assertions.entry(OperationalPolicyAttributesConstructor.TEMPLATE_NAME, "ClosedLoopControlName"),
+            Assertions.entry(OperationalPolicyAttributesConstructor.NOTIFICATION_TOPIC, "POLICY-CL-MGT"),
+            Assertions.entry(OperationalPolicyAttributesConstructor.CLOSED_LOOP_CONTROL_NAME, CONTROL_NAME + "_1"));
+
+        String controlLoopYaml = URLDecoder
+            .decode(ruleParameters.get(OperationalPolicyAttributesConstructor.CONTROL_LOOP_YAML), "UTF-8");
+        ControlLoopPolicy controlLoopPolicy = new Yaml().load(controlLoopYaml);
+
+        Assertions.assertThat(controlLoopPolicy.getControlLoop().getControlLoopName()).isEqualTo(CONTROL_NAME);
+        Assertions.assertThat(controlLoopPolicy.getPolicies()).usingElementComparatorIgnoringFields("id")
+        .containsExactly(expectedPolicy);
+    }
+
+    private ClampProperties createMockClampProperties(ImmutableMap<String, String> propertiesMap) {
+        ClampProperties props = Mockito.mock(ClampProperties.class);
+        propertiesMap.forEach((property, value) -> Mockito
+            .when(props.getStringValue(Matchers.matches(property), Matchers.any())).thenReturn(value));
+        return props;
+    }
+
+    private PolicyChain readPolicyChainFromResources() throws IOException {
+        String policyChainText = ResourceFileUtil
+            .getResourceAsString("example/operational-policy/json-policy-chain.json");
+        JsonNode policyChainNode = new ObjectMapper().readTree(policyChainText);
+        return new PolicyChain(policyChainNode);
+    }
+}
  * See the License for the specific language governing permissions and
  * limitations under the License.
  * ============LICENSE_END============================================
+ * Modifications copyright (c) 2018 Nokia
  * ===================================================================
- * 
+ *
  */
 
 package org.onap.clamp.clds.client.req.policy;
 
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.lang.reflect.InvocationTargetException;
 import java.util.Arrays;
 import java.util.List;
+
+import org.assertj.core.api.Assertions;
 import org.junit.Test;
 import org.onap.policy.controlloop.policy.PolicyResult;
 import org.onap.policy.sdc.Resource;
 import org.onap.policy.sdc.ResourceType;
 
-public class OperationalPolicyReqTest {
+public class OperationalPolicyYamlFormatterTest {
 
     @Test
-    public void shouldConvertGivenStringsToResourceObjects()
-        throws NoSuchMethodException, SecurityException, IllegalAccessException,
-        IllegalArgumentException, InvocationTargetException {
+    public void shouldConvertGivenStringsToResourceObjects() throws SecurityException, IllegalArgumentException {
 
-        //given
+        // given
         List<String> stringList = Arrays.asList("test1", "test2", "test3", "test4");
 
-        //when
-        Resource[] resources = OperationalPolicyReq.convertToResource(stringList, ResourceType.VF);
+        // when
+        Resource[] resources = OperationalPolicyYamlFormatter.convertToResources(stringList, ResourceType.VF);
 
-        //then
-        assertThat(resources).extracting(Resource::getResourceName)
-            .containsExactly("test1", "test2", "test3", "test4");
+        // then
+        Assertions.assertThat(resources).extracting(Resource::getResourceName).containsExactly("test1", "test2",
+            "test3", "test4");
     }
 
     @Test
-    public void shouldConvertGivenStringsToPolicyResults()
-        throws NoSuchMethodException, SecurityException, IllegalAccessException,
-        IllegalArgumentException, InvocationTargetException {
-        //given
+    public void shouldConvertGivenStringsToPolicyResults() throws SecurityException, IllegalArgumentException {
+        // given
         List<String> stringList = Arrays.asList("FAILURE", "SUCCESS", "FAILURE_GUARD", "FAILURE_TIMEOUT");
 
-        //when
-        PolicyResult[] policyResults = OperationalPolicyReq.convertToPolicyResult(stringList);
+        // when
+        PolicyResult[] policyResults = OperationalPolicyYamlFormatter.convertToPolicyResults(stringList);
 
-        //then
-        assertThat(policyResults)
-            .containsExactly(PolicyResult.FAILURE, PolicyResult.SUCCESS,
-                PolicyResult.FAILURE_GUARD, PolicyResult.FAILURE_TIMEOUT);
+        // then
+        Assertions.assertThat(policyResults).containsExactly(PolicyResult.FAILURE, PolicyResult.SUCCESS,
+            PolicyResult.FAILURE_GUARD, PolicyResult.FAILURE_TIMEOUT);
     }
-}
+}
\ No newline at end of file
index 69dad53..344641a 100644 (file)
@@ -17,8 +17,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  * ============LICENSE_END============================================
+ * Modifications copyright (c) 2018 Nokia
  * ===================================================================
- * 
+ *
  */
 
 package org.onap.clamp.clds.it;
@@ -35,7 +36,7 @@ import java.util.Map;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.onap.clamp.clds.client.req.policy.OperationalPolicyReq;
+import org.onap.clamp.clds.client.req.policy.OperationalPolicyAttributesConstructor;
 import org.onap.clamp.clds.config.ClampProperties;
 import org.onap.clamp.clds.model.CldsEvent;
 import org.onap.clamp.clds.model.properties.ModelProperties;
@@ -58,15 +59,15 @@ public class OperationPolicyReqItCase {
     @Test
     public void formatAttributesTest() throws IOException, BuilderException {
         String modelBpmnProp = ResourceFileUtil
-                .getResourceAsString("example/model-properties/policy/modelBpmnProperties.json");
+            .getResourceAsString("example/model-properties/policy/modelBpmnProperties.json");
         String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/policy/modelBpmn.json");
         ModelProperties modelProperties = new ModelProperties("testModel", "controlNameTest", CldsEvent.ACTION_SUBMIT,
-                true, modelBpmn, modelBpmnProp);
+            true, modelBpmn, modelBpmnProp);
         List<Map<AttributeType, Map<String, String>>> attributes = new ArrayList<>();
         if (modelProperties.getType(Policy.class).isFound()) {
             for (PolicyChain policyChain : modelProperties.getType(Policy.class).getPolicyChains()) {
-                attributes.add(OperationalPolicyReq.formatAttributes(refProp, modelProperties,
-                        modelProperties.getType(Policy.class).getId(), policyChain));
+                attributes.add(OperationalPolicyAttributesConstructor.formatAttributes(refProp, modelProperties,
+                    modelProperties.getType(Policy.class).getId(), policyChain));
             }
         }
         assertFalse(attributes.isEmpty());
index c6fc09d..59fad9a 100644 (file)
@@ -17,8 +17,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  * ============LICENSE_END============================================
+ * Modifications copyright (c) 2018 Nokia
  * ===================================================================
- * 
+ *
  */
 
 package org.onap.clamp.clds.it;
@@ -35,7 +36,7 @@ import java.util.concurrent.TimeUnit;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.onap.clamp.clds.client.req.policy.OperationalPolicyReq;
+import org.onap.clamp.clds.client.req.policy.OperationalPolicyAttributesConstructor;
 import org.onap.clamp.clds.client.req.policy.PolicyClient;
 import org.onap.clamp.clds.client.req.tca.TcaRequestFormatter;
 import org.onap.clamp.clds.config.ClampProperties;
@@ -64,7 +65,8 @@ public class PolicyClientItCase {
     @Autowired
     private ClampProperties refProp;
     @Autowired
-    protected PolicyClient policyClient;
+    private PolicyClient policyClient;
+
     String modelProp;
     String modelBpmnProp;
     String modelName;
@@ -87,8 +89,8 @@ public class PolicyClientItCase {
         if (policy.isFound()) {
             for (PolicyChain policyChain : policy.getPolicyChains()) {
                 String operationalPolicyRequestUuid = UUID.randomUUID().toString();
-                Map<AttributeType, Map<String, String>> attributes = OperationalPolicyReq.formatAttributes(refProp,
-                        prop, policy.getId(), policyChain);
+                Map<AttributeType, Map<String, String>> attributes = OperationalPolicyAttributesConstructor
+                    .formatAttributes(refProp, prop, policy.getId(), policyChain);
                 policyClient.sendBrmsPolicy(attributes, prop, operationalPolicyRequestUuid);
             }
         }
@@ -162,14 +164,14 @@ public class PolicyClientItCase {
         assertNotNull(policyConfiguration.getNotificationUebServers());
         assertEquals(8, policyConfiguration.getProperties().size());
         assertTrue(((String) policyConfiguration.getProperties().get(PolicyConfiguration.PDP_URL1))
-                .contains("/pdp/ , testpdp, alpha123"));
+            .contains("/pdp/ , testpdp, alpha123"));
         assertTrue(((String) policyConfiguration.getProperties().get(PolicyConfiguration.PDP_URL2))
-                .contains("/pdp/ , testpdp, alpha123"));
+            .contains("/pdp/ , testpdp, alpha123"));
         assertTrue(((String) policyConfiguration.getProperties().get(PolicyConfiguration.PAP_URL))
-                .contains("/pap/ , testpap, alpha123"));
+            .contains("/pap/ , testpap, alpha123"));
         assertEquals("websocket", policyConfiguration.getProperties().get(PolicyConfiguration.NOTIFICATION_TYPE));
         assertEquals("localhost",
-                policyConfiguration.getProperties().get(PolicyConfiguration.NOTIFICATION_UEB_SERVERS));
+            policyConfiguration.getProperties().get(PolicyConfiguration.NOTIFICATION_UEB_SERVERS));
         assertEquals("python", policyConfiguration.getProperties().get(PolicyConfiguration.CLIENT_ID));
         assertEquals("dGVzdA==", policyConfiguration.getProperties().get(PolicyConfiguration.CLIENT_KEY));
         assertEquals("DEVL", policyConfiguration.getProperties().get(PolicyConfiguration.ENVIRONMENT));
index 751d704..295ccc5 100644 (file)
@@ -18,7 +18,7 @@
  * limitations under the License.
  * ============LICENSE_END============================================
  * ===================================================================
- * 
+ *
  */
 
 package org.onap.clamp.clds.model.prop;
@@ -52,10 +52,10 @@ public class ModelPropertiesTest {
     @Test
     public void testTcaModelDecoding() throws IOException {
         String modelBpmnProp = ResourceFileUtil
-                .getResourceAsString("example/model-properties/tca/modelBpmnProperties.json");
+            .getResourceAsString("example/model-properties/tca/modelBpmnProperties.json");
         String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmn.json");
         ModelProperties prop = new ModelProperties("example-model-name", "example-control-name", null, true, modelBpmn,
-                modelBpmnProp);
+            modelBpmnProp);
         Policy policy = prop.getType(Policy.class);
         assertTrue(policy.isFound());
         assertEquals(1, policy.getPolicyChains().size());
@@ -76,23 +76,21 @@ public class ModelPropertiesTest {
         assertEquals(2, tca.getTcaItem().getTcaThresholds().size());
         assertEquals("ABATED", tca.getTcaItem().getTcaThresholds().get(0).getClosedLoopEventStatus());
         assertEquals("$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value",
-                tca.getTcaItem().getTcaThresholds().get(0).getFieldPath());
+            tca.getTcaItem().getTcaThresholds().get(0).getFieldPath());
         assertEquals("LESS_OR_EQUAL", tca.getTcaItem().getTcaThresholds().get(0).getOperator());
         assertEquals(Integer.valueOf(123), tca.getTcaItem().getTcaThresholds().get(0).getThreshold());
         assertEquals("ONSET", tca.getTcaItem().getTcaThresholds().get(1).getClosedLoopEventStatus());
         assertEquals("$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value",
-                tca.getTcaItem().getTcaThresholds().get(1).getFieldPath());
+            tca.getTcaItem().getTcaThresholds().get(1).getFieldPath());
         assertEquals("GREATER_OR_EQUAL", tca.getTcaItem().getTcaThresholds().get(1).getOperator());
         assertEquals(Integer.valueOf(123), tca.getTcaItem().getTcaThresholds().get(1).getThreshold());
         // Test global prop
         assertEquals("vnfRecipe", prop.getGlobal().getActionSet());
         assertEquals("4cc5b45a-1f63-4194-8100-cd8e14248c92", prop.getGlobal().getService());
-        assertTrue(Arrays.equals(new String[] {
-                "023a3f0d-1161-45ff-b4cf-8918a8ccf3ad"
-        }, prop.getGlobal().getResourceVf().toArray()));
-        assertTrue(Arrays.equals(new String[] {
-                "SNDGCA64", "ALPRGAED", "LSLEILAA", "MDTWNJC1"
-        }, prop.getGlobal().getLocation().toArray()));
+        assertTrue(Arrays.equals(new String[] { "023a3f0d-1161-45ff-b4cf-8918a8ccf3ad" },
+            prop.getGlobal().getResourceVf().toArray()));
+        assertTrue(Arrays.equals(new String[] { "SNDGCA64", "ALPRGAED", "LSLEILAA", "MDTWNJC1" },
+            prop.getGlobal().getLocation().toArray()));
         assertEquals("value1", prop.getGlobal().getDeployParameters().get("input1").asText());
         assertEquals("value2", prop.getGlobal().getDeployParameters().get("input2").asText());
     }
@@ -100,10 +98,10 @@ public class ModelPropertiesTest {
     @Test
     public void testHolmesModelDecoding() throws IOException {
         String modelBpmnProp = ResourceFileUtil
-                .getResourceAsString("example/model-properties/holmes/modelBpmnProperties.json");
+            .getResourceAsString("example/model-properties/holmes/modelBpmnProperties.json");
         String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/holmes/modelBpmn.json");
         ModelProperties prop = new ModelProperties("example-model-name", "example-control-name", null, true, modelBpmn,
-                modelBpmnProp);
+            modelBpmnProp);
         Policy policy = prop.getType(Policy.class);
         assertTrue(policy.isFound());
         assertEquals(1, policy.getPolicyChains().size());
@@ -122,12 +120,10 @@ public class ModelPropertiesTest {
         // Test global prop
         assertEquals("vnfRecipe", prop.getGlobal().getActionSet());
         assertEquals("4cc5b45a-1f63-4194-8100-cd8e14248c92", prop.getGlobal().getService());
-        assertTrue(Arrays.equals(new String[] {
-                "f5213e3a-9191-4362-93b5-b67f8d770e44"
-        }, prop.getGlobal().getResourceVf().toArray()));
-        assertTrue(Arrays.equals(new String[] {
-                "SNDGCA64", "ALPRGAED", "LSLEILAA", "MDTWNJC1"
-        }, prop.getGlobal().getLocation().toArray()));
+        assertTrue(Arrays.equals(new String[] { "f5213e3a-9191-4362-93b5-b67f8d770e44" },
+            prop.getGlobal().getResourceVf().toArray()));
+        assertTrue(Arrays.equals(new String[] { "SNDGCA64", "ALPRGAED", "LSLEILAA", "MDTWNJC1" },
+            prop.getGlobal().getLocation().toArray()));
         assertEquals("value1", prop.getGlobal().getDeployParameters().get("input1").asText());
         assertEquals("value2", prop.getGlobal().getDeployParameters().get("input2").asText());
     }
@@ -135,8 +131,8 @@ public class ModelPropertiesTest {
     @Test
     public void testGetVf() throws IOException {
         CldsModel cldsModel = new CldsModel();
-        cldsModel.setPropText(
-                ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmnProperties.json"));
+        cldsModel
+        .setPropText(ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmnProperties.json"));
         assertEquals("023a3f0d-1161-45ff-b4cf-8918a8ccf3ad", ModelProperties.getVf(cldsModel));
     }
 }
\ No newline at end of file
index acf6452..4268ce3 100644 (file)
@@ -110,7 +110,7 @@ async.queue.capacity=500
 \r
 #For EELF logback file\r
 #com.att.eelf.logging.path=\r
-com.att.eelf.logging.file=logback-default.xml\r
+clamp.config.logback.filename=logback-default.xml\r
 #The log folder that will be used in logback.xml file\r
 clamp.config.log.path=log\r
 clamp.config.files.systemProperties=classpath:/system.properties\r
index 0ee7122..96f9675 100644 (file)
@@ -47,8 +47,8 @@ node_templates:
         publisherPollingInterval: '20000'
         publisherProtocol: https
         publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub
-        publisherUserName: m00502@tca.af.dcae.onap.org
-        publisherUserPassword: Te5021abc
+        publisherUserName: test@tca.af.dcae.onap.org
+        publisherUserPassword: password
         subscriberConsumerGroup: OpenDCAE-c12
         subscriberConsumerId: c12
         subscriberContentType: application/json
@@ -59,8 +59,8 @@ node_templates:
         subscriberProtocol: https
         subscriberTimeoutMS: '-1'
         subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub
-        subscriberUserName: m00502@tca.af.dcae.onap.org
-        subscriberUserPassword: Te5021abc
+        subscriberUserName: test@tca.af.dcae.onap.org
+        subscriberUserPassword: password
         tca_policy: null
       artifact_name: dcae-analytics-tca
       artifact_version: 1.0.0
diff --git a/src/test/resources/example/operational-policy/json-policy-chain.json b/src/test/resources/example/operational-policy/json-policy-chain.json
new file mode 100644 (file)
index 0000000..037b4d6
--- /dev/null
@@ -0,0 +1,63 @@
+[
+  {
+    "name": "pname",
+    "value": "healthCheck Policy"
+  },
+  {
+    "name": "pid",
+    "value": "1"
+  },
+  {
+    "name": "timeout",
+    "value": "180"
+  },
+  {
+    "policyConfigurations": [
+      [
+        {
+          "name": "recipe",
+          "value": [
+            "healthCheck"
+          ]
+        },
+        {
+          "name": "maxRetries",
+          "value": [
+            "3"
+          ]
+        },
+        {
+          "name": "retryTimeLimit",
+          "value": [
+            "180"
+          ]
+        },
+        {
+          "name": "_id",
+          "value": [
+            "789875c1-e788-432f-9a76-eac8ed889734"
+          ]
+        },
+        {
+          "name": "parentPolicy",
+          "value": [
+            ""
+          ]
+        },
+        {
+          "name": "actor",
+          "value": [
+            "APPC"
+          ]
+        },
+        {
+          "name": "targetResourceId",
+          "value": [
+            "cdb69724-57d5-4a22-b96c-4c345150fd0e"
+          ]
+        }
+
+      ]
+    ]
+  }
+]
\ No newline at end of file
index 1a756ee..0ab8317 100644 (file)
@@ -47,8 +47,8 @@ node_templates:
         publisherPollingInterval: '20000'
         publisherProtocol: https
         publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub
-        publisherUserName: m00502@tca.af.dcae.onap.org
-        publisherUserPassword: Te5021abc
+        publisherUserName: test@tca.af.dcae.onap.org
+        publisherUserPassword: password
         subscriberConsumerGroup: OpenDCAE-c12
         subscriberConsumerId: c12
         subscriberContentType: application/json
@@ -59,8 +59,8 @@ node_templates:
         subscriberProtocol: https
         subscriberTimeoutMS: '-1'
         subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub
-        subscriberUserName: m00502@tca.af.dcae.onap.org
-        subscriberUserPassword: Te5021abc
+        subscriberUserName: test@tca.af.dcae.onap.org
+        subscriberUserPassword: password
         tca_policy: null
       artifact_name: dcae-analytics-tca
       artifact_version: 1.0.0
@@ -101,4 +101,4 @@ node_templates:
     type: dcae.nodes.Topic
     properties:
       topic_name: ''
-      
\ No newline at end of file
+      
index d31b66b..01998dc 100644 (file)
@@ -8,7 +8,7 @@
   "subCategory": "Abstract",
   "resourceType": "CVFC",
   "lifecycleState": "CERTIFIED",
-  "lastUpdaterUserId": "m08740",
+  "lastUpdaterUserId": "user",
   "lastUpdaterFullName": "Zero ASDCMech",
   "toscaResourceName": "org.openecomp.resource.vfc.ClampDev.abstract.nodes.virc_fe_be_0",
   "resources": [
index 790b2d5..54003a6 100644 (file)
@@ -9,7 +9,7 @@
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "22db11dd-8f1b-4687-93c1-68d9699cc8dd",
@@ -21,7 +21,7 @@
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "pa0916"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "a40da782-3ec4-4138-849f-f9dd4013744e",
@@ -33,7 +33,7 @@
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "d5711e0f-1e01-4f0f-8bb7-e3805607ddc8",
@@ -45,7 +45,7 @@
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "c4736acb-5f9b-4918-a188-f166c948f21d",
@@ -57,7 +57,7 @@
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "49c45990-9aca-437a-aeea-cd5d97f4db2d",
@@ -69,7 +69,7 @@
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "37ee791a-cf0b-4968-8003-9f0b93e4e5e0",
@@ -81,7 +81,7 @@
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "pa0916"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "59db0e7d-8800-4b73-8236-42d95e28c865",
@@ -93,7 +93,7 @@
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "26b7ac12-5cf0-456c-adb4-fb7b5d0d7162",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "a056a4ab-4e72-4631-8539-0f4327b5beb0",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "pa0916"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "9d81d5e5-72aa-4ec7-b10e-f55f0369f5b5",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "ad90ed2d-5266-41f3-af43-db9b9f6765c3",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "a790f10d-6915-42a4-ae60-f3525d7dfef2",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "8b774c12-26bd-4dff-a9f8-3e4c46d9d5a0",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "c2740411-a801-416a-8d71-d10d5a3d3794",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "7918ba80-97a2-4ead-87f0-dfc61da405c9",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "bdbe08db-0471-443e-967a-eb7b619be46b",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "0e997760-1d6d-4afc-b9ab-6c2a94807463",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "e47dccd6-a23c-4685-a21b-b57d7c5a7007",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "2c8f1219-8000-4001-aa13-496a0396d40f",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "c01cc6f1-4109-4498-b6c1-2cba7140a8b0",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "0457dd05-f754-48f8-8997-3819c1abbdac",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "cba89050-752c-4aac-8cec-6f0463eb8a23",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "93a60704-ce74-4f1e-b845-ddb3acfe8819",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "5ac81105-ff5a-41fd-a84b-2aff8a694d14",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "ba85242a-7910-4501-b8d7-fc47fa9ed902",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "dc32e966-81d2-4048-b123-8e91e930b61e",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "fd7fa970-c758-4daa-8cd8-77cbc1dc2604",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "9b1b82c1-308c-42b8-8ca3-00e744be4cbf",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "c771d2d4-b5e0-43ce-baa6-020389238484",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "50b5240c-fc4f-4f1e-bd9e-a89f48912b50",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "cce30e84-4f25-4712-ae16-6223b81ebe30",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "128b71d0-616c-4ddc-bfc6-831fd07d2b23",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "2ac67cfc-abc8-4e7a-882f-8594af8a142b",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "f3264aab-8f59-4942-a118-2663e445e055",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "pa0916"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "0d094452-1b7d-4b5a-86ff-bce315102473",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml636r"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "dec15871-f6f6-4e44-8a8d-1e30f69ac0d3",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "9150f327-801e-4963-b25b-b4583ec55c79",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "6b143e5e-dfcc-4572-b101-7fcb98c0bdde",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ss1245"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "fc93fad1-0133-43c8-8355-9e0797665774",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ss1245"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "24101cfd-f824-4340-916f-a881a203062b",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "844453e6-46b2-4673-aee7-f0dba8a90218",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "6e19c4fc-fe71-4fd1-951a-37cdb76016b5",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "8d5cce48-c3cb-4a7d-b94c-f4a40ea13cf6",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "2cb64483-fa56-4599-8752-da98434bfaa0",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "ca9d0619-51fc-4c62-a653-c22297a7da0d",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "183ca9a3-5e5d-4180-9e16-b89cb19050d6",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "a4a0faf3-ec92-425c-8720-2cbd43748348",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "140b8590-3d21-474c-9cd2-72d71eae93ac",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "2aa34c35-e0b6-4974-89d7-68b0595a67a9",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml636r"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "7fdf044e-7e8b-4a78-b560-1de3709a5748",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml636r"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "49632b9c-cb8e-43a3-8aaf-824418e57056",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml636r"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "07d4e7a0-b849-400d-8c9a-3cb77e7dd8b0",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "77752274-77c0-430b-a99c-1b4f324fbbe0",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "34236492-9bdf-4014-804d-6067f52bc62d",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "3cc412d3-a6ee-4d3c-acc8-2a1ff7810377",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "1e55adcd-dabf-432e-b872-f8ba02931b15",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "62e449b8-0539-450c-a929-e78af95decef",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "72333ee0-007b-4e98-a097-4bc1da668fc6",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "4de24e5d-9608-45fc-8803-980f93841f89",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "a5e5d12f-7cc8-4b6a-b1b1-f344a7653b76",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "be58ec10-fdda-4436-95db-1f059508e63c",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml636r"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "fb0a4dae-87f6-4c72-897c-aa0c7733bb1d",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "eff16637-cc77-4b5e-bb18-e59f4901406b",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "a4d9c48f-177b-498d-a4f2-f727359d930c",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "a12837b0-336a-473f-b19c-9f711eac89bb",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "ba665cad-c3fa-4b7b-b49c-e9151e314fff",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "f577a370-980c-4d28-93d7-6db297260bf6",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "67fc9bfe-5f35-406e-892b-bcd6635d8503",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "1ca8c4da-0609-4fe4-86d5-a3e95b326f6d",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "f09d1939-490e-456d-a17c-9e3fe75017aa",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "f502cd24-ee81-446f-87dc-cd4d1924b3d0",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml636r"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "22357844-f903-4252-b9b3-bb21d3190e88",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml636r"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "5443c9e4-e979-48de-9662-db5e5b0d8473",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml636r"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "419fd69c-9d1f-4679-9677-88cff351bc13",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "02eb6606-ba4d-428a-8043-2a57acfc8180",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "9f5fcf0f-013a-429c-807d-325a0ffe1f4e",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "3b1050e1-ffef-4e39-9e6e-7f13a3b9c28a",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "e6f1576a-6ba7-48b9-a72d-c25d6e830b7c",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "c01d30f8-31ee-4e77-90a9-1e6c253e905f",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "9020ebb6-0d56-4355-8308-3b3082d96565",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "1d746450-e070-4c45-bb49-158537d3246b",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "712d2e08-0ca2-4f48-b193-34a887a168c6",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "c13f95f6-7757-4124-a5be-3a7c6ae2bd20",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "12e60ab4-7e48-4f6b-a124-f109b50d9f4a",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "fb57af5b-84f2-4baf-b6a8-61062f924cd2",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "7f550ae3-1242-4468-b04a-0666946d84aa",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "3af9b720-144d-4507-aea8-73b49bc243c4",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "24ca039c-26e1-4f79-b2a4-660a7a21f752",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "c0e6a2a1-3fc7-4663-8df7-b0263288f116",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "e74db726-0ad6-4a6e-be6c-4094df81eafd",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "e49a643b-23a0-4b50-a3c0-a5a60003a958",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ss1245"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "e0941d01-8ec6-448b-80f8-007e8c88ed28",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "98771c36-da29-4a80-85e9-72e9fbef3286",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "7218a91c-7c13-443f-b085-a10f1593624e",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "5a2c7097-c582-4337-918e-48b58d79dd74",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
     {
         "uuid": "e70970f3-aa70-4d6b-9fd4-eb07ff42693f",
         "subCategory": "Abstract",
         "resourceType": "CVFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     }
 ]
\ No newline at end of file
index b5ffe64..1832a9a 100644 (file)
@@ -8,7 +8,7 @@
     "subCategory": "Infrastructure",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003",
+    "lastUpdaterUserId": "user",
     "lastUpdaterFullName": "Jimmy Hendrix",
     "toscaResourceName": "org.openecomp.resource.vfc.nodes.heat.cinder.Volume",
     "description": "Represents a server-local block storage device that provides persistent storage to guest virtual machines. "
index 3e904b1..7653b94 100644 (file)
@@ -8,7 +8,7 @@
     "subCategory": "Router",
     "resourceType": "VF",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m08743",
+    "lastUpdaterUserId": "user",
     "lastUpdaterFullName": "Three ASDCMech",
     "toscaResourceName": "org.openecomp.resource.vf.ClampDev",
     "resources": 
index 07930a2..b73abb0 100644 (file)
@@ -8,7 +8,7 @@
     "subCategory": "Rules",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003",
+    "lastUpdaterUserId": "user",
     "lastUpdaterFullName": "Jimmy Hendrix",
     "toscaResourceName": "org.openecomp.resource.vfc.rules.nodes.heat.network.neutron.SecurityRules",
     "description": "Configuration of policy rules to be applied on ports."
index 820c6ca..b344f41 100644 (file)
@@ -8,7 +8,7 @@
     "subCategory": "Application Server",
     "resourceType": "VF",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ml4535",
+    "lastUpdaterUserId": "user",
     "lastUpdaterFullName": "MONICA LAZER",
     "toscaResourceName": "org.openecomp.resource.vf.Vcts3",
     "resources": 
index 3c1277a..d4f154f 100644 (file)
@@ -7,7 +7,7 @@
         "toscaModelURL": "/sdc/v1/catalog/resources/29018914-966c-442d-9d08-251b9dc45b8e/toscaModel",
         "category": "Application L4+",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535",
+        "lastUpdaterUserId": "user",
         "distributionStatus":"DISTRIBUTED"
     },
     {
@@ -18,7 +18,7 @@
         "toscaModelURL": "/sdc/v1/catalog/resources/29018914-966c-442d-9d08-251b9dc45b8e/toscaModel",
         "category": "Application L4+",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535",
+        "lastUpdaterUserId": "user",
         "distributionStatus":"DISTRIBUTED"
     },
         {
@@ -29,7 +29,7 @@
         "toscaModelURL": "/sdc/v1/catalog/resources/29018914-966c-442d-9d08-251b9dc45b8e/toscaModel",
         "category": "Application L4+",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535",
+        "lastUpdaterUserId": "user",
         "distributionStatus":"DISTRIBUTED"
     }
 ]
\ No newline at end of file
index 0f9cf63..952650a 100644 (file)
@@ -8,7 +8,7 @@
     "subCategory": "Abstract",
     "resourceType": "CVFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m08740",
+    "lastUpdaterUserId": "user",
     "lastUpdaterFullName": "Zero ASDCMech",
     "toscaResourceName": "org.openecomp.resource.vfc.ClampDev.abstract.nodes.virc_fe_be_1",
     "resources": 
index 0fb2f5d..5f523e6 100644 (file)
@@ -8,7 +8,7 @@
   "subCategory": "Abstract",
   "resourceType": "VFC",
   "lifecycleState": "CERTIFIED",
-  "lastUpdaterUserId": "m08740",
+  "lastUpdaterUserId": "user",
   "lastUpdaterFullName": "Zero ASDCMech",
   "toscaResourceName": "org.openecomp.resource.vfc.Clampdev.abstract.nodes.heat.virc_fe_be",
   "artifacts": [
index be2ee46..aa20afc 100644 (file)
@@ -9,7 +9,7 @@
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
@@ -22,7 +22,7 @@
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
@@ -35,7 +35,7 @@
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
@@ -48,7 +48,7 @@
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
@@ -61,7 +61,7 @@
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "pa0916"
+        "lastUpdaterUserId": "user"
     },
 
     {
@@ -74,7 +74,7 @@
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
 
     {
@@ -87,7 +87,7 @@
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "pa0916"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "pa0916"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Infrastructure",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Infrastructure",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "pa0916"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Network Elements",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Allotted Resource",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Infrastructure",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Database",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Infrastructure",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Rules",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Allotted Resource",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99124"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Allotted Resource",
         "resourceType": "VFC",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Infrastructure",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Infrastructure",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Rules",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Rules",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rb844h"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rb844h"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "az2497"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "uuid": "3c9b6ec9-2b6a-4c81-96cd-f3e5c0264ae6",
         "invariantUUID": "cdc19c35-bcac-4f78-a7a6-c216b374f5a3",
-        "name": "VmmscAic30MultiMembersMultiGroupsVolumeCs.nodes.heat.nems_fe",
+        "name": "VmmscLab30MultiMembersMultiGroupsVolumeCs.nodes.heat.nems_fe",
         "version": "1.0",
         "toscaModelURL": "/sdc/v1/catalog/resources/3c9b6ec9-2b6a-4c81-96cd-f3e5c0264ae6/toscaModel",
         "category": "Generic",
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "uuid": "612317df-67b5-487f-b592-44f5e682b0a9",
         "invariantUUID": "3bae7612-b50d-48ed-8ae7-b6f17521395b",
-        "name": "VmmscAic30MultiMembersMultiGroupsVolumeCs.nodes.heat.nems_be",
+        "name": "VmmscLab30MultiMembersMultiGroupsVolumeCs.nodes.heat.nems_be",
         "version": "1.0",
         "toscaModelURL": "/sdc/v1/catalog/resources/612317df-67b5-487f-b592-44f5e682b0a9/toscaModel",
         "category": "Generic",
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "az2497"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Infrastructure",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Infrastructure",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "jh0003"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "az2497"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "uuid": "bc40b750-56ab-4c6b-8e15-412f9be0178f",
         "invariantUUID": "ab769637-063f-41fd-927d-771a1913235b",
-        "name": "VmmscAic30MultiMembersMultiGroupsVolumeCs.nodes.heat.mmsc",
+        "name": "VmmscLab30MultiMembersMultiGroupsVolumeCs.nodes.heat.mmsc",
         "version": "1.0",
         "toscaModelURL": "/sdc/v1/catalog/resources/bc40b750-56ab-4c6b-8e15-412f9be0178f/toscaModel",
         "category": "Generic",
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "uuid": "3ff3d87f-c55f-4b4c-a8ae-29931d910359",
         "invariantUUID": "5af2c63a-1b3e-42a5-ab4b-07e97d1dcbd2",
-        "name": "VmmscAic30MultiMembersMultiGroupsVolume.nodes.heat.nems_be",
+        "name": "VmmscLab30MultiMembersMultiGroupsVolume.nodes.heat.nems_be",
         "version": "1.0",
         "toscaModelURL": "/sdc/v1/catalog/resources/3ff3d87f-c55f-4b4c-a8ae-29931d910359/toscaModel",
         "category": "Generic",
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "uuid": "d544d6a6-4fcc-42db-97f6-e8cccc69c5ee",
         "invariantUUID": "cd4a433e-cf76-4652-a6b8-59e657e0c5a0",
-        "name": "VmmscAic30MultiMembersMultiGroupsVolumeCs.nodes.heat.lb",
+        "name": "VmmscLab30MultiMembersMultiGroupsVolumeCs.nodes.heat.lb",
         "version": "1.0",
         "toscaModelURL": "/sdc/v1/catalog/resources/d544d6a6-4fcc-42db-97f6-e8cccc69c5ee/toscaModel",
         "category": "Generic",
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "uuid": "de861add-3f4a-4526-9754-8bcb69d0fd0e",
         "invariantUUID": "67560771-ffcb-46fb-a40c-0e1dee74f43a",
-        "name": "VmmscAic30MultiMembersMultiGroupsVolume.nodes.heat.mmsc",
+        "name": "VmmscLab30MultiMembersMultiGroupsVolume.nodes.heat.mmsc",
         "version": "1.0",
         "toscaModelURL": "/sdc/v1/catalog/resources/de861add-3f4a-4526-9754-8bcb69d0fd0e/toscaModel",
         "category": "Generic",
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "uuid": "897dcb54-bb55-4311-8c0e-b663781d7e4f",
         "invariantUUID": "c223adda-e48d-487d-98e8-654bbb8268af",
-        "name": "VmmscAic30MultiMembersMultiGroupsVolume.nodes.heat.lb",
+        "name": "VmmscLab30MultiMembersMultiGroupsVolume.nodes.heat.lb",
         "version": "1.0",
         "toscaModelURL": "/sdc/v1/catalog/resources/897dcb54-bb55-4311-8c0e-b663781d7e4f/toscaModel",
         "category": "Generic",
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "uuid": "173c32b5-44c8-4404-ba18-32d9de49afae",
         "invariantUUID": "c247493b-15a4-47af-bb6b-c664cb5a4d37",
-        "name": "VmmscAic30MultiMembersMultiGroupsVolume.nodes.heat.eca_trx",
+        "name": "VmmscLab30MultiMembersMultiGroupsVolume.nodes.heat.eca_trx",
         "version": "1.0",
         "toscaModelURL": "/sdc/v1/catalog/resources/173c32b5-44c8-4404-ba18-32d9de49afae/toscaModel",
         "category": "Generic",
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "uuid": "0e6509c9-7d35-4daf-9086-9fe30fdd1275",
         "invariantUUID": "9516ad03-b122-4738-ad6d-d9c2166cd75a",
-        "name": "VmmscAic30MultiMembersMultiGroupsVolume.nodes.heat.nems_fe",
+        "name": "VmmscLab30MultiMembersMultiGroupsVolume.nodes.heat.nems_fe",
         "version": "1.0",
         "toscaModelURL": "/sdc/v1/catalog/resources/0e6509c9-7d35-4daf-9086-9fe30fdd1275/toscaModel",
         "category": "Generic",
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "uuid": "8678abfe-8cbd-42f2-aa78-ca47a1beaa14",
         "invariantUUID": "4d02c8a5-e141-4d01-94ec-7a3b94afda97",
-        "name": "VmmscAic30MultiMembersMultiGroupsVolumeCs.nodes.heat.eca_trx",
+        "name": "VmmscLab30MultiMembersMultiGroupsVolumeCs.nodes.heat.eca_trx",
         "version": "1.0",
         "toscaModelURL": "/sdc/v1/catalog/resources/8678abfe-8cbd-42f2-aa78-ca47a1beaa14/toscaModel",
         "category": "Generic",
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rb844h"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rb844h"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ss8214"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "pa0916"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VFC",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     }
 ]
\ No newline at end of file
index c6ca26d..7d81afa 100644 (file)
@@ -9,7 +9,7 @@
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "da3c740a-e8af-4b85-a487-b4961b040fa3",
@@ -21,7 +21,7 @@
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ed852m"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "b31696d9-ad41-4cb5-bbdd-3e67845204f3",
@@ -33,7 +33,7 @@
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "25b74ab6-565b-424f-bb57-b434bb2944a0",
@@ -45,7 +45,7 @@
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "c13dc4c4-f4cb-4a54-9198-5bce42c5df02",
@@ -57,7 +57,7 @@
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "pa0916"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "08e94ce5-79e8-4873-9221-eb9e869ac679",
@@ -69,7 +69,7 @@
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m08740"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "0d8f93f5-780e-47de-9b03-52ab31cb83d1",
@@ -81,7 +81,7 @@
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m08740"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "9140709a-d6a9-4690-b102-6fa96a696ce9",
@@ -93,7 +93,7 @@
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "pa0916"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "6607c9fc-dc1d-4a89-ac57-b6b18fc79b69",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "pa0916"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "3cb0c46c-af73-4420-ae5c-d4816b314980",
     "subCategory": "Infrastructure",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "b4288e07-597a-44a2-aa98-ad36e551a39d",
     "subCategory": "Infrastructure",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "156d628f-f515-4f58-bfb0-210632717ce3",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "28eeb6ce-2349-4c07-80ad-f0aacbf67028",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "pa0916"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "f89e37a8-c5c0-4c0c-a034-f6c0ad8dd83f",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "8263c4c5-555e-4b73-9210-ddc8dd7e42f8",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ed852m"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "dd7218d7-5760-4834-b78a-33edf5eb22e7",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ed852m"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "10906cdf-dbec-405a-a513-7ed2090a5adb",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "e0ee89f0-175b-47d8-8258-1ac6ea6d52a8",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "e45c5438-0528-4a3d-bfa4-644b2343537c",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "ba541b5b-7d06-4198-adf9-c035b374cdb3",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m08740"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "e84b8370-ffb7-4f6c-a242-ab3f340617fa",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "512ea41b-b9ac-412a-95ee-ac7410c2b6b2",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "el489u"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "b4897fd9-7a50-492a-9e0c-054d044c1dcf",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "24413de0-35fd-4e1b-8052-51a1c798b24d",
     "subCategory": "Call Control",
     "resourceType": "VFC",
     "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-    "lastUpdaterUserId": "m08740"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d3543795-31cd-4bb9-acd7-09249fdf0c5b",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m08740"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "2b4c437e-9034-4ec3-b6f9-9309022673cf",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "56cef7d0-af8c-4f18-80a2-e9aaf4366838",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "af3193"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d7646638-2572-4a94-b497-c028ac15f9ca",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m08740"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "39300382-8d78-4598-afa0-042613d6d8f7",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "1d614214-2bc7-45bd-ab85-801ed72888c0",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "el489u"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "880e5d06-8c62-43f2-ac4a-befff414e63c",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "af3193"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "b58f9c1a-ad21-459d-9efa-a8924147cb90",
     "subCategory": "Allotted Resource",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "27307a62-8512-4aeb-a0ad-e8e88643c2ba",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "c0cfa0b8-1214-4abc-bf4b-f71aed72f03b",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "fd0e3baa-fef7-4096-be2f-a73fea2f1360",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "efc0c5f9-b900-4d6e-a8d9-746bfb400c6d",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m08740"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "c003a901-a27e-49a4-bf3f-d9d8ca838f0a",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "el489u"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d555e4fc-5c42-4990-9a53-3cc998496595",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ss1245"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "73c3f25a-88a2-4ac3-89a4-9c0ecf5a9b31",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ss1245"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "a12dad87-6120-412f-8a53-c5bb88be89a3",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "eabf4617-19da-4df2-b195-579309638c51",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "a14e3bbd-b04b-4924-817c-b4d13bfd8fe2",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "fa5a2fa8-ae63-49c0-9f6c-5e5e2b7f9faa",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "el489u"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "41dea130-9195-4d0b-97ba-8d86c0b00684",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m08740"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "b8334449-de6b-4133-9c5d-1eb6c2736614",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "af3193"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "97b6b724-1d91-406f-90c7-4d4643b34630",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m08740"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "a902ec74-9415-4d5c-a14e-f0861a272407",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "3127c05d-fe28-4d7f-9866-33d87943e082",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ml636r"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "c17fc945-c327-469b-9912-f6d628cd6e4e",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "el489u"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "82646e24-0e94-416a-aae2-9df4b2aa6217",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "f059ce03-14f3-46c3-a9b3-246404b2f9d0",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "8dfca155-2ff7-49b3-b563-cc9c80bc951d",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "b36dd1f0-f6aa-464d-b579-b5b75585ed44",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "b425c959-77e2-49bd-8865-dbdb59348b1a",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ml636r"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "3f631e5f-5a89-48e1-9a22-ef4bff70041e",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "a6c14d60-4705-4c73-a5a6-0210c9f0d8b7",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ml636r"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "f6b85fc7-0be4-408a-8682-66227e9a9788",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ml636r"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "35014ae6-b3dd-4a06-9046-df1b54354d40",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "5fe71b5f-c733-4500-b129-a2f5822ba6f2",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "af3193"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "1b81e5d3-4a08-4db5-84a9-09096ff0f5ad",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "65624d26-fca6-4af0-bbdb-f3cc33b81417",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "3445e9cf-056a-4f0f-b0c3-a151cf9f3c5c",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "78ff76c9-23d2-44c4-b0da-2492d93490b9",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "3ce98526-e5b6-4b40-99a1-916cca22b652",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "el489u"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "aae2edf9-690a-4633-a6ff-d7556ab9ce58",
     "subCategory": "Network Elements",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "5a8831a3-d481-49ce-b029-754e37e4bc07",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ml636r"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "5c94528b-c068-4ece-9903-2a206e7b653b",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ml636r"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "0b62cd13-b416-40fc-904b-b071f22134cd",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ml636r"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "ee55b9c4-6ea2-4351-bf6e-f88f38130fd8",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "af3193"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "c01c047d-395f-44fa-a34f-dc3f9c51c92c",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "143166ba-bb54-4a38-b3c5-24850a16a283",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m08740"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d6554a01-a3db-4dfe-8f41-af3866e18fa0",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "af3193"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "5fc1e5d4-1015-4614-b486-8727eb5e388b",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "90024548-1f2c-4267-b3f7-b64b2b7174d5",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m08740"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "592fb9b5-aace-4c14-8e10-f1214cc532f0",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ml636r"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "73b40185-4478-402c-8951-2dd03b3e0e3c",
     "subCategory": "Contrail Route",
     "resourceType": "VFC",
     "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-    "lastUpdaterUserId": "ml636r"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "61214be3-e560-44cc-877b-d484bcc2ee79",
     "subCategory": "Infrastructure",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "efb54bab-a842-48b3-842a-dffb000acf1f",
     "subCategory": "Database",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "42315f4b-660e-44a5-b4bb-7fb80087de69",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "4066e7da-0dba-4d0b-b74c-c30446ed277e",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "b39e436d-47b0-4509-95d6-8a63e2c722d1",
     "subCategory": "Infrastructure",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "94b8f588-624c-4e61-9ead-32aaadd8cf65",
     "subCategory": "Rules",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "fa17c264-7f19-4919-a1d4-aab5c53b9c32",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "76ba485f-50a3-480d-895e-5c319191bc11",
     "subCategory": "Allotted Resource",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99124"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "1909a305-e032-46ce-9278-c751659958cc",
     "subCategory": "Allotted Resource",
     "resourceType": "VFC",
     "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "64fb42a4-7c3d-415b-afd0-1949abef550a",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "c3ed93e4-4955-4100-8f4b-c9472cb3f28f",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "af3193"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "a71b3246-b54e-4646-bd6f-d5a11d4878df",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "af3193"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d36283cc-7d52-4893-8f72-fbffbbe17857",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "2ef832aa-25f1-4f5a-b6d4-a6ee90011918",
     "subCategory": "Infrastructure",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "31060494-0c59-4c15-b4f4-34900d73b803",
     "subCategory": "Infrastructure",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d57e57d2-e3c6-470d-8d16-e6ea05f536c5",
     "subCategory": "Rules",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "db9360b9-0edb-43e1-8cf0-00bb90b7c2be",
     "subCategory": "Rules",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "503948a9-03bb-4738-8464-c6e21da10792",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "e4514d83-9708-427f-a62b-f996e426ba58",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "3ab24991-cf93-4d40-9468-52d233d36ad6",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "930aab76-fc52-43dd-8f19-e2ce11503bb5",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "fca030db-0a4b-4873-94d2-20ea6b8f259f",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "bc74b1ae-11f7-4550-8c25-e528e749d2ea",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rb844h"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "624a7da1-68ce-4b95-9d50-6a07d645e421",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rb844h"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "0c19272a-b2a2-4ffe-a6e7-ce3a683f23fc",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "az2497"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "46887197-fec9-4cf5-9207-e6e7f4a6cf3a",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "563ca30e-8e6f-4456-b1c0-d1a5b6b052aa",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "2437819c-3f2e-4ae8-9427-b41463a63a21",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "3c9b6ec9-2b6a-4c81-96cd-f3e5c0264ae6",
     "invariantUUID": "cdc19c35-bcac-4f78-a7a6-c216b374f5a3",
-    "name": "VmmscAic30MultiMembersMultiGroupsVolumeCs.nodes.heat.nems_fe",
+    "name": "VmmscLab30MultiMembersMultiGroupsVolumeCs.nodes.heat.nems_fe",
     "version": "1.0",
     "toscaModelURL": "/sdc/v1/catalog/resources/3c9b6ec9-2b6a-4c81-96cd-f3e5c0264ae6/toscaModel",
     "category": "Generic",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "612317df-67b5-487f-b592-44f5e682b0a9",
     "invariantUUID": "3bae7612-b50d-48ed-8ae7-b6f17521395b",
-    "name": "VmmscAic30MultiMembersMultiGroupsVolumeCs.nodes.heat.nems_be",
+    "name": "VmmscLab30MultiMembersMultiGroupsVolumeCs.nodes.heat.nems_be",
     "version": "1.0",
     "toscaModelURL": "/sdc/v1/catalog/resources/612317df-67b5-487f-b592-44f5e682b0a9/toscaModel",
     "category": "Generic",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "77b6934c-353e-407e-aa1e-6f1288cb3969",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "48a5a370-d91d-4bdd-a1a0-8d82eedcced8",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "1450f9c2-b491-4ac6-a388-db4e0752a58f",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "311a159d-ea0b-494c-97dd-52683df85faf",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "4902fae4-7f42-43c5-9472-fe12eca3f510",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "a82e5a26-463c-4b17-9d6e-16ea1f8c0dde",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d852ce5c-c883-41a1-88f9-167b8b4ff197",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "b299bd46-66c1-4954-af45-2fe3188f5c5e",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "f80f5252-2ecb-41e3-84d5-936586ae0a3a",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "9e4b96d7-5701-413e-8461-4cac258365ca",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "4d2bfb6f-9276-447b-b145-7f7856af9a6c",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "a614b20e-9c45-4163-b673-38f0068c5365",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "fbad0868-45e9-433b-ada7-070e88c09672",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "e50cbfd4-a860-441b-b1ff-c654c3222ad6",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "21aaf7bf-5af9-4b1a-9850-f4a5e95f185e",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "9d4a37d7-3c9b-4dad-abb6-26b50b15da8b",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "bb8fddbf-e011-4fed-9f36-181478f4e56c",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "2bb496fb-6ede-42e0-957e-bd80fa2e8aa1",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "a5226541-363b-4d78-8f52-06d421795457",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "f58b4bcf-baec-4c11-a6d0-0e92d4629fd2",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "30db70cc-17b8-4c39-a848-5f629e9a929e",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "52398d14-90d0-4d3a-ac84-10b525e79e3c",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d0deff85-ca52-4c86-8ca7-a02deddba983",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "25f77df9-f94a-4458-9699-5f483167f700",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "1ce8b11c-589c-4359-9caa-590a43fb53ec",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "f27b3a9c-b815-42fe-83c6-da86c18a63a6",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "c63814fe-9d50-4283-8229-ede6a5961de9",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "23f4bcc5-c6e1-4fdd-b45b-29eb3f82af2f",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "e63ef8ed-d40d-4b5f-99da-898fbe4b051b",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "292d2d83-c33b-4c22-8341-4401194a6499",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "af51c072-1754-4db3-97be-179ab7433295",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "5ec9fb9f-fa32-48e8-a317-8be839e15d30",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "az2497"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "3a8230f1-dd86-42f8-9d73-c239bc5c74e8",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "5658235d-6a1e-47fe-8e5f-9e081a11b713",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d4979513-3719-4076-bbc1-5a4fe040ddc6",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "a450b1ba-2d69-44e7-8934-1d21952ba6c9",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "c0bd2a8b-9dc3-4819-8ab1-11175ae06ef1",
     "subCategory": "Infrastructure",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "5f6ccc29-6f6c-41cf-b995-73c58e7278d2",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "5d6fdb58-1166-41b6-aab7-260e494ccc58",
     "subCategory": "Infrastructure",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "jh0003"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "57d4264b-3175-4a31-9515-f23c0318930f",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "dcd62b53-a045-4864-9ed3-aaf722fec10a",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "aa00977d-ff67-473a-acb8-bb24db037a0b",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "cb08bf67-6fc9-44ae-ae31-ab619cfd94af",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "cc3a0064-e9d4-421e-ba14-ce340adb7ed9",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "1f927980-bd8d-4a0c-8002-8f550e52efbe",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "6d1669d1-be78-47e7-aed4-d5a2267c81d4",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "bd9e5061-40dc-42ca-8d77-c606a24c8bfd",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "68ea026e-c604-47b5-9cd1-524a58714a14",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "bc3a8aae-7f94-4dac-b819-d37a077a08fc",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ed852m"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "8ba3f710-58d4-4d60-9384-1dad449d381a",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "0a09e932-9fde-4e52-b7e3-2e542b61faa0",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ed852m"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "fa6ca25b-4578-4093-b8a2-031cb8f1f481",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ed852m"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "f11a8681-ab58-4f0d-8387-76ecdfa31073",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ed852m"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "4b1cca9b-23a0-4037-aaf3-ce5cd7c91851",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m08740"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "17ed7b78-1ffb-4864-a2ec-b6666a5fed16",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "ab89b69b-b92b-4e34-b1db-a6378d709241",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d45694e4-ed86-4a44-a644-5a8a3ff89397",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "5c7fd7c0-fc79-4309-bb03-85388cae45a8",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "az2497"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "f739ea35-7bd4-42ed-b9ee-1e0fd2017c72",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "f2339431-f3ab-41c9-90c4-6c2c958e1b06",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "15728e01-7076-4765-8002-95154ad29d5f",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "ab168037-e654-4990-a188-e5d2f25a8768",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ml4535"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "e1d7eb6a-646d-4906-9981-44ed892dc01c",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "74c527c6-edb7-4bbe-a63c-d2daf5a12db0",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "345459d0-ba42-45ba-9eb0-cc56e4f35ea9",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "bc40b750-56ab-4c6b-8e15-412f9be0178f",
     "invariantUUID": "ab769637-063f-41fd-927d-771a1913235b",
-    "name": "VmmscAic30MultiMembersMultiGroupsVolumeCs.nodes.heat.mmsc",
+    "name": "VmmscLab30MultiMembersMultiGroupsVolumeCs.nodes.heat.mmsc",
     "version": "1.0",
     "toscaModelURL": "/sdc/v1/catalog/resources/bc40b750-56ab-4c6b-8e15-412f9be0178f/toscaModel",
     "category": "Generic",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "3ff3d87f-c55f-4b4c-a8ae-29931d910359",
     "invariantUUID": "5af2c63a-1b3e-42a5-ab4b-07e97d1dcbd2",
-    "name": "VmmscAic30MultiMembersMultiGroupsVolume.nodes.heat.nems_be",
+    "name": "VmmscLab30MultiMembersMultiGroupsVolume.nodes.heat.nems_be",
     "version": "1.0",
     "toscaModelURL": "/sdc/v1/catalog/resources/3ff3d87f-c55f-4b4c-a8ae-29931d910359/toscaModel",
     "category": "Generic",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "fda7cb95-cbd0-46cc-8311-87ae632f75d6",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d8a2de8a-27d8-491c-bbb9-da779a4da7c6",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d544d6a6-4fcc-42db-97f6-e8cccc69c5ee",
     "invariantUUID": "cd4a433e-cf76-4652-a6b8-59e657e0c5a0",
-    "name": "VmmscAic30MultiMembersMultiGroupsVolumeCs.nodes.heat.lb",
+    "name": "VmmscLab30MultiMembersMultiGroupsVolumeCs.nodes.heat.lb",
     "version": "1.0",
     "toscaModelURL": "/sdc/v1/catalog/resources/d544d6a6-4fcc-42db-97f6-e8cccc69c5ee/toscaModel",
     "category": "Generic",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "5d6e7129-d7c8-41b8-ae2a-5f1688162c7c",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "fcc6655e-7074-48de-89ef-ef6e4a5705e3",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "400cab12-2d1e-4a2c-a33a-d9d7b3262dd1",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "a068d0c0-06c6-4b58-bc99-6ac910700edb",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "c2e88763-87a9-4d33-b598-7811ae3f87d2",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "de861add-3f4a-4526-9754-8bcb69d0fd0e",
     "invariantUUID": "67560771-ffcb-46fb-a40c-0e1dee74f43a",
-    "name": "VmmscAic30MultiMembersMultiGroupsVolume.nodes.heat.mmsc",
+    "name": "VmmscLab30MultiMembersMultiGroupsVolume.nodes.heat.mmsc",
     "version": "1.0",
     "toscaModelURL": "/sdc/v1/catalog/resources/de861add-3f4a-4526-9754-8bcb69d0fd0e/toscaModel",
     "category": "Generic",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "4514b4e5-f163-4011-87fd-445f4366e3c2",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "3679d10e-a1a2-46a4-97b3-4056a0920e7b",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "f905ca32-dac5-4337-a1d7-cc2bca86b407",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "ee10af8a-c8bf-4455-808e-5550050d4ea9",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "771ca169-bfac-4306-9748-b2ae804852f9",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ml4535"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "72682bb7-94ca-47a7-9917-826f62e3d00d",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "1fa641db-1d77-4242-8d0b-c0aa5f88fe2e",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "897dcb54-bb55-4311-8c0e-b663781d7e4f",
     "invariantUUID": "c223adda-e48d-487d-98e8-654bbb8268af",
-    "name": "VmmscAic30MultiMembersMultiGroupsVolume.nodes.heat.lb",
+    "name": "VmmscLab30MultiMembersMultiGroupsVolume.nodes.heat.lb",
     "version": "1.0",
     "toscaModelURL": "/sdc/v1/catalog/resources/897dcb54-bb55-4311-8c0e-b663781d7e4f/toscaModel",
     "category": "Generic",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "a60c5230-8201-4b50-84a8-c905128c2bc2",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "173c32b5-44c8-4404-ba18-32d9de49afae",
     "invariantUUID": "c247493b-15a4-47af-bb6b-c664cb5a4d37",
-    "name": "VmmscAic30MultiMembersMultiGroupsVolume.nodes.heat.eca_trx",
+    "name": "VmmscLab30MultiMembersMultiGroupsVolume.nodes.heat.eca_trx",
     "version": "1.0",
     "toscaModelURL": "/sdc/v1/catalog/resources/173c32b5-44c8-4404-ba18-32d9de49afae/toscaModel",
     "category": "Generic",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "59aa2d42-db52-438c-a69c-0b97a193abcd",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "0e6509c9-7d35-4daf-9086-9fe30fdd1275",
     "invariantUUID": "9516ad03-b122-4738-ad6d-d9c2166cd75a",
-    "name": "VmmscAic30MultiMembersMultiGroupsVolume.nodes.heat.nems_fe",
+    "name": "VmmscLab30MultiMembersMultiGroupsVolume.nodes.heat.nems_fe",
     "version": "1.0",
     "toscaModelURL": "/sdc/v1/catalog/resources/0e6509c9-7d35-4daf-9086-9fe30fdd1275/toscaModel",
     "category": "Generic",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "e541a64c-9de7-4c71-b827-eb0f4d319e62",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "5e448cd9-6dbd-4c31-98f2-caeceaf5efa7",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d5c6a462-9d9a-46d4-a0b2-485300f34f0c",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "8678abfe-8cbd-42f2-aa78-ca47a1beaa14",
     "invariantUUID": "4d02c8a5-e141-4d01-94ec-7a3b94afda97",
-    "name": "VmmscAic30MultiMembersMultiGroupsVolumeCs.nodes.heat.eca_trx",
+    "name": "VmmscLab30MultiMembersMultiGroupsVolumeCs.nodes.heat.eca_trx",
     "version": "1.0",
     "toscaModelURL": "/sdc/v1/catalog/resources/8678abfe-8cbd-42f2-aa78-ca47a1beaa14/toscaModel",
     "category": "Generic",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "1c469da0-298f-41ea-94a2-aef82264e1e7",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "c29e22e2-1a09-4164-a9a2-72d0e3f5df5b",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "986b76dc-aca7-45b1-919c-398b770d5504",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "606f6c2b-a411-4644-a183-5487e3aed612",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "00695bbf-fa3f-47e4-96d7-973700a66f4f",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d94275b4-ccfa-4096-bd7b-dd45ff6e84f2",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "8beb2fe4-672e-46c3-8650-e2065ea429ea",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "c4b4f162-a616-45c6-b229-9833a78a46fd",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "95e982cd-551d-49b2-9600-04f1328b9ab5",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "8316c6e3-7791-42cb-80fb-e57ed0809be6",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ml4535"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "49cc354b-ea2e-48a9-a6b8-d414e6991898",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rb844h"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "cc0048fb-a464-4407-9907-5e760684bc7b",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "bc1dea1b-5753-4d17-af6f-ac6050b3e281",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "0b894e43-6d45-4c3d-95dd-2e80228055f3",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "2bb1e047-fa3b-41f5-9d29-ebbdbf01857c",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m99121"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "05c82d0d-826b-458c-8c81-9572298522a3",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ml4535"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "c6809100-9349-4f98-a066-55b6f0cb8650",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rb844h"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "abe50ede-b86c-415f-9f5f-235200433b51",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ss8214"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "3ce1be04-57ad-4deb-bdba-b18447374a88",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "m08740"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "f6406bba-b64c-4211-aaee-773cde6e7d54",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ed852m"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "d48751e4-07de-4208-9307-7ecb775fe7ca",
     "subCategory": "Call Control",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ed852m"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "cdb99a41-e2ee-4b59-9107-13f0b2282ccc",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "pa0916"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "99b9dce6-ed85-4d76-aed9-40c020ba4607",
     "subCategory": "Call Control",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ed852m"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "acf4e0fa-17f9-4ac8-9fb2-2301cf942fcf",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "fb6a8f39-84be-49a2-b551-26ce99ee6853",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ed852m"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "b09ec9ff-af66-4bdc-82d4-01a918e8e3ca",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ed852m"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "83256b0a-cb38-45de-b5f0-d2d4390f543d",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "sa997j"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "16ba1289-5f91-4f07-914a-d2456d11c673",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "93fe78c8-1350-4b1f-ac5f-ede411b992a0",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "1e5eafc0-1888-4247-9762-9ebd1383d0ae",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ed852m"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "01faf05a-70b9-442f-be62-9884ea4cdf33",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "4583652c-e066-4a5c-88b8-fbcdd8619d2c",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "rh176a"
+    "lastUpdaterUserId": "user"
   },
   {
     "uuid": "16f02038-00f6-4a11-ab98-2a2154e98924",
     "subCategory": "Abstract",
     "resourceType": "VFC",
     "lifecycleState": "CERTIFIED",
-    "lastUpdaterUserId": "ed852m"
+    "lastUpdaterUserId": "user"
   }
 ]
index 7bf99bb..4274ba8 100644 (file)
@@ -9,7 +9,7 @@
         "subCategory": "Router",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08743"
+        "lastUpdaterUserId": "user"
     },
 
     {
@@ -22,7 +22,7 @@
         "subCategory": "Load Balancer",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "ss8214"
+        "lastUpdaterUserId": "user"
     },
 
     {
@@ -35,7 +35,7 @@
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sw594b"
+        "lastUpdaterUserId": "user"
     },
 
     {
@@ -48,7 +48,7 @@
         "subCategory": "Database",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "ss8214"
+        "lastUpdaterUserId": "user"
     },
 
     {
@@ -61,7 +61,7 @@
         "subCategory": "Contrail Route",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "el489u"
+        "lastUpdaterUserId": "user"
     },
 
     {
@@ -74,7 +74,7 @@
         "subCategory": "Network Elements",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08743"
+        "lastUpdaterUserId": "user"
     },
 
     {
@@ -87,7 +87,7 @@
         "subCategory": "Application Server",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08743"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "LAN Connectors",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Allotted Resource",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Microservice",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Microservice",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08743"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Media Servers",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Allotted Resource",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "WAN Connectors",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "IP Mux Demux",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "ys278k"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Microservice",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Microservice",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08743"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Allotted Resource",
         "resourceType": "VF",
         "lifecycleState": "CERTIFICATION_IN_PROGRESS",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "IP Mux Demux",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "le056g"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Microservice",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "ss8214"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Collector",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "lr0306"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Router",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "pa0916"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Firewall",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Firewall",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Microservice",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08743"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Infrastructure",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "pa0916"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Abstract",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "sj2381"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Collector",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08743"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Allotted Resource",
         "resourceType": "VF",
         "lifecycleState": "CERTIFICATION_IN_PROGRESS",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Tunnel XConnect",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "rb844h"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Virtual Links",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Collector",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08743"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Infrastructure",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sw594b"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Database",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Media Servers",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "IP Mux Demux",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "yy815m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Router",
         "resourceType": "VF",
         "lifecycleState": "CERTIFICATION_IN_PROGRESS",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "READY_FOR_CERTIFICATION",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Security Zone",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "nk909r"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Load Balancer",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Utility",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Utility",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Application Server",
         "resourceType": "VF",
         "lifecycleState": "READY_FOR_CERTIFICATION",
-        "lastUpdaterUserId": "rx827p"
+        "lastUpdaterUserId": "user"
     },
     
     {
         "subCategory": "Tunnel XConnect",
         "resourceType": "VF",
         "lifecycleState": "READY_FOR_CERTIFICATION",
-        "lastUpdaterUserId": "rb844h"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Microservice",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Firewall",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "mh677g"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Web Server",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Gateway",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Application Server",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Source",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Firewall",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "nk909r"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Collector",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "ym903w"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Database",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Media Servers",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "yy815m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Service Admin",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "ol664w"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Firewall",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Collector",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "ml4535"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Media Servers",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Application Server",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "m08740"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Allotted Resource",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "ol664w"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Infrastructure",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Allotted Resource",
         "resourceType": "VF",
         "lifecycleState": "CERTIFICATION_IN_PROGRESS",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Tunnel XConnect",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "pa0916"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Firewall",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "az2497"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Firewall",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "nk909r"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Firewall",
         "resourceType": "VF",
         "lifecycleState": "READY_FOR_CERTIFICATION",
-        "lastUpdaterUserId": "nk909r"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Border Element",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Firewall",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "nk909r"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Database",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99124"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Load Balancer",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99124"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Firewall",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "lm906x"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Collector",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Database",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Border Element",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99124"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Collector",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Web Server",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99124"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Web Server",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Media Servers",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Firewall",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "nk909r"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Border Element",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Contrail Route",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Common Network Resources",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Security Zone",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "IP Mux Demux",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99124"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "WAN Connectors",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m99124"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Gateway",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Load Balancer",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ed852m"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sw594b"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Database",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Microservice",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Gateway",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Source",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "ml4535"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Load Balancer",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Firewall",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "lm906x"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Common Network Resources",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Firewall",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "nk909r"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Call Control",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "m99121"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Service Admin",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "rb844h"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Collector",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "af3193"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Database",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Router",
         "resourceType": "VF",
         "lifecycleState": "CERTIFIED",
-        "lastUpdaterUserId": "m08743"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Router",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Load Balancer",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "ss8214"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Firewall",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKIN",
-        "lastUpdaterUserId": "sa997j"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Infrastructure",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "rh176a"
+        "lastUpdaterUserId": "user"
     },
 
     {
         "subCategory": "Microservice",
         "resourceType": "VF",
         "lifecycleState": "NOT_CERTIFIED_CHECKOUT",
-        "lastUpdaterUserId": "ss7286"
+        "lastUpdaterUserId": "user"
     }
 ]
\ No newline at end of file
index a35557c..07f6793 100644 (file)
@@ -24,12 +24,12 @@ node_templates:
       app_preferences: {publisherContentType: application/json, publisherHostName: mrlocal-mtnjftle01.onap.org,
         publisherHostPort: '3905', publisherMaxBatchSize: '10', publisherMaxRecoveryQueueSize: '100000',
         publisherPollingInterval: '20000', publisherProtocol: https, publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub,
-        publisherUserName: m00502@tca.af.dcae.onap.org, publisherUserPassword: Te5021abc,
+        publisherUserName: test@tca.af.dcae.onap.org, publisherUserPassword: password,
         subscriberConsumerGroup: OpenDCAE-c12, subscriberConsumerId: c12, subscriberContentType: application/json,
         subscriberHostName: mrlocal-mtnjftle01.onap.org, subscriberHostPort: '3905',
         subscriberMessageLimit: '-1', subscriberPollingInterval: '20000', subscriberProtocol: https,
         subscriberTimeoutMS: '-1', subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub,
-        subscriberUserName: m00502@tca.af.dcae.onap.org, subscriberUserPassword: Te5021abc,
+        subscriberUserName: test@tca.af.dcae.onap.org, subscriberUserPassword: password,
         tca_policy: '{"domain":"measurementsForVfScaling","metricsPerEventName":[{"eventName":"vFirewallBroadcastPackets","controlLoopSchemaType":"VNF","policyScope":"DCAE","policyName":"example_model01.ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_TCA_1jy9to4","policyVersion":"v0.0.1","thresholds":[{"closedLoopControlName":"ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_null","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value","thresholdValue":123,"direction":"LESS_OR_EQUAL","severity":"MAJOR","closedLoopEventStatus":"ABATED"},{"closedLoopControlName":"ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_null","version":"1.0.2","fieldPath":"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value","thresholdValue":123,"direction":"GREATER_OR_EQUAL","severity":"MAJOR","closedLoopEventStatus":"ONSET"}]}]}'}
       artifact_name: dcae-analytics-tca
       artifact_version: 1.0.0
index 101dc2c..497a797 100644 (file)
@@ -40,8 +40,8 @@ node_templates:
         publisherPollingInterval: '20000'
         publisherProtocol: https
         publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub
-        publisherUserName: m00502@tca.af.dcae.onap.org
-        publisherUserPassword: Te5021abc
+        publisherUserName: test@tca.af.dcae.onap.org
+        publisherUserPassword: password
         subscriberConsumerGroup: OpenDCAE-c12
         subscriberConsumerId: c12
         subscriberContentType: application/json
@@ -52,8 +52,8 @@ node_templates:
         subscriberProtocol: https
         subscriberTimeoutMS: '-1'
         subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub
-        subscriberUserName: m00502@tca.af.dcae.onap.org
-        subscriberUserPassword: Te5021abc
+        subscriberUserName: test@tca.af.dcae.onap.org
+        subscriberUserPassword: password
         tca_policy: null
       artifact_name: dcae-analytics-tca
       artifact_version: 1.0.0
@@ -79,4 +79,4 @@ node_templates:
       streamname: TCASubscriberOutputStream
     relationships:
     - target: cdap_host_host
-      type: dcae.relationships.component_contained_in
\ No newline at end of file
+      type: dcae.relationships.component_contained_in
index 42dd851..49673d2 100644 (file)
@@ -1 +1 @@
-{"global":[{"name":"service","value":["tosca_definitions_version: cloudify_dsl_1_3\r\nimports:\r\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\r\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\r\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\r\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\r\ninputs:\r\n  location_id:\r\n    type: string\r\n  service_id:\r\n    type: string\r\nnode_templates:\r\n  cdap_host_host:\r\n    type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\r\n    properties:\r\n      location_id:\r\n        get_input: location_id\r\n      scn_override: cdap_broker.solutioning-central.dcae.onap.org\r\n    interfaces:\r\n      cloudify.interfaces.lifecycle: {\r\n        }\r\n  tca_tca:\r\n    type: dcae.nodes.MicroService.cdap\r\n    properties:\r\n      app_config:\r\n        appDescription: DCAE Analytics Threshold Crossing Alert Application\r\n        appName: dcae-tca\r\n        tcaSubscriberOutputStreamName: TCASubscriberOutputStream\r\n        tcaVESAlertsTableName: TCAVESAlertsTable\r\n        tcaVESAlertsTableTTLSeconds: '1728000'\r\n        tcaVESMessageStatusTableName: TCAVESMessageStatusTable\r\n        tcaVESMessageStatusTableTTLSeconds: '86400'\r\n        thresholdCalculatorFlowletInstances: '2'\r\n      app_preferences:\r\n        publisherContentType: application/json\r\n        publisherHostName: mrlocal-mtnjftle01.onap.org\r\n        publisherHostPort: '3905'\r\n        publisherMaxBatchSize: '10'\r\n        publisherMaxRecoveryQueueSize: '100000'\r\n        publisherPollingInterval: '20000'\r\n        publisherProtocol: https\r\n        publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\r\n        publisherUserName: m00502@tca.af.dcae.onap.org\r\n        publisherUserPassword: Te5021abc\r\n        subscriberConsumerGroup: OpenDCAE-c12\r\n        subscriberConsumerId: c12\r\n        subscriberContentType: application/json\r\n        subscriberHostName: mrlocal-mtnjftle01.onap.org\r\n        subscriberHostPort: '3905'\r\n        subscriberMessageLimit: '-1'\r\n        subscriberPollingInterval: '20000'\r\n        subscriberProtocol: https\r\n        subscriberTimeoutMS: '-1'\r\n        subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\r\n        subscriberUserName: m00502@tca.af.dcae.onap.org\r\n        subscriberUserPassword: Te5021abc\r\n        tca_policy: '{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"example_model01.ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_TCA_1jy9to4\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_null\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\",\"thresholdValue\":123,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_null\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\",\"thresholdValue\":123,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"}]}]}'\r\n      artifact_name: dcae-analytics-tca\r\n      artifact_version: 1.0.0\r\n      connections:\r\n        streams_publishes: [\r\n          ]\r\n        streams_subscribes: [\r\n          ]\r\n      jar_url: http://somejar\r\n      location_id:\r\n        get_input: location_id\r\n      namespace: cdap_tca_hi_lo\r\n      programs:\r\n      - program_id: TCAVESCollectorFlow\r\n        program_type: flows\r\n      - program_id: TCADMaaPMRSubscriberWorker\r\n        program_type: workers\r\n      - program_id: TCADMaaPMRPublisherWorker\r\n        program_type: workers\r\n      service_component_type: cdap_app_tca\r\n      service_id:\r\n        get_input: service_id\r\n      streamname: TCASubscriberOutputStream\r\n    relationships:\r\n    - target: cdap_host_host\r\n      type: dcae.relationships.component_contained_in"]}]}
\ No newline at end of file
+{"global":[{"name":"service","value":["tosca_definitions_version: cloudify_dsl_1_3\r\nimports:\r\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\r\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\r\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\r\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\r\ninputs:\r\n  location_id:\r\n    type: string\r\n  service_id:\r\n    type: string\r\nnode_templates:\r\n  cdap_host_host:\r\n    type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\r\n    properties:\r\n      location_id:\r\n        get_input: location_id\r\n      scn_override: cdap_broker.solutioning-central.dcae.onap.org\r\n    interfaces:\r\n      cloudify.interfaces.lifecycle: {\r\n        }\r\n  tca_tca:\r\n    type: dcae.nodes.MicroService.cdap\r\n    properties:\r\n      app_config:\r\n        appDescription: DCAE Analytics Threshold Crossing Alert Application\r\n        appName: dcae-tca\r\n        tcaSubscriberOutputStreamName: TCASubscriberOutputStream\r\n        tcaVESAlertsTableName: TCAVESAlertsTable\r\n        tcaVESAlertsTableTTLSeconds: '1728000'\r\n        tcaVESMessageStatusTableName: TCAVESMessageStatusTable\r\n        tcaVESMessageStatusTableTTLSeconds: '86400'\r\n        thresholdCalculatorFlowletInstances: '2'\r\n      app_preferences:\r\n        publisherContentType: application/json\r\n        publisherHostName: mrlocal-mtnjftle01.onap.org\r\n        publisherHostPort: '3905'\r\n        publisherMaxBatchSize: '10'\r\n        publisherMaxRecoveryQueueSize: '100000'\r\n        publisherPollingInterval: '20000'\r\n        publisherProtocol: https\r\n        publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\r\n        publisherUserName: test@tca.af.dcae.onap.org\r\n        publisherUserPassword: password\r\n        subscriberConsumerGroup: OpenDCAE-c12\r\n        subscriberConsumerId: c12\r\n        subscriberContentType: application/json\r\n        subscriberHostName: mrlocal-mtnjftle01.onap.org\r\n        subscriberHostPort: '3905'\r\n        subscriberMessageLimit: '-1'\r\n        subscriberPollingInterval: '20000'\r\n        subscriberProtocol: https\r\n        subscriberTimeoutMS: '-1'\r\n        subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\r\n        subscriberUserName: test@tca.af.dcae.onap.org\r\n        subscriberUserPassword: password\r\n        tca_policy: '{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"example_model01.ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_TCA_1jy9to4\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_null\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\",\"thresholdValue\":123,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_null\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\",\"thresholdValue\":123,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"}]}]}'\r\n      artifact_name: dcae-analytics-tca\r\n      artifact_version: 1.0.0\r\n      connections:\r\n        streams_publishes: [\r\n          ]\r\n        streams_subscribes: [\r\n          ]\r\n      jar_url: http://somejar\r\n      location_id:\r\n        get_input: location_id\r\n      namespace: cdap_tca_hi_lo\r\n      programs:\r\n      - program_id: TCAVESCollectorFlow\r\n        program_type: flows\r\n      - program_id: TCADMaaPMRSubscriberWorker\r\n        program_type: workers\r\n      - program_id: TCADMaaPMRPublisherWorker\r\n        program_type: workers\r\n      service_component_type: cdap_app_tca\r\n      service_id:\r\n        get_input: service_id\r\n      streamname: TCASubscriberOutputStream\r\n    relationships:\r\n    - target: cdap_host_host\r\n      type: dcae.relationships.component_contained_in"]}]}
\ No newline at end of file
index a99aa44..542fc47 100644 (file)
@@ -1 +1 @@
-[{"uuid":"a72ab48d-2d20-4c28-936a-94f45160d126","invariantUUID":"528a9e7e-1db8-44cd-a59a-f7f2833aaeb3","name":"SoftwareComponent","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/a72ab48d-2d20-4c28-936a-94f45160d126/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"2fa6c8ab-297f-4ec6-869f-893db6c84ac4","invariantUUID":"281696ab-4415-4dbb-8f4b-42ff25314466","name":"Root","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/2fa6c8ab-297f-4ec6-869f-893db6c84ac4/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"ba598da2-fd47-4701-b906-c03309ce52d7","invariantUUID":"cfdfb7b0-44fe-4b03-8efd-83533b4a3e94","name":"Compute","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/ba598da2-fd47-4701-b906-c03309ce52d7/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"c505b470-d39e-44f2-bb3a-26bc1b10bc84","invariantUUID":"7afee9e5-f666-4109-875c-89663f4c2676","name":"WebApplication","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/c505b470-d39e-44f2-bb3a-26bc1b10bc84/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"32c7f0ad-70b1-445f-9ec4-a54fdc054081","invariantUUID":"f0c9ed72-f92d-471b-8014-b810cb9d6c53","name":"Database","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/32c7f0ad-70b1-445f-9ec4-a54fdc054081/toscaModel","category":"Generic","subCategory":"Database","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"3187eb9b-dbba-492d-9137-e12db15226e7","invariantUUID":"ec55e51b-eb97-41ce-b2bf-bd7240d773a1","name":"WebServer","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/3187eb9b-dbba-492d-9137-e12db15226e7/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"59dc3d57-6609-4acd-b280-1297504b3fa3","invariantUUID":"3d5f7968-8432-47a7-9532-5833050636c9","name":"ObjectStorage","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/59dc3d57-6609-4acd-b280-1297504b3fa3/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"6000538b-f0f0-467b-bb8c-d6514d84529f","invariantUUID":"8c5a23e8-388d-4af8-8a5e-469081b2b8cd","name":"Runtime","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/6000538b-f0f0-467b-bb8c-d6514d84529f/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"92cb6435-1f95-42e1-b7a4-3418fa58f99c","invariantUUID":"fc537796-7a6a-4878-ad2c-ebae0b1031eb","name":"BlockStorage","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/92cb6435-1f95-42e1-b7a4-3418fa58f99c/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"7e41c605-b93c-4679-bc8e-83ac839e92c8","invariantUUID":"e09d62d9-c704-41be-a091-d0bf8d5c2c6b","name":"Application","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/7e41c605-b93c-4679-bc8e-83ac839e92c8/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"0dc498fd-2c4f-4e83-afbd-4404c7644234","invariantUUID":"55642129-7e02-49f3-827b-ef309ca80ff4","name":"GlobalCompute","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/0dc498fd-2c4f-4e83-afbd-4404c7644234/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"8d77ceb7-14a4-44f1-9a53-d92313ed56d0","invariantUUID":"f43bb2b2-db21-4739-8a64-f7743d54db15","name":"CinderVolume","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/8d77ceb7-14a4-44f1-9a53-d92313ed56d0/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"5a14f316-0f4e-4638-a0ad-71776a5014d2","invariantUUID":"40f6daa6-e352-4047-a115-9c4931ce0334","name":"volume","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/5a14f316-0f4e-4638-a0ad-71776a5014d2/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"2220d928-d281-4ba1-b44a-21b72c8c9872","invariantUUID":"7c398180-ea60-494b-b345-678391fbe8c2","name":"NovaServer","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/2220d928-d281-4ba1-b44a-21b72c8c9872/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"c9ed9d61-f3a5-4210-9af7-70a4f93b836a","invariantUUID":"ca7f356c-9f1c-4672-ade1-27a7f190064c","name":"AbstractSubstitute","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/c9ed9d61-f3a5-4210-9af7-70a4f93b836a/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"50ada44a-dd89-4e8d-850b-113019d2175b","invariantUUID":"6bb86fb2-e7f2-4ba6-aca8-80ccea04bc0a","name":"ContrailNetworkRules","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/50ada44a-dd89-4e8d-850b-113019d2175b/toscaModel","category":"Generic","subCategory":"Rules","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"bb37dd40-0e70-405f-81ca-c6ca22d3384f","invariantUUID":"3622a332-ce1c-406c-8212-966822eba394","name":"SecurityRules","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/bb37dd40-0e70-405f-81ca-c6ca22d3384f/toscaModel","category":"Generic","subCategory":"Rules","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"b876d972-31bf-427c-a557-0cc0befcfbec","invariantUUID":"12d9d4a3-f695-4055-b22b-edc60e738795","name":"ContrailAbstractSubstitute","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/b876d972-31bf-427c-a557-0cc0befcfbec/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"6baeb8d4-1d26-4530-a017-60d48dd38ace","invariantUUID":"015e424d-3482-4cd4-a047-1a4ca66588cc","name":"vnfConfiguration","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/6baeb8d4-1d26-4530-a017-60d48dd38ace/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"9f1402d1-b8cc-4b70-a45c-54d636e50086","invariantUUID":"a47fd09d-a910-4829-bb35-38741cefd2b9","name":"DBMS","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/9f1402d1-b8cc-4b70-a45c-54d636e50086/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"467ee1a0-34dd-46da-a198-a4ebe94c31b1","invariantUUID":"35b1df1f-4f9d-4bc6-9dbb-368e26c64243","name":"ContrailV2VirtualMachineInterface","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/467ee1a0-34dd-46da-a198-a4ebe94c31b1/toscaModel","category":"Generic","subCategory":"Network Elements","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"0d26b446-bd26-44ed-95a8-7ec302dd91aa","invariantUUID":"03c4eac9-4af8-4751-94fc-ce6095930c83","name":"ContrailCompute","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/0d26b446-bd26-44ed-95a8-7ec302dd91aa/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"83ccfaa3-a5e5-4567-88c4-aa5cb3a7b22e","invariantUUID":"1a67dbe6-ceca-4621-891e-3bb14f42943a","name":"multiFlavorVFC","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/83ccfaa3-a5e5-4567-88c4-aa5cb3a7b22e/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"14ddb890-fe68-4fee-a296-711d5a4b6e59","invariantUUID":"14184c8a-0c13-4873-a5c1-2586032db98c","name":"Ext Image File","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/14ddb890-fe68-4fee-a296-711d5a4b6e59/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"720552c5-e05d-4933-9882-8d7359af6e82","invariantUUID":"f43a5ef6-ddbf-4520-a6cb-9ca8b6b39ad6","name":"Ext Local Storage","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/720552c5-e05d-4933-9882-8d7359af6e82/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"6ba191b3-2315-44ec-85ac-d5351e7d4b81","invariantUUID":"0e0269f9-6e04-4234-bfd1-bfae52af7f83","name":"Ext Zte VDU","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/6ba191b3-2315-44ec-85ac-d5351e7d4b81/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"307cd1f4-bbc4-4675-b491-8e318231dc76","invariantUUID":"1fa025a5-c877-4221-9fbf-1b117fb66631","name":"LoadBalancer","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/307cd1f4-bbc4-4675-b491-8e318231dc76/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"949e82db-98ee-47d0-a5d2-21cb06c4a091","invariantUUID":"348d3957-11fd-4194-8835-1b112664b78b","name":"NSD","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/949e82db-98ee-47d0-a5d2-21cb06c4a091/toscaModel","category":"Generic","subCategory":"Network Elements","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"f54c8dde-2dc9-4f06-8bd6-1679d0b12b0c","invariantUUID":"4644b678-6680-432a-9d54-b209cc8264fe","name":"VDU","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/f54c8dde-2dc9-4f06-8bd6-1679d0b12b0c/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"cca286e8-5ac0-451c-b874-8cc307181e10","invariantUUID":"b4ad5952-aa22-4645-ac57-72d55c8833be","name":"Vloadbalancer.nodes.heat.vdns","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/cca286e8-5ac0-451c-b874-8cc307181e10/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"cs0008"},{"uuid":"876f7eff-46e3-4981-8717-597c01310714","invariantUUID":"7c3316b0-2090-4a2f-a21b-63e3c9dd3bf8","name":"AllottedResource","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/876f7eff-46e3-4981-8717-597c01310714/toscaModel","category":"Allotted Resource","subCategory":"Allotted Resource","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"c25db6d1-2653-45d9-8062-440f962c83ba","invariantUUID":"86aeffce-6d21-4bc0-84c5-e4fd3f7acdaa","name":"VDU VirtualStorage","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/c25db6d1-2653-45d9-8062-440f962c83ba/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"68bb176c-8d5f-4d27-8407-fd8d9e5910eb","invariantUUID":"1a12347c-6166-4d21-9861-b2c432722a23","name":"Vfirewall.nodes.heat.vfw","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/68bb176c-8d5f-4d27-8407-fd8d9e5910eb/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"cs0008"},{"uuid":"f2686c0f-11c5-4cab-83bd-b0f2cc35bf4d","invariantUUID":"3ff44c1d-0384-4501-8e33-dd3000799378","name":"Vloadbalancer.nodes.heat.vlb","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/f2686c0f-11c5-4cab-83bd-b0f2cc35bf4d/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"cs0008"},{"uuid":"8fb4db8b-1d1f-4369-8611-0375d86f0051","invariantUUID":"05e3e25f-b671-433f-8ea6-835c198c15ae","name":"Vloadbalancer.nodes.heat.vpg","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/8fb4db8b-1d1f-4369-8611-0375d86f0051/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"cs0008"},{"uuid":"c8a01686-2762-483c-98ad-a66606b9947f","invariantUUID":"86769df9-139b-489f-949d-05efb7f0ed6a","name":"Vpacketgen.nodes.heat.vpg","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/c8a01686-2762-483c-98ad-a66606b9947f/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"cs0008"},{"uuid":"5a136c51-055f-46b7-90e3-3d99d1da3d10","invariantUUID":"a6c4eda9-c71b-4435-ad73-51f82946df1b","name":"ContrailV2NetworkRules","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/5a136c51-055f-46b7-90e3-3d99d1da3d10/toscaModel","category":"Generic","subCategory":"Rules","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"163dded5-44a3-42e3-b373-c594412eeac6","invariantUUID":"1550f69b-12cb-44ad-81b3-de6ec606a566","name":"VDU Compute","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/163dded5-44a3-42e3-b373-c594412eeac6/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"jh0003"},{"uuid":"b339e576-e433-4be4-8a43-258f629c4e79","invariantUUID":"d66c0bce-d7e1-41ad-bdaf-468d442d0543","name":"Vfirewall.nodes.heat.vsn","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/b339e576-e433-4be4-8a43-258f629c4e79/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"cs0008"}]
\ No newline at end of file
+[{"uuid":"a72ab48d-2d20-4c28-936a-94f45160d126","invariantUUID":"528a9e7e-1db8-44cd-a59a-f7f2833aaeb3","name":"SoftwareComponent","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/a72ab48d-2d20-4c28-936a-94f45160d126/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"2fa6c8ab-297f-4ec6-869f-893db6c84ac4","invariantUUID":"281696ab-4415-4dbb-8f4b-42ff25314466","name":"Root","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/2fa6c8ab-297f-4ec6-869f-893db6c84ac4/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"ba598da2-fd47-4701-b906-c03309ce52d7","invariantUUID":"cfdfb7b0-44fe-4b03-8efd-83533b4a3e94","name":"Compute","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/ba598da2-fd47-4701-b906-c03309ce52d7/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"c505b470-d39e-44f2-bb3a-26bc1b10bc84","invariantUUID":"7afee9e5-f666-4109-875c-89663f4c2676","name":"WebApplication","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/c505b470-d39e-44f2-bb3a-26bc1b10bc84/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"32c7f0ad-70b1-445f-9ec4-a54fdc054081","invariantUUID":"f0c9ed72-f92d-471b-8014-b810cb9d6c53","name":"Database","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/32c7f0ad-70b1-445f-9ec4-a54fdc054081/toscaModel","category":"Generic","subCategory":"Database","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"3187eb9b-dbba-492d-9137-e12db15226e7","invariantUUID":"ec55e51b-eb97-41ce-b2bf-bd7240d773a1","name":"WebServer","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/3187eb9b-dbba-492d-9137-e12db15226e7/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"59dc3d57-6609-4acd-b280-1297504b3fa3","invariantUUID":"3d5f7968-8432-47a7-9532-5833050636c9","name":"ObjectStorage","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/59dc3d57-6609-4acd-b280-1297504b3fa3/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"6000538b-f0f0-467b-bb8c-d6514d84529f","invariantUUID":"8c5a23e8-388d-4af8-8a5e-469081b2b8cd","name":"Runtime","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/6000538b-f0f0-467b-bb8c-d6514d84529f/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"92cb6435-1f95-42e1-b7a4-3418fa58f99c","invariantUUID":"fc537796-7a6a-4878-ad2c-ebae0b1031eb","name":"BlockStorage","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/92cb6435-1f95-42e1-b7a4-3418fa58f99c/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"7e41c605-b93c-4679-bc8e-83ac839e92c8","invariantUUID":"e09d62d9-c704-41be-a091-d0bf8d5c2c6b","name":"Application","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/7e41c605-b93c-4679-bc8e-83ac839e92c8/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"0dc498fd-2c4f-4e83-afbd-4404c7644234","invariantUUID":"55642129-7e02-49f3-827b-ef309ca80ff4","name":"GlobalCompute","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/0dc498fd-2c4f-4e83-afbd-4404c7644234/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"8d77ceb7-14a4-44f1-9a53-d92313ed56d0","invariantUUID":"f43bb2b2-db21-4739-8a64-f7743d54db15","name":"CinderVolume","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/8d77ceb7-14a4-44f1-9a53-d92313ed56d0/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"5a14f316-0f4e-4638-a0ad-71776a5014d2","invariantUUID":"40f6daa6-e352-4047-a115-9c4931ce0334","name":"volume","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/5a14f316-0f4e-4638-a0ad-71776a5014d2/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"2220d928-d281-4ba1-b44a-21b72c8c9872","invariantUUID":"7c398180-ea60-494b-b345-678391fbe8c2","name":"NovaServer","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/2220d928-d281-4ba1-b44a-21b72c8c9872/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"c9ed9d61-f3a5-4210-9af7-70a4f93b836a","invariantUUID":"ca7f356c-9f1c-4672-ade1-27a7f190064c","name":"AbstractSubstitute","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/c9ed9d61-f3a5-4210-9af7-70a4f93b836a/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"50ada44a-dd89-4e8d-850b-113019d2175b","invariantUUID":"6bb86fb2-e7f2-4ba6-aca8-80ccea04bc0a","name":"ContrailNetworkRules","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/50ada44a-dd89-4e8d-850b-113019d2175b/toscaModel","category":"Generic","subCategory":"Rules","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"bb37dd40-0e70-405f-81ca-c6ca22d3384f","invariantUUID":"3622a332-ce1c-406c-8212-966822eba394","name":"SecurityRules","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/bb37dd40-0e70-405f-81ca-c6ca22d3384f/toscaModel","category":"Generic","subCategory":"Rules","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"b876d972-31bf-427c-a557-0cc0befcfbec","invariantUUID":"12d9d4a3-f695-4055-b22b-edc60e738795","name":"ContrailAbstractSubstitute","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/b876d972-31bf-427c-a557-0cc0befcfbec/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"6baeb8d4-1d26-4530-a017-60d48dd38ace","invariantUUID":"015e424d-3482-4cd4-a047-1a4ca66588cc","name":"vnfConfiguration","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/6baeb8d4-1d26-4530-a017-60d48dd38ace/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"9f1402d1-b8cc-4b70-a45c-54d636e50086","invariantUUID":"a47fd09d-a910-4829-bb35-38741cefd2b9","name":"DBMS","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/9f1402d1-b8cc-4b70-a45c-54d636e50086/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"467ee1a0-34dd-46da-a198-a4ebe94c31b1","invariantUUID":"35b1df1f-4f9d-4bc6-9dbb-368e26c64243","name":"ContrailV2VirtualMachineInterface","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/467ee1a0-34dd-46da-a198-a4ebe94c31b1/toscaModel","category":"Generic","subCategory":"Network Elements","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"0d26b446-bd26-44ed-95a8-7ec302dd91aa","invariantUUID":"03c4eac9-4af8-4751-94fc-ce6095930c83","name":"ContrailCompute","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/0d26b446-bd26-44ed-95a8-7ec302dd91aa/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"83ccfaa3-a5e5-4567-88c4-aa5cb3a7b22e","invariantUUID":"1a67dbe6-ceca-4621-891e-3bb14f42943a","name":"multiFlavorVFC","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/83ccfaa3-a5e5-4567-88c4-aa5cb3a7b22e/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"14ddb890-fe68-4fee-a296-711d5a4b6e59","invariantUUID":"14184c8a-0c13-4873-a5c1-2586032db98c","name":"Ext Image File","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/14ddb890-fe68-4fee-a296-711d5a4b6e59/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"720552c5-e05d-4933-9882-8d7359af6e82","invariantUUID":"f43a5ef6-ddbf-4520-a6cb-9ca8b6b39ad6","name":"Ext Local Storage","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/720552c5-e05d-4933-9882-8d7359af6e82/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"6ba191b3-2315-44ec-85ac-d5351e7d4b81","invariantUUID":"0e0269f9-6e04-4234-bfd1-bfae52af7f83","name":"Ext Zte VDU","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/6ba191b3-2315-44ec-85ac-d5351e7d4b81/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"307cd1f4-bbc4-4675-b491-8e318231dc76","invariantUUID":"1fa025a5-c877-4221-9fbf-1b117fb66631","name":"LoadBalancer","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/307cd1f4-bbc4-4675-b491-8e318231dc76/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"949e82db-98ee-47d0-a5d2-21cb06c4a091","invariantUUID":"348d3957-11fd-4194-8835-1b112664b78b","name":"NSD","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/949e82db-98ee-47d0-a5d2-21cb06c4a091/toscaModel","category":"Generic","subCategory":"Network Elements","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"f54c8dde-2dc9-4f06-8bd6-1679d0b12b0c","invariantUUID":"4644b678-6680-432a-9d54-b209cc8264fe","name":"VDU","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/f54c8dde-2dc9-4f06-8bd6-1679d0b12b0c/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"cca286e8-5ac0-451c-b874-8cc307181e10","invariantUUID":"b4ad5952-aa22-4645-ac57-72d55c8833be","name":"Vloadbalancer.nodes.heat.vdns","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/cca286e8-5ac0-451c-b874-8cc307181e10/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"cs0008"},{"uuid":"876f7eff-46e3-4981-8717-597c01310714","invariantUUID":"7c3316b0-2090-4a2f-a21b-63e3c9dd3bf8","name":"AllottedResource","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/876f7eff-46e3-4981-8717-597c01310714/toscaModel","category":"Allotted Resource","subCategory":"Allotted Resource","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"c25db6d1-2653-45d9-8062-440f962c83ba","invariantUUID":"86aeffce-6d21-4bc0-84c5-e4fd3f7acdaa","name":"VDU VirtualStorage","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/c25db6d1-2653-45d9-8062-440f962c83ba/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"68bb176c-8d5f-4d27-8407-fd8d9e5910eb","invariantUUID":"1a12347c-6166-4d21-9861-b2c432722a23","name":"Vfirewall.nodes.heat.vfw","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/68bb176c-8d5f-4d27-8407-fd8d9e5910eb/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"cs0008"},{"uuid":"f2686c0f-11c5-4cab-83bd-b0f2cc35bf4d","invariantUUID":"3ff44c1d-0384-4501-8e33-dd3000799378","name":"Vloadbalancer.nodes.heat.vlb","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/f2686c0f-11c5-4cab-83bd-b0f2cc35bf4d/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"cs0008"},{"uuid":"8fb4db8b-1d1f-4369-8611-0375d86f0051","invariantUUID":"05e3e25f-b671-433f-8ea6-835c198c15ae","name":"Vloadbalancer.nodes.heat.vpg","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/8fb4db8b-1d1f-4369-8611-0375d86f0051/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"cs0008"},{"uuid":"c8a01686-2762-483c-98ad-a66606b9947f","invariantUUID":"86769df9-139b-489f-949d-05efb7f0ed6a","name":"Vpacketgen.nodes.heat.vpg","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/c8a01686-2762-483c-98ad-a66606b9947f/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"cs0008"},{"uuid":"5a136c51-055f-46b7-90e3-3d99d1da3d10","invariantUUID":"a6c4eda9-c71b-4435-ad73-51f82946df1b","name":"ContrailV2NetworkRules","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/5a136c51-055f-46b7-90e3-3d99d1da3d10/toscaModel","category":"Generic","subCategory":"Rules","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"163dded5-44a3-42e3-b373-c594412eeac6","invariantUUID":"1550f69b-12cb-44ad-81b3-de6ec606a566","name":"VDU Compute","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/163dded5-44a3-42e3-b373-c594412eeac6/toscaModel","category":"Generic","subCategory":"Infrastructure","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"user"},{"uuid":"b339e576-e433-4be4-8a43-258f629c4e79","invariantUUID":"d66c0bce-d7e1-41ad-bdaf-468d442d0543","name":"Vfirewall.nodes.heat.vsn","version":"1.0","toscaModelURL":"/sdc/v1/catalog/resources/b339e576-e433-4be4-8a43-258f629c4e79/toscaModel","category":"Generic","subCategory":"Abstract","resourceType":"VFC","lifecycleState":"CERTIFIED","lastUpdaterUserId":"cs0008"}]
\ No newline at end of file
index 2a333ce..862e360 100755 (executable)
@@ -47,7 +47,7 @@ UNLOCK TABLES;
 
 LOCK TABLES `template_doc` WRITE;
 /*!40000 ALTER TABLE `template_doc` DISABLE KEYS */;
-INSERT INTO `template_doc` VALUES ('04ebec9b-17eb-11e8-b63b-0242ac130002','04e43cfa-17eb-11e8-b63b-0242ac130002','{}',NULL,'2018-02-22 16:11:20'),('27b1a0c9-17eb-11e8-b63b-0242ac130002','27aa4250-17eb-11e8-b63b-0242ac130002','{\"global\":[{\"name\":\"service\",\"value\":[\"tosca_definitions_version: cloudify_dsl_1_3\\r\\nimports:\\r\\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\\r\\n- https://nexus01.research.att.com:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\\r\\n- https://nexus01.research.att.com:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\\r\\n- http://nexus01.research.att.com:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\\r\\ninputs:\\r\\n  location_id:\\r\\n    type: string\\r\\n  service_id:\\r\\n    type: string\\r\\nnode_templates:\\r\\n  cdap_host_host:\\r\\n    type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\\r\\n    properties:\\r\\n      location_id:\\r\\n        get_input: location_id\\r\\n      scn_override: cdap_broker.solutioning-central.dcae.att.com\\r\\n    interfaces:\\r\\n      cloudify.interfaces.lifecycle: {}\\r\\n  tca_tca:\\r\\n    type: dcae.nodes.MicroService.cdap\\r\\n    properties:\\r\\n      app_config:\\r\\n        appDescription: DCAE Analytics Threshold Crossing Alert Application\\r\\n        appName: dcae-tca\\r\\n        tcaSubscriberOutputStreamName: TCASubscriberOutputStream\\r\\n        tcaVESAlertsTableName: TCAVESAlertsTable\\r\\n        tcaVESAlertsTableTTLSeconds: \'1728000\'\\r\\n        tcaVESMessageStatusTableName: TCAVESMessageStatusTable\\r\\n        tcaVESMessageStatusTableTTLSeconds: \'86400\'\\r\\n        thresholdCalculatorFlowletInstances: \'2\'\\r\\n      app_preferences:\\r\\n        publisherContentType: application/json\\r\\n        publisherHostName: mrlocal-mtnjftle01.homer.att.com\\r\\n        publisherHostPort: \'3905\'\\r\\n        publisherMaxBatchSize: \'10\'\\r\\n        publisherMaxRecoveryQueueSize: \'100000\'\\r\\n        publisherPollingInterval: \'20000\'\\r\\n        publisherProtocol: https\\r\\n        publisherTopicName: com.att.dcae.dmaap.mtnje2.DcaeTestVESPub\\r\\n        publisherUserName: m00502@tca.af.dcae.att.com\\r\\n        publisherUserPassword: Te5021abc\\r\\n        subscriberConsumerGroup: OpenDCAE-c12\\r\\n        subscriberConsumerId: c12\\r\\n        subscriberContentType: application/json\\r\\n        subscriberHostName: mrlocal-mtnjftle01.homer.att.com\\r\\n        subscriberHostPort: \'3905\'\\r\\n        subscriberMessageLimit: \'-1\'\\r\\n        subscriberPollingInterval: \'20000\'\\r\\n        subscriberProtocol: https\\r\\n        subscriberTimeoutMS: \'-1\'\\r\\n        subscriberTopicName: com.att.dcae.dmaap.mtnje2.DcaeTestVESSub\\r\\n        subscriberUserName: m00502@tca.af.dcae.att.com\\r\\n        subscriberUserPassword: Te5021abc\\r\\n        tca_policy: \\r\\n      artifact_name: dcae-analytics-tca\\r\\n      artifact_version: 1.0.0\\r\\n      connections:\\r\\n        streams_publishes: []\\r\\n        streams_subscribes: []\\r\\n      jar_url: http://somejar\\r\\n      location_id:\\r\\n        get_input: location_id\\r\\n      namespace: cdap_tca_hi_lo\\r\\n      programs:\\r\\n      - program_id: TCAVESCollectorFlow\\r\\n        program_type: flows\\r\\n      - program_id: TCADMaaPMRSubscriberWorker\\r\\n        program_type: workers\\r\\n      - program_id: TCADMaaPMRPublisherWorker\\r\\n        program_type: workers\\r\\n      service_component_type: cdap_app_tca\\r\\n      service_id:\\r\\n        get_input: service_id\\r\\n      streamname: TCASubscriberOutputStream\\r\\n    relationships:\\r\\n    - target: cdap_host_host\\r\\n      type: dcae.relationships.component_contained_in\\r\\n\"]}]}',NULL,'2018-02-22 16:12:18'),('3c0d7849-17eb-11e8-b63b-0242ac130002','3c02f310-17eb-11e8-b63b-0242ac130002','{\"global\":[{\"name\":\"service\",\"value\":[\"tosca_definitions_version: cloudify_dsl_1_3\\r\\nimports:\\r\\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\\r\\n- https://nexus01.research.att.com:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\\r\\n- https://nexus01.research.att.com:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\\r\\n- http://nexus01.research.att.com:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\\r\\ninputs:\\r\\n  location_id:\\r\\n    type: string\\r\\n  service_id:\\r\\n    type: string\\r\\nnode_templates:\\r\\n  cdap_host_host:\\r\\n    type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\\r\\n    properties:\\r\\n      location_id:\\r\\n        get_input: location_id\\r\\n      scn_override: cdap_broker.solutioning-central.dcae.att.com\\r\\n    interfaces:\\r\\n      cloudify.interfaces.lifecycle: {}\\r\\n  tca_tca:\\r\\n    type: dcae.nodes.MicroService.cdap\\r\\n    properties:\\r\\n      app_config:\\r\\n        appDescription: DCAE Analytics Threshold Crossing Alert Application\\r\\n        appName: dcae-tca\\r\\n        tcaSubscriberOutputStreamName: TCASubscriberOutputStream\\r\\n        tcaVESAlertsTableName: TCAVESAlertsTable\\r\\n        tcaVESAlertsTableTTLSeconds: \'1728000\'\\r\\n        tcaVESMessageStatusTableName: TCAVESMessageStatusTable\\r\\n        tcaVESMessageStatusTableTTLSeconds: \'86400\'\\r\\n        thresholdCalculatorFlowletInstances: \'2\'\\r\\n      app_preferences:\\r\\n        publisherContentType: application/json\\r\\n        publisherHostName: mrlocal-mtnjftle01.homer.att.com\\r\\n        publisherHostPort: \'3905\'\\r\\n        publisherMaxBatchSize: \'10\'\\r\\n        publisherMaxRecoveryQueueSize: \'100000\'\\r\\n        publisherPollingInterval: \'20000\'\\r\\n        publisherProtocol: https\\r\\n        publisherTopicName: com.att.dcae.dmaap.mtnje2.DcaeTestVESPub\\r\\n        publisherUserName: m00502@tca.af.dcae.att.com\\r\\n        publisherUserPassword: Te5021abc\\r\\n        subscriberConsumerGroup: OpenDCAE-c12\\r\\n        subscriberConsumerId: c12\\r\\n        subscriberContentType: application/json\\r\\n        subscriberHostName: mrlocal-mtnjftle01.homer.att.com\\r\\n        subscriberHostPort: \'3905\'\\r\\n        subscriberMessageLimit: \'-1\'\\r\\n        subscriberPollingInterval: \'20000\'\\r\\n        subscriberProtocol: https\\r\\n        subscriberTimeoutMS: \'-1\'\\r\\n        subscriberTopicName: com.att.dcae.dmaap.mtnje2.DcaeTestVESSub\\r\\n        subscriberUserName: m00502@tca.af.dcae.att.com\\r\\n        subscriberUserPassword: Te5021abc\\r\\n        tca_policy: \\r\\n      artifact_name: dcae-analytics-tca\\r\\n      artifact_version: 1.0.0\\r\\n      connections:\\r\\n        streams_publishes: []\\r\\n        streams_subscribes: []\\r\\n      jar_url: http://somejar\\r\\n      location_id:\\r\\n        get_input: location_id\\r\\n      namespace: cdap_tca_hi_lo\\r\\n      programs:\\r\\n      - program_id: TCAVESCollectorFlow\\r\\n        program_type: flows\\r\\n      - program_id: TCADMaaPMRSubscriberWorker\\r\\n        program_type: workers\\r\\n      - program_id: TCADMaaPMRPublisherWorker\\r\\n        program_type: workers\\r\\n      service_component_type: cdap_app_tca\\r\\n      service_id:\\r\\n        get_input: service_id\\r\\n      streamname: TCASubscriberOutputStream\\r\\n    relationships:\\r\\n    - target: cdap_host_host\\r\\n      type: dcae.relationships.component_contained_in\\r\\n\"]}]}',NULL,'2018-02-22 16:12:52'),('eb9f5d1c-17ea-11e8-b63b-0242ac130002','eb98db1e-17ea-11e8-b63b-0242ac130002','{}',NULL,'2018-02-22 16:10:37');
+INSERT INTO `template_doc` VALUES ('04ebec9b-17eb-11e8-b63b-0242ac130002','04e43cfa-17eb-11e8-b63b-0242ac130002','{}',NULL,'2018-02-22 16:11:20'),('27b1a0c9-17eb-11e8-b63b-0242ac130002','27aa4250-17eb-11e8-b63b-0242ac130002','{\"global\":[{\"name\":\"service\",\"value\":[\"tosca_definitions_version: cloudify_dsl_1_3\\r\\nimports:\\r\\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\\r\\n- https://test.onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\\r\\n- https://test.onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\\r\\n- http://test.onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\\r\\ninputs:\\r\\n  location_id:\\r\\n    type: string\\r\\n  service_id:\\r\\n    type: string\\r\\nnode_templates:\\r\\n  cdap_host_host:\\r\\n    type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\\r\\n    properties:\\r\\n      location_id:\\r\\n        get_input: location_id\\r\\n      scn_override: cdap_broker.solutioning-central.dcae.onap.org\\r\\n    interfaces:\\r\\n      cloudify.interfaces.lifecycle: {}\\r\\n  tca_tca:\\r\\n    type: dcae.nodes.MicroService.cdap\\r\\n    properties:\\r\\n      app_config:\\r\\n        appDescription: DCAE Analytics Threshold Crossing Alert Application\\r\\n        appName: dcae-tca\\r\\n        tcaSubscriberOutputStreamName: TCASubscriberOutputStream\\r\\n        tcaVESAlertsTableName: TCAVESAlertsTable\\r\\n        tcaVESAlertsTableTTLSeconds: \'1728000\'\\r\\n        tcaVESMessageStatusTableName: TCAVESMessageStatusTable\\r\\n        tcaVESMessageStatusTableTTLSeconds: \'86400\'\\r\\n        thresholdCalculatorFlowletInstances: \'2\'\\r\\n      app_preferences:\\r\\n        publisherContentType: application/json\\r\\n        publisherHostName: test.onap.org\\r\\n        publisherHostPort: \'3905\'\\r\\n        publisherMaxBatchSize: \'10\'\\r\\n        publisherMaxRecoveryQueueSize: \'100000\'\\r\\n        publisherPollingInterval: \'20000\'\\r\\n        publisherProtocol: https\\r\\n        publisherTopicName: org.onap.dcae.dmaap.DcaeTestVESPub\\r\\n        publisherUserName: user@onap.org\\r\\n        publisherUserPassword: password\\r\\n        subscriberConsumerGroup: OpenDCAE-c12\\r\\n        subscriberConsumerId: c12\\r\\n        subscriberContentType: application/json\\r\\n        subscriberHostName: test.onap.org\\r\\n        subscriberHostPort: \'3905\'\\r\\n        subscriberMessageLimit: \'-1\'\\r\\n        subscriberPollingInterval: \'20000\'\\r\\n        subscriberProtocol: https\\r\\n        subscriberTimeoutMS: \'-1\'\\r\\n        subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\\r\\n        subscriberUserName: user@test.onap.org\\r\\n        subscriberUserPasswordpasswordbc\\r\\n        tca_policy: \\r\\n      artifact_name: dcae-analytics-tca\\r\\n      artifact_version: 1.0.0\\r\\n      connections:\\r\\n        streams_publishes: []\\r\\n        streams_subscribes: []\\r\\n      jar_url: http://somejar\\r\\n      location_id:\\r\\n        get_input: location_id\\r\\n      namespace: cdap_tca_hi_lo\\r\\n      programs:\\r\\n      - program_id: TCAVESCollectorFlow\\r\\n        program_type: flows\\r\\n      - program_id: TCADMaaPMRSubscriberWorker\\r\\n        program_type: workers\\r\\n      - program_id: TCADMaaPMRPublisherWorker\\r\\n        program_type: workers\\r\\n      service_component_type: cdap_app_tca\\r\\n      service_id:\\r\\n        get_input: service_id\\r\\n      streamname: TCASubscriberOutputStream\\r\\n    relationships:\\r\\n    - target: cdap_host_host\\r\\n      type: dcae.relationships.component_contained_in\\r\\n\"]}]}',NULL,'2018-02-22 16:12:18'),('3c0d7849-17eb-11e8-b63b-0242ac130002','3c02f310-17eb-11e8-b63b-0242ac130002','{\"global\":[{\"name\":\"service\",\"value\":[\"tosca_definitions_version: cloudify_dsl_1_3\\r\\nimports:\\r\\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\\r\\n- https://test.onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\\r\\n- https://test.onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\\r\\n- http://test.onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\\r\\ninputs:\\r\\n  location_id:\\r\\n    type: string\\r\\n  service_id:\\r\\n    type: string\\r\\nnode_templates:\\r\\n  cdap_host_host:\\r\\n    type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\\r\\n    properties:\\r\\n      location_id:\\r\\n        get_input: location_id\\r\\n      scn_override: cdap_broker.solutioning-central.dcae.onap.org\\r\\n    interfaces:\\r\\n      cloudify.interfaces.lifecycle: {}\\r\\n  tca_tca:\\r\\n    type: dcae.nodes.MicroService.cdap\\r\\n    properties:\\r\\n      app_config:\\r\\n        appDescription: DCAE Analytics Threshold Crossing Alert Application\\r\\n        appName: dcae-tca\\r\\n        tcaSubscriberOutputStreamName: TCASubscriberOutputStream\\r\\n        tcaVESAlertsTableName: TCAVESAlertsTable\\r\\n        tcaVESAlertsTableTTLSeconds: \'1728000\'\\r\\n        tcaVESMessageStatusTableName: TCAVESMessageStatusTable\\r\\n        tcaVESMessageStatusTableTTLSeconds: \'86400\'\\r\\n        thresholdCalculatorFlowletInstances: \'2\'\\r\\n      app_preferences:\\r\\n        publisherContentType: application/json\\r\\n        publisherHostName: test.homer.onap.org\\r\\n        publisherHostPort: \'3905\'\\r\\n        publisherMaxBatchSize: \'10\'\\r\\n        publisherMaxRecoveryQueueSize: \'100000\'\\r\\n        publisherPollingInterval: \'20000\'\\r\\n        publisherProtocol: https\\r\\n        publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\\r\\n        publisherUserName: user@tca.af.dcae.onap.org\\r\\n        publisherUserPasswordpasswordbc\\r\\n        subscriberConsumerGroup: OpenDCAE-c12\\r\\n        subscriberConsumerId: c12\\r\\n        subscriberContentType: application/json\\r\\n        subscriberHostName: test.homer.onap.org\\r\\n        subscriberHostPort: \'3905\'\\r\\n        subscriberMessageLimit: \'-1\'\\r\\n        subscriberPollingInterval: \'20000\'\\r\\n        subscriberProtocol: https\\r\\n        subscriberTimeoutMS: \'-1\'\\r\\n        subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\\r\\n        subscriberUserName: user@tca.af.dcae.onap.org\\r\\n        subscriberUserPasswordpasswordbc\\r\\n        tca_policy: \\r\\n      artifact_name: dcae-analytics-tca\\r\\n      artifact_version: 1.0.0\\r\\n      connections:\\r\\n        streams_publishes: []\\r\\n        streams_subscribes: []\\r\\n      jar_url: http://somejar\\r\\n      location_id:\\r\\n        get_input: location_id\\r\\n      namespace: cdap_tca_hi_lo\\r\\n      programs:\\r\\n      - program_id: TCAVESCollectorFlow\\r\\n        program_type: flows\\r\\n      - program_id: TCADMaaPMRSubscriberWorker\\r\\n        program_type: workers\\r\\n      - program_id: TCADMaaPMRPublisherWorker\\r\\n        program_type: workers\\r\\n      service_component_type: cdap_app_tca\\r\\n      service_id:\\r\\n        get_input: service_id\\r\\n      streamname: TCASubscriberOutputStream\\r\\n    relationships:\\r\\n    - target: cdap_host_host\\r\\n      type: dcae.relationships.component_contained_in\\r\\n\"]}]}',NULL,'2018-02-22 16:12:52'),('eb9f5d1c-17ea-11e8-b63b-0242ac130002','eb98db1e-17ea-11e8-b63b-0242ac130002','{}',NULL,'2018-02-22 16:10:37');
 /*!40000 ALTER TABLE `template_doc` ENABLE KEYS */;
 UNLOCK TABLES;