Merge "Fixed Checkstyle issues"
authorXue Gao <xg353y@intl.att.com>
Tue, 18 Jun 2019 12:43:58 +0000 (12:43 +0000)
committerGerrit Code Review <gerrit@onap.org>
Tue, 18 Jun 2019 12:43:58 +0000 (12:43 +0000)
47 files changed:
README.md
docs/index.rst
docs/swagger/swagger.pdf
extra/sql/bulkload/create-tables.sql
pom.xml
src/main/java/org/onap/clamp/clds/Application.java
src/main/java/org/onap/clamp/clds/config/CamelConfiguration.java
src/main/java/org/onap/clamp/clds/model/dcae/DcaeInventoryResponse.java
src/main/java/org/onap/clamp/clds/model/dcae/DcaeLinks.java [new file with mode: 0644]
src/main/java/org/onap/clamp/clds/model/dcae/DcaeOperationStatusResponse.java [new file with mode: 0644]
src/main/java/org/onap/clamp/clds/util/LoggingUtils.java
src/main/java/org/onap/clamp/loop/Loop.java
src/main/java/org/onap/clamp/loop/LoopOperation.java [deleted file]
src/main/java/org/onap/clamp/loop/LoopService.java
src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java [new file with mode: 0644]
src/main/java/org/onap/clamp/loop/components/external/ExternalComponent.java [new file with mode: 0644]
src/main/java/org/onap/clamp/loop/components/external/ExternalComponentState.java [new file with mode: 0644]
src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java [new file with mode: 0644]
src/main/java/org/onap/clamp/loop/log/LoopLog.java
src/main/java/org/onap/clamp/loop/log/LoopLogService.java
src/main/resources/META-INF/resources/designer/modeler/dist/index.html
src/main/resources/META-INF/resources/designer/partials/portfolios/operational_policy_window.html
src/main/resources/META-INF/resources/designer/scripts/CldsModelService.js
src/main/resources/META-INF/resources/designer/scripts/OperationalPolicyCtrl.js
src/main/resources/META-INF/resources/designer/scripts/app.js
src/main/resources/META-INF/resources/designer/scripts/propertyController.js
src/main/resources/clds/camel/rest/clamp-api-v2.xml
src/main/resources/clds/camel/routes/dcae-flows.xml [new file with mode: 0644]
src/main/resources/clds/camel/routes/flexible-flow.xml
src/main/resources/clds/camel/routes/loop-flows.xml [new file with mode: 0644]
src/main/resources/clds/camel/routes/policy-flows.xml [new file with mode: 0644]
src/main/resources/clds/camel/routes/utils-flows.xml [new file with mode: 0644]
src/main/resources/logback-default.xml
src/test/java/org/onap/clamp/clds/it/config/CldsReferencePropertiesItCase.java
src/test/java/org/onap/clamp/clds/model/DcaeEventTest.java [new file with mode: 0644]
src/test/java/org/onap/clamp/clds/util/LoggingUtilsTest.java [new file with mode: 0644]
src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java
src/test/java/org/onap/clamp/loop/DcaeComponentTest.java [new file with mode: 0644]
src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java [deleted file]
src/test/java/org/onap/clamp/loop/LoopRepositoriesItCase.java
src/test/java/org/onap/clamp/loop/LoopServiceTestItCase.java
src/test/java/org/onap/clamp/loop/LoopToJsonTest.java
src/test/javascript/propertyController.test.js
src/test/resources/http-cache/third_party_proxy.py
src/test/resources/https/https-test.properties
src/test/resources/logback.xml [new file with mode: 0644]
version.properties

index 1cbf0e3..f3eab63 100644 (file)
--- a/README.md
+++ b/README.md
@@ -106,7 +106,7 @@ Once the image has been built and is available locally, you can use the `docker-
 
 ### Logs
 
-Clamp uses logback framework to generate logs. The logback.xml file cand be found under the [src/main/resources/ folder](src/main/resources). 
+Clamp uses logback framework to generate logs. The logback.xml file can be found under the [src/main/resources/ folder](src/main/resources). 
 
 With the default log settings, all logs will be generated into console and into root.log file under the Clamp root folder. The root.log file is not allowed to be appended, thus restarting the clamp will result in cleaning of the old log files.
 
@@ -173,4 +173,4 @@ To use it just add
 
 --spring.config.name=application-noaaf
 
-to the jvm parameters. This file is available by default in the java classpath resource folder. 
\ No newline at end of file
+to the jvm parameters. This file is available by default in the java classpath resource folder. 
index 61e49c6..1f41485 100644 (file)
@@ -3,7 +3,7 @@
 .. Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
 
 CLAMP - Control Loop Automation Management Platform
-==================================================
+===================================================
 .. High level architecture, design, and packaging information for release planning and delivery.
 
 .. include:: architecture.rst
index 7a9c85e..0ef34fe 100644 (file)
@@ -4,8 +4,8 @@
 << /Title (Clamp Rest API)
 /Creator (Asciidoctor PDF 1.5.0.alpha.10, based on Prawn 1.3.0)
 /Producer (Asciidoctor PDF 1.5.0.alpha.10, based on Prawn 1.3.0)
-/CreationDate (D:20190529175837+02'00')
-/ModDate (D:20190529175837+02'00')
+/CreationDate (D:20190613105324+02'00')
+/ModDate (D:20190613105324+02'00')
 >>
 endobj
 2 0 obj
index da39ca5..121c5e6 100644 (file)
@@ -7,6 +7,7 @@
 
     create table loop_logs (
        id bigint not null,
+        log_component varchar(255) not null,
         log_instant datetime(6) not null,
         log_type varchar(255) not null,
         message MEDIUMTEXT not null,
diff --git a/pom.xml b/pom.xml
index 4fdbea3..ec1033b 100644 (file)
--- a/pom.xml
+++ b/pom.xml
                <modelVersion>4.0.0</modelVersion>
                <groupId>org.onap.clamp</groupId>
                <artifactId>clds</artifactId>
-               <version>4.0.3-SNAPSHOT</version>
+               <version>4.1.0-SNAPSHOT</version>
                <name>clamp</name>
 
-<!--  -->
-<!--           <parent> -->
-<!--                           <groupId>org.onap.oparent</groupId> -->
-<!--                           <artifactId>oparent</artifactId> -->
-<!--                           <version>1.2.3</version> -->
-<!--           </parent> -->
+
+               <parent>
+                               <groupId>org.onap.oparent</groupId>
+                               <artifactId>oparent</artifactId>
+                               <version>2.0.0</version>
+               </parent>
 
                <description>
            This project build the ONAP CLAMP JAR that contains CLAMP back-end code and its UI part.
                                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                                <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 
-                               <project.scm.id>git-server</project.scm.id>
-                               <java.version>1.8</java.version>
-
                                <eelf.core.version>1.0.0</eelf.core.version>
-                               <camel.version>2.23.2</camel.version>
-                               <springboot.version>2.1.4.RELEASE</springboot.version>
+                               <camel.version>2.24.0</camel.version>
+                               <springboot.version>2.1.5.RELEASE</springboot.version>
 
                                <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
                                <sonar.surefire.reportsPath>${project.build.directory}/surefire-reports</sonar.surefire.reportsPath>
@@ -89,7 +86,7 @@
                                <docker.skip.tag>true</docker.skip.tag>
                                <skip.staging.artifacts>false</skip.staging.artifacts>
                                <python.http.proxy.param/>
-                               <tomcat.version>9.0.16</tomcat.version>
+                               <tomcat.version>9.0.20</tomcat.version>
                </properties>
 
                <profiles>
                                                                                </execution>
                                                                </executions>
                                                </plugin>
-                                               <plugin>
-                                               <groupId>org.sonatype.plugins</groupId>
-                                                               <artifactId>nexus-staging-maven-plugin</artifactId>
-                                                               <version>1.6.7</version>
-                                                               <extensions>true</extensions>
-                                                               <configuration>
-                                                                               <nexusUrl>https://nexus.onap.org</nexusUrl>
-                                                                               <stagingProfileId>176c31dfe190a</stagingProfileId>
-                                                                               <serverId>ecomp-staging</serverId>
-                                                                               <skipNexusStagingDeployMojo>${skip.staging.artifacts}</skipNexusStagingDeployMojo>
-                                                               </configuration>
-                                               </plugin>
-
                                                <plugin>
                                                                <groupId>org.apache.maven.plugins</groupId>
                                                                <artifactId>maven-surefire-plugin</artifactId>
index f6dfdc0..bac328d 100644 (file)
@@ -29,15 +29,21 @@ import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 
 import java.io.IOException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.Enumeration;
 
 import org.apache.catalina.connector.Connector;
 import org.onap.clamp.clds.model.properties.Holmes;
 import org.onap.clamp.clds.model.properties.ModelProperties;
 import org.onap.clamp.clds.util.ClampVersioning;
 import org.onap.clamp.clds.util.ResourceFileUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@@ -51,6 +57,7 @@ import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
+import org.springframework.core.env.Environment;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
@@ -82,6 +89,9 @@ public class Application extends SpringBootServletInitializer {
     @Value("${server.ssl.key-store:none}")
     private String sslKeystoreFile;
 
+    @Autowired
+    private Environment env;
+
     @Override
     protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
         return application.sources(Application.class);
@@ -102,14 +112,15 @@ public class Application extends SpringBootServletInitializer {
      * This method is used to declare the camel servlet.
      *
      * @return A servlet bean
-     * @throws IOException IO Exception
+     * @throws IOException
+     *         IO Exception
      */
     @Bean
     public ServletRegistrationBean camelServletRegistrationBean() throws IOException {
-        eelfLogger.info(ResourceFileUtil.getResourceAsString("boot-message.txt") + "(v"
-            + ClampVersioning.getCldsVersionFromProps() + ")" + System.getProperty("line.separator"));
-        ServletRegistrationBean registration = new ServletRegistrationBean(new ClampServlet(),
-            "/restservices/clds/*");
+        eelfLogger.info(
+            ResourceFileUtil.getResourceAsString("boot-message.txt") + "(v" + ClampVersioning.getCldsVersionFromProps()
+                + ")" + System.getProperty("line.separator") + getSslExpirationDate());
+        ServletRegistrationBean registration = new ServletRegistrationBean(new ClampServlet(), "/restservices/clds/*");
         registration.setName("CamelServlet");
         return registration;
     }
@@ -135,9 +146,8 @@ public class Application extends SpringBootServletInitializer {
 
     private Connector createRedirectConnector(int redirectSecuredPort) {
         if (redirectSecuredPort <= 0) {
-            eelfLogger.warn(
-                "HTTP port redirection to HTTPS is disabled because the HTTPS port is 0 (random port) or -1"
-                  + " (Connector disabled)");
+            eelfLogger.warn("HTTP port redirection to HTTPS is disabled because the HTTPS port is 0 (random port) or -1"
+                + " (Connector disabled)");
             return null;
         }
         Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
@@ -147,4 +157,33 @@ public class Application extends SpringBootServletInitializer {
         connector.setRedirectPort(redirectSecuredPort);
         return connector;
     }
+
+    private String getSslExpirationDate() throws IOException {
+        StringBuilder result = new StringBuilder("   :: SSL Certificates ::     ");
+        try {
+            if (env.getProperty("server.ssl.key-store") != null) {
+
+                KeyStore keystore = KeyStore.getInstance(env.getProperty("server.ssl.key-store-type"));
+                keystore.load(
+                    ResourceFileUtil
+                        .getResourceAsStream(env.getProperty("server.ssl.key-store").replaceAll("classpath:", "")),
+                    env.getProperty("server.ssl.key-store-password").toCharArray());
+                Enumeration<String> aliases = keystore.aliases();
+                while (aliases.hasMoreElements()) {
+                    String alias = aliases.nextElement();
+                    if ("X.509".equals(keystore.getCertificate(alias).getType())) {
+                        result.append("* " + alias + " expires "
+                            + ((X509Certificate) keystore.getCertificate(alias)).getNotAfter()
+                            + System.getProperty("line.separator"));
+                    }
+                }
+            } else {
+                result.append("* NONE HAS been configured");
+            }
+        } catch (CertificateException | NoSuchAlgorithmException | KeyStoreException e) {
+            eelfLogger.warn("SSL certificate access error ", e);
+
+        }
+        return result.toString();
+    }
 }
index 3dc8073..271dc84 100644 (file)
@@ -63,13 +63,13 @@ public class CamelConfiguration extends RouteBuilder {
 
     private void configureDefaultSslProperties() {
         if (env.getProperty("server.ssl.trust-store") != null) {
-            URL storeResource = CamelConfiguration.class
+            URL storeResource = Thread.currentThread().getContextClassLoader()
                 .getResource(env.getProperty("server.ssl.trust-store").replaceAll("classpath:", ""));
             System.setProperty("javax.net.ssl.trustStore", storeResource.getPath());
             System.setProperty("javax.net.ssl.trustStorePassword", env.getProperty("server.ssl.trust-store-password"));
             System.setProperty("javax.net.ssl.trustStoreType", "jks");
             System.setProperty("ssl.TrustManagerFactory.algorithm", "PKIX");
-            storeResource = CamelConfiguration.class
+            storeResource = Thread.currentThread().getContextClassLoader()
                 .getResource(env.getProperty("server.ssl.key-store").replaceAll("classpath:", ""));
             System.setProperty("javax.net.ssl.keyStore", storeResource.getPath());
             System.setProperty("javax.net.ssl.keyStorePassword", env.getProperty("server.ssl.key-store-password"));
@@ -82,7 +82,7 @@ public class CamelConfiguration extends RouteBuilder {
         if (env.getProperty("server.ssl.trust-store") != null) {
             KeyStore truststore = KeyStore.getInstance("JKS");
             truststore.load(
-                getClass().getClassLoader()
+                Thread.currentThread().getContextClassLoader()
                     .getResourceAsStream(env.getProperty("server.ssl.trust-store").replaceAll("classpath:", "")),
                 env.getProperty("server.ssl.trust-store-password").toCharArray());
 
@@ -118,6 +118,7 @@ public class CamelConfiguration extends RouteBuilder {
             .apiContextPath("api-doc").apiVendorExtension(true).apiProperty("api.title", "Clamp Rest API")
             .apiProperty("api.version", ClampVersioning.getCldsVersionFromProps())
             .apiProperty("base.path", "/restservices/clds/");
+
         // camelContext.setTracing(true);
 
         configureDefaultSslProperties();
index 74582a8..9724506 100644 (file)
 
 package org.onap.clamp.clds.model.dcae;
 
+import com.google.gson.annotations.Expose;
+
 /**
  * This class maps the DCAE inventory answer to a nice pojo.
  */
 public class DcaeInventoryResponse {
 
+    @Expose
     private String typeName;
+
+    @Expose
     private String typeId;
 
     public String getTypeName() {
diff --git a/src/main/java/org/onap/clamp/clds/model/dcae/DcaeLinks.java b/src/main/java/org/onap/clamp/clds/model/dcae/DcaeLinks.java
new file mode 100644 (file)
index 0000000..368e1b8
--- /dev/null
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 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.dcae;
+
+import com.google.gson.annotations.Expose;
+
+public class DcaeLinks {
+    @Expose
+    private String self;
+    @Expose
+    private String status;
+    @Expose
+    private String uninstall;
+
+    public String getSelf() {
+        return self;
+    }
+
+    public void setSelf(String self) {
+        this.self = self;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getUninstall() {
+        return uninstall;
+    }
+
+    public void setUninstall(String uninstall) {
+        this.uninstall = uninstall;
+    }
+
+}
diff --git a/src/main/java/org/onap/clamp/clds/model/dcae/DcaeOperationStatusResponse.java b/src/main/java/org/onap/clamp/clds/model/dcae/DcaeOperationStatusResponse.java
new file mode 100644 (file)
index 0000000..aee7d06
--- /dev/null
@@ -0,0 +1,88 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 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.dcae;
+
+import com.google.gson.annotations.Expose;
+
+/**
+ * This class maps the DCAE deployment handler response to a nice pojo.
+ */
+public class DcaeOperationStatusResponse {
+
+    @Expose
+    private String operationType;
+
+    @Expose
+    private String status;
+
+    @Expose
+    private String requestId;
+
+    @Expose
+    private String error;
+
+    @Expose
+    private DcaeLinks links;
+
+    public String getOperationType() {
+        return operationType;
+    }
+
+    public void setOperationType(String operationType) {
+        this.operationType = operationType;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getRequestId() {
+        return requestId;
+    }
+
+    public void setRequestId(String requestId) {
+        this.requestId = requestId;
+    }
+
+    public String getError() {
+        return error;
+    }
+
+    public void setError(String error) {
+        this.error = error;
+    }
+
+    public DcaeLinks getLinks() {
+        return links;
+    }
+
+    public void setLinks(DcaeLinks links) {
+        this.links = links;
+    }
+
+}
index cbe7eba..163ab69 100644 (file)
@@ -28,6 +28,7 @@ import com.att.eelf.configuration.EELFManager;
 
 import java.net.HttpURLConnection;
 import java.net.InetAddress;
+import java.net.URLConnection;
 import java.net.UnknownHostException;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
@@ -114,7 +115,7 @@ public class LoggingUtils {
      */
     public static void setResponseContext(String code, String description, String className) {
         MDC.put("ResponseCode", code);
-        MDC.put("StatusCode", code.equals("0") ? "COMPLETE" : "ERROR");
+        MDC.put("StatusCode", "0".equals(code) ? "COMPLETE" : "ERROR");
         MDC.put("ResponseDescription", description != null ? description : "");
         MDC.put("ClassName", className != null ? className : "");
     }
@@ -167,8 +168,6 @@ public class LoggingUtils {
         return dateFormat;
     }
 
-
-
     /*********************************************************************************************
      * Method for ONAP Application Logging Specification v1.2
      ********************************************************************************************/
@@ -256,7 +255,7 @@ public class LoggingUtils {
     public String getProperties(String name) {
         return MDC.get(name);
     }
-    
+
     /**
      * Report pending invocation with <tt>INVOKE</tt> marker,
      * setting standard ONAP logging headers automatically.
@@ -267,24 +266,7 @@ public class LoggingUtils {
      * @return The HTTP url connection
      */
     public HttpURLConnection invoke(final HttpURLConnection con, String targetEntity, String targetServiceName) {
-        final String invocationId = UUID.randomUUID().toString();
-
-        // Set standard HTTP headers on (southbound request) builder.
-        con.setRequestProperty(ONAPLogConstants.Headers.REQUEST_ID,
-            defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)));
-        con.setRequestProperty(ONAPLogConstants.Headers.INVOCATION_ID,
-            invocationId);
-        con.setRequestProperty(ONAPLogConstants.Headers.PARTNER_NAME,
-            defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME)));
-
-        invokeContext(targetEntity, targetServiceName, invocationId);
-
-        // Log INVOKE*, with the invocationID as the message body.
-        // (We didn't really want this kind of behavior in the standard,
-        // but is it worse than new, single-message MDC?)
-        this.mlogger.info(ONAPLogConstants.Markers.INVOKE);
-        this.mlogger.info(ONAPLogConstants.Markers.INVOKE_SYNC + "{" + invocationId + "}");
-        return con;
+        return this.invokeGeneric(con, targetEntity, targetServiceName);
     }
 
     /**
@@ -316,24 +298,7 @@ public class LoggingUtils {
      * @return The HTTPS url connection
      */
     public HttpsURLConnection invokeHttps(final HttpsURLConnection con, String targetEntity, String targetServiceName) {
-        final String invocationId = UUID.randomUUID().toString();
-
-        // Set standard HTTP headers on (southbound request) builder.
-        con.setRequestProperty(ONAPLogConstants.Headers.REQUEST_ID,
-            defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)));
-        con.setRequestProperty(ONAPLogConstants.Headers.INVOCATION_ID,
-            invocationId);
-        con.setRequestProperty(ONAPLogConstants.Headers.PARTNER_NAME,
-            defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME)));
-
-        invokeContext(targetEntity, targetServiceName, invocationId);
-
-        // Log INVOKE*, with the invocationID as the message body.
-        // (We didn't really want this kind of behavior in the standard,
-        // but is it worse than new, single-message MDC?)
-        this.mlogger.info(ONAPLogConstants.Markers.INVOKE);
-        this.mlogger.info(ONAPLogConstants.Markers.INVOKE_SYNC + "{" + invocationId + "}");
-        return con;
+        return this.invokeGeneric(con, targetEntity, targetServiceName);
     }
 
     /**
@@ -410,4 +375,25 @@ public class LoggingUtils {
         MDC.remove(ONAPLogConstants.MDCs.INVOCATIONID_OUT);
         MDC.remove(ONAPLogConstants.MDCs.INVOKE_TIMESTAMP);
     }
+
+    private <T extends URLConnection> T invokeGeneric(final T con, String targetEntity, String targetServiceName) {
+        final String invocationId = UUID.randomUUID().toString();
+
+        // Set standard HTTP headers on (southbound request) builder.
+        con.setRequestProperty(ONAPLogConstants.Headers.REQUEST_ID,
+                defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)));
+        con.setRequestProperty(ONAPLogConstants.Headers.INVOCATION_ID,
+                invocationId);
+        con.setRequestProperty(ONAPLogConstants.Headers.PARTNER_NAME,
+                defaultToEmpty(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME)));
+
+        invokeContext(targetEntity, targetServiceName, invocationId);
+
+        // Log INVOKE*, with the invocationID as the message body.
+        // (We didn't really want this kind of behavior in the standard,
+        // but is it worse than new, single-message MDC?)
+        this.mlogger.info(ONAPLogConstants.Markers.INVOKE);
+        this.mlogger.info(ONAPLogConstants.Markers.INVOKE_SYNC + "{" + invocationId + "}");
+        return con;
+    }
 }
index 6de2863..2393f24 100644 (file)
 
 package org.onap.clamp.loop;
 
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
 import com.google.gson.annotations.Expose;
 
 import java.io.Serializable;
-import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
-import java.util.List;
+import java.util.Map;
 import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
 
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
@@ -47,14 +45,17 @@ import javax.persistence.JoinColumn;
 import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
 import javax.persistence.OneToMany;
-import javax.persistence.OrderBy;
 import javax.persistence.Table;
 import javax.persistence.Transient;
 
+import org.hibernate.annotations.SortNatural;
 import org.hibernate.annotations.Type;
 import org.hibernate.annotations.TypeDef;
 import org.hibernate.annotations.TypeDefs;
 import org.onap.clamp.dao.model.jsontype.StringJsonUserType;
+import org.onap.clamp.loop.components.external.DcaeComponent;
+import org.onap.clamp.loop.components.external.ExternalComponent;
+import org.onap.clamp.loop.components.external.PolicyComponent;
 import org.onap.clamp.loop.log.LoopLog;
 import org.onap.clamp.policy.microservice.MicroServicePolicy;
 import org.onap.clamp.policy.operational.OperationalPolicy;
@@ -69,9 +70,6 @@ public class Loop implements Serializable {
      */
     private static final long serialVersionUID = -286522707701388642L;
 
-    @Transient
-    private static final EELFLogger logger = EELFManager.getInstance().getLogger(Loop.class);
-
     @Id
     @Expose
     @Column(nullable = false, name = "name", unique = true)
@@ -110,6 +108,10 @@ public class Loop implements Serializable {
     @Enumerated(EnumType.STRING)
     private LoopState lastComputedState;
 
+    @Expose
+    @Transient
+    private final Map<String, ExternalComponent> components = new HashMap<>();
+
     @Expose
     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop")
     private Set<OperationalPolicy> operationalPolicies = new HashSet<>();
@@ -121,10 +123,16 @@ public class Loop implements Serializable {
 
     @Expose
     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "loop")
-    @OrderBy("id DESC")
-    private Set<LoopLog> loopLogs = new HashSet<>();
+    @SortNatural
+    private SortedSet<LoopLog> loopLogs = new TreeSet<>();
+
+    private void initializeExternalComponents() {
+        this.addComponent(new PolicyComponent());
+        this.addComponent(new DcaeComponent());
+    }
 
     public Loop() {
+        initializeExternalComponents();
     }
 
     /**
@@ -136,6 +144,7 @@ public class Loop implements Serializable {
         this.blueprint = blueprint;
         this.lastComputedState = LoopState.DESIGN;
         this.globalPropertiesJson = new JsonObject();
+        initializeExternalComponents();
     }
 
     public String getName() {
@@ -214,7 +223,7 @@ public class Loop implements Serializable {
         return loopLogs;
     }
 
-    void setLoopLogs(Set<LoopLog> loopLogs) {
+    void setLoopLogs(SortedSet<LoopLog> loopLogs) {
         this.loopLogs = loopLogs;
     }
 
@@ -228,9 +237,9 @@ public class Loop implements Serializable {
         microServicePolicy.getUsedByLoops().add(this);
     }
 
-    void addLog(LoopLog log) {
-        loopLogs.add(log);
+    public void addLog(LoopLog log) {
         log.setLoop(this);
+        this.loopLogs.add(log);
     }
 
     public String getDcaeBlueprintId() {
@@ -249,6 +258,18 @@ public class Loop implements Serializable {
         this.modelPropertiesJson = modelPropertiesJson;
     }
 
+    public Map<String, ExternalComponent> getComponents() {
+        return components;
+    }
+
+    public ExternalComponent getComponent(String componentName) {
+        return this.components.get(componentName);
+    }
+
+    public void addComponent(ExternalComponent component) {
+        this.components.put(component.getComponentName(), component);
+    }
+
     /**
      * Generate the loop name.
      *
@@ -269,47 +290,6 @@ public class Loop implements Serializable {
         return buffer.toString().replace('.', '_').replaceAll(" ", "");
     }
 
-    /**
-     * Generates the Json that must be sent to policy to add all policies to Active
-     * PDP group.
-     *
-     * @return The json, payload to send
-     */
-    public String createPoliciesPayloadPdpGroup() {
-        JsonObject jsonObject = new JsonObject();
-        JsonArray jsonArray = new JsonArray();
-        jsonObject.add("policies", jsonArray);
-
-        for (String policyName : this.listPolicyNamesPdpGroup()) {
-            JsonObject policyNode = new JsonObject();
-            jsonArray.add(policyNode);
-            policyNode.addProperty("policy-id", policyName);
-        }
-        String payload = new GsonBuilder().setPrettyPrinting().create().toJson(jsonObject);
-        logger.info("PdpGroup policy payload: " + payload);
-        return payload;
-    }
-
-    /**
-     * Generates the list of policy names that must be send/remove to/from active
-     * PDP group.
-     *
-     * @return A list of policy names
-     */
-    public List<String> listPolicyNamesPdpGroup() {
-        List<String> policyNamesList = new ArrayList<>();
-        for (OperationalPolicy opPolicy : this.getOperationalPolicies()) {
-            policyNamesList.add(opPolicy.getName());
-            for (String guardName : opPolicy.createGuardPolicyPayloads().keySet()) {
-                policyNamesList.add(guardName);
-            }
-        }
-        for (MicroServicePolicy microServicePolicy : this.getMicroServicePolicies()) {
-            policyNamesList.add(microServicePolicy.getName());
-        }
-        return policyNamesList;
-    }
-
     @Override
     public int hashCode() {
         final int prime = 31;
diff --git a/src/main/java/org/onap/clamp/loop/LoopOperation.java b/src/main/java/org/onap/clamp/loop/LoopOperation.java
deleted file mode 100644 (file)
index 87effa5..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.loop;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonObject;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.UUID;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.Message;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
-import org.json.simple.parser.ParseException;
-import org.onap.clamp.policy.operational.OperationalPolicy;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-/**
- * Closed loop operations.
- */
-@Component
-public class LoopOperation {
-
-    protected static final EELFLogger logger = EELFManager.getInstance().getLogger(LoopOperation.class);
-    protected static final EELFLogger auditLogger = EELFManager.getInstance().getMetricsLogger();
-    private static final String DCAE_LINK_FIELD = "links";
-    private static final String DCAE_STATUS_FIELD = "status";
-    private static final String DCAE_SERVICETYPE_ID = "serviceTypeId";
-    private static final String DCAE_INPUTS = "inputs";
-    private static final String DCAE_DEPLOYMENT_PREFIX = "CLAMP_";
-    private static final String DEPLOYMENT_PARA = "dcaeDeployParameters";
-    private final LoopService loopService;
-
-    public enum TempLoopState {
-        NOT_SUBMITTED, SUBMITTED, DEPLOYED, NOT_DEPLOYED, PROCESSING, IN_ERROR;
-    }
-
-    /**
-     * The constructor.
-     *
-     * @param loopService
-     *        The loop service
-     * @param refProp
-     *        The clamp properties
-     */
-    @Autowired
-    public LoopOperation(LoopService loopService) {
-        this.loopService = loopService;
-    }
-
-    /**
-     * Get the payload used to send the deploy closed loop request.
-     *
-     * @param loop
-     *        The loop
-     * @return The payload used to send deploy closed loop request
-     * @throws IOException
-     *         IOException
-     */
-    public String getDeployPayload(Loop loop) throws IOException {
-        JsonObject globalProp = loop.getGlobalPropertiesJson();
-        JsonObject deploymentProp = globalProp.getAsJsonObject(DEPLOYMENT_PARA);
-
-        String serviceTypeId = loop.getDcaeBlueprintId();
-
-        JsonObject rootObject = new JsonObject();
-        rootObject.addProperty(DCAE_SERVICETYPE_ID, serviceTypeId);
-        if (deploymentProp != null) {
-            rootObject.add(DCAE_INPUTS, deploymentProp);
-        }
-        String apiBodyString = rootObject.toString();
-        logger.info("Dcae api Body String - " + apiBodyString);
-
-        return apiBodyString;
-    }
-
-    /**
-     * Get the deployment id.
-     *
-     * @param loop
-     *        The loop
-     * @return The deployment id
-     * @throws IOException
-     *         IOException
-     */
-    public String getDeploymentId(Loop loop) {
-        // Set the deploymentId if not present yet
-        String deploymentId = "";
-        // If model is already deployed then pass same deployment id
-        if (loop.getDcaeDeploymentId() != null && !loop.getDcaeDeploymentId().isEmpty()) {
-            deploymentId = loop.getDcaeDeploymentId();
-        } else {
-            deploymentId = DCAE_DEPLOYMENT_PREFIX + UUID.randomUUID();
-        }
-        return deploymentId;
-    }
-
-    /**
-     * Update the loop info.
-     *
-     * @param camelExchange
-     *        The camel exchange
-     * @param loop
-     *        The loop
-     * @param deploymentId
-     *        The deployment id
-     * @throws ParseException
-     *         The parse exception
-     */
-    public void updateLoopInfo(Exchange camelExchange, Loop loop, String deploymentId) throws ParseException {
-        Message in = camelExchange.getIn();
-        String msg = in.getBody(String.class);
-
-        JSONParser parser = new JSONParser();
-        Object obj0 = parser.parse(msg);
-        JSONObject jsonObj = (JSONObject) obj0;
-
-        JSONObject linksObj = (JSONObject) jsonObj.get(DCAE_LINK_FIELD);
-        String statusUrl = (String) linksObj.get(DCAE_STATUS_FIELD);
-
-        if (deploymentId == null) {
-            loop.setDcaeDeploymentId(null);
-            loop.setDcaeDeploymentStatusUrl(null);
-        } else {
-            loop.setDcaeDeploymentId(deploymentId);
-            loop.setDcaeDeploymentStatusUrl(statusUrl.replaceAll("http:", "http4:").replaceAll("https:", "https4:"));
-        }
-        loopService.saveOrUpdateLoop(loop);
-    }
-
-    /**
-     * Get the Closed Loop status based on the reply from Policy.
-     *
-     * @param statusCode
-     *        The status code
-     * @return The state based on policy response
-     * @throws ParseException
-     *         The parse exception
-     */
-    public String analysePolicyResponse(int statusCode) {
-        if (statusCode == 200) {
-            return TempLoopState.SUBMITTED.toString();
-        } else if (statusCode == 404) {
-            return TempLoopState.NOT_SUBMITTED.toString();
-        }
-        return TempLoopState.IN_ERROR.toString();
-    }
-
-    /**
-     * Get the name of the first Operational policy.
-     *
-     * @param loop
-     *        The closed loop
-     * @return The name of the first operational policy
-     */
-    public String getOperationalPolicyName(Loop loop) {
-        Set<OperationalPolicy> opSet = loop.getOperationalPolicies();
-        Iterator<OperationalPolicy> iterator = opSet.iterator();
-        while (iterator.hasNext()) {
-            OperationalPolicy policy = iterator.next();
-            return policy.getName();
-        }
-        return null;
-    }
-
-    /**
-     * Get the Closed Loop status based on the reply from DCAE.
-     *
-     * @param camelExchange
-     *        The camel exchange
-     * @return The state based on DCAE response
-     * @throws ParseException
-     *         The parse exception
-     */
-    public String analyseDcaeResponse(Exchange camelExchange, Integer statusCode) throws ParseException {
-        if (statusCode == null) {
-            return TempLoopState.NOT_DEPLOYED.toString();
-        }
-        if (statusCode == 200) {
-            Message in = camelExchange.getIn();
-            String msg = in.getBody(String.class);
-
-            JSONParser parser = new JSONParser();
-            Object obj0 = parser.parse(msg);
-            JSONObject jsonObj = (JSONObject) obj0;
-
-            String opType = (String) jsonObj.get("operationType");
-            String status = (String) jsonObj.get("status");
-
-            // status = processing/successded/failed
-            if (status.equals("succeeded")) {
-                if (opType.equals("install")) {
-                    return TempLoopState.DEPLOYED.toString();
-                } else if (opType.equals("uninstall")) {
-                    return TempLoopState.NOT_DEPLOYED.toString();
-                }
-            } else if (status.equals("processing")) {
-                return TempLoopState.PROCESSING.toString();
-            }
-        } else if (statusCode == 404) {
-            return TempLoopState.NOT_DEPLOYED.toString();
-        }
-        return TempLoopState.IN_ERROR.toString();
-    }
-
-    /**
-     * Update the status of the closed loop based on the response from Policy and
-     * DCAE.
-     *
-     * @param loop
-     *        The closed loop
-     * @param policyState
-     *        The state get from Policy
-     * @param dcaeState
-     *        The state get from DCAE
-     * @throws ParseException
-     *         The parse exception
-     */
-    public LoopState updateLoopStatus(Loop loop, TempLoopState policyState, TempLoopState dcaeState) {
-        LoopState clState = LoopState.IN_ERROR;
-        if (policyState == TempLoopState.SUBMITTED) {
-            if (dcaeState == TempLoopState.DEPLOYED) {
-                clState = LoopState.DEPLOYED;
-            } else if (dcaeState == TempLoopState.PROCESSING) {
-                clState = LoopState.WAITING;
-            } else if (dcaeState == TempLoopState.NOT_DEPLOYED) {
-                clState = LoopState.SUBMITTED;
-            }
-        } else if (policyState == TempLoopState.NOT_SUBMITTED) {
-            if (dcaeState == TempLoopState.NOT_DEPLOYED) {
-                clState = LoopState.DESIGN;
-            }
-        }
-        loop.setLastComputedState(clState);
-        loopService.saveOrUpdateLoop(loop);
-        return clState;
-    }
-
-}
index 4c13922..d1ab0e3 100644 (file)
@@ -71,6 +71,17 @@ public class LoopService {
         loopsRepository.deleteById(loopName);
     }
 
+    public void updateDcaeDeploymentFields(Loop loop, String deploymentId, String deploymentUrl) {
+        loop.setDcaeDeploymentId(deploymentId);
+        loop.setDcaeDeploymentStatusUrl(deploymentUrl);
+        loopsRepository.save(loop);
+    }
+
+    public void updateLoopState(Loop loop, String newState) {
+        loop.setLastComputedState(LoopState.valueOf(newState));
+        loopsRepository.save(loop);
+    }
+
     Loop updateAndSaveOperationalPolicies(String loopName, List<OperationalPolicy> newOperationalPolicies) {
         Loop loop = findClosedLoopByName(loopName);
         Set<OperationalPolicy> newPolicies = operationalPolicyService.updatePolicies(loop, newOperationalPolicies);
@@ -93,9 +104,7 @@ public class LoopService {
 
     MicroServicePolicy updateMicroservicePolicy(String loopName, MicroServicePolicy newMicroservicePolicy) {
         Loop loop = findClosedLoopByName(loopName);
-        MicroServicePolicy newPolicies = microservicePolicyService.getAndUpdateMicroServicePolicy(loop,
-            newMicroservicePolicy);
-        return newPolicies;
+        return microservicePolicyService.getAndUpdateMicroServicePolicy(loop, newMicroservicePolicy);
     }
 
     private Loop findClosedLoopByName(String loopName) {
diff --git a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java
new file mode 100644 (file)
index 0000000..35b3a45
--- /dev/null
@@ -0,0 +1,162 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 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.loop.components.external;
+
+import com.google.gson.JsonObject;
+
+import java.util.UUID;
+
+import org.apache.camel.Exchange;
+import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse;
+import org.onap.clamp.clds.util.JsonUtils;
+import org.onap.clamp.loop.Loop;
+
+public class DcaeComponent extends ExternalComponent {
+
+    private static final String DCAE_DEPLOYMENT_PREFIX = "CLAMP_";
+    private static final String DEPLOYMENT_PARAMETER = "dcaeDeployParameters";
+    private static final String DCAE_SERVICETYPE_ID = "serviceTypeId";
+    private static final String DCAE_INPUTS = "inputs";
+
+    public static final ExternalComponentState BLUEPRINT_DEPLOYED = new ExternalComponentState("BLUEPRINT_DEPLOYED",
+        "The DCAE blueprint has been found in the DCAE inventory but not yet instancianted for this loop");
+    public static final ExternalComponentState PROCESSING_MICROSERVICE_INSTALLATION = new ExternalComponentState(
+        "PROCESSING_MICROSERVICE_INSTALLATION",
+        "Clamp has requested DCAE to install the microservices defined in the DCAE blueprint and it's currently processing the request");
+    public static final ExternalComponentState MICROSERVICE_INSTALLATION_FAILED = new ExternalComponentState(
+        "MICROSERVICE_INSTALLATION_FAILED",
+        "Clamp has requested DCAE to install the microservices defined in the DCAE blueprint and it failed");
+    public static final ExternalComponentState MICROSERVICE_INSTALLED_SUCCESSFULLY = new ExternalComponentState(
+        "MICROSERVICE_INSTALLED_SUCCESSFULLY",
+        "Clamp has requested DCAE to install the DCAE blueprint and it has been installed successfully");
+    public static final ExternalComponentState PROCESSING_MICROSERVICE_UNINSTALLATION = new ExternalComponentState(
+        "PROCESSING_MICROSERVICE_UNINSTALLATION",
+        "Clamp has requested DCAE to uninstall the microservices defined in the DCAE blueprint and it's currently processing the request");
+    public static final ExternalComponentState MICROSERVICE_UNINSTALLATION_FAILED = new ExternalComponentState(
+        "MICROSERVICE_UNINSTALLATION_FAILED",
+        "Clamp has requested DCAE to uninstall the microservices defined in the DCAE blueprint and it failed");
+    public static final ExternalComponentState MICROSERVICE_UNINSTALLED_SUCCESSFULLY = new ExternalComponentState(
+        "MICROSERVICE_UNINSTALLED_SUCCESSFULLY",
+        "Clamp has requested DCAE to uninstall the DCAE blueprint and it has been uninstalled successfully");
+    public static final ExternalComponentState IN_ERROR = new ExternalComponentState("IN_ERROR",
+        "There was an error during the request done to DCAE, look at the logs or try again");
+
+    public DcaeComponent() {
+        super(BLUEPRINT_DEPLOYED);
+    }
+
+    @Override
+    public String getComponentName() {
+        return "DCAE";
+    }
+
+    public static DcaeOperationStatusResponse convertDcaeResponse(String responseBody) {
+        if (responseBody != null && !responseBody.isEmpty()) {
+            return JsonUtils.GSON_JPA_MODEL.fromJson(responseBody, DcaeOperationStatusResponse.class);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Generate the deployment id, it's random
+     *
+     * @return The deployment id
+     */
+    public static String generateDeploymentId() {
+        return DCAE_DEPLOYMENT_PREFIX + UUID.randomUUID();
+    }
+
+    /**
+     * This method prepare the url returned by DCAE to check the status if fine.
+     *
+     * @param statusUrl
+     * @return the Right Url modified if needed
+     */
+    public static String getStatusUrl(DcaeOperationStatusResponse dcaeResponse) {
+        return dcaeResponse.getLinks().getStatus().replaceAll("http:", "http4:").replaceAll("https:", "https4:");
+    }
+
+    /**
+     * Return the deploy payload for DCAE.
+     *
+     * @param loop
+     *        The loop object
+     * @return The payload used to send deploy closed loop request
+     */
+    public static String getDeployPayload(Loop loop) {
+        JsonObject globalProp = loop.getGlobalPropertiesJson();
+        JsonObject deploymentProp = globalProp.getAsJsonObject(DEPLOYMENT_PARAMETER);
+
+        String serviceTypeId = loop.getDcaeBlueprintId();
+
+        JsonObject rootObject = new JsonObject();
+        rootObject.addProperty(DCAE_SERVICETYPE_ID, serviceTypeId);
+        if (deploymentProp != null) {
+            rootObject.add(DCAE_INPUTS, deploymentProp);
+        }
+        return rootObject.toString();
+    }
+
+    /**
+     * Return the uninstallation payload for DCAE.
+     *
+     * @param loop
+     *        The loop object
+     * @return The payload in string (json)
+     */
+    public static String getUndeployPayload(Loop loop) {
+        JsonObject rootObject = new JsonObject();
+        rootObject.addProperty(DCAE_SERVICETYPE_ID, loop.getDcaeBlueprintId());
+        return rootObject.toString();
+    }
+
+    @Override
+    public ExternalComponentState computeState(Exchange camelExchange) {
+
+        DcaeOperationStatusResponse dcaeResponse = (DcaeOperationStatusResponse) camelExchange.getIn().getExchange()
+            .getProperty("dcaeResponse");
+
+        if (dcaeResponse == null) {
+            setState(BLUEPRINT_DEPLOYED);
+        } else if (dcaeResponse.getOperationType().equals("install") && dcaeResponse.getStatus().equals("succeeded")) {
+            setState(MICROSERVICE_INSTALLED_SUCCESSFULLY);
+        } else if (dcaeResponse.getOperationType().equals("install") && dcaeResponse.getStatus().equals("processing")) {
+            setState(PROCESSING_MICROSERVICE_INSTALLATION);
+        } else if (dcaeResponse.getOperationType().equals("install") && dcaeResponse.getStatus().equals("failed")) {
+            setState(MICROSERVICE_INSTALLATION_FAILED);
+        } else if (dcaeResponse.getOperationType().equals("uninstall")
+            && dcaeResponse.getStatus().equals("succeeded")) {
+            setState(MICROSERVICE_UNINSTALLED_SUCCESSFULLY);
+        } else if (dcaeResponse.getOperationType().equals("uninstall")
+            && dcaeResponse.getStatus().equals("processing")) {
+            setState(PROCESSING_MICROSERVICE_UNINSTALLATION);
+        } else if (dcaeResponse.getOperationType().equals("uninstall") && dcaeResponse.getStatus().equals("failed")) {
+            setState(MICROSERVICE_UNINSTALLATION_FAILED);
+        } else {
+            setState(IN_ERROR);
+        }
+        return this.getState();
+    }
+}
diff --git a/src/main/java/org/onap/clamp/loop/components/external/ExternalComponent.java b/src/main/java/org/onap/clamp/loop/components/external/ExternalComponent.java
new file mode 100644 (file)
index 0000000..a8aae20
--- /dev/null
@@ -0,0 +1,61 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 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.loop.components.external;
+
+import com.google.gson.annotations.Expose;
+
+import org.apache.camel.Exchange;
+
+/**
+ *
+ * SHould be abstract but Gson can't instantiate it if it's an abstract
+ *
+ */
+public class ExternalComponent {
+    @Expose
+    private ExternalComponentState componentState;
+
+    public void setState(ExternalComponentState newState) {
+        this.componentState = newState;
+    }
+
+    public ExternalComponentState getState() {
+        return this.componentState;
+    }
+
+    public String getComponentName() {
+        return null;
+    }
+
+    public ExternalComponentState computeState(Exchange camelExchange) {
+        return new ExternalComponentState("INIT", "no desc");
+    }
+
+    public ExternalComponent(ExternalComponentState initialState) {
+        setState(initialState);
+    }
+
+    public ExternalComponent() {
+    }
+}
diff --git a/src/main/java/org/onap/clamp/loop/components/external/ExternalComponentState.java b/src/main/java/org/onap/clamp/loop/components/external/ExternalComponentState.java
new file mode 100644 (file)
index 0000000..6a723c2
--- /dev/null
@@ -0,0 +1,61 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 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.loop.components.external;
+
+import com.google.gson.annotations.Expose;
+
+/**
+ * This is a transient state reflecting the deployment status of a component. It
+ * can be Policy, DCAE, or whatever... This is object is generic. Clamp is now
+ * stateless, so it triggers the different components at runtime, the status per
+ * component is stored here.
+ *
+ */
+public class ExternalComponentState {
+    @Expose
+    private String stateName;
+    @Expose
+    private String description;
+
+    public ExternalComponentState(String stateName, String description) {
+        this.stateName = stateName;
+        this.description = description;
+    }
+
+    public ExternalComponentState() {
+    }
+
+    public String getStateName() {
+        return stateName;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    @Override
+    public String toString() {
+        return stateName;
+    }
+}
diff --git a/src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java b/src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java
new file mode 100644 (file)
index 0000000..acd6115
--- /dev/null
@@ -0,0 +1,123 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 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.loop.components.external;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.Transient;
+
+import org.apache.camel.Exchange;
+import org.onap.clamp.loop.Loop;
+import org.onap.clamp.policy.microservice.MicroServicePolicy;
+import org.onap.clamp.policy.operational.OperationalPolicy;
+
+public class PolicyComponent extends ExternalComponent {
+
+    @Transient
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyComponent.class);
+
+    public static final ExternalComponentState NOT_SENT = new ExternalComponentState("NOT_SENT",
+        "The policies defined have NOT yet been created on the policy engine");
+    public static final ExternalComponentState SENT = new ExternalComponentState("SENT",
+        "The policies defined have been created but NOT deployed on the policy engine");
+    public static final ExternalComponentState SENT_AND_DEPLOYED = new ExternalComponentState("SENT_AND_DEPLOYED",
+        "The policies defined have been created and deployed on the policy engine");
+    public static final ExternalComponentState IN_ERROR = new ExternalComponentState("IN_ERROR",
+        "There was an error during the sending to policy, the policy engine may be corrupted or inconsistent");
+
+    public PolicyComponent() {
+        super(NOT_SENT);
+    }
+
+    @Override
+    public String getComponentName() {
+        return "POLICY";
+    }
+
+    /**
+     * Generates the Json that must be sent to policy to add all policies to Active
+     * PDP group.
+     *
+     * @return The json, payload to send
+     */
+    public static String createPoliciesPayloadPdpGroup(Loop loop) {
+        JsonObject jsonObject = new JsonObject();
+        JsonArray jsonArray = new JsonArray();
+        jsonObject.add("policies", jsonArray);
+
+        for (String policyName : PolicyComponent.listPolicyNamesPdpGroup(loop)) {
+            JsonObject policyNode = new JsonObject();
+            jsonArray.add(policyNode);
+            policyNode.addProperty("policy-id", policyName);
+        }
+        String payload = new GsonBuilder().setPrettyPrinting().create().toJson(jsonObject);
+        logger.info("PdpGroup policy payload: " + payload);
+        return new GsonBuilder().setPrettyPrinting().create().toJson(jsonObject);
+    }
+
+    /**
+     * Generates the list of policy names that must be send/remove to/from active
+     * PDP group.
+     *
+     * @return A list of policy names
+     */
+    public static List<String> listPolicyNamesPdpGroup(Loop loop) {
+        List<String> policyNamesList = new ArrayList<>();
+        for (OperationalPolicy opPolicy : loop.getOperationalPolicies()) {
+            policyNamesList.add(opPolicy.getName());
+            for (String guardName : opPolicy.createGuardPolicyPayloads().keySet()) {
+                policyNamesList.add(guardName);
+            }
+        }
+        for (MicroServicePolicy microServicePolicy : loop.getMicroServicePolicies()) {
+            policyNamesList.add(microServicePolicy.getName());
+        }
+        return policyNamesList;
+    }
+
+    @Override
+    public ExternalComponentState computeState(Exchange camelExchange) {
+        boolean oneNotFound = (boolean) camelExchange.getIn().getExchange().getProperty("atLeastOnePolicyNotFound");
+        boolean oneNotDeployed = (boolean) camelExchange.getIn().getExchange()
+            .getProperty("atLeastOnePolicyNotDeployed");
+
+        if (oneNotFound && oneNotDeployed) {
+            this.setState(NOT_SENT);
+        } else if (!oneNotFound && oneNotDeployed) {
+            this.setState(SENT);
+        } else if (!oneNotFound && !oneNotDeployed) {
+            this.setState(SENT_AND_DEPLOYED);
+        } else {
+            this.setState(IN_ERROR);
+        }
+        return this.getState();
+    }
+}
index cea4957..3feff25 100644 (file)
@@ -52,7 +52,7 @@ import org.onap.clamp.loop.Loop;
  */
 @Entity
 @Table(name = "loop_logs")
-public class LoopLog implements Serializable {
+public class LoopLog implements Serializable, Comparable<LoopLog> {
     /**
      * The serial version ID.
      */
@@ -68,6 +68,10 @@ public class LoopLog implements Serializable {
     @Enumerated(EnumType.STRING)
     private LogType logType;
 
+    @Expose
+    @Column(name = "log_component", nullable = false)
+    private String logComponent;
+
     @Expose
     @Column(name = "message", columnDefinition = "MEDIUMTEXT", nullable = false)
     private String message;
@@ -83,10 +87,11 @@ public class LoopLog implements Serializable {
     public LoopLog() {
     }
 
-    public LoopLog(String message, LogType logType, Loop loop) {
+    public LoopLog(String message, LogType logType, String logComponent, Loop loop) {
         this.message = message;
         this.logType = logType;
         this.loop = loop;
+        this.logComponent = logComponent;
     }
 
     public Long getId() {
@@ -129,6 +134,14 @@ public class LoopLog implements Serializable {
         this.logInstant = logInstant.truncatedTo(ChronoUnit.SECONDS);
     }
 
+    public String getLogComponent() {
+        return logComponent;
+    }
+
+    public void setLogComponent(String logComponent) {
+        this.logComponent = logComponent;
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;
@@ -159,4 +172,18 @@ public class LoopLog implements Serializable {
         return true;
     }
 
+    @Override
+    public int compareTo(LoopLog arg0) {
+        // Reverse it, so that by default we have the latest
+        if (getId() == null) {
+            return 1;
+        }
+        if (arg0.getId() == null) {
+            return -1;
+        }
+
+        return arg0.getId().compareTo(this.getId());
+
+    }
+
 }
index b02bc11..d02d0b2 100644 (file)
@@ -38,7 +38,11 @@ public class LoopLogService {
     }
 
     public void addLog(String message, String logType, Loop loop) {
-        repository.save(new LoopLog(message, LogType.valueOf(logType), loop));
+        this.addLogForComponent(message, logType, "CLAMP", loop);
+    }
+
+    public void addLogForComponent(String message, String logType, String component, Loop loop) {
+        loop.addLog(repository.save(new LoopLog(message, LogType.valueOf(logType), component, loop)));
     }
 
     public boolean isExisting(Long logId) {
index ab337de..cd7d666 100644 (file)
                                                <thead>
                                                        <tr>
                                                                <th><span align="left" class="text">Date</span></th>
-                                                               <th><span align="center" class="text">Type</span></th>
+                                                               <th><span align="left" class="text">Type</span></th>
+                                                               <th><span align="left" class="text">Component</span></th>
                                                                <th><span align="right" class="text">Log</span></th>
                                                        </tr>
                                                </thead>
                                                <tbody>
                                                        <tr ng-repeat="log in loop_logs" ng-class="{reverse: reverse}">
-                                                               <td width="20%">{{log.logInstant}}</td>
+                                                               <td width="10%">{{log.logInstant}}</td>
                                                                <td width="10%" ng-class="log.logType">{{log.logType}}</td>
-                                                               <td width="70">{{log.message}}</td>
+                                                               <td width="10%">{{log.logComponent}}</td>
+                                                               <td width="70%">{{log.message}}</td>
                                                        </tr>
                                                </tbody>
                                        </table>
index db127f7..7b13615 100644 (file)
@@ -165,12 +165,12 @@ label {
                                <form class="policyProperties" class="form-horizontal"
                                        style="border: 2px dotted gray;"
                                        title="Operational Policy Properties">
-
                                        <div class="form-group clearfix">
                                                <label class="col-sm-4 control-label" for="id">ID</label>
                                                <div class="col-sm-8">
-                                                       <input type="text" class="form-control" name="id" id="id"
+                                                       <input type="text" class="form-control"  name="id" id="id" ng-model="duplicated" ng-init="duplicated = false"
                                                                ng-keyup="updateTabLabel($event)" />
+                                                       <span >ID must be unique</span>
                                                </div>
                                        </div>
                                        <div class="form-group clearfix">
@@ -247,6 +247,7 @@ label {
                                                                ng-options="policy for policy in policy_ids track by policy">
                                                                <option value="">-- choose an option --</option>
                                                                </select>
+
                                                </div>
                                        </div>
                                        <div class="form-group clearfix">
@@ -481,7 +482,7 @@ label {
        </div>
 
        <div attribute-test="policywindowpropertiesf" class="modal-footer">
-               <button id="savePropsBtn" class="btn btn-primary">Close</button>
+               <button id="savePropsBtn" class="btn btn-primary" ng-disabled="duplicated">Close</button>
                <button ng-click="close(true)" id="close_button"
                        class="btn btn-primary">Cancel</button>
        </div>
index 0cc5c38..2b27a7f 100644 (file)
@@ -41,32 +41,8 @@ app
                                ToscaModelWindow();
                        }
                }
-               this.toggleDeploy = function(uiAction, modelName) {
-                       var svcAction = uiAction.toLowerCase();
-                       var deployUrl = "/restservices/clds/v2/loop/" + svcAction + "Loop/" + modelName;
-                       var def = $q.defer();
-                       var sets = [];
-                       $http.put(deployUrl).success(
-                               function(data) {
-                                       def.resolve(data);
-                                       alertService.alertMessage("Action Successful: " + svcAction, 1)
-                                       // update deploymentID, lastUpdatedStatus
-                                       setLastComputedState(data.lastComputedState);
-                                       setDeploymentStatusURL(data.dcaeDeploymentStatusUrl);
-                                       setDeploymentID(data.dcaeDeploymentId);
-                                       setStatus(data.lastComputedState);
-                                       enableDisableMenuOptions();
-                       }).error(
-                               function(data) {
-                                       def.resolve(data);
-                                       alertService.alertMessage("Action Failure: " + svcAction, 2);
-                                       def.reject(svcAction + " not successful");
-                       });
-                       return def.promise;
-               }
                this.getModel = function(modelName) {
                    var def = $q.defer();
-                   var sets = [];
                    var svcUrl = "/restservices/clds/v2/loop/" + modelName;
                    $http.get(svcUrl).success(function(data) {
                        cl_props = data;
@@ -79,7 +55,6 @@ app
            };
            this.getSavedModel = function() {
                    var def = $q.defer();
-                   var sets = [];
                    var svcUrl = "/restservices/clds/v2/loop/getAllNames";
                    $http.get(svcUrl).success(function(data) {
 
@@ -92,7 +67,6 @@ app
            };
            this.processAction = function(uiAction, modelName) {
                    var def = $q.defer();
-                   var sets = [];
                    var svcAction = uiAction.toLowerCase();
                    var svcUrl = "/restservices/clds/v2/loop/" + svcAction + "/" + modelName;
 
@@ -100,10 +74,6 @@ app
                                function(data) {
                                        def.resolve(data);
                                        alertService.alertMessage("Action Successful: " + svcAction, 1)
-                                       // update deploymentID, lastUpdatedStatus
-                                       setLastComputedState(data.lastComputedState);
-                                       setDeploymentStatusURL(data.dcaeDeploymentStatusUrl);
-                                       setDeploymentID(data.dcaeDeploymentId);
                        }).error(
                                function(data) {
                                        def.resolve(data);
@@ -116,7 +86,6 @@ app
            this.manageAction = function(modelName, typeId, typeName) {
 
                    var def = $q.defer();
-                   var sets = [];
                    var config = {
                        url : "/restservices/clds/v1/clds/getDispatcherInfo",
                        method : "GET",
@@ -143,37 +112,34 @@ app
            };
            this.refreshStatus = function(modelName) {
                    var def = $q.defer();
-                   var sets = [];
                    var svcUrl = "/restservices/clds/v2/loop/getstatus/" + modelName;
                    $http.get(svcUrl).success(function(data) {
+                       cl_props = data;
                        setStatus(data.lastComputedState);
                            def.resolve(data);
                    }).error(function(data) {
                            def.reject("Refresh Status not successful");
                    });
                    return def.promise;
-                   enableDisableMenuOptions();
            }
            function setStatus(status) {
                    // apply color to status
                    var statusColor = 'white';
                    if (status.trim() === "DESIGN") {
                            statusColor = 'gray'
-                   } else if (status.trim() === "DISTRIBUTED") {
-                           statusColor = 'blue'
                    } else if (status.trim() === "SUBMITTED") {
+                           statusColor = 'blue'
+                   } else if (status.trim() === "DEPLOYED") {
+                           statusColor = 'blue'
+                   } else if (status.trim() === "RUNNING") {
                            statusColor = 'green'
                    } else if (status.trim() === "STOPPED") {
-                           statusColor = 'red'
-                   } else if (status.trim() === "DELETING") {
-                           statusColor = 'pink'
-                   } else if (status.trim() === "ERROR") {
                            statusColor = 'orange'
-                   } else if (status.trim() === "UNKNOWN") {
-                           statusColor = 'blue'
-                   } else {
-                           statusColor = null;
-                   }
+                   } else if (status.trim() === "IN_ERROR") {
+                           statusColor = 'red'
+                   } else if (status.trim() === "WAITING") {
+                           statusColor = 'greenyellow'
+                   } 
                    var statusMsg = '<span style="background-color:'
                    + statusColor
                    + ';-moz-border-radius: 50px;  -webkit-border-radius: 50px;  border-radius: 50px;">&nbsp;&nbsp;&nbsp;'
@@ -185,6 +151,22 @@ app
                    .append(
                    '<span id="status_clds" style="position: absolute;  left: 61%;top: 151px; font-size:20px;">Status: '
                    + statusMsg + '</span>');
+                   
+                   var statusTable = '<table id="status_components_table" style="width:100%"><tr><th><span align="left" class="text">Component</span></th><th><span align="center" class="text">State</span></th><th><span align="right" class="text">Description</span></th></tr>';
+                   
+                   $.each(cl_props['components'], function(componentIndex, componentValue) {
+                  statusTable+='<tr><td>'+componentIndex+'</td>';
+                  statusTable+='<td>'+componentValue['componentState']['stateName']+'</td>';
+                  statusTable+='<td>'+componentValue['componentState']['description']+'</td></tr>';
+                   });
+                   statusTable+= '</table>';
+                   if ($("#status_components").length >= 1)
+                           $("#status_components").remove();
+                   $("#activity_modeler")
+                   .append(
+                   '<span id="status_components" style="position: absolute;  left: 61%;top: 191px; font-size:10px;">'
+                   + statusTable + '</span>');
+                   
            }
            function manageCLImage(modelName) {
                getModelImage(modelName).then(function(pars) {
@@ -203,13 +185,12 @@ app
                        }, function(data) {
                        });
            }
-           enableDisableMenuOptions = function() {
+           function enableDisableMenuOptions () {
                    enableDefaultMenu();
                enableAllActionMenu();
            }
-           getModelImage = function(modelName) {
+           function getModelImage(modelName) {
                    var def = $q.defer();
-                   var sets = [];
                    var svcUrl = "/restservices/clds/v2/loop/svgRepresentation/" + modelName;
                    $http.get(svcUrl).success(function(data) {
                            def.resolve(data);
index 0f9b62f..806cfea 100644 (file)
@@ -39,6 +39,8 @@ app
            $scope.number = 0;
            $scope.clname = "";
            $scope.guard_ids = [];
+           $scope.duplicated = false;
+
            function getAllFormId() {
 
                    return Array.from(document.getElementsByClassName("formId"));
@@ -400,15 +402,22 @@ app
                    $($("#formId" + formNum + " #actor")[1]).val($(event.target).val());
            }
            // When we change the name of a policy
-           $scope.updateTabLabel = function(event) {
-
-                   // update policy id structure
-                   var formNum = $(event.target).closest('.formId').attr('id').substring(6);
-                   $scope.policy_ids.splice($scope.policy_ids.indexOf($("#formId" + formNum + " #id").val()), 1);
-                   $scope.policy_ids.push($(event.target).val());
-                   // Update the tab now
-                   $("#go_properties_tab" + formNum).text($(event.target).val());
-           }
+               $scope.updateTabLabel = function (event) {
+
+                       // update policy id structure
+                       var formNum = $(event.target).closest('.formId').attr('id').substring(6);
+                       var policyId = $(event.target).val();
+                       if ($scope.policy_ids.includes(policyId)) {
+                               console.log("Duplicated ID, cannot proceed");
+                               $scope.duplicated = true;
+                       } else {
+                               $scope.duplicated = false;
+                               $scope.policy_ids.splice($scope.policy_ids.indexOf($("#formId" + formNum + " #id").val()), 1);
+                               $scope.policy_ids.push($(event.target).val());
+                               // Update the tab now
+                               $("#go_properties_tab" + formNum).text($(event.target).val());
+                       }
+               };
            $scope.close = function() {
 
                    console.log("close");
index 5597bd9..7dda847 100644 (file)
@@ -388,7 +388,7 @@ function($scope, $rootScope, $timeout, dialogs) {
            };
            $scope.propertyExplorerErrorMessage = function(msg) {
 
-                   var dlg = dialogs.notify('Error', msg);
+                   dialogs.notify('Error', msg);
            }
            $scope.activityModelling = function() {
 
@@ -505,7 +505,8 @@ function($scope, $rootScope, $timeout, dialogs) {
 
                    cldsModelService.processAction(uiAction, modelName).then(function(pars) {
                            console.log("cldsPerformAction: pars=" + pars);
-                           cldsModelService.getModel(modelName).then(function(pars) {
+                           cldsModelService.refreshStatus(modelName).then(function(pars) {
+                               console.log("refreshStatus: pars=" + pars);
                                $rootScope.refreshLoopLog();
                            }, function(data) {
                            });
@@ -514,9 +515,10 @@ function($scope, $rootScope, $timeout, dialogs) {
            };
            $scope.refreshStatus = function() {
                    var modelName = selected_model;
-                   console.log("refreStatus modelName=" + modelName);
+                   console.log("refreshStatus modelName=" + modelName);
                    cldsModelService.refreshStatus(modelName).then(function(pars) {
-                           console.log("refreStatus: pars=" + pars);
+                       console.log("refreshStatus: pars=" + pars);
+                       $rootScope.refreshLoopLog();
                    }, function(data) {
 
                    });
@@ -547,7 +549,7 @@ function($scope, $rootScope, $timeout, dialogs) {
                            'Are you sure you want to deploy the closed loop?');
                            confirm.result.then(function() {
 
-                                   cldsToggleDeploy("deploy");
+                               $scope.cldsPerformAction("deploy");
                            });
                    });
            };
@@ -557,24 +559,12 @@ function($scope, $rootScope, $timeout, dialogs) {
                    + uiAction.toLowerCase() + ' the closed loop?');
                    dlg.result.then(function(btn) {
 
-                           cldsToggleDeploy(uiAction.toLowerCase());
+                       $scope.cldsPerformAction(uiAction.toLowerCase());
                    }, function(btn) {
 
                    });
            };
-           function cldsToggleDeploy(uiAction) {
-                   console.log("cldsPerformAction: " + uiAction + " modelName="
-                       + selected_model);
-                   cldsModelService.toggleDeploy(uiAction, selected_model).then(
-                   function(pars) {
-                           cldsModelService.getModel(selected_model).then(function(pars) {
-                               $rootScope.refreshLoopLog();
-                           }, function(data) {
-                           });
-                   }, function(data) {
-                   });
-                   
-           }
+
            $scope.ToscaModelWindow = function (tosca_model) {
 
                var dlg = dialogs.create('partials/portfolios/tosca_model_properties.html','ToscaModelCtrl',{closable:true,draggable:true},{size:'lg',keyboard: true,backdrop: 'static',windowClass: 'my-class'});
index a8aa83c..0323529 100644 (file)
@@ -91,30 +91,6 @@ function getMsUI(type) {
     return null;
 }
 
-function getLastUpdatedStatus() {
-    return cl_props["lastComputedState"];
-}
-
-function setLastComputedState(status) {
-    cl_props["lastComputedState"] =  status;
-}
-
-function getDeploymentID() {
-    return cl_props["dcaeDeploymentId"];
-}
-
-function setDeploymentID(deploymentId) {
-    cl_props["dcaeDeploymentId"] = deploymentId;
-}
-
-function getDeploymentStatusURL() {
-    return cl_props["dcaeDeploymentStatusUrl"];
-}
-
-function setDeploymentStatusURL(deploymentStatusURL) {
-    cl_props["dcaeDeploymentStatusUrl"] = deploymentStatusURL;
-}
-
 function getResourceDetailsVfProperty() {
        return cl_props["modelPropertiesJson"]["resourceDetails"]["VF"];
 }
@@ -127,4 +103,8 @@ function getLoopLogsArray() {
        return cl_props.loopLogs;
 }
 
-module.exports = { getOperationalPolicyProperty,getGlobalProperty,getMsProperty,getMsUI,getLastUpdatedStatus,getDeploymentID,getDeploymentStatusURL,getResourceDetailsVfProperty,getResourceDetailsVfModuleProperty };
+function getComponentStates() {
+       return cl_props.components;
+}
+
+module.exports = { getOperationalPolicyProperty,getGlobalProperty,getMsProperty,getMsUI,getResourceDetailsVfProperty,getResourceDetailsVfModuleProperty };
index da856e9..6ee44ca 100644 (file)
                        </route>
                </post>
                <put
-                       uri="/v2/loop/deployLoop/{loopName}"
+                       uri="/v2/loop/deploy/{loopName}"
                        outType="org.onap.clamp.loop.Loop"
                        produces="application/json">
                        <route>
                                        <to uri="direct:load-loop" />
                                        <to
                                                uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DCAE DEPLOY request','INFO',${exchangeProperty[loopObject]})" />
-                                       
-                                       <to uri="direct:get-status-from-policy" />
-                                       <to uri="direct:get-status-from-dcae" />
-                                       <log
-                                               loggingLevel="INFO"
-                                               message="Policy deployment status: ${exchangeProperty[policyStatus]}"></log>
-                                       <choice>
-                                               <when>
-                                                       <simple> ${exchangeProperty[policyStatus]} == 'SUBMITTED' and
-                                                               ${exchangeProperty[dcaeStatus]} == 'NOT_DEPLOYED'
-                                                       </simple>
-                                                       <to uri="direct:deploy-loop" />
-                                               </when>
-                                               <otherwise>
-                                                       <log
-                                                               loggingLevel="INFO"
-                                                               message="POLICY status ${exchangeProperty[policyStatus]}/DCAE status ${exchangeProperty[dcaeStatus]}, DCAE deployment will be started anyway" />
-                                                       <to
-                                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('POLICY status ${exchangeProperty[policyStatus]}/DCAE status ${exchangeProperty[dcaeStatus]}, DCAE deployment will be started anyway','ERROR',${exchangeProperty[loopObject]})" />
-                                                       <to uri="direct:deploy-loop" />
-                                               </otherwise>
-                                       </choice>
+
+                                       <to uri="direct:deploy-loop" />
+
                                        <log
                                                loggingLevel="INFO"
                                                message="DEPLOY request successfully executed for loop: ${header.loopName}" />
                                                        loggingLevel="ERROR"
                                                        message="DEPLOY request failed for loop: ${header.loopName}" />
                                                <to
-                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DEPLOY request failed, Error reported: ${exception}','ERROR',${exchangeProperty[loopObject]})" />
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DEPLOY request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
                                        </doCatch>
                                </doTry>
                        </route>
                </put>
                <put
-                       uri="/v2/loop/undeployLoop/{loopName}"
+                       uri="/v2/loop/undeploy/{loopName}"
                        outType="org.onap.clamp.loop.Loop"
                        produces="application/json">
                        <route>
                                        <to uri="direct:load-loop" />
                                        <to
                                                uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DCAE UNDEPLOY request','INFO',${exchangeProperty[loopObject]})" />
-                                       <to uri="direct:get-status-from-dcae" />
-                                       <choice>
-                                               <when>
-                                                       <simple> ${exchangeProperty[dcaeStatus]} == 'DEPLOYED' or ${exchangeProperty[dcaeStatus]} == 'IN_ERROR' or ${exchangeProperty[dcaeStatus]} == 'PROCESSING'
-                                                       </simple>
-                                                       <to uri="direct:undeploy-loop" />
-                                               </when>
-                                               <otherwise>
-                                                       <log
-                                                               loggingLevel="INFO"
-                                                               message="Loop is in state ${exchangeProperty[dcaeStatus]}, it can only be undeployed when in state DEPLOYED/IN_ERROR/PROCESSING" />
-                                                       <to
-                                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Loop is in state ${exchangeProperty[dcaeStatus]}, it can only be deployed when in state DEPLOYED','ERROR',${exchangeProperty[loopObject]})" />
-                                               </otherwise>
-                                       </choice>
+                                       <to uri="direct:undeploy-loop" />
+
                                        <log
                                                loggingLevel="INFO"
                                                message="UNDEPLOY request successfully executed for loop: ${header.loopName}" />
                                                        loggingLevel="ERROR"
                                                        message="UNDEPLOY request failed for loop: ${header.loopName}" />
                                                <to
-                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('UNDEPLOY request failed, Error reported: ${exception}','ERROR',${exchangeProperty[loopObject]})" />
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('UNDEPLOY request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
                                        </doCatch>
                                </doTry>
                        </route>
                                        <to uri="direct:load-loop" />
                                        <to
                                                uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('STOP request','INFO',${exchangeProperty[loopObject]})" />
-                                       
+
                                        <to uri="direct:remove-all-policy-from-active-pdp-group" />
                                        <log
                                                loggingLevel="INFO"
                                                        loggingLevel="ERROR"
                                                        message="STOP request failed for loop: $${header.loopName}" />
                                                <to
-                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('STOP request failed, Error reported: ${exception}','ERROR',${exchangeProperty[loopObject]})" />
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('STOP request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
                                        </doCatch>
                                </doTry>
                        </route>
                                                        loggingLevel="ERROR"
                                                        message="RESTART request failed for loop: ${header.loopName}" />
                                                <to
-                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('RESTART request failed, Error reported: ${exception}','INFO',${exchangeProperty[loopObject]})" />
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('RESTART request failed, Error reported: ${exception} - Body: ${exception.responseBody}','INFO',${exchangeProperty[loopObject]})" />
                                        </doCatch>
                                </doTry>
                        </route>
                                                </split>
                                        </split>
 
+                                       <delay>
+                                               <constant>3000</constant>
+                                       </delay>
+
                                        <to uri="direct:add-all-to-active-pdp-group" />
 
                                        <log
                                                        loggingLevel="ERROR"
                                                        message="SUBMIT request failed for loop: ${header.loopName}" />
                                                <to
-                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('SUBMIT request failed, Error reported: ${exception}','ERROR',${exchangeProperty[loopObject]})" />
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('SUBMIT request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
                                        </doCatch>
                                </doTry>
                        </route>
                                        <to uri="direct:load-loop" />
                                        <to
                                                uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DELETE request','INFO',${exchangeProperty[loopObject]})" />
+                                       <to uri="direct:undeploy-loop" />
                                        <to uri="direct:remove-all-policy-from-active-pdp-group" />
                                        <split>
                                                <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
                                                        loggingLevel="ERROR"
                                                        message="DELETE request failed for loop: ${header.loopName}" />
                                                <to
-                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DELETE request failed, Error reported: ${exception}','ERROR',${exchangeProperty[loopObject]})" />
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('DELETE request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
                                        </doCatch>
                                </doTry>
                        </route>
                                        <to uri="direct:load-loop" />
                                        <to
                                                uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('GET STATUS request','INFO',${exchangeProperty[loopObject]})" />
-                                       <setProperty propertyName="raiseHttpExceptionFlag">
-                                               <simple resultType="java.lang.Boolean">false</simple>
-                                       </setProperty>
-                                       <to uri="direct:get-status-from-policy" />
-                                       <to uri="direct:get-status-from-dcae" />
-                                       <to
-                                               uri="bean:org.onap.clamp.loop.LoopOperation?method=updateLoopStatus(${exchangeProperty[loopObject]},${exchangeProperty[policyStatus]}, ${exchangeProperty[dcaeStatus]})" />
-                                       <log
-                                               loggingLevel="INFO"
-                                               message="Get Status request successfully executed. The new state is: ${body}" />
-                                       <to
-                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Get Status request successfully executed','INFO',${exchangeProperty[loopObject]})" />
-                                       <to
-                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       <doTry>
+                                               <to uri="direct:update-policy-status-for-loop" />
+                                               <to uri="direct:update-dcae-status-for-loop" />
+                                               <to uri="direct:update-loop-state" />
+
+                                               <to
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Get Status request successfully executed','INFO',${exchangeProperty[loopObject]})" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       </doTry>
                                        <doCatch>
                                                <exception>java.lang.Exception</exception>
                                                <handled>
                                                        loggingLevel="ERROR"
                                                        message="Get Status request failed for loop: ${header.loopName}" />
                                                <to
-                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Get Status request failed, Error reported: ${exception}','ERROR',${exchangeProperty[loopObject]})" />
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Get Status request failed, Error reported: ${exception} - Body: ${exception.responseBody}','ERROR',${exchangeProperty[loopObject]})" />
                                        </doCatch>
                                        <doFinally>
-                                               <to
-                                                       uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
+                                               <setBody>
+                                                       <simple>${exchangeProperty[loopObject]}</simple>
+                                               </setBody>
                                        </doFinally>
                                </doTry>
                        </route>
diff --git a/src/main/resources/clds/camel/routes/dcae-flows.xml b/src/main/resources/clds/camel/routes/dcae-flows.xml
new file mode 100644 (file)
index 0000000..395077a
--- /dev/null
@@ -0,0 +1,187 @@
+<routes xmlns="http://camel.apache.org/schema/spring">
+       <route id="deploy-loop">
+               <from uri="direct:deploy-loop" />
+               <doTry>
+                       <log
+                               loggingLevel="INFO"
+                               message="Deploying the loop: ${exchangeProperty[loopObject].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Deploying the loop')" />
+                       <setBody>
+                               <method
+                                       ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                       method="getDeployPayload(${exchangeProperty[loopObject]})" />
+                       </setBody>
+                       <setProperty propertyName="dcaeDeploymentId">
+                               <method
+                                       ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                       method="generateDeploymentId()" />
+                       </setProperty>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>PUT</constant>
+                       </setHeader>
+                       <setHeader headerName="Content-Type">
+                               <constant>application/json</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log
+                               loggingLevel="INFO"
+                               message="Endpoint to deploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}"></log>
+                       <toD
+                               uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=300000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <convertBodyTo type="java.lang.String" />
+                       <setProperty propertyName="dcaeResponse">
+                               <method
+                                       ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                       method="convertDcaeResponse(${body})" />
+                       </setProperty>
+                       <setProperty propertyName="dcaeStatusUrl">
+                               <method
+                                       ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                       method="getStatusUrl(${exchangeProperty[dcaeResponse]})" />
+                       </setProperty>
+                       <to
+                               uri="bean:org.onap.clamp.loop.LoopService?method=updateDcaeDeploymentFields(${exchangeProperty[loopObject]},${exchangeProperty[dcaeDeploymentId]},${exchangeProperty[dcaeStatusUrl]})" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>DEPLOY loop status
+                                               (Dep-id:${exchangeProperty[dcaeDeploymentId]},
+                                               StatusUrl:${exchangeProperty[dcaeStatusUrl]})
+                                       </simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="undeploy-loop">
+               <from uri="direct:undeploy-loop" />
+               <log
+                       loggingLevel="INFO"
+                       message="Undeploying the loop: ${exchangeProperty[loopObject].getName()} : ${exchangeProperty[loopObject].getDcaeDeploymentId()}" />
+               <to
+                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Undeploying the loop')" />
+               <choice>
+                       <when>
+                               <simple>${exchangeProperty[loopObject].getDcaeDeploymentId()}
+                                       != null
+                               </simple>
+                               <doTry>
+                                       <setBody>
+                                               <method
+                                                       ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                                       method="getUndeployPayload(${exchangeProperty[loopObject]})" />
+                                       </setBody>
+                                       <setHeader headerName="CamelHttpMethod">
+                                               <constant>DELETE</constant>
+                                       </setHeader>
+                                       <setHeader headerName="Content-Type">
+                                               <constant>application/json</constant>
+                                       </setHeader>
+
+                                       <setHeader headerName="X-ONAP-RequestID">
+                                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                                               </simple>
+                                       </setHeader>
+                                       <setHeader headerName="X-ONAP-InvocationID">
+                                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                                               </simple>
+                                       </setHeader>
+                                       <setHeader headerName="X-ONAP-PartnerName">
+                                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                                               </simple>
+                                       </setHeader>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="Endpoint to undeploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[loopObject].getDcaeDeploymentId()}"></log>
+                                       <toD
+                                               uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[loopObject].getDcaeDeploymentId()}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=300000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                                       <convertBodyTo type="java.lang.String" />
+                                       <setProperty propertyName="dcaeResponse">
+                                               <method
+                                                       ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                                       method="convertDcaeResponse(${body})" />
+                                       </setProperty>
+                                       <setProperty propertyName="dcaeStatusUrl">
+                                               <method
+                                                       ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                                       method="getStatusUrl(${exchangeProperty[dcaeResponse]})" />
+                                       </setProperty>
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopService?method=updateDcaeDeploymentFields(${exchangeProperty[loopObject]},${exchangeProperty[loopObject].getDcaeDeploymentId()},${exchangeProperty[dcaeStatusUrl]})" />
+                                       <doFinally>
+                                               <to uri="direct:reset-raise-http-exception-flag" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                               <setProperty propertyName="logMessage">
+                                                       <simple>UNDEPLOY loop status</simple>
+                                               </setProperty>
+                                               <to uri="direct:dump-loop-log-http-response" />
+                                       </doFinally>
+                               </doTry>
+                       </when>
+                       <otherwise>
+                               <log
+                                       loggingLevel="WARNING"
+                                       message="Cannot Undeploy for the loop: ${exchangeProperty[loopObject].getName()}, the Deployment ID does not exist !" />
+                               <to
+                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Cannot Undeploy for the loop: ${exchangeProperty[loopObject].getName()}, the Deployment ID does not exist !','WARNING',${exchangeProperty[loopObject]})" />
+
+                       </otherwise>
+               </choice>
+       </route>
+       <route id="get-dcae-deployment-status">
+               <from uri="direct:get-dcae-deployment-status" />
+               <log
+                       loggingLevel="INFO"
+                       message="Getting DCAE deployment status for loop: ${exchangeProperty[loopObject].getName()}" />
+               <to
+                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Getting Deployment status')" />
+               <doTry>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>GET</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log
+                               loggingLevel="INFO"
+                               message="Endpoint to query Closed Loop status: ${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()}"></log>
+                       <toD
+                               uri="${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=30000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>DCAE deployment status</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+
+       </route>
+</routes>
\ No newline at end of file
index 1bad5fb..bc79fc2 100644 (file)
                        </when>
                </choice>
        </route>
-
-       <route id="load-loop">
-               <from uri="direct:load-loop" />
-               <setBody>
-                       <simple>${header.loopName}</simple>
-               </setBody>
-               <setProperty propertyName="loopObject">
-                       <method
-                               ref="org.onap.clamp.loop.LoopService"
-                               method="getLoop" />
-               </setProperty>
-
-               <when>
-                       <simple>${exchangeProperty[loopObject]} == null</simple>
-                       <setHeader headerName="CamelHttpResponseCode">
-                               <constant>404</constant>
-                       </setHeader>
-                       <log
-                               loggingLevel="WARNING"
-                               message="Loop not found in database: ${body}" />
-                       <stop />
-               </when>
-       </route>
-
-       <route id="create-micro-service-policy">
-               <from uri="direct:create-micro-service-policy" />
-               <doTry>
-                       <log
-                               loggingLevel="INFO"
-                               message="Creating Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}" />
-                       <to
-                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Micro Service Policy')" />
-                       <setBody>
-                               <simple>${exchangeProperty[microServicePolicy].createPolicyPayload()}
-                               </simple>
-                       </setBody>
-                       <setHeader headerName="CamelHttpMethod">
-                               <constant>POST</constant>
-                       </setHeader>
-                       <setHeader headerName="Content-Type">
-                               <constant>application/json</constant>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-RequestID">
-                               <simple>${exchangeProperty[X-ONAP-RequestID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-InvocationID">
-                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-PartnerName">
-                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
-                               </simple>
-                       </setHeader>
-                       <log
-                               loggingLevel="INFO"
-                               message="Endpoint to create microservice policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies"></log>
-                       <toD
-                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=20000&amp;httpClient.socketTimeout=20000&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}" />
-                       <doFinally>
-                               <to uri="direct:reset-raise-http-exception-flag" />
-                               <to
-                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
-                               <setProperty propertyName="logMessage">
-                                       <simple>${exchangeProperty[microServicePolicy].getName()} creation
-                                               status
-                                       </simple>
-                               </setProperty>
-                               <to uri="direct:dump-loop-log-http-response" />
-                       </doFinally>
-               </doTry>
-       </route>
-
-       <route id="delete-micro-service-policy">
-               <from uri="direct:delete-micro-service-policy" />
-               <doTry>
-                       <log
-                               loggingLevel="INFO"
-                               message="Deleting Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}" />
-                       <to
-                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Micro Service Policy')" />
-                       <setBody>
-                               <constant>null</constant>
-                       </setBody>
-                       <setHeader headerName="CamelHttpMethod">
-                               <constant>DELETE</constant>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-RequestID">
-                               <simple>${exchangeProperty[X-ONAP-RequestID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-InvocationID">
-                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-PartnerName">
-                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
-                               </simple>
-                       </setHeader>
-                       <log
-                               loggingLevel="INFO"
-                               message="Endpoint to delete microservice policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies/${exchangeProperty[microServicePolicy].getName()}/versions/1.0.0"></log>
-                       <toD
-                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies/${exchangeProperty[microServicePolicy].getName()}/versions/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=20000&amp;httpClient.socketTimeout=20000&amp;deleteWithBody=false&amp;mapHttpMessageBody=false&amp;mapHttpMessageFormUrlEncodedBody=false&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}" />
-
-                       <doFinally>
-                               <to uri="direct:reset-raise-http-exception-flag" />
-                               <to
-                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
-                               <setProperty propertyName="logMessage">
-                                       <simple>${exchangeProperty[microServicePolicy].getName()} removal
-                                               status
-                                       </simple>
-                               </setProperty>
-                               <to uri="direct:dump-loop-log-http-response" />
-                       </doFinally>
-               </doTry>
-       </route>
-
-       <route id="create-operational-policy">
-               <from uri="direct:create-operational-policy" />
-               <doTry>
-                       <log
-                               loggingLevel="INFO"
-                               message="Creating Operational Policy: ${exchangeProperty[operationalPolicy].getName()}" />
-                       <to
-                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Operational Policy')" />
-                       <setBody>
-                               <simple>${exchangeProperty[operationalPolicy].createPolicyPayload()}
-                               </simple>
-                       </setBody>
-                       <setHeader headerName="CamelHttpMethod">
-                               <constant>POST</constant>
-                       </setHeader>
-                       <setHeader headerName="Content-Type">
-                               <constant>application/json</constant>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-RequestID">
-                               <simple>${exchangeProperty[X-ONAP-RequestID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-InvocationID">
-                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-PartnerName">
-                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
-                               </simple>
-                       </setHeader>
-                       <log
-                               loggingLevel="INFO"
-                               message="Endpoint to create operational policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies"></log>
-                       <toD
-                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=20000&amp;httpClient.socketTimeout=20000&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}" />
-                       <doFinally>
-                               <to uri="direct:reset-raise-http-exception-flag" />
-                               <to
-                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
-                               <setProperty propertyName="logMessage">
-                                       <simple>${exchangeProperty[operationalPolicy].getName()} creation
-                                               status
-                                       </simple>
-                               </setProperty>
-                               <to uri="direct:dump-loop-log-http-response" />
-                       </doFinally>
-               </doTry>
-       </route>
-
-       <route id="delete-operational-policy">
-               <from uri="direct:delete-operational-policy" />
-               <doTry>
-                       <log
-                               loggingLevel="INFO"
-                               message="Deleting Operational Policy: ${exchangeProperty[operationalPolicy].getName()}" />
-                       <to
-                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Operational Policy')" />
-                       <setBody>
-                               <constant>null</constant>
-                       </setBody>
-                       <setHeader headerName="CamelHttpMethod">
-                               <constant>DELETE</constant>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-RequestID">
-                               <simple>${exchangeProperty[X-ONAP-RequestID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-InvocationID">
-                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-PartnerName">
-                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
-                               </simple>
-                       </setHeader>
-                       <log
-                               loggingLevel="INFO"
-                               message="Endpoint to delete operational policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicy].getName()}/versions/1"></log>
-                       <toD
-                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicy].getName()}/versions/1?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=20000&amp;httpClient.socketTimeout=20000&amp;deleteWithBody=false&amp;mapHttpMessageBody=false&amp;mapHttpMessageFormUrlEncodedBody=false&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}" />
-                       <doFinally>
-                               <to uri="direct:reset-raise-http-exception-flag" />
-                               <to
-                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
-                               <setProperty propertyName="logMessage">
-                                       <simple>${exchangeProperty[operationalPolicy].getName()} removal
-                                               status
-                                       </simple>
-                               </setProperty>
-                               <to uri="direct:dump-loop-log-http-response" />
-                       </doFinally>
-               </doTry>
-       </route>
-
-       <route id="create-guard-policy">
-               <from uri="direct:create-guard-policy" />
-               <doTry>
-                       <log
-                               loggingLevel="INFO"
-                               message="Creating Guard Policy: ${exchangeProperty[guardPolicy].getKey()}" />
-                       <to
-                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Guard Policy')" />
-                       <setBody>
-                               <simple>${exchangeProperty[guardPolicy].getValue()}
-                               </simple>
-                       </setBody>
-                       <setHeader headerName="CamelHttpMethod">
-                               <constant>POST</constant>
-                       </setHeader>
-                       <setHeader headerName="Content-Type">
-                               <constant>application/json</constant>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-RequestID">
-                               <simple>${exchangeProperty[X-ONAP-RequestID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-InvocationID">
-                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-PartnerName">
-                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
-                               </simple>
-                       </setHeader>
-                       <log
-                               loggingLevel="INFO"
-                               message="Endpoint to create guard policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies"></log>
-                       <toD
-                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=20000&amp;httpClient.socketTimeout=20000&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}" />
-                       <doFinally>
-                               <to uri="direct:reset-raise-http-exception-flag" />
-                               <to
-                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
-                               <setProperty propertyName="logMessage">
-                                       <simple>${exchangeProperty[guardPolicy].getKey()} creation status
-                                       </simple>
-                               </setProperty>
-                               <to uri="direct:dump-loop-log-http-response" />
-                       </doFinally>
-               </doTry>
-       </route>
-
-       <route id="delete-guard-policy">
-               <from uri="direct:delete-guard-policy" />
-               <doTry>
-                       <log
-                               loggingLevel="INFO"
-                               message="Deleting Guard Policy: ${exchangeProperty[guardPolicy].getKey()}" />
-                       <to
-                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Guard Policy')" />
-                       <setBody>
-                               <constant>null</constant>
-                       </setBody>
-                       <setHeader headerName="CamelHttpMethod">
-                               <constant>DELETE</constant>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-RequestID">
-                               <simple>${exchangeProperty[X-ONAP-RequestID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-InvocationID">
-                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-PartnerName">
-                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
-                               </simple>
-                       </setHeader>
-                       <log
-                               loggingLevel="INFO"
-                               message="Endpoint to delete guard policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/${exchangeProperty[guardPolicy].getKey()}/versions/1"></log>
-                       <toD
-                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/${exchangeProperty[guardPolicy].getKey()}/versions/1?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=20000&amp;httpClient.socketTimeout=20000&amp;deleteWithBody=false&amp;mapHttpMessageBody=false&amp;mapHttpMessageFormUrlEncodedBody=false&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}" />
-
-                       <doFinally>
-                               <to uri="direct:reset-raise-http-exception-flag" />
-                               <to
-                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
-                               <setProperty propertyName="logMessage">
-                                       <simple>${exchangeProperty[guardPolicy].getKey()} removal status
-                                       </simple>
-                               </setProperty>
-                               <to uri="direct:dump-loop-log-http-response" />
-                       </doFinally>
-               </doTry>
-       </route>
-
-       <route id="add-all-to-active-pdp-group">
-               <from uri="direct:add-all-to-active-pdp-group" />
-               <doTry>
-                       <log
-                               loggingLevel="INFO"
-                               message="Adding loop policies to PDP Group: ${exchangeProperty[loopObject].getName()}" />
-                       <to
-                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Add policies to PDP group')" />
-                       <setBody>
-                               <simple>${exchangeProperty[loopObject].createPoliciesPayloadPdpGroup()}
-                               </simple>
-                       </setBody>
-                       <setHeader headerName="CamelHttpMethod">
-                               <constant>POST</constant>
-                       </setHeader>
-                       <setHeader headerName="Content-Type">
-                               <constant>application/json</constant>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-RequestID">
-                               <simple>${exchangeProperty[X-ONAP-RequestID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-InvocationID">
-                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-PartnerName">
-                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
-                               </simple>
-                       </setHeader>
-                       <log
-                               loggingLevel="INFO"
-                               message="Endpoint to add policies to PDP Group: {{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/policies"></log>
-                       <toD
-                               uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/policies?bridgeEndpoint=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=20000&amp;httpClient.socketTimeout=20000&amp;useSystemProperties=true&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}" />
-
-                       <doFinally>
-                               <to uri="direct:reset-raise-http-exception-flag" />
-                               <to
-                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
-                               <setProperty propertyName="logMessage">
-                                       <simple>PDP Group push ALL status</simple>
-                               </setProperty>
-                               <to uri="direct:dump-loop-log-http-response" />
-                       </doFinally>
-               </doTry>
-       </route>
-
-       <route id="remove-all-policy-from-active-pdp-group">
-               <from uri="direct:remove-all-policy-from-active-pdp-group" />
-               <doTry>
-                       <log
-                               loggingLevel="INFO"
-                               message="Removing policies from active PDP group for loop: ${exchangeProperty[loopObject].getName()}" />
-                       <to
-                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Removing policies PDP group')" />
-                       <split>
-                               <simple>${exchangeProperty[loopObject].listPolicyNamesPdpGroup()}
-                               </simple>
-                               <setProperty propertyName="policyName">
-                                       <simple>${body}</simple>
-                               </setProperty>
-                               <setBody>
-                                       <constant>null</constant>
-                               </setBody>
-                               <setHeader headerName="CamelHttpMethod">
-                                       <constant>DELETE</constant>
-                               </setHeader>
-                               <setHeader headerName="X-ONAP-RequestID">
-                                       <simple>${exchangeProperty[X-ONAP-RequestID]}
-                                       </simple>
-                               </setHeader>
-                               <setHeader headerName="X-ONAP-InvocationID">
-                                       <simple>${exchangeProperty[X-ONAP-InvocationID]}
-                                       </simple>
-                               </setHeader>
-                               <setHeader headerName="X-ONAP-PartnerName">
-                                       <simple>${exchangeProperty[X-ONAP-PartnerName]}
-                                       </simple>
-                               </setHeader>
-                               <log
-                                       loggingLevel="INFO"
-                                       message="Endpoint to delete policy from PDP Group: {{clamp.config.policy.pap.url}}/pdps/policies/${exchangeProperty[policyName]}/versions/1.0.0"></log>
-                               <toD
-                                       uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/policies/${exchangeProperty[policyName]}/versions/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=20000&amp;httpClient.socketTimeout=20000&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}" />
-                               <setProperty propertyName="logMessage">
-                                       <simple>${exchangeProperty[policyName]} PDP Group removal status
-                                       </simple>
-                               </setProperty>
-                               <to uri="direct:dump-loop-log-http-response" />
-                       </split>
-                       <doCatch>
-                               <exception>java.lang.Exception</exception>
-                               <handled>
-                                       <constant>false</constant>
-                               </handled>
-                               <setProperty propertyName="logMessage">
-                                       <simple>PDP Group removal, Error reported: ${exception}</simple>
-                               </setProperty>
-                               <to uri="direct:dump-loop-log-http-response" />
-                       </doCatch>
-                       <doFinally>
-                               <to uri="direct:reset-raise-http-exception-flag" />
-                               <to
-                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
-                       </doFinally>
-               </doTry>
-       </route>
-       <route id="deploy-loop">
-               <from uri="direct:deploy-loop" />
-               <doTry>
-                       <log
-                               loggingLevel="INFO"
-                               message="Deploying the loop: ${exchangeProperty[loopObject].getName()}" />
-                       <to
-                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Deploying the loop')" />
-                       <setBody>
-                               <method ref="org.onap.clamp.loop.LoopOperation"
-                                       method="getDeployPayload(${exchangeProperty[loopObject]})" />
-                       </setBody>
-                       <setProperty propertyName="deploymentId">
-                               <method ref="org.onap.clamp.loop.LoopOperation"
-                                       method="getDeploymentId(${exchangeProperty[loopObject]})" />
-                       </setProperty>
-                       <setHeader headerName="CamelHttpMethod">
-                               <constant>PUT</constant>
-                       </setHeader>
-                       <setHeader headerName="Content-Type">
-                               <constant>application/json</constant>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-RequestID">
-                               <simple>${exchangeProperty[X-ONAP-RequestID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-InvocationID">
-                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-PartnerName">
-                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
-                               </simple>
-                       </setHeader>
-                       <log
-                               loggingLevel="INFO"
-                               message="Endpoint to deploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[deploymentId]}"></log>
-                       <toD
-                               uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[deploymentId]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=20000&amp;httpClient.socketTimeout=20000&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}" />
-                       <to
-                               uri="bean:org.onap.clamp.loop.LoopOperation?method=updateLoopInfo(*,${exchangeProperty[loopObject]},${exchangeProperty[deploymentId]})" />
-                       <doFinally>
-                               <to uri="direct:reset-raise-http-exception-flag" />
-                               <to
-                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
-                               <setProperty propertyName="logMessage">
-                                       <simple>DEPLOY loop status (id:${exchangeProperty[deploymentId]})</simple>
-                               </setProperty>
-                               <to uri="direct:dump-loop-log-http-response" />
-                       </doFinally>
-               </doTry>
-       </route>
-
-       <route id="undeploy-loop">
-               <from uri="direct:undeploy-loop" />
-               <doTry>
-                       <log
-                               loggingLevel="INFO"
-                               message="Undeploying the loop: ${exchangeProperty[loopObject].getName()} : ${exchangeProperty[loopObject].getDcaeDeploymentId()}" />
-                       <to
-                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Undeploying the loop')" />
-
-                       <setBody>
-                               <simple>{\"serviceTypeId\": \"${exchangeProperty[loopObject].getDcaeBlueprintId()}\"}
-                               </simple>
-                       </setBody>
-                       <setHeader headerName="CamelHttpMethod">
-                               <constant>DELETE</constant>
-                       </setHeader>
-                       <setHeader headerName="Content-Type">
-                               <constant>application/json</constant>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-RequestID">
-                               <simple>${exchangeProperty[X-ONAP-RequestID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-InvocationID">
-                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-PartnerName">
-                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
-                               </simple>
-                       </setHeader>
-                       <log
-                               loggingLevel="INFO"
-                               message="Endpoint to undeploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[loopObject].getDcaeDeploymentId()}"></log>
-                       <toD
-                               uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[loopObject].getDcaeDeploymentId()}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=20000&amp;httpClient.socketTimeout=20000&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}" />
-                       <to
-                               uri="bean:org.onap.clamp.loop.LoopOperation?method=updateLoopInfo(*,${exchangeProperty[loopObject]},null)" />
-                       <doFinally>
-                               <to uri="direct:reset-raise-http-exception-flag" />
-                               <to
-                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
-                               <setProperty propertyName="logMessage">
-                                       <simple>UNDEPLOY loop status</simple>
-                               </setProperty>
-                               <to uri="direct:dump-loop-log-http-response" />
-                       </doFinally>
-               </doTry>
-       </route>
-       <route id="get-status-from-policy">
-               <from uri="direct:get-status-from-policy" />
-               <doTry>
-                       <log
-                               loggingLevel="INFO"
-                               message="Query Closed Loop status from policy PDP: ${exchangeProperty[loopObject].getName()}" />
-                       <to
-                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Query operational policies to PDP group')" />
-                       <setProperty propertyName="operationalPolicyName">
-                               <method ref="org.onap.clamp.loop.LoopOperation"
-                                       method="getOperationalPolicyName(${exchangeProperty[loopObject]})" />
-                       </setProperty>
-                       <setHeader headerName="CamelHttpMethod">
-                               <constant>GET</constant>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-RequestID">
-                               <simple>${exchangeProperty[X-ONAP-RequestID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-InvocationID">
-                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
-                               </simple>
-                       </setHeader>
-                       <setHeader headerName="X-ONAP-PartnerName">
-                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
-                               </simple>
-                       </setHeader>
-                       <log
-                               loggingLevel="INFO"
-                               message="Endpoint to query from Policy PDP: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicyName]}/versions/deployed"></log>
-                       <toD
-                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicyName]}/versions/deployed?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=20000&amp;httpClient.socketTimeout=20000&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}" />
-                       <doFinally>
-                               <to uri="direct:reset-raise-http-exception-flag" />
-                               <to
-                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
-                               <setProperty propertyName="logMessage">
-                                       <simple>Policy deployment status</simple>
-                               </setProperty>
-                               <setProperty propertyName="policyStatus">
-                                       <method ref="org.onap.clamp.loop.LoopOperation"
-                                       method="analysePolicyResponse(${header.CamelHttpResponseCode})" />
-                               </setProperty>
-                               <to uri="direct:dump-loop-log-http-response" />
-                       </doFinally>
-               </doTry>
-       </route>
-       <route id="get-status-from-dcae">
-               <from uri="direct:get-status-from-dcae" />
-               <log
-                       loggingLevel="INFO"
-                       message="Query Closed Loop status from DCAE ${exchangeProperty[loopObject].getName()}" />
-               <choice>
-                       <when>
-                               <simple>${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()} == null
-                               </simple>
-                               <setProperty propertyName="dcaeStatus">
-                                       <method ref="org.onap.clamp.loop.LoopOperation"
-                                       method="analyseDcaeResponse(*,null)" />
-                               </setProperty>
-                               <log
-                                               loggingLevel="INFO"
-                                               message="dcae status: ${exchangeProperty[dcaeStatus]}"></log>
-                       </when>
-                       <otherwise>
-                               <doTry>
-                                       <log
-                                               loggingLevel="INFO"
-                                               message="Query Closed Loop status from Dcae" />
-                                       <setHeader headerName="CamelHttpMethod">
-                                               <constant>GET</constant>
-                                       </setHeader>
-                                       <setHeader headerName="X-ONAP-RequestID">
-                                               <simple>${exchangeProperty[X-ONAP-RequestID]}
-                                               </simple>
-                                       </setHeader>
-                                       <setHeader headerName="X-ONAP-InvocationID">
-                                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
-                                               </simple>
-                                       </setHeader>
-                                       <setHeader headerName="X-ONAP-PartnerName">
-                                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
-                                               </simple>
-                                       </setHeader>
-                                       <log
-                                               loggingLevel="INFO"
-                                               message="Endpoint to query Closed Loop status: ${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()}"></log>
-                                       <toD
-                                               uri="${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=20000&amp;httpClient.socketTimeout=20000&amp;authMethod=Basic&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}" />
-                                       <doFinally>
-                                               <to uri="direct:reset-raise-http-exception-flag" />
-                                               <to
-                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
-                                               <setProperty propertyName="logMessage">
-                                                       <simple>DCAE deployment status</simple>
-                                               </setProperty>
-                                               <setProperty propertyName="dcaeStatus">
-                                                       <method ref="org.onap.clamp.loop.LoopOperation"
-                                                       method="analyseDcaeResponse(*,${header.CamelHttpResponseCode})" />
-                                               </setProperty>
-                                               <log
-                                               loggingLevel="INFO"
-                                               message="dcae status: ${exchangeProperty[dcaeStatus]}"></log>
-                                               <to uri="direct:dump-loop-log-http-response" />
-                                       </doFinally>
-                               </doTry>
-                       </otherwise>
-               </choice>
-       </route>
-       <route id="reset-raise-http-exception-flag">
-               <from uri="direct:reset-raise-http-exception-flag" />
-               <setProperty propertyName="raiseHttpExceptionFlag">
-                       <simple resultType="java.lang.Boolean">true</simple>
-               </setProperty>
-       </route>
-
-       <route id="dump-loop-log-http-response">
-               <from uri="direct:dump-loop-log-http-response" />
-               <log loggingLevel="INFO" message="${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}" />
-               <to
-                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}','INFO',${exchangeProperty[loopObject]})" />
-       </route>
 </routes>
\ No newline at end of file
diff --git a/src/main/resources/clds/camel/routes/loop-flows.xml b/src/main/resources/clds/camel/routes/loop-flows.xml
new file mode 100644 (file)
index 0000000..ede899e
--- /dev/null
@@ -0,0 +1,250 @@
+<routes xmlns="http://camel.apache.org/schema/spring">
+       <route id="load-loop">
+               <from uri="direct:load-loop" />
+               <setBody>
+                       <simple>${header.loopName}</simple>
+               </setBody>
+               <setProperty propertyName="loopObject">
+                       <method
+                               ref="org.onap.clamp.loop.LoopService"
+                               method="getLoop" />
+               </setProperty>
+
+               <when>
+                       <simple>${exchangeProperty[loopObject]} == null</simple>
+                       <setHeader headerName="CamelHttpResponseCode">
+                               <constant>404</constant>
+                       </setHeader>
+                       <log
+                               loggingLevel="WARNING"
+                               message="Loop not found in database: ${body}" />
+                       <stop />
+               </when>
+       </route>
+       <route id="update-policy-status-for-loop">
+               <from uri="direct:update-policy-status-for-loop" />
+               <setProperty propertyName="atLeastOnePolicyNotFound">
+                       <simple resultType="java.lang.Boolean">false</simple>
+               </setProperty>
+               <setProperty propertyName="atLeastOnePolicyNotDeployed">
+                       <simple resultType="java.lang.Boolean">false</simple>
+               </setProperty>
+               <setProperty propertyName="policyComponent">
+                       <simple>${exchangeProperty[loopObject].getComponent('POLICY')}
+                       </simple>
+               </setProperty>
+               <log
+                       loggingLevel="INFO"
+                       message="Processing all MICRO-SERVICES policies defined in loop ${exchangeProperty[loopObject].getName()}" />
+               <split>
+                       <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
+                       </simple>
+                       <setProperty propertyName="policyName">
+                               <simple>${body.getName()}</simple>
+                       </setProperty>
+                       <setProperty propertyName="policyType">
+                               <simple>${body.getModelType()}</simple>
+                       </setProperty>
+                       <setBody>
+                               <constant>null</constant>
+                       </setBody>
+                       <log
+                               loggingLevel="INFO"
+                               message="Processing Micro Service Policy: ${exchangeProperty[policyName]} of type ${exchangeProperty[policyType]}" />
+                       <setProperty propertyName="raiseHttpExceptionFlag">
+                               <simple resultType="java.lang.Boolean">false</simple>
+                       </setProperty>
+                       <to uri="direct:get-policy" />
+                       <when>
+                               <simple> ${header.CamelHttpResponseCode} != 200 </simple>
+                               <setProperty propertyName="atLeastOnePolicyNotFound">
+                                       <simple resultType="java.lang.Boolean">true</simple>
+                               </setProperty>
+                       </when>
+                       <to uri="direct:get-deployment-policy" />
+                       <when>
+                               <simple> ${header.CamelHttpResponseCode} != 200 </simple>
+                               <setProperty propertyName="atLeastOnePolicyNotDeployed">
+                                       <simple resultType="java.lang.Boolean">true</simple>
+                               </setProperty>
+                       </when>
+               </split>
+               <log
+                       loggingLevel="INFO"
+                       message="Processing all OPERATIONAL policies defined in loop ${exchangeProperty[loopObject].getName()}" />
+               <split>
+                       <simple>${exchangeProperty[loopObject].getOperationalPolicies()}
+                       </simple>
+                       <setProperty propertyName="policyName">
+                               <simple>${body.getName()}</simple>
+                       </setProperty>
+                       <setProperty propertyName="policyType">
+                               <simple>onap.policies.controlloop.Operational</simple>
+                       </setProperty>
+                       <setProperty propertyName="operationalPolicy">
+                               <simple>${body}</simple>
+                       </setProperty>
+                       <setBody>
+                               <constant>null</constant>
+                       </setBody>
+                       <log
+                               loggingLevel="INFO"
+                               message="Processing Micro Service Policy: ${exchangeProperty[policyName]} of type ${exchangeProperty[policyType]}" />
+                       <setProperty propertyName="raiseHttpExceptionFlag">
+                               <simple resultType="java.lang.Boolean">false</simple>
+                       </setProperty>
+                       <to uri="direct:get-policy" />
+                       <when>
+                               <simple> ${header.CamelHttpResponseCode} != 200 </simple>
+                               <setProperty propertyName="atLeastOnePolicyNotFound">
+                                       <simple resultType="java.lang.Boolean">true</simple>
+                               </setProperty>
+                       </when>
+                       <to uri="direct:get-deployment-policy" />
+                       <when>
+                               <simple> ${header.CamelHttpResponseCode} != 200 </simple>
+                               <setProperty propertyName="atLeastOnePolicyNotDeployed">
+                                       <simple resultType="java.lang.Boolean">true</simple>
+                               </setProperty>
+                       </when>
+
+                       <log
+                               loggingLevel="INFO"
+                               message="Processing all GUARD policies defined in loop ${exchangeProperty[loopObject].getName()}" />
+                       <split>
+                               <simple>${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()}
+                               </simple>
+                               <setProperty propertyName="policyName">
+                                       <simple>${body.getKey()}</simple>
+                               </setProperty>
+                               <setProperty propertyName="policyType">
+                                       <simple>onap.policies.controlloop.Guard</simple>
+                               </setProperty>
+                               <setBody>
+                                       <constant>null</constant>
+                               </setBody>
+                               <log
+                                       loggingLevel="INFO"
+                                       message="Processing Guard Policy: ${exchangeProperty[policyName]} of type ${exchangeProperty[policyType]}" />
+                               <setProperty propertyName="raiseHttpExceptionFlag">
+                                       <simple resultType="java.lang.Boolean">false</simple>
+                               </setProperty>
+                               <to uri="direct:get-policy" />
+                               <when>
+                                       <simple> ${header.CamelHttpResponseCode} != 200 </simple>
+                                       <setProperty propertyName="atLeastOnePolicyNotFound">
+                                               <simple resultType="java.lang.Boolean">true</simple>
+                                       </setProperty>
+                               </when>
+                               <to uri="direct:get-deployment-policy" />
+                               <when>
+                                       <simple> ${header.CamelHttpResponseCode} != 200 </simple>
+                                       <setProperty propertyName="atLeastOnePolicyNotDeployed">
+                                               <simple resultType="java.lang.Boolean">true</simple>
+                                       </setProperty>
+                               </when>
+                       </split>
+               </split>
+               <setProperty propertyName="policyState">
+                       <simple> ${exchangeProperty[policyComponent].computeState(*)}
+                       </simple>
+               </setProperty>
+               <log
+                       loggingLevel="INFO"
+                       message="Policy state set to: ${exchangeProperty[policyState].getStateName()}" />
+               <to
+                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLogForComponent('Policy state set to: ${exchangeProperty[policyState].getStateName()}','INFO','POLICY',${exchangeProperty[loopObject]})" />
+       </route>
+       <route id="update-dcae-status-for-loop">
+               <from uri="direct:update-dcae-status-for-loop" />
+               <log
+                       loggingLevel="INFO"
+                       message="Updating DCAE status for loop: ${exchangeProperty[loopObject].getName()}" />
+               <setProperty propertyName="dcaeComponent">
+                       <simple>${exchangeProperty[loopObject].getComponent('DCAE')}</simple>
+               </setProperty>
+               <when>
+                       <simple>${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()}
+                               != null
+                       </simple>
+                       <setProperty propertyName="raiseHttpExceptionFlag">
+                               <simple resultType="java.lang.Boolean">false</simple>
+                       </setProperty>
+                       <to uri="direct:get-dcae-deployment-status" />
+                       <when>
+                               <simple> ${header.CamelHttpResponseCode} == 200 </simple>
+                               <convertBodyTo type="java.lang.String" />
+                               <setProperty propertyName="dcaeResponse">
+                                       <method
+                                               ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                               method="convertDcaeResponse(${body})" />
+                               </setProperty>
+                       </when>
+               </when>
+
+               <setProperty propertyName="dcaeState">
+                       <simple> ${exchangeProperty[dcaeComponent].computeState(*)}
+                       </simple>
+               </setProperty>
+               <log
+                       loggingLevel="INFO"
+                       message="DCAE state set to: ${exchangeProperty[dcaeState].getStateName()} - DCAE message: ${exchangeProperty[dcaeResponse].getError()}" />
+               <to
+                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLogForComponent('DCAE state set to: ${exchangeProperty[dcaeState].getStateName()} - message: ${exchangeProperty[dcaeResponse].getError()}','INFO','DCAE',${exchangeProperty[loopObject]})" />
+
+       </route>
+       <route id="direct:update-loop-state">
+               <from uri="direct:update-loop-state" />
+               <log
+                       loggingLevel="INFO"
+                       message="Updating status for loop: ${exchangeProperty[loopObject].getName()}" />
+               <choice>
+                       <when>
+                                <simple>${exchangeProperty['dcaeState'].getStateName()} == 'BLUEPRINT_DEPLOYED' and ${exchangeProperty['policyState'].getStateName()} == 'NOT_SENT'</simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'DESIGN')" />
+                       </when>
+                       <when>
+                                <simple>${exchangeProperty['dcaeState'].getStateName()} == 'IN_ERROR' or ${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_INSTALLATION_FAILED'</simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'IN_ERROR')" />
+                       </when>
+                       <when>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_UNINSTALLATION_FAILED' or ${exchangeProperty['policyState'].getStateName()} == 'IN_ERROR'</simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'IN_ERROR')" />
+                       </when>
+                       <when>
+                                <simple>${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'</simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'RUNNING')" />
+                       </when>
+                       <when>
+                                <simple>${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and ${exchangeProperty['policyState'].getStateName()} == 'SENT'</simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'STOPPED')" />
+                       </when>
+                       <when>
+                                <simple>${exchangeProperty['dcaeState'].getStateName()} == 'BLUEPRINT_DEPLOYED' or ${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_UNINSTALLED_SUCCESSFULLY' and ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'</simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'SUBMITTED')" />
+                       </when>
+                       <when>
+                                <simple>${exchangeProperty['dcaeState'].getStateName()} == 'PROCESSING_MICROSERVICE_INSTALLATION' or ${exchangeProperty['dcaeState'].getStateName()} == 'PROCESSING_MICROSERVICE_UNINSTALLATION' and ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'</simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'WAITING')" />
+                       </when>
+                       <when>
+                                <simple>${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and ${exchangeProperty['policyState'].getStateName()} != 'NOT_SENT'</simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'DEPLOYED')" />
+                       </when>
+               </choice>
+               <log
+                       loggingLevel="INFO"
+                       message="New loop state is: ${exchangeProperty[loopObject].getLastComputedState().toString()}" />
+               <to
+                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('New loop state is: ${exchangeProperty[loopObject].getLastComputedState().toString()}','INFO',${exchangeProperty[loopObject]})" />
+
+       </route>
+</routes>
\ No newline at end of file
diff --git a/src/main/resources/clds/camel/routes/policy-flows.xml b/src/main/resources/clds/camel/routes/policy-flows.xml
new file mode 100644 (file)
index 0000000..537354f
--- /dev/null
@@ -0,0 +1,476 @@
+
+<routes xmlns="http://camel.apache.org/schema/spring">
+       <route id="get-policy">
+               <from uri="direct:get-policy" />
+               <doTry>
+                       <log
+                               loggingLevel="INFO"
+                               message="Getting Policy: ${exchangeProperty[policyName]}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Get Policy')" />
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>GET</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log
+                               loggingLevel="INFO"
+                               message="Endpoint to get policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/1.0.0"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[policyName]} GET
+                                               Policy status
+                                       </simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="get-deployment-policy">
+               <from uri="direct:get-deployment-policy" />
+               <doTry>
+                       <log
+                               loggingLevel="INFO"
+                               message="Getting the policy deployment in PDP: ${exchangeProperty[policyName]}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Getting the policy deployment in PDP')" />
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>GET</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log
+                               loggingLevel="INFO"
+                               message="Endpoint to get policy deployment status: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/deployed"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/deployed?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[policyName]} GET Policy deployment
+                                               status
+                                       </simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+       <route id="create-micro-service-policy">
+               <from uri="direct:create-micro-service-policy" />
+               <doTry>
+                       <log
+                               loggingLevel="INFO"
+                               message="Creating Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Micro Service Policy')" />
+                       <setBody>
+                               <simple>${exchangeProperty[microServicePolicy].createPolicyPayload()}
+                               </simple>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>POST</constant>
+                       </setHeader>
+                       <setHeader headerName="Content-Type">
+                               <constant>application/json</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log
+                               loggingLevel="INFO"
+                               message="Endpoint to create microservice policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[microServicePolicy].getName()} creation
+                                               status
+                                       </simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="delete-micro-service-policy">
+               <from uri="direct:delete-micro-service-policy" />
+               <doTry>
+                       <log
+                               loggingLevel="INFO"
+                               message="Deleting Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Micro Service Policy')" />
+                       <setBody>
+                               <constant>null</constant>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>DELETE</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log
+                               loggingLevel="INFO"
+                               message="Endpoint to delete microservice policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies/${exchangeProperty[microServicePolicy].getName()}/versions/1.0.0"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies/${exchangeProperty[microServicePolicy].getName()}/versions/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;deleteWithBody=false&amp;mapHttpMessageBody=false&amp;mapHttpMessageFormUrlEncodedBody=false&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[microServicePolicy].getName()} removal
+                                               status
+                                       </simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="create-operational-policy">
+               <from uri="direct:create-operational-policy" />
+               <doTry>
+                       <log
+                               loggingLevel="INFO"
+                               message="Creating Operational Policy: ${exchangeProperty[operationalPolicy].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Operational Policy')" />
+                       <setBody>
+                               <simple>${exchangeProperty[operationalPolicy].createPolicyPayload()}
+                               </simple>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>POST</constant>
+                       </setHeader>
+                       <setHeader headerName="Content-Type">
+                               <constant>application/json</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log
+                               loggingLevel="INFO"
+                               message="Endpoint to create operational policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[operationalPolicy].getName()} creation
+                                               status
+                                       </simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="delete-operational-policy">
+               <from uri="direct:delete-operational-policy" />
+               <doTry>
+                       <log
+                               loggingLevel="INFO"
+                               message="Deleting Operational Policy: ${exchangeProperty[operationalPolicy].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Operational Policy')" />
+                       <setBody>
+                               <constant>null</constant>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>DELETE</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log
+                               loggingLevel="INFO"
+                               message="Endpoint to delete operational policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicy].getName()}/versions/1"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicy].getName()}/versions/1?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;deleteWithBody=false&amp;mapHttpMessageBody=false&amp;mapHttpMessageFormUrlEncodedBody=false&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[operationalPolicy].getName()} removal
+                                               status
+                                       </simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="create-guard-policy">
+               <from uri="direct:create-guard-policy" />
+               <doTry>
+                       <log
+                               loggingLevel="INFO"
+                               message="Creating Guard Policy: ${exchangeProperty[guardPolicy].getKey()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Guard Policy')" />
+                       <setBody>
+                               <simple>${exchangeProperty[guardPolicy].getValue()}
+                               </simple>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>POST</constant>
+                       </setHeader>
+                       <setHeader headerName="Content-Type">
+                               <constant>application/json</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log
+                               loggingLevel="INFO"
+                               message="Endpoint to create guard policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[guardPolicy].getKey()} creation status
+                                       </simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="delete-guard-policy">
+               <from uri="direct:delete-guard-policy" />
+               <doTry>
+                       <log
+                               loggingLevel="INFO"
+                               message="Deleting Guard Policy: ${exchangeProperty[guardPolicy].getKey()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Guard Policy')" />
+                       <setBody>
+                               <constant>null</constant>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>DELETE</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log
+                               loggingLevel="INFO"
+                               message="Endpoint to delete guard policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/${exchangeProperty[guardPolicy].getKey()}/versions/1"></log>
+                       <toD
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/${exchangeProperty[guardPolicy].getKey()}/versions/1?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;deleteWithBody=false&amp;mapHttpMessageBody=false&amp;mapHttpMessageFormUrlEncodedBody=false&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[guardPolicy].getKey()} removal status
+                                       </simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="add-all-to-active-pdp-group">
+               <from uri="direct:add-all-to-active-pdp-group" />
+               <doTry>
+                       <log
+                               loggingLevel="INFO"
+                               message="Adding loop policies to PDP Group: ${exchangeProperty[loopObject].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Add policies to PDP group')" />
+                       <setBody>
+                               <simple>${exchangeProperty[loopObject].getComponent("POLICY").createPoliciesPayloadPdpGroup(exchangeProperty[loopObject])}
+                               </simple>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>POST</constant>
+                       </setHeader>
+                       <setHeader headerName="Content-Type">
+                               <constant>application/json</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log
+                               loggingLevel="INFO"
+                               message="Endpoint to add policies to PDP Group: {{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/policies"></log>
+                       <toD
+                               uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/policies?bridgeEndpoint=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;useSystemProperties=true&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>PDP Group push ALL status</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+
+       <route id="remove-all-policy-from-active-pdp-group">
+               <from uri="direct:remove-all-policy-from-active-pdp-group" />
+               <doTry>
+                       <log
+                               loggingLevel="INFO"
+                               message="Removing policies from active PDP group for loop: ${exchangeProperty[loopObject].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Removing policies PDP group')" />
+                       <split>
+                               <simple>${exchangeProperty[loopObject].getComponent("POLICY").listPolicyNamesPdpGroup(exchangeProperty[loopObject])}
+                               </simple>
+                               <setProperty propertyName="policyName">
+                                       <simple>${body}</simple>
+                               </setProperty>
+                               <setBody>
+                                       <constant>null</constant>
+                               </setBody>
+                               <setHeader headerName="CamelHttpMethod">
+                                       <constant>DELETE</constant>
+                               </setHeader>
+                               <setHeader headerName="X-ONAP-RequestID">
+                                       <simple>${exchangeProperty[X-ONAP-RequestID]}
+                                       </simple>
+                               </setHeader>
+                               <setHeader headerName="X-ONAP-InvocationID">
+                                       <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                                       </simple>
+                               </setHeader>
+                               <setHeader headerName="X-ONAP-PartnerName">
+                                       <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                                       </simple>
+                               </setHeader>
+                               <log
+                                       loggingLevel="INFO"
+                                       message="Endpoint to delete policy from PDP Group: {{clamp.config.policy.pap.url}}/pdps/policies/${exchangeProperty[policyName]}/versions/1.0.0"></log>
+                               <toD
+                                       uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/policies/${exchangeProperty[policyName]}/versions/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>${exchangeProperty[policyName]} PDP Group removal status
+                                       </simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </split>
+                       <doCatch>
+                               <exception>java.lang.Exception</exception>
+                               <handled>
+                                       <constant>false</constant>
+                               </handled>
+                               <setProperty propertyName="logMessage">
+                                       <simple>PDP Group removal, Error reported: ${exception}</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doCatch>
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                       </doFinally>
+               </doTry>
+       </route>
+</routes>
\ No newline at end of file
diff --git a/src/main/resources/clds/camel/routes/utils-flows.xml b/src/main/resources/clds/camel/routes/utils-flows.xml
new file mode 100644 (file)
index 0000000..adf843f
--- /dev/null
@@ -0,0 +1,17 @@
+<routes xmlns="http://camel.apache.org/schema/spring">
+       <route id="reset-raise-http-exception-flag">
+               <from uri="direct:reset-raise-http-exception-flag" />
+               <setProperty propertyName="raiseHttpExceptionFlag">
+                       <simple resultType="java.lang.Boolean">true</simple>
+               </setProperty>
+       </route>
+
+       <route id="dump-loop-log-http-response">
+               <from uri="direct:dump-loop-log-http-response" />
+               <log
+                       loggingLevel="INFO"
+                       message="${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}" />
+               <to
+                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}','INFO',${exchangeProperty[loopObject]})" />
+       </route>
+</routes>
\ No newline at end of file
index bc8ebb9..4c49671 100644 (file)
@@ -40,7 +40,7 @@
                        <level>INFO</level>
                </filter>
                <encoder>
-                       <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{1024} - %msg%n
+                       <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{1024} - %msg%n
                        </pattern>
                </encoder>
        </appender>
@@ -76,7 +76,7 @@
                <file>${logDirectory}/debug.log</file>
                <append>true</append>
                <encoder>
-                       <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{1024} - %msg%n
+                       <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{1024} - %msg%n
                        </pattern>
                </encoder>
                <rollingPolicy
index 8ebd627..d340420 100644 (file)
@@ -55,10 +55,10 @@ public class CldsReferencePropertiesItCase {
      */
     @Test
     public void testGetStringValue() {
-        assertEquals(refProp.getStringValue("policy.onap.name"), "DCAE");
-        assertEquals(refProp.getStringValue("policy.ms.policyNamePrefix", ""), "Config_MS_");
-        assertEquals(refProp.getStringValue("policy.ms.policyNamePrefix", "testos"), "Config_MS_");
-        assertEquals(refProp.getStringValue("policy.ms", "policyNamePrefix"), "Config_MS_");
+        assertEquals("DCAE", refProp.getStringValue("policy.onap.name"));
+        assertEquals("Config_MS_", refProp.getStringValue("policy.ms.policyNamePrefix", ""));
+        assertEquals("Config_MS_", refProp.getStringValue("policy.ms.policyNamePrefix", "testos"));
+        assertEquals("Config_MS_", refProp.getStringValue("policy.ms", "policyNamePrefix"));
         assertNull(refProp.getStringValue("does.not.exist"));
     }
 
@@ -70,7 +70,7 @@ public class CldsReferencePropertiesItCase {
         //then
         assertNotNull(root);
         assertTrue(root.isJsonObject());
-        assertEquals(root.getAsJsonObject().get("DC1").getAsString(), "Data Center 1");
+        assertEquals("Data Center 1", root.getAsJsonObject().get("DC1").getAsString());
     }
 
     @Test
@@ -81,7 +81,7 @@ public class CldsReferencePropertiesItCase {
         //then
         assertNotNull(root);
         assertTrue(root.isJsonObject());
-        assertEquals(root.getAsJsonObject().get("DC1").getAsString(), "Data Center 1");
+        assertEquals("Data Center 1", root.getAsJsonObject().get("DC1").getAsString());
     }
 
     @Test
@@ -113,9 +113,9 @@ public class CldsReferencePropertiesItCase {
     @Test
     public void testGetStringList() {
         List<String> profileList = refProp.getStringList("policy.pdpUrl1", ",");
-        assertTrue(profileList.size() == 3);
+        assertEquals(3, profileList.size());
         assertTrue(profileList.get(0).trim().startsWith("http://localhost:"));
-        assertTrue(profileList.get(1).trim().equals("testpdp"));
-        assertTrue(profileList.get(2).trim().equals("alpha123"));
+        assertEquals("testpdp", profileList.get(1).trim());
+        assertEquals("alpha123", profileList.get(2).trim());
     }
 }
diff --git a/src/test/java/org/onap/clamp/clds/model/DcaeEventTest.java b/src/test/java/org/onap/clamp/clds/model/DcaeEventTest.java
new file mode 100644 (file)
index 0000000..315e656
--- /dev/null
@@ -0,0 +1,74 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 Samsung. 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 static org.junit.Assert.assertEquals;
+import org.junit.Test;
+import javax.ws.rs.BadRequestException;
+import java.util.Arrays;
+
+public class DcaeEventTest {
+
+    @Test
+    public void testGetCldsActionId() {
+        //given
+        DcaeEvent dcaeEvent = new DcaeEvent();
+        dcaeEvent.setEvent(DcaeEvent.EVENT_CREATED);
+        dcaeEvent.setResourceUUID("1");
+        dcaeEvent.setServiceUUID("2");
+
+        //when
+        String cldsAction = dcaeEvent.getCldsActionCd();
+        dcaeEvent.setInstances(Arrays.asList(new CldsModelInstance()));
+        //then
+        assertEquals(CldsEvent.ACTION_CREATE, cldsAction);
+
+        //when
+        dcaeEvent.setEvent(DcaeEvent.EVENT_DEPLOYMENT);
+        //then
+        assertEquals(CldsEvent.ACTION_DEPLOY, dcaeEvent.getCldsActionCd());
+
+        //when
+        dcaeEvent.setInstances(null);
+        //then
+        assertEquals(CldsEvent.ACTION_DEPLOY, dcaeEvent.getCldsActionCd());
+
+        //when
+        dcaeEvent.setEvent(DcaeEvent.EVENT_UNDEPLOYMENT);
+        //then
+        assertEquals(CldsEvent.ACTION_UNDEPLOY, dcaeEvent.getCldsActionCd());
+
+    }
+
+    @Test(expected = BadRequestException.class)
+    public void shouldReturnBadRequestException() {
+        //given
+        DcaeEvent dcaeEvent = new DcaeEvent();
+        dcaeEvent.setResourceUUID("1");
+        dcaeEvent.setServiceUUID("2");
+        //when
+        dcaeEvent.setEvent("BadEvent");
+        //then
+        dcaeEvent.getCldsActionCd();
+    }
+}
diff --git a/src/test/java/org/onap/clamp/clds/util/LoggingUtilsTest.java b/src/test/java/org/onap/clamp/clds/util/LoggingUtilsTest.java
new file mode 100644 (file)
index 0000000..7e2da4d
--- /dev/null
@@ -0,0 +1,148 @@
+/*-
+* ============LICENSE_START=======================================================
+* ONAP CLAMP
+* Copyright (C) 2019 Samsung. 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 static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
+import java.util.Map;
+
+import javax.net.ssl.HttpsURLConnection;
+import javax.servlet.http.HttpServletRequest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.slf4j.MDC;
+import org.slf4j.event.Level;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.UserDetails;
+
+/**
+ * Test Logging Utils.
+ */
+@RunWith(MockitoJUnitRunner.class)
+public class LoggingUtilsTest {
+
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(LoggingUtilsTest.class);
+
+    private static final String SERVICE_NAME =  "LogginUtilsTest: Test Entering method";
+
+    private LoggingUtils util;
+
+    @Before
+    public void setup() {
+        this.util = new LoggingUtils(logger);
+    }
+
+    @Test
+    public void testEnteringLoggingUtils() {
+        // given
+        final String userName = "test";
+
+        HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+
+        UserDetails userDetails = Mockito.mock(UserDetails.class);
+        Mockito.when(userDetails.getUsername()).thenReturn(userName);
+
+        Authentication localAuth = Mockito.mock(Authentication.class);
+        Mockito.when(localAuth.getPrincipal()).thenReturn(userDetails);
+
+        SecurityContext securityContext = Mockito.mock(SecurityContext.class);
+        Mockito.when(securityContext.getAuthentication()).thenReturn(localAuth);
+        SecurityContextHolder.setContext(securityContext);
+
+        // when
+        util.entering(request, SERVICE_NAME);
+
+        // then
+        String[] keys = { ONAPLogConstants.MDCs.PARTNER_NAME,
+                ONAPLogConstants.MDCs.ENTRY_TIMESTAMP,
+                ONAPLogConstants.MDCs.REQUEST_ID,
+                ONAPLogConstants.MDCs.INVOCATION_ID,
+                ONAPLogConstants.MDCs.CLIENT_IP_ADDRESS,
+                ONAPLogConstants.MDCs.SERVER_FQDN,
+                ONAPLogConstants.MDCs.INSTANCE_UUID,
+                ONAPLogConstants.MDCs.SERVICE_NAME
+        };
+        Map<String, String> mdc = MDC.getMDCAdapter().getCopyOfContextMap();
+
+        assertTrue(checkMapKeys(mdc, keys));
+        assertEquals(userName,
+               mdc.get(ONAPLogConstants.MDCs.PARTNER_NAME));
+    }
+
+    @Test
+    public void testExistingLoggingUtils() {
+        // given
+        MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP,
+                ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT));
+
+        // when
+        util.exiting("200", SERVICE_NAME, Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
+
+        // then
+        Map<String, String> mdc = MDC.getMDCAdapter().getCopyOfContextMap();
+        assertNull(mdc);
+    }
+
+    @Test
+    public void testInvokeTestUtils() {
+        // given
+        final String targetEntity = "LoggingUtilsTest";
+        final String targetServiceName = "testInvokeTestUtils";
+        HttpsURLConnection secureConnection = Mockito.mock(HttpsURLConnection.class);
+
+        // when
+        secureConnection = util.invokeHttps(secureConnection, targetEntity, targetServiceName);
+
+        // then
+        assertNotNull(secureConnection);
+        String[] keys = {ONAPLogConstants.MDCs.TARGET_ENTITY,
+                ONAPLogConstants.MDCs.TARGET_SERVICE_NAME,
+                ONAPLogConstants.MDCs.INVOCATIONID_OUT,
+                ONAPLogConstants.MDCs.INVOKE_TIMESTAMP
+        };
+        Map<String, String> mdc = MDC.getMDCAdapter().getCopyOfContextMap();
+
+        assertTrue(checkMapKeys(mdc, keys));
+        assertEquals(targetEntity, mdc.get(ONAPLogConstants.MDCs.TARGET_ENTITY));
+        assertEquals(targetServiceName, mdc.get(ONAPLogConstants.MDCs.TARGET_SERVICE_NAME));
+    }
+
+    private boolean checkMapKeys(Map map, String[] keys) {
+        return Arrays.stream(keys).allMatch(key -> map.get(key) != null);
+    }
+}
index d451b06..773332d 100644 (file)
@@ -223,7 +223,8 @@ public class CsarInstallerItCase {
 
     @Test(expected = SdcArtifactInstallerException.class)
     @Transactional
-    public void shouldThrowSdcArtifactInstallerException() throws SdcArtifactInstallerException, SdcToscaParserException, IOException, InterruptedException, PolicyModelException {
+    public void shouldThrowSdcArtifactInstallerException() throws SdcArtifactInstallerException,
+        SdcToscaParserException, IOException, InterruptedException, PolicyModelException {
         String generatedName = RandomStringUtils.randomAlphanumeric(5);
         CsarHandler csarHandler = buildFakeCsarHandler(generatedName);
         Mockito.when(csarHandler.getMapOfBlueprints()).thenThrow(IOException.class);
diff --git a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java
new file mode 100644 (file)
index 0000000..0a3c1e1
--- /dev/null
@@ -0,0 +1,93 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 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.loop;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+
+import java.io.IOException;
+import java.util.HashSet;
+
+import org.junit.Test;
+import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse;
+import org.onap.clamp.loop.components.external.DcaeComponent;
+import org.onap.clamp.policy.microservice.MicroServicePolicy;
+
+public class DcaeComponentTest {
+
+    private Loop createTestLoop() {
+        String yaml = "imports:\n" + "  - \"http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\"\n"
+            + "node_templates:\n" + "  docker_service_host:\n" + "    type: dcae.nodes.SelectedDockerHost";
+
+        Loop loopTest = new Loop("ControlLoopTest", yaml, "<xml></xml>");
+        loopTest.setGlobalPropertiesJson(
+            new Gson().fromJson("{\"dcaeDeployParameters\":" + "{\"policy_id\": \"name\"}}", JsonObject.class));
+        loopTest.setLastComputedState(LoopState.DESIGN);
+        loopTest.setDcaeDeploymentId("123456789");
+        loopTest.setDcaeDeploymentStatusUrl("http4://localhost:8085");
+        loopTest.setDcaeBlueprintId("UUID-blueprint");
+
+        MicroServicePolicy microServicePolicy = new MicroServicePolicy("configPolicyTest", "",
+            "tosca_definitions_version: tosca_simple_yaml_1_0_0", true,
+            new Gson().fromJson("{\"configtype\":\"json\"}", JsonObject.class), new HashSet<>());
+        microServicePolicy.setProperties(new Gson().fromJson("{\"param1\":\"value1\"}", JsonObject.class));
+
+        loopTest.addMicroServicePolicy(microServicePolicy);
+        return loopTest;
+    }
+
+    @Test
+    public void convertDcaeResponseTest() throws IOException {
+        String dcaeFakeResponse = "{'requestId':'testId','operationType':'install','status':'state','error':'errorMessage', 'links':{'self':'selfUrl','uninstall':'uninstallUrl'}}";
+        DcaeOperationStatusResponse responseObject = DcaeComponent.convertDcaeResponse(dcaeFakeResponse);
+        assertThat(responseObject.getRequestId()).isEqualTo("testId");
+        assertThat(responseObject.getOperationType()).isEqualTo("install");
+        assertThat(responseObject.getStatus()).isEqualTo("state");
+        assertThat(responseObject.getError()).isEqualTo("errorMessage");
+        assertThat(responseObject.getLinks()).isNotNull();
+        assertThat(responseObject.getLinks().getSelf()).isEqualTo("selfUrl");
+        assertThat(responseObject.getLinks().getUninstall()).isEqualTo("uninstallUrl");
+
+        assertThat(responseObject.getLinks().getStatus()).isNull();
+    }
+
+    @Test
+    public void testGetDeployPayload() throws IOException {
+        Loop loop = this.createTestLoop();
+        String deploymentPayload = DcaeComponent.getDeployPayload(loop);
+        String expectedPayload = "{\"serviceTypeId\":\"UUID-blueprint\",\"inputs\":{\"policy_id\":\"name\"}}";
+        assertThat(deploymentPayload).isEqualTo(expectedPayload);
+    }
+
+    @Test
+    public void testGetUndeployPayload() throws IOException {
+        Loop loop = this.createTestLoop();
+        String unDeploymentPayload = DcaeComponent.getUndeployPayload(loop);
+        String expectedPayload = "{\"serviceTypeId\":\"UUID-blueprint\"}";
+        assertThat(unDeploymentPayload).isEqualTo(expectedPayload);
+    }
+
+}
diff --git a/src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java b/src/test/java/org/onap/clamp/loop/LoopOperationTestItCase.java
deleted file mode 100644 (file)
index a2c97e0..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2019 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.loop;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonObject;
-
-import java.io.IOException;
-import java.util.HashSet;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.Message;
-import org.json.simple.parser.ParseException;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-import org.onap.clamp.clds.Application;
-import org.onap.clamp.loop.LoopOperation.TempLoopState;
-import org.onap.clamp.policy.microservice.MicroServicePolicy;
-import org.onap.clamp.policy.operational.OperationalPolicy;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = Application.class)
-public class LoopOperationTestItCase {
-
-    private Gson gson = new GsonBuilder().setPrettyPrinting().excludeFieldsWithoutExposeAnnotation().create();
-    @Autowired
-    LoopService loopService;
-
-    private Loop createTestLoop() {
-        String yaml = "imports:\n" + "  - \"http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\"\n"
-            + "node_templates:\n" + "  docker_service_host:\n" + "    type: dcae.nodes.SelectedDockerHost";
-
-        Loop loopTest = new Loop("ControlLoopTest", yaml, "<xml></xml>");
-        loopTest.setGlobalPropertiesJson(
-            new Gson().fromJson("{\"dcaeDeployParameters\":" + "{\"policy_id\": \"name\"}}", JsonObject.class));
-        loopTest.setLastComputedState(LoopState.DESIGN);
-        loopTest.setDcaeDeploymentId("123456789");
-        loopTest.setDcaeDeploymentStatusUrl("http4://localhost:8085");
-        loopTest.setDcaeBlueprintId("UUID-blueprint");
-
-        MicroServicePolicy microServicePolicy = new MicroServicePolicy("configPolicyTest", "",
-            "tosca_definitions_version: tosca_simple_yaml_1_0_0", true,
-            gson.fromJson("{\"configtype\":\"json\"}", JsonObject.class), new HashSet<>());
-        microServicePolicy.setProperties(new Gson().fromJson("{\"param1\":\"value1\"}", JsonObject.class));
-
-        loopTest.addMicroServicePolicy(microServicePolicy);
-        return loopTest;
-    }
-
-    @Test
-    public void testAnalysePolicyResponse() {
-        LoopOperation loopOp = new LoopOperation(loopService);
-        String status1 = loopOp.analysePolicyResponse(200);
-        String status2 = loopOp.analysePolicyResponse(404);
-        String status3 = loopOp.analysePolicyResponse(500);
-        String status4 = loopOp.analysePolicyResponse(503);
-
-        // then
-        assertThat(status1).isEqualTo("SUBMITTED");
-        assertThat(status2).isEqualTo("NOT_SUBMITTED");
-        assertThat(status3).isEqualTo("IN_ERROR");
-        assertThat(status4).isEqualTo("IN_ERROR");
-    }
-
-    @Test
-    public void testGetOperationalPolicyName() {
-        LoopOperation loopOp = new LoopOperation(loopService);
-        Loop loop = this.createTestLoop();
-        String opName1 = loopOp.getOperationalPolicyName(loop);
-        assertThat(opName1).isNull();
-
-        OperationalPolicy opPolicy1 = new OperationalPolicy("OperationalPolicyTest1", null,
-            gson.fromJson("{\"type\":\"Operational\"}", JsonObject.class));
-        loop.addOperationalPolicy(opPolicy1);
-        String opName2 = loopOp.getOperationalPolicyName(loop);
-        assertThat(opName2).isEqualTo("OperationalPolicyTest1");
-    }
-
-    @Test
-    public void testAnalyseDcaeResponse() throws ParseException {
-        LoopOperation loopOp = new LoopOperation(loopService);
-        String dcaeStatus1 = loopOp.analyseDcaeResponse(null, null);
-        assertThat(dcaeStatus1).isEqualTo("NOT_DEPLOYED");
-
-        String dcaeStatus2 = loopOp.analyseDcaeResponse(null, 500);
-        assertThat(dcaeStatus2).isEqualTo("IN_ERROR");
-
-        String dcaeStatus3 = loopOp.analyseDcaeResponse(null, 404);
-        assertThat(dcaeStatus3).isEqualTo("NOT_DEPLOYED");
-
-        Exchange camelExchange = Mockito.mock(Exchange.class);
-        Message mockMessage = Mockito.mock(Message.class);
-        Mockito.when(camelExchange.getIn()).thenReturn(mockMessage);
-        Mockito.when(mockMessage.getBody(String.class))
-            .thenReturn("{\"operationType\":\"install\",\"status\":\"succeeded\"}");
-        String dcaeStatus4 = loopOp.analyseDcaeResponse(camelExchange, 200);
-        assertThat(dcaeStatus4).isEqualTo("DEPLOYED");
-
-        Mockito.when(mockMessage.getBody(String.class))
-            .thenReturn("{\"operationType\":\"install\",\"status\":\"processing\"}");
-        String dcaeStatus5 = loopOp.analyseDcaeResponse(camelExchange, 200);
-        assertThat(dcaeStatus5).isEqualTo("PROCESSING");
-
-        Mockito.when(mockMessage.getBody(String.class))
-            .thenReturn("{\"operationType\":\"install\",\"status\":\"failed\"}");
-        String dcaeStatus6 = loopOp.analyseDcaeResponse(camelExchange, 200);
-        assertThat(dcaeStatus6).isEqualTo("IN_ERROR");
-
-        Mockito.when(mockMessage.getBody(String.class))
-            .thenReturn("{\"operationType\":\"uninstall\",\"status\":\"succeeded\"}");
-        String dcaeStatus7 = loopOp.analyseDcaeResponse(camelExchange, 200);
-        assertThat(dcaeStatus7).isEqualTo("NOT_DEPLOYED");
-
-        Mockito.when(mockMessage.getBody(String.class))
-            .thenReturn("{\"operationType\":\"uninstall\",\"status\":\"processing\"}");
-        String dcaeStatus8 = loopOp.analyseDcaeResponse(camelExchange, 200);
-        assertThat(dcaeStatus8).isEqualTo("PROCESSING");
-
-        Mockito.when(mockMessage.getBody(String.class))
-            .thenReturn("{\"operationType\":\"uninstall\",\"status\":\"failed\"}");
-        String dcaeStatus9 = loopOp.analyseDcaeResponse(camelExchange, 200);
-        assertThat(dcaeStatus9).isEqualTo("IN_ERROR");
-    }
-
-    @Test
-    public void testUpdateLoopStatus() {
-        LoopOperation loopOp = new LoopOperation(loopService);
-        Loop loop = this.createTestLoop();
-        loopService.saveOrUpdateLoop(loop);
-        LoopState newState1 = loopOp.updateLoopStatus(loop, TempLoopState.SUBMITTED, TempLoopState.DEPLOYED);
-        LoopState dbState1 = loopService.getLoop(loop.getName()).getLastComputedState();
-        assertThat(newState1).isEqualTo(LoopState.DEPLOYED);
-        assertThat(dbState1).isEqualTo(LoopState.DEPLOYED);
-
-        LoopState newState2 = loopOp.updateLoopStatus(loop, TempLoopState.SUBMITTED, TempLoopState.NOT_DEPLOYED);
-        LoopState dbState2 = loopService.getLoop(loop.getName()).getLastComputedState();
-        assertThat(newState2).isEqualTo(LoopState.SUBMITTED);
-        assertThat(dbState2).isEqualTo(LoopState.SUBMITTED);
-
-        LoopState newState3 = loopOp.updateLoopStatus(loop, TempLoopState.SUBMITTED, TempLoopState.PROCESSING);
-        assertThat(newState3).isEqualTo(LoopState.WAITING);
-
-        LoopState newState4 = loopOp.updateLoopStatus(loop, TempLoopState.SUBMITTED, TempLoopState.IN_ERROR);
-        assertThat(newState4).isEqualTo(LoopState.IN_ERROR);
-
-        LoopState newState5 = loopOp.updateLoopStatus(loop, TempLoopState.NOT_SUBMITTED, TempLoopState.DEPLOYED);
-        assertThat(newState5).isEqualTo(LoopState.IN_ERROR);
-
-        LoopState newState6 = loopOp.updateLoopStatus(loop, TempLoopState.NOT_SUBMITTED, TempLoopState.PROCESSING);
-        assertThat(newState6).isEqualTo(LoopState.IN_ERROR);
-
-        LoopState newState7 = loopOp.updateLoopStatus(loop, TempLoopState.NOT_SUBMITTED, TempLoopState.NOT_DEPLOYED);
-        assertThat(newState7).isEqualTo(LoopState.DESIGN);
-
-        LoopState newState8 = loopOp.updateLoopStatus(loop, TempLoopState.IN_ERROR, TempLoopState.DEPLOYED);
-        assertThat(newState8).isEqualTo(LoopState.IN_ERROR);
-
-        LoopState newState9 = loopOp.updateLoopStatus(loop, TempLoopState.IN_ERROR, TempLoopState.NOT_DEPLOYED);
-        assertThat(newState9).isEqualTo(LoopState.IN_ERROR);
-
-        LoopState newState10 = loopOp.updateLoopStatus(loop, TempLoopState.IN_ERROR, TempLoopState.PROCESSING);
-        assertThat(newState10).isEqualTo(LoopState.IN_ERROR);
-
-        LoopState newState11 = loopOp.updateLoopStatus(loop, TempLoopState.IN_ERROR, TempLoopState.IN_ERROR);
-        assertThat(newState11).isEqualTo(LoopState.IN_ERROR);
-    }
-
-    @Test
-    public void testUpdateLoopInfo() throws ParseException {
-        Loop loop = this.createTestLoop();
-        loopService.saveOrUpdateLoop(loop);
-
-        Exchange camelExchange = Mockito.mock(Exchange.class);
-        Message mockMessage = Mockito.mock(Message.class);
-        Mockito.when(camelExchange.getIn()).thenReturn(mockMessage);
-        Mockito.when(mockMessage.getBody(String.class))
-            .thenReturn("{\"links\":{\"status\":\"http://testhost/dcae-operationstatus\",\"test2\":\"test2\"}}");
-
-        LoopOperation loopOp = new LoopOperation(loopService);
-        loopOp.updateLoopInfo(camelExchange, loop, "testNewId");
-
-        Loop newLoop = loopService.getLoop(loop.getName());
-        String newDeployId = newLoop.getDcaeDeploymentId();
-        String newDeploymentStatusUrl = newLoop.getDcaeDeploymentStatusUrl();
-
-        assertThat(newDeployId).isEqualTo("testNewId");
-        assertThat(newDeploymentStatusUrl).isEqualTo("http4://testhost/dcae-operationstatus");
-    }
-
-    @Test
-    public void testGetDeploymentId() {
-        Loop loop = this.createTestLoop();
-        LoopOperation loopOp = new LoopOperation(loopService);
-        String deploymentId1 = loopOp.getDeploymentId(loop);
-        assertThat(deploymentId1).isEqualTo("123456789");
-
-        loop.setDcaeDeploymentId(null);
-        String deploymentId2 = loopOp.getDeploymentId(loop);
-        assertThat(deploymentId2).startsWith("CLAMP_");
-
-        loop.setDcaeDeploymentId("");
-        String deploymentId3 = loopOp.getDeploymentId(loop);
-        assertThat(deploymentId3).startsWith("CLAMP_");
-        assertThat(deploymentId3).isNotEqualTo(deploymentId2);
-    }
-
-    @Test
-    public void testGetDeployPayload() throws IOException {
-        Loop loop = this.createTestLoop();
-        LoopOperation loopOp = new LoopOperation(loopService);
-        String deploymentPayload = loopOp.getDeployPayload(loop);
-
-        String expectedPayload = "{\"serviceTypeId\":\"UUID-blueprint\",\"inputs\":{\"policy_id\":\"name\"}}";
-        assertThat(deploymentPayload).isEqualTo(expectedPayload);
-    }
-}
\ No newline at end of file
index 1a3e3e3..78e0d2e 100644 (file)
@@ -94,7 +94,7 @@ public class LoopRepositoriesItCase {
     }
 
     private LoopLog getLoopLog(LogType type, String message, Loop loop) {
-        return new LoopLog(message, type, loop);
+        return new LoopLog(message, type, "CLAMP", loop);
     }
 
     @Test
@@ -118,7 +118,7 @@ public class LoopRepositoriesItCase {
         // Now set the ID in the previous model so that we can compare the objects
         loopLog.setId(((LoopLog) loopInDb.getLoopLogs().toArray()[0]).getId());
 
-        assertThat(loopInDb).isEqualToComparingFieldByField(loopTest);
+        assertThat(loopInDb).isEqualToIgnoringGivenFields(loopTest, "components");
         assertThat(loopRepository.existsById(loopTest.getName())).isEqualTo(true);
         assertThat(operationalPolicyService.isExisting(opPolicy.getName())).isEqualTo(true);
         assertThat(microServicePolicyService.isExisting(microServicePolicy.getName())).isEqualTo(true);
@@ -126,7 +126,7 @@ public class LoopRepositoriesItCase {
 
         // Now attempt to read from database
         Loop loopInDbRetrieved = loopRepository.findById(loopTest.getName()).get();
-        assertThat(loopInDbRetrieved).isEqualToComparingFieldByField(loopTest);
+        assertThat(loopInDbRetrieved).isEqualToIgnoringGivenFields(loopTest, "components");
         assertThat((LoopLog) loopInDbRetrieved.getLoopLogs().toArray()[0]).isEqualToComparingFieldByField(loopLog);
         assertThat((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0])
             .isEqualToComparingFieldByField(opPolicy);
index c4254ec..8add1a7 100644 (file)
@@ -296,7 +296,7 @@ public class LoopServiceTestItCase {
         saveTestLoopToDb();
         // Add log
         Loop loop = loopsRepository.findById(EXAMPLE_LOOP_NAME).orElse(null);
-        loop.addLog(new LoopLog("test", LogType.INFO, loop));
+        loop.addLog(new LoopLog("test", LogType.INFO, "CLAMP", loop));
         loop = loopService.saveOrUpdateLoop(loop);
         // Add op policy
         OperationalPolicy operationalPolicy = new OperationalPolicy("opPolicy", null,
index 144d34a..c9350c6 100644 (file)
@@ -38,6 +38,7 @@ import java.util.Random;
 import org.junit.Test;
 import org.onap.clamp.clds.util.JsonUtils;
 import org.onap.clamp.clds.util.ResourceFileUtil;
+import org.onap.clamp.loop.components.external.PolicyComponent;
 import org.onap.clamp.loop.log.LogType;
 import org.onap.clamp.loop.log.LoopLog;
 import org.onap.clamp.policy.microservice.MicroServicePolicy;
@@ -73,7 +74,7 @@ public class LoopToJsonTest {
     }
 
     private LoopLog getLoopLog(LogType type, String message, Loop loop) {
-        LoopLog log = new LoopLog(message, type, loop);
+        LoopLog log = new LoopLog(message, type, "CLAMP", loop);
         log.setId(Long.valueOf(new Random().nextInt()));
         return log;
     }
@@ -97,8 +98,12 @@ public class LoopToJsonTest {
         System.out.println(jsonSerialized);
         Loop loopTestDeserialized = JsonUtils.GSON_JPA_MODEL.fromJson(jsonSerialized, Loop.class);
         assertNotNull(loopTestDeserialized);
-        assertThat(loopTestDeserialized).isEqualToIgnoringGivenFields(loopTest, "svgRepresentation", "blueprint");
-
+        assertThat(loopTestDeserialized).isEqualToIgnoringGivenFields(loopTest, "svgRepresentation", "blueprint",
+            "components");
+        assertThat(loopTestDeserialized.getComponent("DCAE").getState())
+            .isEqualToComparingFieldByField(loopTest.getComponent("DCAE").getState());
+        assertThat(loopTestDeserialized.getComponent("POLICY").getState())
+            .isEqualToComparingFieldByField(loopTest.getComponent("POLICY").getState());
         // svg and blueprint not exposed so wont be deserialized
         assertThat(loopTestDeserialized.getBlueprint()).isEqualTo(null);
         assertThat(loopTestDeserialized.getSvgRepresentation()).isEqualTo(null);
@@ -123,6 +128,6 @@ public class LoopToJsonTest {
         loopTest.addMicroServicePolicy(microServicePolicy);
 
         JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/pdp-group-policy-payload.json"),
-            loopTest.createPoliciesPayloadPdpGroup(), false);
+            PolicyComponent.createPoliciesPayloadPdpGroup(loopTest), false);
     }
 }
index fbbc6be..e719996 100644 (file)
@@ -30,16 +30,4 @@ describe('Property controller tests', function() {
        test('getMsUINotExist', () => {
                  expect(propertyController.getMsUI("test")).toEqual(null);
        });
-
-       test('getLastUpdatedStatus', () => {
-                 expect(propertyController.getLastUpdatedStatus()).toEqual('DESIGN');
-       });
-
-       test('getDeploymentID', () => {
-                 expect(propertyController.getDeploymentID()).toEqual('testId');
-       });
-
-       test('getDeploymentStatusURL', () => {
-                 expect(propertyController.getDeploymentStatusURL()).toEqual('testUrl');
-       });
 });
\ No newline at end of file
index 0db977b..0381ab1 100755 (executable)
@@ -127,10 +127,10 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
             with open(cached_file_content, 'w') as f:
                 f.write(jsonGenerated)
         return True
-     elif self.path.startswith("/dcae-operationstatus") and http_type == "GET":
+     elif self.path.startswith("/dcae-operationstatus/install") and http_type == "GET":
         if not _file_available:
-            print "self.path start with /dcae-operationstatus, generating response json..."
-            jsonGenerated =  "{\"operationType\": \"operationType1\", \"status\": \"succeeded\"}"
+            print "self.path start with /dcae-operationstatus/install, generating response json..."
+            jsonGenerated =  "{\"operationType\": \"install\", \"status\": \"succeeded\"}"
             print "jsonGenerated: " + jsonGenerated
     
             try:
@@ -145,24 +145,29 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
             with open(cached_file_content, 'w') as f:
                 f.write(jsonGenerated)
         return True
-     elif self.path.startswith("/sdc/v1/catalog/services/") and http_type == "POST":
+     elif self.path.startswith("/dcae-operationstatus/uninstall") and http_type == "GET":
         if not _file_available:
-            print "self.path start with /sdc/v1/catalog/services/, generating response json..."
-            jsondata = json.loads(self.data_string)
-            jsonGenerated = "{\"artifactName\":\"" + jsondata['artifactName'] + "\",\"artifactType\":\"" + jsondata['artifactType'] + "\",\"artifactURL\":\"" + self.path + "\",\"artifactDescription\":\"" + jsondata['description'] + "\",\"artifactChecksum\":\"ZjJlMjVmMWE2M2M1OTM2MDZlODlmNTVmZmYzNjViYzM=\",\"artifactUUID\":\"" + str(uuid.uuid4()) + "\",\"artifactVersion\":\"1\"}"
+            print "self.path start with /dcae-operationstatus/uninstall, generating response json..."
+            jsonGenerated =  "{\"operationType\": \"uninstall\", \"status\": \"succeeded\"}"
             print "jsonGenerated: " + jsonGenerated
     
-            os.makedirs(cached_file_folder, 0777)
+            try:
+                os.makedirs(cached_file_folder, 0777)
+            except OSError as e:
+                if e.errno != errno.EEXIST:
+                    raise
+                print(cached_file_folder+" already exists")
+    
             with open(cached_file_header, 'w') as f:
                 f.write("{\"Content-Length\": \"" + str(len(jsonGenerated)) + "\", \"Content-Type\": \"application/json\"}")
             with open(cached_file_content, 'w') as f:
                 f.write(jsonGenerated)
-        return True;
-     elif self.path.startswith("/dcae-deployments/") and (http_type == "PUT" or http_type == "DELETE"):
+        return True
+     elif self.path.startswith("/sdc/v1/catalog/services/") and http_type == "POST":
         if not _file_available:
-            print "self.path start with /dcae-deployments/, generating response json..."
-            #jsondata = json.loads(self.data_string)
-            jsonGenerated = "{\"links\":{\"status\":\"http:\/\/" + PROXY_ADDRESS + "\/dcae-operationstatus\",\"test2\":\"test2\"}}"
+            print "self.path start with /sdc/v1/catalog/services/, generating response json..."
+            jsondata = json.loads(self.data_string)
+            jsonGenerated = "{\"artifactName\":\"" + jsondata['artifactName'] + "\",\"artifactType\":\"" + jsondata['artifactType'] + "\",\"artifactURL\":\"" + self.path + "\",\"artifactDescription\":\"" + jsondata['description'] + "\",\"artifactChecksum\":\"ZjJlMjVmMWE2M2M1OTM2MDZlODlmNTVmZmYzNjViYzM=\",\"artifactUUID\":\"" + str(uuid.uuid4()) + "\",\"artifactVersion\":\"1\"}"
             print "jsonGenerated: " + jsonGenerated
     
             os.makedirs(cached_file_folder, 0777)
@@ -171,6 +176,30 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
             with open(cached_file_content, 'w') as f:
                 f.write(jsonGenerated)
         return True
+     elif self.path.startswith("/dcae-deployments/") and http_type == "PUT":
+            print "self.path start with /dcae-deployments/ DEPLOY, generating response json..."
+            #jsondata = json.loads(self.data_string)
+            jsonGenerated = "{\"operationType\":\"install\",\"status\":\"processing\",\"links\":{\"status\":\"http:\/\/" + PROXY_ADDRESS + "\/dcae-operationstatus/install\"}}"
+            print "jsonGenerated: " + jsonGenerated
+            if not os.path.exists(cached_file_folder):
+                os.makedirs(cached_file_folder, 0777)
+            with open(cached_file_header, 'w+') as f:
+                f.write("{\"Content-Length\": \"" + str(len(jsonGenerated)) + "\", \"Content-Type\": \"application/json\"}")
+            with open(cached_file_content, 'w+') as f:
+                f.write(jsonGenerated)
+               return True
+     elif self.path.startswith("/dcae-deployments/") and http_type == "DELETE":
+            print "self.path start with /dcae-deployments/ UNDEPLOY, generating response json..."
+            #jsondata = json.loads(self.data_string)
+            jsonGenerated = "{\"operationType\":\"uninstall\",\"status\":\"processing\",\"links\":{\"status\":\"http:\/\/" + PROXY_ADDRESS + "\/dcae-operationstatus/uninstall\"}}"
+            print "jsonGenerated: " + jsonGenerated
+            if not os.path.exists(cached_file_folder):
+                os.makedirs(cached_file_folder, 0777)
+            with open(cached_file_header, 'w+') as f:
+                f.write("{\"Content-Length\": \"" + str(len(jsonGenerated)) + "\", \"Content-Type\": \"application/json\"}")
+            with open(cached_file_content, 'w+') as f:
+                f.write(jsonGenerated)
+            return True
      elif (self.path.startswith("/pdp/api/") and (http_type == "PUT" or http_type == "DELETE")) or (self.path.startswith("/pdp/api/policyEngineImport") and http_type == "POST"):
         print "self.path start with /pdp/api/, copying body to response ..."
         if not os.path.exists(cached_file_folder):
@@ -180,7 +209,7 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
         with open(cached_file_content, 'w+') as f:
             f.write(self.data_string)
         return True
-     elif self.path.startswith("/policy/api/v1/policyTypes/") and http_type == "POST":
+     elif self.path.startswith("/policy/api/v1/policytypes/") and http_type == "POST":
         print "self.path start with POST new policy API /pdp/api/, copying body to response ..."
         if not os.path.exists(cached_file_folder):
             os.makedirs(cached_file_folder, 0777)
@@ -189,8 +218,8 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
         with open(cached_file_content, 'w+') as f:
             f.write(self.data_string)
         return True
-     elif self.path.startswith("/policy/api/v1/policyTypes/") and http_type == "DELETE":
-        print "self.path start with DELETE new policy API /policy/api/v1/policyTypes/ ..."
+     elif self.path.startswith("/policy/api/v1/policytypes/") and http_type == "DELETE":
+        print "self.path start with DELETE new policy API /policy/api/v1/policytypes/ ..."
         if not os.path.exists(cached_file_folder):
             os.makedirs(cached_file_folder, 0777)
     
@@ -199,6 +228,15 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
         with open(cached_file_content, 'w+') as f:
                 f.write(self.data_string)
         return True
+     elif self.path.startswith("/policy/pap/v1/pdps/policies") and http_type == "POST":
+        print "self.path start with POST new policy API /policy/pap/v1/pdps/ ..."
+        if not os.path.exists(cached_file_folder):
+            os.makedirs(cached_file_folder, 0777)
+        with open(cached_file_header, 'w+') as f:
+                f.write("{\"Content-Length\": \"" + str(len("")) + "\", \"Content-Type\": \""+str("")+"\"}")
+        with open(cached_file_content, 'w+') as f:
+                f.write(self.data_string)
+        return True
      elif self.path.startswith("/policy/api/v1/policytypes/") and http_type == "GET":
         print "self.path start with /policy/api/v1/policytypes/, generating response json..."
         jsonGenerated =  "{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}"
@@ -241,7 +279,9 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
 
             if not HOST:
                 self.send_response(404)
-                return "404 Not found"
+                self.end_headers()
+                self.wfile.write('404 Not found, no remote HOST specified on the emulator !!!')
+                return "404 Not found, no remote HOST specified on the emulator !!!"
 
             url = '%s%s' % (HOST, self.path)
             response = requests.get(url, auth=AUTH, headers=HEADERS, stream=True)
@@ -254,6 +294,8 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
                 print('Status code : %s' % (response.status_code,))
                 print('Content : %s' % (response.content,))
                 self.send_response(response.status_code)
+                self.end_headers()
+                self.wfile.write('404 Not found, nothing found on the remote server !!!')
                 return response.content
         else:
             print("Request for data currently present in cache: %s" % (cached_file_folder,))
@@ -292,7 +334,9 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
         
             if not HOST:
                 self.send_response(404)
-                return "404 Not found"
+                self.end_headers()
+                self.wfile.write('404 Not found, no remote HOST specified on the emulator !!!')
+                return "404 Not found, no remote HOST specified on the emulator !!!"
 
             print("Request for data currently not present in cache: %s" % (cached_file_folder,))
 
@@ -308,6 +352,8 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
                 print('Status code : %s' % (response.status_code,))
                 print('Content : %s' % (response.content,))
                 self.send_response(response.status_code)
+                self.end_headers()
+                self.wfile.write('404 Not found, nothing found on the remote server !!!')
                 return response.content
         else:
             print("Request for data present in cache: %s" % (cached_file_folder,))
@@ -339,7 +385,9 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
         if not _file_available:
             if not HOST:
                 self.send_response(404)
-                return "404 Not found"
+                self.end_headers()
+                self.wfile.write('404 Not found, no remote HOST specified on the emulator !!!')
+                return "404 Not found, no remote HOST specified on the emulator !!!"
 
             print("Request for data currently not present in cache: %s" % (cached_file_folder,))
 
@@ -355,6 +403,8 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
                 print('Status code : %s' % (response.status_code,))
                 print('Content : %s' % (response.content,))
                 self.send_response(response.status_code)
+                self.end_headers()
+                self.wfile.write('404 Not found, nothing found on the remote server !!!')
                 return response.content
         else:
             print("Request for data present in cache: %s" % (cached_file_folder,))
@@ -389,7 +439,9 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
         if not _file_available:
             if not HOST:
                 self.send_response(404)
-                return "404 Not found"
+                self.end_headers()
+                self.wfile.write('404 Not found, no remote HOST specified on the emulator !!!')
+                return "404 Not found, no remote HOST specified on the emulator !!!"
 
             print("Request for data currently not present in cache: %s" % (cached_file_folder,))
 
@@ -405,6 +457,8 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
                 print('Status code : %s' % (response.status_code,))
                 print('Content : %s' % (response.content,))
                 self.send_response(response.status_code)
+                self.end_headers()
+                self.wfile.write('404 Not found, nothing found on the remote server !!!')
                 return response.content
         else:
             print("Request for data present in cache: %s" % (cached_file_folder,))
index 7614e17..0be9e29 100644 (file)
@@ -30,6 +30,7 @@ server.port=${clamp.it.tests.https}
 server.ssl.key-store=classpath:https/keystore-test.jks
 server.ssl.key-store-password=testpass
 server.ssl.key-password=testpass
+server.ssl.key-store-type=JKS
 
 ### In order to be user friendly when HTTPS is enabled, 
 ### you can add another HTTP port that will be automatically redirected to HTTPS
diff --git a/src/test/resources/logback.xml b/src/test/resources/logback.xml
new file mode 100644 (file)
index 0000000..07e5878
--- /dev/null
@@ -0,0 +1,2 @@
+<!-- Empty Configuration to prevent creating log files by Units Tests (e.g LoggingUtilsTest) ! -->
+<configuration />
index d222de8..b4b8052 100644 (file)
@@ -26,8 +26,8 @@
 # because they are used in Jenkins, whose plug-in doesn't support
 
 major=4
-minor=0
-patch=3
+minor=1
+patch=0
 
 base_version=${major}.${minor}.${patch}