diff --git a/packages/base/pom.xml b/packages/base/pom.xml
index 2e2e524..9f24c60 100755
--- a/packages/base/pom.xml
+++ b/packages/base/pom.xml
@@ -1,6 +1,6 @@
 <!--
   ============LICENSE_START=======================================================
-  ECOMP Policy Engine
+  ONAP Policy Engine
   ================================================================================
   Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
   ================================================================================
@@ -24,7 +24,7 @@
 	<modelVersion>4.0.0</modelVersion>
 
 	<parent>
-		<groupId>org.openecomp.policy.engine</groupId>
+		<groupId>org.onap.policy.engine</groupId>
 		<artifactId>packages</artifactId>
 		<version>1.1.0-SNAPSHOT</version>
 	</parent>
@@ -33,7 +33,7 @@
 	<packaging>pom</packaging>
 
 	<name>Base Package</name>
-	<description>D2 ECOMP Policy Base Packaging</description>
+	<description>D2 ONAP Policy Base Packaging</description>
 
 	<build>
 		<plugins>
@@ -53,8 +53,8 @@
 							<overWriteSnapshots>true</overWriteSnapshots>
 							<artifactItems>
 								<artifactItem>
-									<groupId>org.openecomp.policy.engine</groupId>
-									<artifactId>ECOMP-PDP-REST</artifactId>
+									<groupId>org.onap.policy.engine</groupId>
+									<artifactId>ONAP-PDP-REST</artifactId>
 									<version>${project.version}</version>
 									<type>war</type>
 									<destFileName>pdp.war</destFileName>
@@ -74,8 +74,8 @@
 							<overWriteSnapshots>true</overWriteSnapshots>
 							<artifactItems>
 								<artifactItem>
-									<groupId>org.openecomp.policy.engine</groupId>
-									<artifactId>ECOMP-PAP-REST</artifactId>
+									<groupId>org.onap.policy.engine</groupId>
+									<artifactId>ONAP-PAP-REST</artifactId>
 									<version>${project.version}</version>
 									<type>war</type>
 									<destFileName>pap.war</destFileName>
@@ -84,7 +84,7 @@
 						</configuration>
 					</execution>
 					<execution>
-						<id>copy-ecomp</id>
+						<id>copy-onap</id>
 						<phase>prepare-package</phase>
 						<goals>
 							<goal>copy</goal>
@@ -95,11 +95,11 @@
 							<overWriteSnapshots>true</overWriteSnapshots>
 							<artifactItems>
 								<artifactItem>
-									<groupId>org.openecomp.policy.engine</groupId>
-									<artifactId>ECOMP-SDK-APP</artifactId>
+									<groupId>org.onap.policy.engine</groupId>
+									<artifactId>ONAP-SDK-APP</artifactId>
 									<version>${project.version}</version>
 									<type>war</type>
-									<destFileName>ecomp.war</destFileName>
+									<destFileName>onap.war</destFileName>
 								</artifactItem>
 							</artifactItems>
 						</configuration>
@@ -137,7 +137,7 @@
 							<overWriteSnapshots>true</overWriteSnapshots>
 							<artifactItems>
 								<artifactItem>
-									<groupId>org.openecomp.policy.engine</groupId>
+									<groupId>org.onap.policy.engine</groupId>
 									<artifactId>BRMSGateway</artifactId>
 									<version>${project.version}</version>
 									<type>jar</type>
@@ -159,7 +159,7 @@
 							<overWriteSnapshots>true</overWriteSnapshots>
 							<artifactItems>
 								<artifactItem>
-									<groupId>org.openecomp.policy.engine</groupId>
+									<groupId>org.onap.policy.engine</groupId>
 									<artifactId>LogParser</artifactId>
 									<version>${project.version}</version>
 									<type>jar</type>
@@ -216,7 +216,7 @@
 									<executable>/bin/bash</executable>
 									<arguments>
 										<argument>-c</argument>
-										<argument>mkdir -p target ; echo -e 'version="${project.version}"\ndescription="Open ECOMP Policy Engine"\nbuildTag="'"${BUILD_TAG}"'"\ncommit="'"${GIT_COMMIT}"'"\ntimestamp="${maven.build.timestamp}"' >target/build.info</argument>
+										<argument>mkdir -p target ; echo -e 'version="${project.version}"\ndescription="Open ONAP Policy Engine"\nbuildTag="'"${BUILD_TAG}"'"\ncommit="'"${GIT_COMMIT}"'"\ntimestamp="${maven.build.timestamp}"' >target/build.info</argument>
 									</arguments>
 								</configuration>
 							</execution>
diff --git a/packages/base/src/assembly/zip.xml b/packages/base/src/assembly/zip.xml
index b14273b..dc14bba 100644
--- a/packages/base/src/assembly/zip.xml
+++ b/packages/base/src/assembly/zip.xml
@@ -1,6 +1,6 @@
 <!--
   ============LICENSE_START=======================================================
-  ECOMP Policy Engine
+  ONAP Policy Engine
   ================================================================================
   Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
   ================================================================================
diff --git a/packages/base/src/files/bin/backup.sh b/packages/base/src/files/bin/backup.sh
index a40638c..f65eed0 100644
--- a/packages/base/src/files/bin/backup.sh
+++ b/packages/base/src/files/bin/backup.sh
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/bin/certtool.sh b/packages/base/src/files/bin/certtool.sh
index 02899f1..096c5d5 100644
--- a/packages/base/src/files/bin/certtool.sh
+++ b/packages/base/src/files/bin/certtool.sh
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/bin/java/log4j.properties b/packages/base/src/files/bin/java/log4j.properties
index 3d1f507..68771ef 100644
--- a/packages/base/src/files/bin/java/log4j.properties
+++ b/packages/base/src/files/bin/java/log4j.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/bin/monitor.sh b/packages/base/src/files/bin/monitor.sh
index fb311bc..65baad4 100644
--- a/packages/base/src/files/bin/monitor.sh
+++ b/packages/base/src/files/bin/monitor.sh
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/bin/policy.sh b/packages/base/src/files/bin/policy.sh
index 315b3e9..f21030e 100644
--- a/packages/base/src/files/bin/policy.sh
+++ b/packages/base/src/files/bin/policy.sh
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/etc/profile.d/env.sh b/packages/base/src/files/etc/profile.d/env.sh
index 4d9fcf9..56b4426 100644
--- a/packages/base/src/files/etc/profile.d/env.sh
+++ b/packages/base/src/files/etc/profile.d/env.sh
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/elk/bin/elk.sh b/packages/base/src/files/install/elk/bin/elk.sh
index 5011aa6..3429905 100644
--- a/packages/base/src/files/install/elk/bin/elk.sh
+++ b/packages/base/src/files/install/elk/bin/elk.sh
@@ -108,7 +108,7 @@
 		fi
 	fi
 	
-	$JAVA_HOME/bin/java -cp $POLICY_HOME/servers/pap/webapps/pap/WEB-INF/lib/ECOMP-PAP-REST-*.jar:$POLICY_HOME/servers/pap/webapps/pap/WEB-INF/lib/*: -DPROPERTY_FILE=$POLICY_HOME/servers/pap/bin/policyelk.properties org.openecomp.policy.pap.xacml.rest.elk.client.ElasticSearchPolicyUpdate
+	$JAVA_HOME/bin/java -cp $POLICY_HOME/servers/pap/webapps/pap/WEB-INF/lib/ONAP-PAP-REST-*.jar:$POLICY_HOME/servers/pap/webapps/pap/WEB-INF/lib/*: -DPROPERTY_FILE=$POLICY_HOME/servers/pap/bin/policyelk.properties org.onap.policy.pap.xacml.rest.elk.client.ElasticSearchPolicyUpdate
 }
 
 #########################################################################
diff --git a/packages/base/src/files/install/mysql/bin/cleanup_policy.sh b/packages/base/src/files/install/mysql/bin/cleanup_policy.sh
index 1eec53f..1841d3c 100644
--- a/packages/base/src/files/install/mysql/bin/cleanup_policy.sh
+++ b/packages/base/src/files/install/mysql/bin/cleanup_policy.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/mysql/bin/db_backup.sh b/packages/base/src/files/install/mysql/bin/db_backup.sh
index 896c4ff..dca2017 100644
--- a/packages/base/src/files/install/mysql/bin/db_backup.sh
+++ b/packages/base/src/files/install/mysql/bin/db_backup.sh
@@ -1,7 +1,7 @@
 #!/bin/bash 
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
@@ -23,7 +23,7 @@
 # db_backup.sh: Run this script to back database to a file
 # 
 # Usage  : db_backup.sh db_user     db_user_password database
-# Example: db_backup.sh policy_user password         ecomp_sdk
+# Example: db_backup.sh policy_user password         onap_sdk
 #
 # Note: mysqldump requires at least the SELECT privilege for dumped tables
 #
@@ -79,6 +79,6 @@
   echo "db_backup.sh completed ... `date`" | tee -a $LOG
 else
   echo "Usage  : db_backup.sh db_user_id  db_user_password database" 
-  echo "Example: db_backup.sh policy_user password         ecomp_sdk" 
+  echo "Example: db_backup.sh policy_user password         onap_sdk" 
 fi
 
diff --git a/packages/base/src/files/install/mysql/bin/db_backup_data.sh b/packages/base/src/files/install/mysql/bin/db_backup_data.sh
index 39df9e2..ee0b447 100644
--- a/packages/base/src/files/install/mysql/bin/db_backup_data.sh
+++ b/packages/base/src/files/install/mysql/bin/db_backup_data.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/mysql/bin/db_backup_remote.sh b/packages/base/src/files/install/mysql/bin/db_backup_remote.sh
index 00ee952..2128969 100644
--- a/packages/base/src/files/install/mysql/bin/db_backup_remote.sh
+++ b/packages/base/src/files/install/mysql/bin/db_backup_remote.sh
@@ -1,7 +1,7 @@
 #!/bin/bash 
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
@@ -23,7 +23,7 @@
 # db_backup_remote.sh: Perform database backup from remote 
 # 
 # Usage  : db_backup_remote.sh db_user     db_user_password database  db_hostname
-# Example: db_backup_remote.sh policy_user password         ecomp_sdk localhost.com
+# Example: db_backup_remote.sh policy_user password         onap_sdk localhost.com
 #
 # Note: 1. mysqldump utility must be available in the env where this script intend to run
 #       2. db_user requires at least the SELECT privilege for dumped tables
@@ -84,5 +84,5 @@
   echo "db_backup_remote.sh for [$DATABASE]@[${DB_HOSTNAME}] completed ... `date`" | tee -a $LOG
 else
   echo "Usage  : db_backup_remote.sh db_user_id  db_user_password database  db_hostname" 
-  echo "Example: db_backup_remote.sh policy_user password         ecomp_sdk localhost.com" 
+  echo "Example: db_backup_remote.sh policy_user password         onap_sdk localhost.com" 
 fi
diff --git a/packages/base/src/files/install/mysql/bin/db_restore.sh b/packages/base/src/files/install/mysql/bin/db_restore.sh
index b0e32da..d6e21df 100644
--- a/packages/base/src/files/install/mysql/bin/db_restore.sh
+++ b/packages/base/src/files/install/mysql/bin/db_restore.sh
@@ -1,7 +1,7 @@
 #!/bin/bash 
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
@@ -23,8 +23,8 @@
 # db_restore.sh: Restore database table(s) from database backup file
 # 
 # Usage  : db_restore.sh db_user     db_password backup_file database table_name
-# Example: db_restore.sh policy_user password    /opt/app/policy/data/mysql/20150901/backup_ecomp_sdk_20150910102030.sql ecomp_sdk attribute
-#          db_restore.sh policy_user password    /opt/app/policy/data/mysql/20150901/backup_ecomp_sdk_20150910102030.sql ecomp_sdk all
+# Example: db_restore.sh policy_user password    /opt/app/policy/data/mysql/20150901/backup_onap_sdk_20150910102030.sql onap_sdk attribute
+#          db_restore.sh policy_user password    /opt/app/policy/data/mysql/20150901/backup_onap_sdk_20150910102030.sql onap_sdk all
 #
 # Assumption: Database backup_file is created from mysqldump utility
 #
@@ -90,7 +90,7 @@
   fi
 else
   echo "Usage  : db_restore.sh db_user_id  db_password  backup_file database table_name" 
-  echo "Example: db_restore.sh policy_user password     /opt/app/policy/data/mysql/20150901/backup_ecomp_sdk_20150901102030.sql ecomp_sdk attribute" 
+  echo "Example: db_restore.sh policy_user password     /opt/app/policy/data/mysql/20150901/backup_onap_sdk_20150901102030.sql onap_sdk attribute" 
 fi
 
 rm -f $TEMP_FILE
diff --git a/packages/base/src/files/install/mysql/bin/db_restore_data.sh b/packages/base/src/files/install/mysql/bin/db_restore_data.sh
index 9267559..c4fec02 100644
--- a/packages/base/src/files/install/mysql/bin/db_restore_data.sh
+++ b/packages/base/src/files/install/mysql/bin/db_restore_data.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/mysql/bin/db_upgrade.sh b/packages/base/src/files/install/mysql/bin/db_upgrade.sh
index 41b79e1..87d5d9b 100644
--- a/packages/base/src/files/install/mysql/bin/db_upgrade.sh
+++ b/packages/base/src/files/install/mysql/bin/db_upgrade.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/mysql/bin/db_upgrade_remote.sh b/packages/base/src/files/install/mysql/bin/db_upgrade_remote.sh
index a5b6e77..a10ac21 100644
--- a/packages/base/src/files/install/mysql/bin/db_upgrade_remote.sh
+++ b/packages/base/src/files/install/mysql/bin/db_upgrade_remote.sh
@@ -1,7 +1,7 @@
 #!/bin/bash 
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/mysql/data/161000_upgrade_script.sql b/packages/base/src/files/install/mysql/data/161000_upgrade_script.sql
index a75e798..70dae61 100755
--- a/packages/base/src/files/install/mysql/data/161000_upgrade_script.sql
+++ b/packages/base/src/files/install/mysql/data/161000_upgrade_script.sql
@@ -1,6 +1,6 @@
 /*-
 * ============LICENSE_START=======================================================
-* ECOMP Policy Engine
+* ONAP Policy Engine
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
@@ -18,7 +18,7 @@
 * ============LICENSE_END=========================================================
 */
 -- ---------------------------------------------------------------------------------------------------------------
--- This is for the 1610 Version of SDK database called ecomp_sdk for Open Source
+-- This is for the 1610 Version of SDK database called onap_sdk for Open Source
 
 -- Note to : Database Admin,  set the MySQL system variable called lower_case_table_names
 
@@ -39,9 +39,9 @@
 -- All versions newer or older than these DO NOT necessarily mean they are compatible.
 -- ------------------------------------------------------------------------------------------------------------------
 
-CREATE DATABASE IF NOT EXISTS `ecomp_sdk`;
+CREATE DATABASE IF NOT EXISTS `onap_sdk`;
 
-USE `ecomp_sdk`;
+USE `onap_sdk`;
 set foreign_key_checks=0;
 
 --
@@ -784,20 +784,20 @@
 );
 
 --
--- Table structure for table `ecompname`
+-- Table structure for table `onapname`
 --
 
-drop table if exists `ecompname`;
-create table `ecompname` (
+drop table if exists `onapname`;
+create table `onapname` (
 `id` int(11) not null auto_increment,
 `created_by` varchar(255) not null,
 `created_date` timestamp not null default current_timestamp,
 `description` varchar(2048) default null,
-`ecomp_name` varchar(767) not null,
+`onap_name` varchar(767) not null,
 `modified_by` varchar(255) not null,
 `modified_date` timestamp not null default '0000-00-00 00:00:00',
 primary key (`id`),
-unique key `ecomp_name` (`ecomp_name`)
+unique key `onap_name` (`onap_name`)
 );
 
 --
@@ -1806,7 +1806,7 @@
 create table `match_functions` (
 `id` tinyint not null,
 `shortname` tinyint not null,
-`ecomp_sdkid` tinyint not null,
+`onap_sdkid` tinyint not null,
 `return_datatype` tinyint not null,
 `is_bag_return` tinyint not null,
 `arg_lb` tinyint not null,
@@ -2048,7 +2048,7 @@
 `config_name` varchar(1024) not null,
 `create_date_time` timestamp not null default current_timestamp on update current_timestamp,
 `creted_by` varchar(45) not null,
-`ecomp_name` varchar(1024) not null,
+`onap_name` varchar(1024) not null,
 `policy_name` varchar(1024) not null,
 `scope` varchar(1024) not null,
 `update_date_time` timestamp not null default '0000-00-00 00:00:00',
@@ -2067,7 +2067,7 @@
 `config_name` varchar(1024) not null,
 `create_date_time` timestamp not null default current_timestamp on update current_timestamp,
 `created_by` varchar(45) not null,
-`ecomp_name` varchar(1024) not null,
+`onap_name` varchar(1024) not null,
 `policy_name` varchar(1024) not null,
 `scope` varchar(1024) not null,
 `update_date_time` timestamp not null default '0000-00-00 00:00:00',
@@ -2629,10 +2629,10 @@
 );
 
 --
--- Current Database: `ecomp_sdk`
+-- Current Database: `onap_sdk`
 --
 
-use `ecomp_sdk`;
+use `onap_sdk`;
 
 --
 -- Final view structure for view `function_flattener`
@@ -2656,7 +2656,7 @@
 
 drop table if exists `match_functions`;
 drop view if exists `match_functions`;
-create view `match_functions` as select `d`.`id` as `id`,`d`.`short_name` as `shortname`,`d`.`xacml_id` as `ecomp_sdkid`,`d`.`return_datatype` as `return_datatype`,`d`.`is_bag_return` as `is_bag_return`,`d`.`arg_lb` as `arg_lb`,`d`.`arg_ub` as `arg_ub`,`a1`.`is_bag` as `arg1_isbag`,`a1`.`datatype_id` as `arg1_datatype`,`a2`.`is_bag` as `arg2_isbag`,`a2`.`datatype_id` as `arg2_datatype` from ((`functiondefinition` `d` left join `functionarguments` `a1` on(((`a1`.`function_id` = `d`.`id`) and (`a1`.`arg_index` = 1)))) left join `functionarguments` `a2` on(((`a2`.`function_id` = `d`.`id`) and (`a2`.`arg_index` = 2)))) where ((`d`.`arg_lb` = 2) and (`d`.`arg_ub` = 2) and (`d`.`return_datatype` = 18) and (`a1`.`is_bag` = 0)) order by `d`.`short_name`;
+create view `match_functions` as select `d`.`id` as `id`,`d`.`short_name` as `shortname`,`d`.`xacml_id` as `onap_sdkid`,`d`.`return_datatype` as `return_datatype`,`d`.`is_bag_return` as `is_bag_return`,`d`.`arg_lb` as `arg_lb`,`d`.`arg_ub` as `arg_ub`,`a1`.`is_bag` as `arg1_isbag`,`a1`.`datatype_id` as `arg1_datatype`,`a2`.`is_bag` as `arg2_isbag`,`a2`.`datatype_id` as `arg2_datatype` from ((`functiondefinition` `d` left join `functionarguments` `a1` on(((`a1`.`function_id` = `d`.`id`) and (`a1`.`arg_index` = 1)))) left join `functionarguments` `a2` on(((`a2`.`function_id` = `d`.`id`) and (`a2`.`arg_index` = 2)))) where ((`d`.`arg_lb` = 2) and (`d`.`arg_ub` = 2) and (`d`.`return_datatype` = 18) and (`a1`.`is_bag` = 0)) order by `d`.`short_name`;
 
 --
 -- Final view structure for view `v_url_access`
@@ -2687,10 +2687,10 @@
 );
 
 -- 
--- This is for the default data for 1610 Version of SDK database for Open Source called ecomp_sdk
+-- This is for the default data for 1610 Version of SDK database for Open Source called onap_sdk
 --
 
-USE ecomp_sdk;
+USE onap_sdk;
 
 -- fn_function
 Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_process','Process List');
@@ -2798,14 +2798,14 @@
 INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (121, 'Collaboration', 5000, 100, 'collaborate_list.htm', 'menu_sample', 'N', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/bubble.png');
 INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (930, 'Search', 9, 15, 'userProfile', 'menu_admin', 'N', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/search_profile.png');
 INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (150038,'Notebook',5000,135,'notebook.htm','menu_sample','N',NULL,NULL,NULL,NULL,'APP','N',NULL);
-INSERT INTO `ecomp_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150004', 'Policy', '1', '1000', 'menu_policy', 'Y', 'APP', 'N');
-INSERT INTO `ecomp_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `action`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150005', 'Editor', '150004', '1000', 'policy#/Editor', 'policy_editor', 'Y', 'APP', 'N');
-INSERT INTO `ecomp_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `action`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150006', 'Dictionary', '150004', '1000', 'policy#/Dictionary', 'policy_dictionary', 'Y', 'APP', 'N');
-INSERT INTO `ecomp_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `action`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150007', 'PDP', '150004', '1000', 'policy#/Pdp', 'policy_pdp', 'Y', 'APP', 'N');
-INSERT INTO `ecomp_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `action`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150008', 'Push', '150004', '1000', 'policy#/Push', 'policy_push', 'Y', 'APP', 'N');
-INSERT INTO `ecomp_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `action`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150009', 'Roles', '150004', '1000', 'policy#/Roles', 'policy_roles', 'Y', 'APP', 'N');
-INSERT INTO `ecomp_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `action`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150010', 'Admin', '150004', '1000', 'policy#/Admin', 'policy_admin', 'Y', 'APP', 'N');
-INSERT INTO `ecomp_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `action`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150011', 'Dashboard', '150004', '1000', 'policy#/Dashboard', 'policy_dashboard', 'Y', 'APP', 'N');
+INSERT INTO `onap_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150004', 'Policy', '1', '1000', 'menu_policy', 'Y', 'APP', 'N');
+INSERT INTO `onap_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `action`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150005', 'Editor', '150004', '1000', 'policy#/Editor', 'policy_editor', 'Y', 'APP', 'N');
+INSERT INTO `onap_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `action`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150006', 'Dictionary', '150004', '1000', 'policy#/Dictionary', 'policy_dictionary', 'Y', 'APP', 'N');
+INSERT INTO `onap_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `action`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150007', 'PDP', '150004', '1000', 'policy#/Pdp', 'policy_pdp', 'Y', 'APP', 'N');
+INSERT INTO `onap_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `action`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150008', 'Push', '150004', '1000', 'policy#/Push', 'policy_push', 'Y', 'APP', 'N');
+INSERT INTO `onap_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `action`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150009', 'Roles', '150004', '1000', 'policy#/Roles', 'policy_roles', 'Y', 'APP', 'N');
+INSERT INTO `onap_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `action`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150010', 'Admin', '150004', '1000', 'policy#/Admin', 'policy_admin', 'Y', 'APP', 'N');
+INSERT INTO `onap_sdk`.`fn_menu` (`menu_id`, `label`, `parent_id`, `sort_order`, `action`, `function_cd`, `active_yn`, `menu_set_cd`, `separator_yn`) VALUES ('150011', 'Dashboard', '150004', '1000', 'policy#/Dashboard', 'policy_dashboard', 'Y', 'APP', 'N');
 
 -- fn_restricted_url
 INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('attachment.htm','menu_admin');
@@ -2942,7 +2942,7 @@
 Insert into cr_raptor_action_img (IMAGE_ID, IMAGE_LOC) Values ('CALENDAR', '/static/fusion/raptor/img/Calendar-16x16.png');
 
 -- fn_app
-Insert into fn_app (APP_ID,APP_NAME,APP_IMAGE_URL,APP_DESCRIPTION,APP_NOTES,APP_URL,APP_ALTERNATE_URL,APP_REST_ENDPOINT,ML_APP_NAME,ML_APP_ADMIN_ID,MOTS_ID,APP_PASSWORD,OPEN,ENABLED,THUMBNAIL,APP_USERNAME,UEB_KEY,UEB_SECRET,UEB_TOPIC_NAME) VALUES (1,'Default',null,'Some Default Description','Some Default Note',null,null,null,'ECPP','?','1','okYTaDrhzibcbGVq5mjkVQ==','N','N',null,'Default',null,null,'ECOMP-PORTAL-INBOX');
+Insert into fn_app (APP_ID,APP_NAME,APP_IMAGE_URL,APP_DESCRIPTION,APP_NOTES,APP_URL,APP_ALTERNATE_URL,APP_REST_ENDPOINT,ML_APP_NAME,ML_APP_ADMIN_ID,MOTS_ID,APP_PASSWORD,OPEN,ENABLED,THUMBNAIL,APP_USERNAME,UEB_KEY,UEB_SECRET,UEB_TOPIC_NAME) VALUES (1,'Default',null,'Some Default Description','Some Default Note',null,null,null,'ECPP','?','1','okYTaDrhzibcbGVq5mjkVQ==','N','N',null,'Default',null,null,'ONAP-PORTAL-INBOX');
 
 -- fn_user_role
 Insert into fn_user_role (USER_ID,ROLE_ID,PRIORITY,APP_ID) values (1,1,null,1);
@@ -6328,20 +6328,20 @@
 
 INSERT INTO GlobalRoleSettings (role, lockdown) values ('super-admin', '0');
 
-INSERT INTO `ecomp_sdk`.`roles` (`id`, `loginid`, `role`) VALUES ('2', 'API', 'super-admin');
-INSERT INTO `ecomp_sdk`.`roles` (`id`, `loginid`, `role`) VALUES ('3', 'demo', 'super-admin');
+INSERT INTO `onap_sdk`.`roles` (`id`, `loginid`, `role`) VALUES ('2', 'API', 'super-admin');
+INSERT INTO `onap_sdk`.`roles` (`id`, `loginid`, `role`) VALUES ('3', 'demo', 'super-admin');
 
-INSERT INTO `ecomp_sdk`.`USERINFO` (`loginid`, `NAME`) VALUES ('API', 'API');
-INSERT INTO `ecomp_sdk`.`USERINFO` (`loginid`, `NAME`) VALUES ('demo', 'Demo');
+INSERT INTO `onap_sdk`.`USERINFO` (`loginid`, `NAME`) VALUES ('API', 'API');
+INSERT INTO `onap_sdk`.`USERINFO` (`loginid`, `NAME`) VALUES ('demo', 'Demo');
 
-INSERT INTO `ecomp_sdk`.`dcaeuuid` (`ID`, `name`, `description`) VALUES ('2', '/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vLoadBalancer', 'vLoadBalancer');
-INSERT INTO `ecomp_sdk`.`dcaeuuid` (`ID`, `name`, `description`) VALUES ('3', '/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vFirewall', 'vFirewall');
+INSERT INTO `onap_sdk`.`dcaeuuid` (`ID`, `name`, `description`) VALUES ('2', '/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vLoadBalancer', 'vLoadBalancer');
+INSERT INTO `onap_sdk`.`dcaeuuid` (`ID`, `name`, `description`) VALUES ('3', '/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vFirewall', 'vFirewall');
 
-INSERT INTO `ecomp_sdk`.`microservicemodels` (`id`, `modelname`, `description`, `dependency`, `imported_by`, `attributes`, `ref_attributes`, `sub_attributes`, `version`) VALUES ('1', 'TcaMetrics', 'TCA Metrics test', '[NamedEntity,  DcaePolicyEntity]', 'API', 'functionalRole=java.lang.String:defaultValue-NA:required-false:MANY-false, name=java.lang.String:defaultValue-NA:required-false:MANY-false', 'thresholds=TcaThreshold:MANY-true', '{\"TcaThreshold\":{\"severity\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"fieldPath\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"thresholdValue\":\"java.lang.Integer:defaultValue-NA:required-false:MANY-false\",\"closedLoopControlName\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"version\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"direction\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\"}}', '1.0.0.5');
-INSERT INTO `ecomp_sdk`.`microservicemodels` (`id`, `modelname`, `description`, `dependency`, `imported_by`, `ref_attributes`, `sub_attributes`, `version`) VALUES ('2', 'StringMatchingConfiguration', 'StringMatchingConfiguration', '[CdapServiceInstanceConfiguration]', 'API', 'serviceConfigurations=StringMatchingServiceConfiguration:MANY-true', '{\"StringMatchingServiceConfiguration\":{\"ageLimit\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"timeWindow\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"createClosedLoopEventId\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"aaiSendFields\":\"java.lang.String:defaultValue-NA:required-false:MANY-true\",\"stringSet\":\"java.lang.String:defaultValue-NA:required-false:MANY-true\",\"outputEventName\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"aaiMatchingFields\":\"java.lang.String:defaultValue-NA:required-false:MANY-true\"}}', '1.0.0.3');
+INSERT INTO `onap_sdk`.`microservicemodels` (`id`, `modelname`, `description`, `dependency`, `imported_by`, `attributes`, `ref_attributes`, `sub_attributes`, `version`) VALUES ('1', 'TcaMetrics', 'TCA Metrics test', '[NamedEntity,  DcaePolicyEntity]', 'API', 'functionalRole=java.lang.String:defaultValue-NA:required-false:MANY-false, name=java.lang.String:defaultValue-NA:required-false:MANY-false', 'thresholds=TcaThreshold:MANY-true', '{\"TcaThreshold\":{\"severity\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"fieldPath\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"thresholdValue\":\"java.lang.Integer:defaultValue-NA:required-false:MANY-false\",\"closedLoopControlName\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"version\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"direction\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\"}}', '1.0.0.5');
+INSERT INTO `onap_sdk`.`microservicemodels` (`id`, `modelname`, `description`, `dependency`, `imported_by`, `ref_attributes`, `sub_attributes`, `version`) VALUES ('2', 'StringMatchingConfiguration', 'StringMatchingConfiguration', '[CdapServiceInstanceConfiguration]', 'API', 'serviceConfigurations=StringMatchingServiceConfiguration:MANY-true', '{\"StringMatchingServiceConfiguration\":{\"ageLimit\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"timeWindow\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"createClosedLoopEventId\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"aaiSendFields\":\"java.lang.String:defaultValue-NA:required-false:MANY-true\",\"stringSet\":\"java.lang.String:defaultValue-NA:required-false:MANY-true\",\"outputEventName\":\"java.lang.String:defaultValue-NA:required-false:MANY-false\",\"aaiMatchingFields\":\"java.lang.String:defaultValue-NA:required-false:MANY-true\"}}', '1.0.0.3');
 
-INSERT INTO `ecompname` VALUES (1,'demo','2016-12-28 14:23:31','DCAE','DCAE','demo','2016-12-28 14:23:31');
-INSERT INTO `ecompname` VALUES (2,'demo','2016-12-28 14:23:31','test','SampleDemo','demo','2016-12-28 14:23:31');
+INSERT INTO `onapname` VALUES (1,'demo','2016-12-28 14:23:31','DCAE','DCAE','demo','2016-12-28 14:23:31');
+INSERT INTO `onapname` VALUES (2,'demo','2016-12-28 14:23:31','test','SampleDemo','demo','2016-12-28 14:23:31');
 
 INSERT INTO `safepolicywarning` VALUES (1,'demo','SampleRiskType','SampleSafePolicyWarning');
 
@@ -6361,15 +6361,15 @@
 
 INSERT INTO `risktype` VALUES (1,'demo','2016-12-29 20:20:48','demo','SampleRiskType','demo','2016-12-29 20:20:48');
 
-INSERT INTO `brmsparamtemplate` VALUES (2,'ControlLoopDemo__closedLoopControlName','ControlLoopDemo__closedLoopControlName','\r\n\r\n/*-\n * ============LICENSE_START=======================================================\n * archetype-closed-loop-demo-rules\n * ================================================================================\n * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.\n * ================================================================================\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============LICENSE_END=========================================================\n */\n\npackage org.onap.policy.controlloop;\n\nimport java.util.List;\nimport java.util.LinkedList;\nimport java.util.Map;\nimport java.util.HashMap;\nimport java.util.UUID;\n\nimport org.onap.policy.controlloop.VirtualControlLoopEvent;\nimport org.onap.policy.controlloop.ControlLoopEventStatus;\nimport org.onap.policy.controlloop.VirtualControlLoopNotification;\nimport org.onap.policy.controlloop.ControlLoopNotificationType;\nimport org.onap.policy.controlloop.ControlLoopOperation;\nimport org.onap.policy.controlloop.ControlLoopOperationWrapper;\nimport org.onap.policy.template.demo.ControlLoopException;\n\nimport org.onap.policy.aai.AAINQF199.AAINQF199CloudRegion;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ExtraProperties;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ExtraProperty;\nimport org.onap.policy.aai.AAINQF199.AAINQF199GenericVNF;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InstanceFilters;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InventoryResponseItem;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InventoryResponseItems;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Manager;\nimport org.onap.policy.aai.AAINQF199.AAINQF199NamedQuery;\nimport org.onap.policy.aai.AAINQF199.AAINQF199QueryParameters;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Request;\nimport org.onap.policy.aai.AAINQF199.AAINQF199RequestWrapper;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Response;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ResponseWrapper;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ServiceInstance;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Tenant;\nimport org.onap.policy.aai.AAINQF199.AAINQF199VfModule;\nimport org.onap.policy.aai.AAINQF199.AAINQF199VServer;\nimport org.onap.policy.aai.util.Serialization;\n\nimport org.onap.policy.appc.CommonHeader;\nimport org.onap.policy.appc.Request;\nimport org.onap.policy.appc.Response;\nimport org.onap.policy.appc.ResponseCode;\nimport org.onap.policy.appc.ResponseStatus;\nimport org.onap.policy.appc.ResponseValue;\n\nimport org.onap.policy.template.demo.EventManager;\nimport org.onap.policy.vnf.trafficgenerator.PGRequest;\nimport org.onap.policy.vnf.trafficgenerator.PGStream;\nimport org.onap.policy.vnf.trafficgenerator.PGStreams;\n\nimport org.onap.policy.mso.MSOManager;\nimport org.onap.policy.mso.MSORequest;\nimport org.onap.policy.mso.MSORequestStatus;\nimport org.onap.policy.mso.MSORequestDetails;\nimport org.onap.policy.mso.MSOModelInfo;\nimport org.onap.policy.mso.MSOCloudConfiguration;\nimport org.onap.policy.mso.MSORequestInfo;\nimport org.onap.policy.mso.MSORequestParameters;\nimport org.onap.policy.mso.MSORelatedInstanceListElement;\nimport org.onap.policy.mso.MSORelatedInstance;\nimport org.onap.policy.mso.MSOResponse;\n\nimport org.openecomp.policy.drools.system.PolicyEngine;\n\n//\n// These parameters are required to build the runtime policy\n//\ndeclare Params\n    closedLoopControlName : String\n    actor : String\n    aaiURL : String\n    aaiUsername : String\n    aaiPassword : String\n    msoURL : String\n    msoUsername : String\n    msoPassword : String\n    aaiNamedQueryUUID : String\n    aaiPatternMatch : int \n    notificationTopic : String\n    appcTopic : String\nend\n\n/*\n*\n* Called once and only once to insert the parameters into working memory for this Closed Loop policy.\n* (Comment SETUP rule out for the first ECOMP opensource release since policy BRMS_GW already puts a Params fact in there)\n*\n*\n*rule \"${policyName}.SETUP\"\n*	when\n*	then\n*		System.out.println(\"rule SETUP is triggered.\");\n*		Params params = new Params();\n*		params.setClosedLoopControlName(\"${closedLoopControlName}\");\n*		params.setActor(\"${actor}\");\n*		params.setAaiURL(\"${aaiURL}\");\n*		params.setAaiUsername(\"${aaiUsername}\");\n*		params.setAaiPassword(\"${aaiPassword}\");\n*		params.setMsoURL(\"${msoURL}\");\n*		params.setMsoUsername(\"${msoUsername}\");\n*		params.setMsoPassword(\"${msoPassword}\");\n*		params.setAaiNamedQueryUUID(\"${aaiNamedQueryUUID}\");\n*		params.setAaiPatternMatch(${aaiPatternMatch});\n*		params.setNotificationTopic(\"${notificationTopic}\");\n*		params.setAppcTopic(\"${appcTopic}\");\n*		//\n*		// This stays in memory as long as the rule is alive and running\n*		//\n*		insert(params);\n*end\n*/\n/*\n*\n* This rule responds to DCAE Events\n*\n*/\nrule \"${policyName}.EVENT\"\n	when\n        $params : Params( getClosedLoopControlName() == \"${closedLoopControlName}\" )\n        $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n        not ( EventManager( closedLoopControlName == $event.closedLoopControlName ))\n	then\n		System.out.println(\"rule EVENT is triggered.\");\n		try {\n			// \n			// Check the requestID in the event to make sure it is not null before we create the EventManager. \n			// The EventManager will do extra syntax checking as well check if the closed loop is disabled/\n			//\n			if ($event.requestID == null) {\n				VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n				notification.notification = ControlLoopNotificationType.REJECTED;\n				notification.from = \"policy\";\n				notification.message = \"Missing requestID from DCAE event\";\n				notification.policyName = drools.getRule().getName();\n				notification.policyScope = \"${policyScope}\";\n				notification.policyVersion = \"${policyVersion}\";\n				//\n				// Let interested parties know\n				//\n				try {\n					System.out.println(Serialization.gsonPretty.toJson(notification));\n					PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n				} catch (Exception e) {\n					e.printStackTrace();\n					System.out.println(\"Can\'t deliver notification: \" + notification);\n				}\n				//\n				// Retract it from memory\n				//\n				retract($event);\n				System.out.println(\"Event with requestID=null has been retracted.\");\n			} else {\n				//\n				// Create an EventManager\n				//\n				EventManager manager = new EventManager($params.getClosedLoopControlName(), $event.requestID, $event.target);\n				//\n				// Determine if EventManager can actively process the event (i.e. syntax)\n				//\n				VirtualControlLoopNotification notification = manager.activate($event);\n				notification.from = \"policy\"; \n				notification.policyName = drools.getRule().getName();\n				notification.policyScope = \"${policyScope}\";\n				notification.policyVersion = \"${policyVersion}\";\n				//\n				// Are we actively pursuing this event?\n				//\n				if (notification.notification == ControlLoopNotificationType.ACTIVE) {\n					//\n					// Insert Event Manager into memory, this will now kick off processing.\n					//\n					insert(manager);\n					//\n					// Let interested parties know\n					//\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						e.printStackTrace();\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n					}		\n				} else {\n					//\n					// Let interested parties know\n					//\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						e.printStackTrace();\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n					}\n					//\n					// Retract it from memory\n					//\n					retract($event);\n				}\n				//\n				// Now that the manager is inserted into Drools working memory, we\'ll wait for\n				// another rule to fire in order to continue processing. This way we can also\n				// then screen for additional ONSET and ABATED events for this same RequestIDs \n				// and for different RequestIDs but with the same closedLoopControlName and target.\n				//\n			}\n		//\n		} catch (Exception e) {\n			e.printStackTrace();\n			VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n			notification.notification = ControlLoopNotificationType.REJECTED;\n			notification.message = \"Exception occurred \" + e.getMessage();\n			notification.policyName = drools.getRule().getName();\n			notification.policyScope = \"${policyScope}\";\n			notification.policyVersion = \"${policyVersion}\";\n			//\n			//\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e1) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e1.printStackTrace();\n			}\n			//\n			// Retract the event\n			//\n			retract($event);\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid ONSET, closed loop is enabled and an Event Manager\n* is created. We can start the operations for this closed loop.\n*\n*/\nrule \"${policyName}.EVENT.MANAGER\"\n	when\n		$params : Params( getClosedLoopControlName() == \"${closedLoopControlName}\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName, controlLoopResult == null)\n	then\n		System.out.println(\"rule EVENT.MANAGER is triggered.\");\n		//\n		// Check which event this is.\n		//\n		EventManager.NEW_EVENT_STATUS eventStatus = $manager.onNewEvent($event);\n		//\n		// We only want the initial ONSET event in memory,\n		// all the other events need to be retracted to support\n		// cleanup and avoid the other rules being fired for this event.\n		//\n		if (eventStatus != EventManager.NEW_EVENT_STATUS.FIRST_ONSET) {\n			System.out.println(\"Retracting \"+eventStatus+\" Event.\");\n			retract($event);\n			return;\n		}\n		//\n		// Now the event in memory is first onset event\n		//\n		try {\n			//\n			// Pull the known AAI field from the Event\n			//\n			// generic-vnf is needed for vFirewall case\n			// vserver-name is needed for vLoadBalancer case\n			//\n			String genericVNF = $event.AAI.get(\"generic-vnf.vnf-id\");\n			String vserver = $event.AAI.get(\"vserver.vserver-name\");\n			//\n			// Check if we are implementing a simple pattern match.\n			//\n			if ($params.getAaiPatternMatch() == 1) {\n				//\n				// Yes\n				//\n				//Basic naming characteristics:\n				//VF Name (9 char)+VM name (13 char total)+VFC (19 char total)\n				//Example: \n				//VF Name (9 characters):    cscf0001v\n				//VM Name(13 characters): cscf0001vm001\n				//VFC name(19 characters): cscf0001vm001cfg001\n				//\n				// zdfw1fwl01fwl02 or zdfw1fwl01fwl01  \n				// replaced with\n				// zdfw1fwl01pgn02 or zdfw1fwl01pgn01\n				//\n				int index = genericVNF.lastIndexOf(\"fwl\");\n				if (index == -1) {\n					System.err.println(\"The generic-vnf.vnf-id from DCAE Event is not valid.\");\n				} else {\n					genericVNF = genericVNF.substring(0, index) + \"pgn\" + genericVNF.substring(index+\"fwl\".length());\n				}\n				//\n				// Construct an APPC request\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"ModifyConfig\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// insert operationWrapper into memory\n				//\n				insert(operationWrapper);\n				//\n				Request request = new Request();\n				request.CommonHeader = new CommonHeader();\n				request.CommonHeader.RequestID = $event.requestID;\n				request.Action = operation.operation;\n				request.Payload = new HashMap<String, Object>();\n				//\n				// Fill in the payload\n				//\n				request.Payload.put(\"generic-vnf.vnf-id\", genericVNF);\n				//\n				PGRequest pgRequest = new PGRequest();\n				pgRequest.pgStreams = new PGStreams();\n				\n				PGStream pgStream;\n				for(int i = 0; i < 5; i++){\n					pgStream = new PGStream();\n					pgStream.streamId = \"fw_udp\"+(i+1);\n					pgStream.isEnabled = \"true\";\n					pgRequest.pgStreams.pgStream.add(pgStream);\n				}\n				request.Payload.put(\"pg-streams\", pgRequest.pgStreams);\n				\n				if (request != null) {\n					//\n					// Insert request into memory\n					//\n					insert(request);\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					// message and history ??\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"${policyScope}\";\n					notification.policyVersion = \"${policyVersion}\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Now send the operation request\n					//\n					if (request instanceof Request) {\n						try {\n							System.out.println(\"APPC request sent:\");\n							System.out.println(Serialization.gsonPretty.toJson(request));\n							PolicyEngine.manager.deliver($params.getAppcTopic(), request);\n						} catch (Exception e) {\n							e.printStackTrace();\n							System.out.println(\"Can\'t deliver request: \" + request);\n						}\n					}\n				} else {\n					//\n					// what happens if it is null\n					//\n				}\n				//\n			} else {\n				//\n				// create AAI named-query request with UUID started with \"F199\"\n				//\n				AAINQF199Request aainqf199request = new AAINQF199Request();\n				AAINQF199QueryParameters aainqf199queryparam = new AAINQF199QueryParameters();\n				AAINQF199NamedQuery aainqf199namedquery = new AAINQF199NamedQuery();\n				AAINQF199InstanceFilters aainqf199instancefilter = new AAINQF199InstanceFilters();\n				//\n				// queryParameters\n				//\n				aainqf199namedquery.namedQueryUUID = UUID.fromString($params.getAaiNamedQueryUUID()); \n				aainqf199queryparam.namedQuery = aainqf199namedquery;\n				aainqf199request.queryParameters = aainqf199queryparam;\n				//\n				// instanceFilters\n				//\n				Map aainqf199instancefiltermap = new HashMap();\n				Map aainqf199instancefiltermapitem = new HashMap();\n				aainqf199instancefiltermapitem.put(\"vserver-name\", vserver); \n				aainqf199instancefiltermap.put(\"vserver\", aainqf199instancefiltermapitem);\n				aainqf199instancefilter.instanceFilter.add(aainqf199instancefiltermap);\n				aainqf199request.instanceFilters = aainqf199instancefilter;\n				//\n				// print aainqf199request for debug\n				//\n				System.out.println(\"AAI Request sent:\");\n				System.out.println(Serialization.gsonPretty.toJson(aainqf199request));\n				//\n				// Create AAINQF199RequestWrapper\n				//\n				AAINQF199RequestWrapper aainqf199RequestWrapper = new AAINQF199RequestWrapper($event.requestID, aainqf199request);\n				//\n				// insert aainqf199request into memory\n				//\n				insert(aainqf199RequestWrapper);\n			}\n			//\n		} catch (Exception e) {\n		 e.printStackTrace();\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid ONSET, closed loop is enabled, an Event Manager\n* is created, AAI Manager and AAI Request are ready in memory. We can start sending query to AAI and then wait for response.\n*\n*/\nrule \"${policyName}.EVENT.MANAGER.AAINQF199REQUEST\"\n	when\n		$params : Params( getClosedLoopControlName() == \"${closedLoopControlName}\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$aainqf199RequestWrapper : AAINQF199RequestWrapper(requestID == $event.requestID)\n	then\n		System.out.println(\"rule EVENT.MANAGER.AAINQF199REQUEST is triggered.\");\n		//\n		// send the request\n		//\n		AAINQF199Response aainqf199response = AAINQF199Manager.postQuery($params.getAaiURL(), $params.getAaiUsername(), $params.getAaiPassword(),\n													   $aainqf199RequestWrapper.aainqf199request, $event.requestID);\n		//\n		// Check AAI response\n		//\n		if (aainqf199response == null) {\n			System.err.println(\"Failed to get AAI response\");\n			//\n			// Fail and retract everything\n			//\n			retract($event);\n			retract($manager);\n			retract($aainqf199RequestWrapper);\n		} else {\n			//\n			// Create AAINQF199ResponseWrapper\n			//\n			AAINQF199ResponseWrapper aainqf199ResponseWrapper = new AAINQF199ResponseWrapper($event.requestID, aainqf199response);\n			//\n			// insert aainqf199ResponseWrapper to memeory\n			//\n			insert(aainqf199ResponseWrapper);\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid AAI response. We can start sending request to APPC or MSO now.\n*\n*/\nrule \"${policyName}.EVENT.MANAGER.AAINQF199RESPONSE\"\n	when \n		$params : Params( getClosedLoopControlName() == \"${closedLoopControlName}\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$aainqf199RequestWrapper : AAINQF199RequestWrapper(requestID == $event.requestID)\n		$aainqf199ResponseWrapper : AAINQF199ResponseWrapper(requestID == $event.requestID)\n	then\n		System.out.println(\"rule EVENT.MANAGER.AAINQF199RESPONSE is triggered.\");\n		//\n		// Extract related fields out of AAINQF199RESPONSE\n		//\n		String vnfItemVnfId, vnfItemVnfType, vnfItemPersonaModelId, vnfItemPersonaModelVersion, vnfItemModelName, \n		       vnfItemModelVersion, vnfItemModelNameVersionId, serviceItemServiceInstanceId, serviceItemPersonaModelId,\n		       serviceItemModelName, serviceItemModelType, serviceItemModelVersion, serviceItemModelNameVersionId,\n		       vfModuleItemVfModuleName, vfModuleItemPersonaModelId, vfModuleItemPersonaModelVersion, vfModuleItemModelName, \n		       vfModuleItemModelNameVersionId, tenantItemTenantId, cloudRegionItemCloudRegionId;\n		try {\n			//\n			// vnfItem\n			//\n			vnfItemVnfId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfID;\n			vnfItemVnfType = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfType;\n			vnfItemVnfType = vnfItemVnfType.substring(vnfItemVnfType.lastIndexOf(\"/\")+1);\n			vnfItemPersonaModelId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelId;\n			vnfItemPersonaModelVersion = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelVersion;\n			vnfItemModelName = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;\n			vnfItemModelVersion = 		$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(2).propertyValue;\n			vnfItemModelNameVersionId = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// serviceItem\n			//\n			serviceItemServiceInstanceId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.serviceInstanceID;\n			serviceItemPersonaModelId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelId;\n			serviceItemModelName = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;\n			serviceItemModelType = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(1).propertyValue;\n			serviceItemModelVersion = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelVersion;\n			serviceItemModelNameVersionId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// Find the index for base vf module and non-base vf module\n			//\n			int baseIndex = -1;\n			int nonBaseIndex = -1;\n			List<AAINQF199InventoryResponseItem> inventoryItems = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems;\n			for (AAINQF199InventoryResponseItem m : inventoryItems) {\n				if (m.vfModule != null && m.vfModule.isBaseVfModule == true) {\n					baseIndex = inventoryItems.indexOf(m);\n				} else if (m.vfModule != null && m.vfModule.isBaseVfModule == false && m.vfModule.orchestrationStatus == null) {\n					nonBaseIndex = inventoryItems.indexOf(m);\n				}\n				//\n				if (baseIndex != -1 && nonBaseIndex != -1) {\n					break;\n				}\n			}\n			//\n			// Report the error if either base vf module or non-base vf module is not found\n			//\n			if (baseIndex == -1 || nonBaseIndex == -1) {\n				System.err.println(\"Either base or non-base vf module is not found from AAI response.\");\n				retract($aainqf199RequestWrapper);\n				retract($aainqf199ResponseWrapper);\n				retract($manager);\n				retract($event);\n				return;\n			}\n			//\n			// This comes from the base module\n			//\n			vfModuleItemVfModuleName = 			$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(baseIndex).vfModule.vfModuleName;\n			vfModuleItemVfModuleName = vfModuleItemVfModuleName.replace(\"Vfmodule\", \"vDNS\");\n			//\n			// vfModuleItem - NOT the base module\n			//\n			vfModuleItemPersonaModelId = 		$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).vfModule.personaModelId;\n			vfModuleItemPersonaModelVersion = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).vfModule.personaModelVersion;\n			vfModuleItemModelName = 			$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).extraProperties.extraProperty.get(0).propertyValue;\n			vfModuleItemModelNameVersionId = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// tenantItem\n			//\n			tenantItemTenantId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).tenant.tenantId;\n			//\n			// cloudRegionItem\n			//\n			cloudRegionItemCloudRegionId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).items.inventoryResponseItems.get(0).cloudRegion.cloudRegionId;\n			//\n		} catch (Exception e) {\n			e.printStackTrace();\n			VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n			notification.notification = ControlLoopNotificationType.REJECTED;\n			notification.message = \"Exception occurred \" + e.getMessage();\n			notification.policyName = drools.getRule().getName();\n			notification.policyScope = \"${policyScope}\";\n			notification.policyVersion = \"${policyVersion}\";\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e1) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e1.printStackTrace();\n			}\n			//\n			notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n			notification.message = \"Invalid named-query response from AAI\";\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n                PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e1) {\n                System.out.println(\"Can\'t deliver notification: \" + notification);\n                e1.printStackTrace();\n            }\n			//\n			// Retract everything\n			//\n			retract($aainqf199RequestWrapper);\n			retract($aainqf199ResponseWrapper);\n			retract($manager);\n			retract($event);\n			return;\n		}	\n		//\n		// Extracted fields should not be null\n		//\n		if ((vnfItemVnfId == null) || (vnfItemVnfType == null) ||\n		    (vnfItemPersonaModelId == null) || (vnfItemModelName == null) ||\n		    (vnfItemModelVersion == null) || (vnfItemModelNameVersionId == null) ||\n		    (serviceItemServiceInstanceId == null) || (serviceItemModelName == null) ||\n		    (serviceItemModelType == null) || (serviceItemModelVersion == null) ||\n		    (serviceItemModelNameVersionId == null) || (vfModuleItemVfModuleName == null) ||\n		    (vfModuleItemPersonaModelId == null) || (vfModuleItemPersonaModelVersion == null) ||\n		    (vfModuleItemModelName == null) || (vfModuleItemModelNameVersionId == null) ||\n		    (tenantItemTenantId == null) || (cloudRegionItemCloudRegionId == null)) {\n			//\n			System.err.println(\"some fields are missing from AAI response.\");\n			//\n			// Fail and retract everything\n			//\n			retract($aainqf199RequestWrapper);\n			retract($aainqf199ResponseWrapper);\n			retract($manager);\n			retract($event);\n			return;\n		}\n		//\n		// We don\'t need them any more\n		//\n		retract($aainqf199ResponseWrapper);\n		retract($aainqf199RequestWrapper);  \n		//\n		// check the actor of this closed loop\n		//\n		switch ($params.getActor()) {\n			case \"APPC\":\n			{\n				//\n				// Construct an APPC request\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"ModifyConfig\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// insert operationWrapper into memory\n				//\n				insert(operationWrapper);\n				//\n				Request request = new Request();\n				request.CommonHeader = new CommonHeader();\n				request.CommonHeader.RequestID = $event.requestID;\n				request.Action = operation.operation;\n				request.Payload = new HashMap<String, Object>();\n				//\n				// Fill in the payload\n				// Hardcode genericVNF for now since AAI has not been ready for vFirewall demo case\n				//\n				String genericVNF = \"zdfw1fwl01pgn02\";\n				request.Payload.put(\"generic-vnf.vnf-id\", genericVNF);\n				//\n				PGRequest pgRequest = new PGRequest();\n				pgRequest.pgStreams = new PGStreams();\n				\n				PGStream pgStream;\n				for(int i = 0; i < 5; i++){\n					pgStream = new PGStream();\n					pgStream.streamId = \"fw_udp\"+(i+1);\n					pgStream.isEnabled = \"true\";\n					pgRequest.pgStreams.pgStream.add(pgStream);\n				}\n				request.Payload.put(\"pg-streams\", pgRequest.pgStreams);\n				\n				if (request != null) {\n					//\n					// Insert request into memory\n					//\n					insert(request);\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					// message and history ??\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"${policyScope}\";\n					notification.policyVersion = \"${policyVersion}\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Now send the operation request\n					//\n					if (request instanceof Request) {\n						try {\n							System.out.println(\"APPC request sent:\");\n							System.out.println(Serialization.gsonPretty.toJson(request));\n							PolicyEngine.manager.deliver($params.getAppcTopic(), request);\n						} catch (Exception e) {\n							e.printStackTrace();\n							System.out.println(\"Can\'t deliver request: \" + request);\n						}\n					}\n				} else {\n					//\n					// what happens if it is null\n					//\n				}\n			}\n			break;\n			case \"MSO\":\n			{\n				//\n				// Construct an operation\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"createModuleInstance\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// Construct an MSO request\n				//\n				MSORequest request = new MSORequest();\n				request.requestDetails = new MSORequestDetails();\n				request.requestDetails.modelInfo = new MSOModelInfo();\n				request.requestDetails.cloudConfiguration = new MSOCloudConfiguration();\n				request.requestDetails.requestInfo = new MSORequestInfo();\n				request.requestDetails.requestParameters = new MSORequestParameters();\n				request.requestDetails.requestParameters.userParams = null;\n				//\n				// cloudConfiguration\n				//\n				request.requestDetails.cloudConfiguration.lcpCloudRegionId = cloudRegionItemCloudRegionId;\n				request.requestDetails.cloudConfiguration.tenantId = tenantItemTenantId;\n				//\n				// modelInfo\n				//\n				request.requestDetails.modelInfo.modelType = \"vfModule\";\n				request.requestDetails.modelInfo.modelInvariantId = vfModuleItemPersonaModelId;\n				request.requestDetails.modelInfo.modelNameVersionId = vfModuleItemModelNameVersionId;\n				request.requestDetails.modelInfo.modelName = vfModuleItemModelName;\n				request.requestDetails.modelInfo.modelVersion = vfModuleItemPersonaModelVersion;\n				//\n				// requestInfo\n				//\n				request.requestDetails.requestInfo.instanceName = vfModuleItemVfModuleName;\n				request.requestDetails.requestInfo.source = \"POLICY\";\n				request.requestDetails.requestInfo.suppressRollback = false;\n				//\n				// relatedInstanceList\n				//\n				MSORelatedInstanceListElement relatedInstanceListElement1 = new MSORelatedInstanceListElement();\n				MSORelatedInstanceListElement relatedInstanceListElement2 = new MSORelatedInstanceListElement();\n				relatedInstanceListElement1.relatedInstance = new MSORelatedInstance();\n				relatedInstanceListElement2.relatedInstance = new MSORelatedInstance();\n				//\n				relatedInstanceListElement1.relatedInstance.instanceId = serviceItemServiceInstanceId;\n				relatedInstanceListElement1.relatedInstance.modelInfo = new MSOModelInfo();\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelType = \"service\";\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelInvariantId = serviceItemPersonaModelId;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelNameVersionId = serviceItemModelNameVersionId;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelName = serviceItemModelName;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelVersion = serviceItemModelVersion;\n				//\n				relatedInstanceListElement2.relatedInstance.instanceId = vnfItemVnfId;\n				relatedInstanceListElement2.relatedInstance.modelInfo = new MSOModelInfo();\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelType = \"vnf\";\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelInvariantId = vnfItemPersonaModelId;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelNameVersionId = vnfItemModelNameVersionId;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelName = vnfItemModelName;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelVersion = vnfItemModelVersion;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelCustomizationName = vnfItemVnfType;\n				//	\n				request.requestDetails.relatedInstanceList.add(relatedInstanceListElement1);\n				request.requestDetails.relatedInstanceList.add(relatedInstanceListElement2);\n				//\n				// print MSO request for debug\n				//\n				System.out.println(\"MSO request sent:\");\n				System.out.println(Serialization.gsonPretty.toJson(request));\n				//\n				//\n				//\n				if (request != null) {\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"${policyScope}\";\n					notification.policyVersion = \"${policyVersion}\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Concatenate serviceItemServiceInstanceId and vnfItemVnfId to msoURL\n					//\n					String MSOUrl = $params.getMsoURL() + \"/serviceInstances/v2/\" + serviceItemServiceInstanceId + \"/vnfs/\" + vnfItemVnfId + \"/vfModules\";\n					//\n					// Call MSO\n					//\n					MSOResponse response = MSOManager.createModuleInstance(MSOUrl, $params.getMsoURL(), $params.getMsoUsername(), $params.getMsoPassword(), request);\n					//\n					if (response != null) {\n						//\n						// Assign requestId\n						//\n						request.requestId = $event.requestID.toString();						\n						response.request.requestId = $event.requestID.toString();\n						//\n						// Insert facts\n						//\n						insert(operationWrapper);\n						insert(request);\n						insert(response);\n					} else {\n						//\n						// MSO request not even accepted\n						//\n						notification.message = operationWrapper.operation.toMessage();\n						operationWrapper.operation.message = operationWrapper.operation.toMessage();\n						operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n						$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n						notification.history.add(operationWrapper.operation);\n						notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n						//\n						// Let interested parties know\n						//\n						try {\n							System.out.println(Serialization.gsonPretty.toJson(notification));\n							PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n						} catch (Exception e) {\n							System.out.println(\"Can\'t deliver notification: \" + notification);\n							e.printStackTrace();\n						}\n	                    notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n                        try {\n                        	System.out.println(Serialization.gsonPretty.toJson(notification));\n                        	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n                        } catch (Exception e) {\n                        	System.out.println(\"Can\'t deliver notification: \" + notification);\n                        	e.printStackTrace();\n                        }\n						//\n						// Retract everything\n						//\n						retract($event);\n						retract($manager);\n					}\n				} else {\n					System.err.println(\"constructed MSO request is invalid.\");\n				}\n			}\n			break; \n		} \nend\n		\n/*\n*\n* This rule responds to APPC Response Events\n*\n*/\nrule \"${policyName}.APPC.RESPONSE\"\n	when\n		$params : Params( getClosedLoopControlName() == \"${closedLoopControlName}\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$operationWrapper : ControlLoopOperationWrapper( requestID == $event.requestID )\n		$request : Request( getCommonHeader().RequestID == $event.requestID )\n		$response : Response( getCommonHeader().RequestID == $event.requestID )	\n	then\n		System.out.println(\"rule APPC.RESPONSE is triggered.\");\n		if ($response.Status == null) {\n			$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n			$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n		} \n		//\n		// Get the Response Code\n		//\n		ResponseCode code = ResponseCode.toResponseCode($response.Status.Code);\n		if (code == null) {\n			$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n			$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n		}\n		//\n		// Construct notification\n		//\n		VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n		notification.from = \"policy\";\n		notification.policyName = drools.getRule().getName();\n		notification.policyScope = \"${policyScope}\";\n		notification.policyVersion = \"${policyVersion}\";\n		notification.message = $operationWrapper.operation.toMessage();\n		$operationWrapper.operation.message = $operationWrapper.operation.toMessage();\n		//\n		// Ok, let\'s figure out what APP-C\'s response is\n		//\n		switch (code) {\n			case ACCEPT:\n				$operationWrapper.operation.outcome = \"PROCESSING\";\n				break;\n			case ERROR:\n			case REJECT:\n				$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n				$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n				break;\n			case SUCCESS:\n				$operationWrapper.operation.outcome = \"SUCCESS\";\n				$manager.setControlLoopResult(\"SUCCESS\");\n				break;\n			case FAILURE:\n				$operationWrapper.operation.outcome = \"FAILURE\";\n				$manager.setControlLoopResult(\"FAILURE\");\n				break;\n		}\n		if ($operationWrapper.operation.outcome.equals(\"SUCCESS\")) {\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n            notification.notification = ControlLoopNotificationType.FINAL_SUCCESS;\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n\n			//\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		} else if ($operationWrapper.operation.outcome.equals(\"PROCESSING\")) {\n			retract($response);\n		} else {\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n            notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n			//\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		}\n		\nend		\n\n/*\n*\n* This rule is used to clean up APPC response\n*\n*/		\nrule \"${policyName}.APPC.RESPONSE.CLEANUP\"\n	when\n		$params : Params( getClosedLoopControlName() == \"${closedLoopControlName}\" )\n        $response : Response($id : getCommonHeader().RequestID )\n		not ( VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), requestID == $id, closedLoopEventStatus == ControlLoopEventStatus.ONSET ) ) \n	then\n		System.out.println(\"rule APPC.RESPONSE.CLEANUP is triggered.\");\n		retract($response);\nend\n\n/*\n*\n* This rule responds to MSO Response Events\n*\n*/\nrule \"${policyName}.MSO.RESPONSE\"\n	when\n		$params : Params( getClosedLoopControlName() == \"${closedLoopControlName}\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$operationWrapper : ControlLoopOperationWrapper( requestID == $event.requestID )\n		$request : MSORequest( requestId == $event.requestID.toString() )\n		$response : MSOResponse( request.requestId == $event.requestID.toString() )	\n	then\n		System.out.println(\"rule MSO.RESPONSE is triggered.\");\n		//\n		// Construct notification\n		//\n		VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n		notification.from = \"policy\";\n		notification.policyName = drools.getRule().getName();\n		notification.policyScope = \"${policyScope}\";\n		notification.policyVersion = \"${policyVersion}\";\n		notification.message = $operationWrapper.operation.toMessage();\n		$operationWrapper.operation.message = $operationWrapper.operation.toMessage();\n		//\n		// The operation can either be succeeded or failed\n		// \n		if($response.request.requestStatus.requestState.equals(\"COMPLETE\")) {\n			$operationWrapper.operation.outcome = \"SUCCESS\";\n			$manager.setControlLoopResult(\"SUCCESS\");\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n			notification.notification = ControlLoopNotificationType.FINAL_SUCCESS;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n            //\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		} else {\n			$operationWrapper.operation.outcome = \"FAILURE\";\n			$manager.setControlLoopResult(\"FAILURE\");\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n			notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n            //\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		}\n		\nend	','2017-03-14 19:55:47','demo');
+INSERT INTO `brmsparamtemplate` VALUES (2,'ControlLoopDemo__closedLoopControlName','ControlLoopDemo__closedLoopControlName','\r\n\r\n/*-\n * ============LICENSE_START=======================================================\n * archetype-closed-loop-demo-rules\n * ================================================================================\n * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.\n * ================================================================================\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============LICENSE_END=========================================================\n */\n\npackage org.onap.policy.controlloop;\n\nimport java.util.List;\nimport java.util.LinkedList;\nimport java.util.Map;\nimport java.util.HashMap;\nimport java.util.UUID;\n\nimport org.onap.policy.controlloop.VirtualControlLoopEvent;\nimport org.onap.policy.controlloop.ControlLoopEventStatus;\nimport org.onap.policy.controlloop.VirtualControlLoopNotification;\nimport org.onap.policy.controlloop.ControlLoopNotificationType;\nimport org.onap.policy.controlloop.ControlLoopOperation;\nimport org.onap.policy.controlloop.ControlLoopOperationWrapper;\nimport org.onap.policy.template.demo.ControlLoopException;\n\nimport org.onap.policy.aai.AAINQF199.AAINQF199CloudRegion;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ExtraProperties;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ExtraProperty;\nimport org.onap.policy.aai.AAINQF199.AAINQF199GenericVNF;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InstanceFilters;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InventoryResponseItem;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InventoryResponseItems;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Manager;\nimport org.onap.policy.aai.AAINQF199.AAINQF199NamedQuery;\nimport org.onap.policy.aai.AAINQF199.AAINQF199QueryParameters;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Request;\nimport org.onap.policy.aai.AAINQF199.AAINQF199RequestWrapper;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Response;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ResponseWrapper;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ServiceInstance;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Tenant;\nimport org.onap.policy.aai.AAINQF199.AAINQF199VfModule;\nimport org.onap.policy.aai.AAINQF199.AAINQF199VServer;\nimport org.onap.policy.aai.util.Serialization;\n\nimport org.onap.policy.appc.CommonHeader;\nimport org.onap.policy.appc.Request;\nimport org.onap.policy.appc.Response;\nimport org.onap.policy.appc.ResponseCode;\nimport org.onap.policy.appc.ResponseStatus;\nimport org.onap.policy.appc.ResponseValue;\n\nimport org.onap.policy.template.demo.EventManager;\nimport org.onap.policy.vnf.trafficgenerator.PGRequest;\nimport org.onap.policy.vnf.trafficgenerator.PGStream;\nimport org.onap.policy.vnf.trafficgenerator.PGStreams;\n\nimport org.onap.policy.mso.MSOManager;\nimport org.onap.policy.mso.MSORequest;\nimport org.onap.policy.mso.MSORequestStatus;\nimport org.onap.policy.mso.MSORequestDetails;\nimport org.onap.policy.mso.MSOModelInfo;\nimport org.onap.policy.mso.MSOCloudConfiguration;\nimport org.onap.policy.mso.MSORequestInfo;\nimport org.onap.policy.mso.MSORequestParameters;\nimport org.onap.policy.mso.MSORelatedInstanceListElement;\nimport org.onap.policy.mso.MSORelatedInstance;\nimport org.onap.policy.mso.MSOResponse;\n\nimport org.onap.policy.drools.system.PolicyEngine;\n\n//\n// These parameters are required to build the runtime policy\n//\ndeclare Params\n    closedLoopControlName : String\n    actor : String\n    aaiURL : String\n    aaiUsername : String\n    aaiPassword : String\n    msoURL : String\n    msoUsername : String\n    msoPassword : String\n    aaiNamedQueryUUID : String\n    aaiPatternMatch : int \n    notificationTopic : String\n    appcTopic : String\nend\n\n/*\n*\n* Called once and only once to insert the parameters into working memory for this Closed Loop policy.\n* (Comment SETUP rule out for the first ONAP opensource release since policy BRMS_GW already puts a Params fact in there)\n*\n*\n*rule \"${policyName}.SETUP\"\n*	when\n*	then\n*		System.out.println(\"rule SETUP is triggered.\");\n*		Params params = new Params();\n*		params.setClosedLoopControlName(\"${closedLoopControlName}\");\n*		params.setActor(\"${actor}\");\n*		params.setAaiURL(\"${aaiURL}\");\n*		params.setAaiUsername(\"${aaiUsername}\");\n*		params.setAaiPassword(\"${aaiPassword}\");\n*		params.setMsoURL(\"${msoURL}\");\n*		params.setMsoUsername(\"${msoUsername}\");\n*		params.setMsoPassword(\"${msoPassword}\");\n*		params.setAaiNamedQueryUUID(\"${aaiNamedQueryUUID}\");\n*		params.setAaiPatternMatch(${aaiPatternMatch});\n*		params.setNotificationTopic(\"${notificationTopic}\");\n*		params.setAppcTopic(\"${appcTopic}\");\n*		//\n*		// This stays in memory as long as the rule is alive and running\n*		//\n*		insert(params);\n*end\n*/\n/*\n*\n* This rule responds to DCAE Events\n*\n*/\nrule \"${policyName}.EVENT\"\n	when\n        $params : Params( getClosedLoopControlName() == \"${closedLoopControlName}\" )\n        $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n        not ( EventManager( closedLoopControlName == $event.closedLoopControlName ))\n	then\n		System.out.println(\"rule EVENT is triggered.\");\n		try {\n			// \n			// Check the requestID in the event to make sure it is not null before we create the EventManager. \n			// The EventManager will do extra syntax checking as well check if the closed loop is disabled/\n			//\n			if ($event.requestID == null) {\n				VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n				notification.notification = ControlLoopNotificationType.REJECTED;\n				notification.from = \"policy\";\n				notification.message = \"Missing requestID from DCAE event\";\n				notification.policyName = drools.getRule().getName();\n				notification.policyScope = \"${policyScope}\";\n				notification.policyVersion = \"${policyVersion}\";\n				//\n				// Let interested parties know\n				//\n				try {\n					System.out.println(Serialization.gsonPretty.toJson(notification));\n					PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n				} catch (Exception e) {\n					e.printStackTrace();\n					System.out.println(\"Can\'t deliver notification: \" + notification);\n				}\n				//\n				// Retract it from memory\n				//\n				retract($event);\n				System.out.println(\"Event with requestID=null has been retracted.\");\n			} else {\n				//\n				// Create an EventManager\n				//\n				EventManager manager = new EventManager($params.getClosedLoopControlName(), $event.requestID, $event.target);\n				//\n				// Determine if EventManager can actively process the event (i.e. syntax)\n				//\n				VirtualControlLoopNotification notification = manager.activate($event);\n				notification.from = \"policy\"; \n				notification.policyName = drools.getRule().getName();\n				notification.policyScope = \"${policyScope}\";\n				notification.policyVersion = \"${policyVersion}\";\n				//\n				// Are we actively pursuing this event?\n				//\n				if (notification.notification == ControlLoopNotificationType.ACTIVE) {\n					//\n					// Insert Event Manager into memory, this will now kick off processing.\n					//\n					insert(manager);\n					//\n					// Let interested parties know\n					//\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						e.printStackTrace();\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n					}		\n				} else {\n					//\n					// Let interested parties know\n					//\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						e.printStackTrace();\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n					}\n					//\n					// Retract it from memory\n					//\n					retract($event);\n				}\n				//\n				// Now that the manager is inserted into Drools working memory, we\'ll wait for\n				// another rule to fire in order to continue processing. This way we can also\n				// then screen for additional ONSET and ABATED events for this same RequestIDs \n				// and for different RequestIDs but with the same closedLoopControlName and target.\n				//\n			}\n		//\n		} catch (Exception e) {\n			e.printStackTrace();\n			VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n			notification.notification = ControlLoopNotificationType.REJECTED;\n			notification.message = \"Exception occurred \" + e.getMessage();\n			notification.policyName = drools.getRule().getName();\n			notification.policyScope = \"${policyScope}\";\n			notification.policyVersion = \"${policyVersion}\";\n			//\n			//\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e1) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e1.printStackTrace();\n			}\n			//\n			// Retract the event\n			//\n			retract($event);\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid ONSET, closed loop is enabled and an Event Manager\n* is created. We can start the operations for this closed loop.\n*\n*/\nrule \"${policyName}.EVENT.MANAGER\"\n	when\n		$params : Params( getClosedLoopControlName() == \"${closedLoopControlName}\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName, controlLoopResult == null)\n	then\n		System.out.println(\"rule EVENT.MANAGER is triggered.\");\n		//\n		// Check which event this is.\n		//\n		EventManager.NEW_EVENT_STATUS eventStatus = $manager.onNewEvent($event);\n		//\n		// We only want the initial ONSET event in memory,\n		// all the other events need to be retracted to support\n		// cleanup and avoid the other rules being fired for this event.\n		//\n		if (eventStatus != EventManager.NEW_EVENT_STATUS.FIRST_ONSET) {\n			System.out.println(\"Retracting \"+eventStatus+\" Event.\");\n			retract($event);\n			return;\n		}\n		//\n		// Now the event in memory is first onset event\n		//\n		try {\n			//\n			// Pull the known AAI field from the Event\n			//\n			// generic-vnf is needed for vFirewall case\n			// vserver-name is needed for vLoadBalancer case\n			//\n			String genericVNF = $event.AAI.get(\"generic-vnf.vnf-id\");\n			String vserver = $event.AAI.get(\"vserver.vserver-name\");\n			//\n			// Check if we are implementing a simple pattern match.\n			//\n			if ($params.getAaiPatternMatch() == 1) {\n				//\n				// Yes\n				//\n				//Basic naming characteristics:\n				//VF Name (9 char)+VM name (13 char total)+VFC (19 char total)\n				//Example: \n				//VF Name (9 characters):    cscf0001v\n				//VM Name(13 characters): cscf0001vm001\n				//VFC name(19 characters): cscf0001vm001cfg001\n				//\n				// zdfw1fwl01fwl02 or zdfw1fwl01fwl01  \n				// replaced with\n				// zdfw1fwl01pgn02 or zdfw1fwl01pgn01\n				//\n				int index = genericVNF.lastIndexOf(\"fwl\");\n				if (index == -1) {\n					System.err.println(\"The generic-vnf.vnf-id from DCAE Event is not valid.\");\n				} else {\n					genericVNF = genericVNF.substring(0, index) + \"pgn\" + genericVNF.substring(index+\"fwl\".length());\n				}\n				//\n				// Construct an APPC request\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"ModifyConfig\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// insert operationWrapper into memory\n				//\n				insert(operationWrapper);\n				//\n				Request request = new Request();\n				request.CommonHeader = new CommonHeader();\n				request.CommonHeader.RequestID = $event.requestID;\n				request.Action = operation.operation;\n				request.Payload = new HashMap<String, Object>();\n				//\n				// Fill in the payload\n				//\n				request.Payload.put(\"generic-vnf.vnf-id\", genericVNF);\n				//\n				PGRequest pgRequest = new PGRequest();\n				pgRequest.pgStreams = new PGStreams();\n				\n				PGStream pgStream;\n				for(int i = 0; i < 5; i++){\n					pgStream = new PGStream();\n					pgStream.streamId = \"fw_udp\"+(i+1);\n					pgStream.isEnabled = \"true\";\n					pgRequest.pgStreams.pgStream.add(pgStream);\n				}\n				request.Payload.put(\"pg-streams\", pgRequest.pgStreams);\n				\n				if (request != null) {\n					//\n					// Insert request into memory\n					//\n					insert(request);\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					// message and history ??\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"${policyScope}\";\n					notification.policyVersion = \"${policyVersion}\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Now send the operation request\n					//\n					if (request instanceof Request) {\n						try {\n							System.out.println(\"APPC request sent:\");\n							System.out.println(Serialization.gsonPretty.toJson(request));\n							PolicyEngine.manager.deliver($params.getAppcTopic(), request);\n						} catch (Exception e) {\n							e.printStackTrace();\n							System.out.println(\"Can\'t deliver request: \" + request);\n						}\n					}\n				} else {\n					//\n					// what happens if it is null\n					//\n				}\n				//\n			} else {\n				//\n				// create AAI named-query request with UUID started with \"F199\"\n				//\n				AAINQF199Request aainqf199request = new AAINQF199Request();\n				AAINQF199QueryParameters aainqf199queryparam = new AAINQF199QueryParameters();\n				AAINQF199NamedQuery aainqf199namedquery = new AAINQF199NamedQuery();\n				AAINQF199InstanceFilters aainqf199instancefilter = new AAINQF199InstanceFilters();\n				//\n				// queryParameters\n				//\n				aainqf199namedquery.namedQueryUUID = UUID.fromString($params.getAaiNamedQueryUUID()); \n				aainqf199queryparam.namedQuery = aainqf199namedquery;\n				aainqf199request.queryParameters = aainqf199queryparam;\n				//\n				// instanceFilters\n				//\n				Map aainqf199instancefiltermap = new HashMap();\n				Map aainqf199instancefiltermapitem = new HashMap();\n				aainqf199instancefiltermapitem.put(\"vserver-name\", vserver); \n				aainqf199instancefiltermap.put(\"vserver\", aainqf199instancefiltermapitem);\n				aainqf199instancefilter.instanceFilter.add(aainqf199instancefiltermap);\n				aainqf199request.instanceFilters = aainqf199instancefilter;\n				//\n				// print aainqf199request for debug\n				//\n				System.out.println(\"AAI Request sent:\");\n				System.out.println(Serialization.gsonPretty.toJson(aainqf199request));\n				//\n				// Create AAINQF199RequestWrapper\n				//\n				AAINQF199RequestWrapper aainqf199RequestWrapper = new AAINQF199RequestWrapper($event.requestID, aainqf199request);\n				//\n				// insert aainqf199request into memory\n				//\n				insert(aainqf199RequestWrapper);\n			}\n			//\n		} catch (Exception e) {\n		 e.printStackTrace();\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid ONSET, closed loop is enabled, an Event Manager\n* is created, AAI Manager and AAI Request are ready in memory. We can start sending query to AAI and then wait for response.\n*\n*/\nrule \"${policyName}.EVENT.MANAGER.AAINQF199REQUEST\"\n	when\n		$params : Params( getClosedLoopControlName() == \"${closedLoopControlName}\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$aainqf199RequestWrapper : AAINQF199RequestWrapper(requestID == $event.requestID)\n	then\n		System.out.println(\"rule EVENT.MANAGER.AAINQF199REQUEST is triggered.\");\n		//\n		// send the request\n		//\n		AAINQF199Response aainqf199response = AAINQF199Manager.postQuery($params.getAaiURL(), $params.getAaiUsername(), $params.getAaiPassword(),\n													   $aainqf199RequestWrapper.aainqf199request, $event.requestID);\n		//\n		// Check AAI response\n		//\n		if (aainqf199response == null) {\n			System.err.println(\"Failed to get AAI response\");\n			//\n			// Fail and retract everything\n			//\n			retract($event);\n			retract($manager);\n			retract($aainqf199RequestWrapper);\n		} else {\n			//\n			// Create AAINQF199ResponseWrapper\n			//\n			AAINQF199ResponseWrapper aainqf199ResponseWrapper = new AAINQF199ResponseWrapper($event.requestID, aainqf199response);\n			//\n			// insert aainqf199ResponseWrapper to memeory\n			//\n			insert(aainqf199ResponseWrapper);\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid AAI response. We can start sending request to APPC or MSO now.\n*\n*/\nrule \"${policyName}.EVENT.MANAGER.AAINQF199RESPONSE\"\n	when \n		$params : Params( getClosedLoopControlName() == \"${closedLoopControlName}\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$aainqf199RequestWrapper : AAINQF199RequestWrapper(requestID == $event.requestID)\n		$aainqf199ResponseWrapper : AAINQF199ResponseWrapper(requestID == $event.requestID)\n	then\n		System.out.println(\"rule EVENT.MANAGER.AAINQF199RESPONSE is triggered.\");\n		//\n		// Extract related fields out of AAINQF199RESPONSE\n		//\n		String vnfItemVnfId, vnfItemVnfType, vnfItemPersonaModelId, vnfItemPersonaModelVersion, vnfItemModelName, \n		       vnfItemModelVersion, vnfItemModelNameVersionId, serviceItemServiceInstanceId, serviceItemPersonaModelId,\n		       serviceItemModelName, serviceItemModelType, serviceItemModelVersion, serviceItemModelNameVersionId,\n		       vfModuleItemVfModuleName, vfModuleItemPersonaModelId, vfModuleItemPersonaModelVersion, vfModuleItemModelName, \n		       vfModuleItemModelNameVersionId, tenantItemTenantId, cloudRegionItemCloudRegionId;\n		try {\n			//\n			// vnfItem\n			//\n			vnfItemVnfId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfID;\n			vnfItemVnfType = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfType;\n			vnfItemVnfType = vnfItemVnfType.substring(vnfItemVnfType.lastIndexOf(\"/\")+1);\n			vnfItemPersonaModelId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelId;\n			vnfItemPersonaModelVersion = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelVersion;\n			vnfItemModelName = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;\n			vnfItemModelVersion = 		$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(2).propertyValue;\n			vnfItemModelNameVersionId = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// serviceItem\n			//\n			serviceItemServiceInstanceId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.serviceInstanceID;\n			serviceItemPersonaModelId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelId;\n			serviceItemModelName = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;\n			serviceItemModelType = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(1).propertyValue;\n			serviceItemModelVersion = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelVersion;\n			serviceItemModelNameVersionId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// Find the index for base vf module and non-base vf module\n			//\n			int baseIndex = -1;\n			int nonBaseIndex = -1;\n			List<AAINQF199InventoryResponseItem> inventoryItems = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems;\n			for (AAINQF199InventoryResponseItem m : inventoryItems) {\n				if (m.vfModule != null && m.vfModule.isBaseVfModule == true) {\n					baseIndex = inventoryItems.indexOf(m);\n				} else if (m.vfModule != null && m.vfModule.isBaseVfModule == false && m.vfModule.orchestrationStatus == null) {\n					nonBaseIndex = inventoryItems.indexOf(m);\n				}\n				//\n				if (baseIndex != -1 && nonBaseIndex != -1) {\n					break;\n				}\n			}\n			//\n			// Report the error if either base vf module or non-base vf module is not found\n			//\n			if (baseIndex == -1 || nonBaseIndex == -1) {\n				System.err.println(\"Either base or non-base vf module is not found from AAI response.\");\n				retract($aainqf199RequestWrapper);\n				retract($aainqf199ResponseWrapper);\n				retract($manager);\n				retract($event);\n				return;\n			}\n			//\n			// This comes from the base module\n			//\n			vfModuleItemVfModuleName = 			$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(baseIndex).vfModule.vfModuleName;\n			vfModuleItemVfModuleName = vfModuleItemVfModuleName.replace(\"Vfmodule\", \"vDNS\");\n			//\n			// vfModuleItem - NOT the base module\n			//\n			vfModuleItemPersonaModelId = 		$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).vfModule.personaModelId;\n			vfModuleItemPersonaModelVersion = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).vfModule.personaModelVersion;\n			vfModuleItemModelName = 			$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).extraProperties.extraProperty.get(0).propertyValue;\n			vfModuleItemModelNameVersionId = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// tenantItem\n			//\n			tenantItemTenantId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).tenant.tenantId;\n			//\n			// cloudRegionItem\n			//\n			cloudRegionItemCloudRegionId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).items.inventoryResponseItems.get(0).cloudRegion.cloudRegionId;\n			//\n		} catch (Exception e) {\n			e.printStackTrace();\n			VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n			notification.notification = ControlLoopNotificationType.REJECTED;\n			notification.message = \"Exception occurred \" + e.getMessage();\n			notification.policyName = drools.getRule().getName();\n			notification.policyScope = \"${policyScope}\";\n			notification.policyVersion = \"${policyVersion}\";\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e1) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e1.printStackTrace();\n			}\n			//\n			notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n			notification.message = \"Invalid named-query response from AAI\";\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n                PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e1) {\n                System.out.println(\"Can\'t deliver notification: \" + notification);\n                e1.printStackTrace();\n            }\n			//\n			// Retract everything\n			//\n			retract($aainqf199RequestWrapper);\n			retract($aainqf199ResponseWrapper);\n			retract($manager);\n			retract($event);\n			return;\n		}	\n		//\n		// Extracted fields should not be null\n		//\n		if ((vnfItemVnfId == null) || (vnfItemVnfType == null) ||\n		    (vnfItemPersonaModelId == null) || (vnfItemModelName == null) ||\n		    (vnfItemModelVersion == null) || (vnfItemModelNameVersionId == null) ||\n		    (serviceItemServiceInstanceId == null) || (serviceItemModelName == null) ||\n		    (serviceItemModelType == null) || (serviceItemModelVersion == null) ||\n		    (serviceItemModelNameVersionId == null) || (vfModuleItemVfModuleName == null) ||\n		    (vfModuleItemPersonaModelId == null) || (vfModuleItemPersonaModelVersion == null) ||\n		    (vfModuleItemModelName == null) || (vfModuleItemModelNameVersionId == null) ||\n		    (tenantItemTenantId == null) || (cloudRegionItemCloudRegionId == null)) {\n			//\n			System.err.println(\"some fields are missing from AAI response.\");\n			//\n			// Fail and retract everything\n			//\n			retract($aainqf199RequestWrapper);\n			retract($aainqf199ResponseWrapper);\n			retract($manager);\n			retract($event);\n			return;\n		}\n		//\n		// We don\'t need them any more\n		//\n		retract($aainqf199ResponseWrapper);\n		retract($aainqf199RequestWrapper);  \n		//\n		// check the actor of this closed loop\n		//\n		switch ($params.getActor()) {\n			case \"APPC\":\n			{\n				//\n				// Construct an APPC request\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"ModifyConfig\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// insert operationWrapper into memory\n				//\n				insert(operationWrapper);\n				//\n				Request request = new Request();\n				request.CommonHeader = new CommonHeader();\n				request.CommonHeader.RequestID = $event.requestID;\n				request.Action = operation.operation;\n				request.Payload = new HashMap<String, Object>();\n				//\n				// Fill in the payload\n				// Hardcode genericVNF for now since AAI has not been ready for vFirewall demo case\n				//\n				String genericVNF = \"zdfw1fwl01pgn02\";\n				request.Payload.put(\"generic-vnf.vnf-id\", genericVNF);\n				//\n				PGRequest pgRequest = new PGRequest();\n				pgRequest.pgStreams = new PGStreams();\n				\n				PGStream pgStream;\n				for(int i = 0; i < 5; i++){\n					pgStream = new PGStream();\n					pgStream.streamId = \"fw_udp\"+(i+1);\n					pgStream.isEnabled = \"true\";\n					pgRequest.pgStreams.pgStream.add(pgStream);\n				}\n				request.Payload.put(\"pg-streams\", pgRequest.pgStreams);\n				\n				if (request != null) {\n					//\n					// Insert request into memory\n					//\n					insert(request);\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					// message and history ??\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"${policyScope}\";\n					notification.policyVersion = \"${policyVersion}\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Now send the operation request\n					//\n					if (request instanceof Request) {\n						try {\n							System.out.println(\"APPC request sent:\");\n							System.out.println(Serialization.gsonPretty.toJson(request));\n							PolicyEngine.manager.deliver($params.getAppcTopic(), request);\n						} catch (Exception e) {\n							e.printStackTrace();\n							System.out.println(\"Can\'t deliver request: \" + request);\n						}\n					}\n				} else {\n					//\n					// what happens if it is null\n					//\n				}\n			}\n			break;\n			case \"MSO\":\n			{\n				//\n				// Construct an operation\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"createModuleInstance\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// Construct an MSO request\n				//\n				MSORequest request = new MSORequest();\n				request.requestDetails = new MSORequestDetails();\n				request.requestDetails.modelInfo = new MSOModelInfo();\n				request.requestDetails.cloudConfiguration = new MSOCloudConfiguration();\n				request.requestDetails.requestInfo = new MSORequestInfo();\n				request.requestDetails.requestParameters = new MSORequestParameters();\n				request.requestDetails.requestParameters.userParams = null;\n				//\n				// cloudConfiguration\n				//\n				request.requestDetails.cloudConfiguration.lcpCloudRegionId = cloudRegionItemCloudRegionId;\n				request.requestDetails.cloudConfiguration.tenantId = tenantItemTenantId;\n				//\n				// modelInfo\n				//\n				request.requestDetails.modelInfo.modelType = \"vfModule\";\n				request.requestDetails.modelInfo.modelInvariantId = vfModuleItemPersonaModelId;\n				request.requestDetails.modelInfo.modelNameVersionId = vfModuleItemModelNameVersionId;\n				request.requestDetails.modelInfo.modelName = vfModuleItemModelName;\n				request.requestDetails.modelInfo.modelVersion = vfModuleItemPersonaModelVersion;\n				//\n				// requestInfo\n				//\n				request.requestDetails.requestInfo.instanceName = vfModuleItemVfModuleName;\n				request.requestDetails.requestInfo.source = \"POLICY\";\n				request.requestDetails.requestInfo.suppressRollback = false;\n				//\n				// relatedInstanceList\n				//\n				MSORelatedInstanceListElement relatedInstanceListElement1 = new MSORelatedInstanceListElement();\n				MSORelatedInstanceListElement relatedInstanceListElement2 = new MSORelatedInstanceListElement();\n				relatedInstanceListElement1.relatedInstance = new MSORelatedInstance();\n				relatedInstanceListElement2.relatedInstance = new MSORelatedInstance();\n				//\n				relatedInstanceListElement1.relatedInstance.instanceId = serviceItemServiceInstanceId;\n				relatedInstanceListElement1.relatedInstance.modelInfo = new MSOModelInfo();\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelType = \"service\";\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelInvariantId = serviceItemPersonaModelId;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelNameVersionId = serviceItemModelNameVersionId;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelName = serviceItemModelName;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelVersion = serviceItemModelVersion;\n				//\n				relatedInstanceListElement2.relatedInstance.instanceId = vnfItemVnfId;\n				relatedInstanceListElement2.relatedInstance.modelInfo = new MSOModelInfo();\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelType = \"vnf\";\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelInvariantId = vnfItemPersonaModelId;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelNameVersionId = vnfItemModelNameVersionId;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelName = vnfItemModelName;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelVersion = vnfItemModelVersion;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelCustomizationName = vnfItemVnfType;\n				//	\n				request.requestDetails.relatedInstanceList.add(relatedInstanceListElement1);\n				request.requestDetails.relatedInstanceList.add(relatedInstanceListElement2);\n				//\n				// print MSO request for debug\n				//\n				System.out.println(\"MSO request sent:\");\n				System.out.println(Serialization.gsonPretty.toJson(request));\n				//\n				//\n				//\n				if (request != null) {\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"${policyScope}\";\n					notification.policyVersion = \"${policyVersion}\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Concatenate serviceItemServiceInstanceId and vnfItemVnfId to msoURL\n					//\n					String MSOUrl = $params.getMsoURL() + \"/serviceInstances/v2/\" + serviceItemServiceInstanceId + \"/vnfs/\" + vnfItemVnfId + \"/vfModules\";\n					//\n					// Call MSO\n					//\n					MSOResponse response = MSOManager.createModuleInstance(MSOUrl, $params.getMsoURL(), $params.getMsoUsername(), $params.getMsoPassword(), request);\n					//\n					if (response != null) {\n						//\n						// Assign requestId\n						//\n						request.requestId = $event.requestID.toString();						\n						response.request.requestId = $event.requestID.toString();\n						//\n						// Insert facts\n						//\n						insert(operationWrapper);\n						insert(request);\n						insert(response);\n					} else {\n						//\n						// MSO request not even accepted\n						//\n						notification.message = operationWrapper.operation.toMessage();\n						operationWrapper.operation.message = operationWrapper.operation.toMessage();\n						operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n						$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n						notification.history.add(operationWrapper.operation);\n						notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n						//\n						// Let interested parties know\n						//\n						try {\n							System.out.println(Serialization.gsonPretty.toJson(notification));\n							PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n						} catch (Exception e) {\n							System.out.println(\"Can\'t deliver notification: \" + notification);\n							e.printStackTrace();\n						}\n	                    notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n                        try {\n                        	System.out.println(Serialization.gsonPretty.toJson(notification));\n                        	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n                        } catch (Exception e) {\n                        	System.out.println(\"Can\'t deliver notification: \" + notification);\n                        	e.printStackTrace();\n                        }\n						//\n						// Retract everything\n						//\n						retract($event);\n						retract($manager);\n					}\n				} else {\n					System.err.println(\"constructed MSO request is invalid.\");\n				}\n			}\n			break; \n		} \nend\n		\n/*\n*\n* This rule responds to APPC Response Events\n*\n*/\nrule \"${policyName}.APPC.RESPONSE\"\n	when\n		$params : Params( getClosedLoopControlName() == \"${closedLoopControlName}\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$operationWrapper : ControlLoopOperationWrapper( requestID == $event.requestID )\n		$request : Request( getCommonHeader().RequestID == $event.requestID )\n		$response : Response( getCommonHeader().RequestID == $event.requestID )	\n	then\n		System.out.println(\"rule APPC.RESPONSE is triggered.\");\n		if ($response.Status == null) {\n			$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n			$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n		} \n		//\n		// Get the Response Code\n		//\n		ResponseCode code = ResponseCode.toResponseCode($response.Status.Code);\n		if (code == null) {\n			$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n			$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n		}\n		//\n		// Construct notification\n		//\n		VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n		notification.from = \"policy\";\n		notification.policyName = drools.getRule().getName();\n		notification.policyScope = \"${policyScope}\";\n		notification.policyVersion = \"${policyVersion}\";\n		notification.message = $operationWrapper.operation.toMessage();\n		$operationWrapper.operation.message = $operationWrapper.operation.toMessage();\n		//\n		// Ok, let\'s figure out what APP-C\'s response is\n		//\n		switch (code) {\n			case ACCEPT:\n				$operationWrapper.operation.outcome = \"PROCESSING\";\n				break;\n			case ERROR:\n			case REJECT:\n				$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n				$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n				break;\n			case SUCCESS:\n				$operationWrapper.operation.outcome = \"SUCCESS\";\n				$manager.setControlLoopResult(\"SUCCESS\");\n				break;\n			case FAILURE:\n				$operationWrapper.operation.outcome = \"FAILURE\";\n				$manager.setControlLoopResult(\"FAILURE\");\n				break;\n		}\n		if ($operationWrapper.operation.outcome.equals(\"SUCCESS\")) {\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n            notification.notification = ControlLoopNotificationType.FINAL_SUCCESS;\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n\n			//\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		} else if ($operationWrapper.operation.outcome.equals(\"PROCESSING\")) {\n			retract($response);\n		} else {\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n            notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n			//\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		}\n		\nend		\n\n/*\n*\n* This rule is used to clean up APPC response\n*\n*/		\nrule \"${policyName}.APPC.RESPONSE.CLEANUP\"\n	when\n		$params : Params( getClosedLoopControlName() == \"${closedLoopControlName}\" )\n        $response : Response($id : getCommonHeader().RequestID )\n		not ( VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), requestID == $id, closedLoopEventStatus == ControlLoopEventStatus.ONSET ) ) \n	then\n		System.out.println(\"rule APPC.RESPONSE.CLEANUP is triggered.\");\n		retract($response);\nend\n\n/*\n*\n* This rule responds to MSO Response Events\n*\n*/\nrule \"${policyName}.MSO.RESPONSE\"\n	when\n		$params : Params( getClosedLoopControlName() == \"${closedLoopControlName}\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$operationWrapper : ControlLoopOperationWrapper( requestID == $event.requestID )\n		$request : MSORequest( requestId == $event.requestID.toString() )\n		$response : MSOResponse( request.requestId == $event.requestID.toString() )	\n	then\n		System.out.println(\"rule MSO.RESPONSE is triggered.\");\n		//\n		// Construct notification\n		//\n		VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n		notification.from = \"policy\";\n		notification.policyName = drools.getRule().getName();\n		notification.policyScope = \"${policyScope}\";\n		notification.policyVersion = \"${policyVersion}\";\n		notification.message = $operationWrapper.operation.toMessage();\n		$operationWrapper.operation.message = $operationWrapper.operation.toMessage();\n		//\n		// The operation can either be succeeded or failed\n		// \n		if($response.request.requestStatus.requestState.equals(\"COMPLETE\")) {\n			$operationWrapper.operation.outcome = \"SUCCESS\";\n			$manager.setControlLoopResult(\"SUCCESS\");\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n			notification.notification = ControlLoopNotificationType.FINAL_SUCCESS;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n            //\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		} else {\n			$operationWrapper.operation.outcome = \"FAILURE\";\n			$manager.setControlLoopResult(\"FAILURE\");\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n			notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n            //\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		}\n		\nend	','2017-03-14 19:55:47','demo');
 
-INSERT INTO `policyentity` VALUES (3156,'doACPolicyPut','2017-03-03 17:26:24',0,'Micro Service vFirewall Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:','doACPolicyPut','2017-03-03 17:26:24','<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Policy xmlns=\"urn:oasis:names:tc:xacml:3.0:core:schema:wd-17\" PolicyId=\"urn:com:xacml:policy:id:34928b05-b0f6-4974-8458-f4d34a2a1764\" Version=\"1\" RuleCombiningAlgId=\"urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides\">\n    <Description>Micro Service vFirewall Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:</Description>\n    <Target>\n        <AnyOf>\n            <AllOf>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_MS_vFirewall.1.xml</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"PolicyName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n            <AllOf>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DCAE</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ECOMPName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleConfigName</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ConfigName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">TcaMetrics-v1.0.0.5</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"service\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vFirewall</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"uuid\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleServiceLocation</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"location\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskType\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskLevel\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">False</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"guard\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"TTLDate\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n        </AnyOf>\n    </Target>\n    <Rule RuleId=\"urn:com:xacml:rule:id:063161de-0534-4989-bd01-42f784daf21e\" Effect=\"Permit\">\n        <Target>\n            <AnyOf>\n                <AllOf>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">ACCESS</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:action\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:action:action-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Config</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:resource:resource-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                </AllOf>\n            </AnyOf>\n        </Target>\n        <AdviceExpressions>\n            <AdviceExpression AdviceId=\"MSID\" AppliesTo=\"Permit\">\n                <AttributeAssignmentExpression AttributeId=\"type\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Configuration</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"URLID\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#anyURI\">$URL/Config/com.Config_MS_vFirewall.1.json</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"PolicyName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_MS_vFirewall.1.xml</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"VersionNumber\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ECOMPName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DCAE</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ConfigName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleConfigName</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:service\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">TcaMetrics-v1.0.0.5</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:uuid\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vFirewall</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:Location\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleServiceLocation</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"Priority\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskType\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskLevel\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"guard\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"TTLDate\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                </AttributeAssignmentExpression>\n            </AdviceExpression>\n        </AdviceExpressions>\n    </Rule>\n</Policy>\n','Config_MS_vFirewall.1.xml',0,'com',1,NULL,3155),(3158,'doACPolicyPut','2017-03-03 17:28:10',0,'Micro Service vLoadBalancer Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:','doACPolicyPut','2017-03-03 17:28:10','<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Policy xmlns=\"urn:oasis:names:tc:xacml:3.0:core:schema:wd-17\" PolicyId=\"urn:com:xacml:policy:id:c220802a-70ee-4ca8-9f1e-f8a515650381\" Version=\"1\" RuleCombiningAlgId=\"urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides\">\n    <Description>Micro Service vLoadBalancer Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:</Description>\n    <Target>\n        <AnyOf>\n            <AllOf>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_MS_vLoadBalancer.1.xml</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"PolicyName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n            <AllOf>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DCAE</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ECOMPName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleConfigName</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ConfigName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">TcaMetrics-v1.0.0.5</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"service\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vLoadBalancer</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"uuid\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleServiceLocation</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"location\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskType\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskLevel\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">False</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"guard\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"TTLDate\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n        </AnyOf>\n    </Target>\n    <Rule RuleId=\"urn:com:xacml:rule:id:fca27dab-6c09-4541-8136-328abaec2656\" Effect=\"Permit\">\n        <Target>\n            <AnyOf>\n                <AllOf>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">ACCESS</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:action\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:action:action-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Config</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:resource:resource-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                </AllOf>\n            </AnyOf>\n        </Target>\n        <AdviceExpressions>\n            <AdviceExpression AdviceId=\"MSID\" AppliesTo=\"Permit\">\n                <AttributeAssignmentExpression AttributeId=\"type\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Configuration</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"URLID\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#anyURI\">$URL/Config/com.Config_MS_vLoadBalancer.1.json</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"PolicyName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_MS_vLoadBalancer.1.xml</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"VersionNumber\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ECOMPName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DCAE</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ConfigName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleConfigName</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:service\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">TcaMetrics-v1.0.0.5</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:uuid\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vLoadBalancer</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:Location\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleServiceLocation</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"Priority\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskType\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskLevel\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"guard\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"TTLDate\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                </AttributeAssignmentExpression>\n            </AdviceExpression>\n        </AdviceExpressions>\n    </Rule>\n</Policy>\n','Config_MS_vLoadBalancer.1.xml',0,'com',1,NULL,3157);
+INSERT INTO `policyentity` VALUES (3156,'doACPolicyPut','2017-03-03 17:26:24',0,'Micro Service vFirewall Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:','doACPolicyPut','2017-03-03 17:26:24','<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Policy xmlns=\"urn:oasis:names:tc:xacml:3.0:core:schema:wd-17\" PolicyId=\"urn:com:xacml:policy:id:34928b05-b0f6-4974-8458-f4d34a2a1764\" Version=\"1\" RuleCombiningAlgId=\"urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides\">\n    <Description>Micro Service vFirewall Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:</Description>\n    <Target>\n        <AnyOf>\n            <AllOf>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_MS_vFirewall.1.xml</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"PolicyName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n            <AllOf>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DCAE</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ONAPName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleConfigName</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ConfigName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">TcaMetrics-v1.0.0.5</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"service\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vFirewall</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"uuid\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleServiceLocation</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"location\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskType\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskLevel\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">False</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"guard\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"TTLDate\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n        </AnyOf>\n    </Target>\n    <Rule RuleId=\"urn:com:xacml:rule:id:063161de-0534-4989-bd01-42f784daf21e\" Effect=\"Permit\">\n        <Target>\n            <AnyOf>\n                <AllOf>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">ACCESS</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:action\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:action:action-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Config</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:resource:resource-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                </AllOf>\n            </AnyOf>\n        </Target>\n        <AdviceExpressions>\n            <AdviceExpression AdviceId=\"MSID\" AppliesTo=\"Permit\">\n                <AttributeAssignmentExpression AttributeId=\"type\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Configuration</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"URLID\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#anyURI\">$URL/Config/com.Config_MS_vFirewall.1.json</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"PolicyName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_MS_vFirewall.1.xml</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"VersionNumber\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ONAPName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DCAE</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ConfigName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleConfigName</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:service\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">TcaMetrics-v1.0.0.5</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:uuid\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vFirewall</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:Location\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleServiceLocation</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"Priority\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskType\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskLevel\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"guard\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"TTLDate\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                </AttributeAssignmentExpression>\n            </AdviceExpression>\n        </AdviceExpressions>\n    </Rule>\n</Policy>\n','Config_MS_vFirewall.1.xml',0,'com',1,NULL,3155),(3158,'doACPolicyPut','2017-03-03 17:28:10',0,'Micro Service vLoadBalancer Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:','doACPolicyPut','2017-03-03 17:28:10','<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Policy xmlns=\"urn:oasis:names:tc:xacml:3.0:core:schema:wd-17\" PolicyId=\"urn:com:xacml:policy:id:c220802a-70ee-4ca8-9f1e-f8a515650381\" Version=\"1\" RuleCombiningAlgId=\"urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides\">\n    <Description>Micro Service vLoadBalancer Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:</Description>\n    <Target>\n        <AnyOf>\n            <AllOf>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_MS_vLoadBalancer.1.xml</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"PolicyName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n            <AllOf>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DCAE</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ONAPName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleConfigName</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ConfigName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">TcaMetrics-v1.0.0.5</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"service\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vLoadBalancer</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"uuid\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleServiceLocation</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"location\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskType\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskLevel\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">False</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"guard\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"TTLDate\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n        </AnyOf>\n    </Target>\n    <Rule RuleId=\"urn:com:xacml:rule:id:fca27dab-6c09-4541-8136-328abaec2656\" Effect=\"Permit\">\n        <Target>\n            <AnyOf>\n                <AllOf>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">ACCESS</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:action\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:action:action-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Config</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:resource:resource-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                </AllOf>\n            </AnyOf>\n        </Target>\n        <AdviceExpressions>\n            <AdviceExpression AdviceId=\"MSID\" AppliesTo=\"Permit\">\n                <AttributeAssignmentExpression AttributeId=\"type\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Configuration</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"URLID\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#anyURI\">$URL/Config/com.Config_MS_vLoadBalancer.1.json</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"PolicyName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_MS_vLoadBalancer.1.xml</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"VersionNumber\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ONAPName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DCAE</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ConfigName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleConfigName</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:service\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">TcaMetrics-v1.0.0.5</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:uuid\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vLoadBalancer</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:Location\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleServiceLocation</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"Priority\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskType\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskLevel\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"guard\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"TTLDate\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                </AttributeAssignmentExpression>\n            </AdviceExpression>\n        </AdviceExpressions>\n    </Rule>\n</Policy>\n','Config_MS_vLoadBalancer.1.xml',0,'com',1,NULL,3157);
 
 INSERT INTO `configurationdataentity` VALUES (3155,'{\"service\":\"TcaMetrics\",\"location\":\"SampleServiceLocation\",\"uuid\":\"/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vFirewall\",\"policyName\":\"vFirewall\",\"description\":\"Micro Service vFirewall Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:\",\"configName\":\"SampleConfigName\",\"templateVersion\":\"OpenSource.version.1\",\"version\":\"1.0.0.5\",\"priority\":\"1\",\"policyScope\":\"resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop\",\"content\":{\"thresholds\":[{\"severity\":\"MAJOR\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn\",\"thresholdValue\":\"300\",\"closedLoopControlName\":\"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\",\"version\":\"1.0.2\",\"direction\":\"LESS_OR_EQUAL\"},{\"severity\":\"CRITICAL\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn\",\"thresholdValue\":\"700\",\"closedLoopControlName\":\"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\",\"version\":\"1.0.2\",\"direction\":\"GREATER_OR_EQUAL\"}],\"functionalRole\":\"vFirewall\",\"name\":\"0\"}}\r\n','JSON','com.Config_MS_vFirewall.1.json','doACPolicyPut','2017-03-03 17:26:24',0,'','doACPolicyPut','2017-03-03 17:26:24',1),(3157,'{\"service\":\"TcaMetrics\",\"location\":\"SampleServiceLocation\",\"uuid\":\"/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vLoadBalancer\",\"policyName\":\"vLoadBalancer\",\"description\":\"Micro Service vLoadBalancer Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:\",\"configName\":\"SampleConfigName\",\"templateVersion\":\"OpenSource.version.1\",\"version\":\"1.0.0.5\",\"priority\":\"1\",\"policyScope\":\"resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop\",\"content\":{\"thresholds\":[{\"severity\":\"MAJOR\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn\",\"thresholdValue\":\"200\",\"closedLoopControlName\":\"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\",\"version\":\"1.0.2\",\"direction\":\"GREATER_OR_EQUAL\"}],\"functionalRole\":\"vLoadBalancer\",\"name\":\"0\"}}\r\n','JSON','com.Config_MS_vLoadBalancer.1.json','doACPolicyPut','2017-03-03 17:28:10',0,'','doACPolicyPut','2017-03-03 17:28:10',1);
 
-INSERT INTO `configurationdataentity` VALUES (3201,'/* Autogenerated Code Please Don\'t change/remove this comment section. This is for the UI purpose. \n	 <$%BRMSParamTemplate=ControlLoopDemo__closedLoopControlName%$> \n */ \n\r\n\r\n/*-\n * ============LICENSE_START=======================================================\n * archetype-closed-loop-demo-rules\n * ================================================================================\n * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.\n * ================================================================================\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============LICENSE_END=========================================================\n */\n\npackage org.onap.policy.controlloop;\n\nimport java.util.List;\nimport java.util.LinkedList;\nimport java.util.Map;\nimport java.util.HashMap;\nimport java.util.UUID;\n\nimport org.onap.policy.controlloop.VirtualControlLoopEvent;\nimport org.onap.policy.controlloop.ControlLoopEventStatus;\nimport org.onap.policy.controlloop.VirtualControlLoopNotification;\nimport org.onap.policy.controlloop.ControlLoopNotificationType;\nimport org.onap.policy.controlloop.ControlLoopOperation;\nimport org.onap.policy.controlloop.ControlLoopOperationWrapper;\nimport org.onap.policy.template.demo.ControlLoopException;\n\nimport org.onap.policy.aai.AAINQF199.AAINQF199CloudRegion;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ExtraProperties;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ExtraProperty;\nimport org.onap.policy.aai.AAINQF199.AAINQF199GenericVNF;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InstanceFilters;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InventoryResponseItem;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InventoryResponseItems;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Manager;\nimport org.onap.policy.aai.AAINQF199.AAINQF199NamedQuery;\nimport org.onap.policy.aai.AAINQF199.AAINQF199QueryParameters;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Request;\nimport org.onap.policy.aai.AAINQF199.AAINQF199RequestWrapper;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Response;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ResponseWrapper;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ServiceInstance;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Tenant;\nimport org.onap.policy.aai.AAINQF199.AAINQF199VfModule;\nimport org.onap.policy.aai.AAINQF199.AAINQF199VServer;\nimport org.onap.policy.aai.util.Serialization;\n\nimport org.onap.policy.appc.CommonHeader;\nimport org.onap.policy.appc.Request;\nimport org.onap.policy.appc.Response;\nimport org.onap.policy.appc.ResponseCode;\nimport org.onap.policy.appc.ResponseStatus;\nimport org.onap.policy.appc.ResponseValue;\n\nimport org.onap.policy.template.demo.EventManager;\nimport org.onap.policy.vnf.trafficgenerator.PGRequest;\nimport org.onap.policy.vnf.trafficgenerator.PGStream;\nimport org.onap.policy.vnf.trafficgenerator.PGStreams;\n\nimport org.onap.policy.mso.MSOManager;\nimport org.onap.policy.mso.MSORequest;\nimport org.onap.policy.mso.MSORequestStatus;\nimport org.onap.policy.mso.MSORequestDetails;\nimport org.onap.policy.mso.MSOModelInfo;\nimport org.onap.policy.mso.MSOCloudConfiguration;\nimport org.onap.policy.mso.MSORequestInfo;\nimport org.onap.policy.mso.MSORequestParameters;\nimport org.onap.policy.mso.MSORelatedInstanceListElement;\nimport org.onap.policy.mso.MSORelatedInstance;\nimport org.onap.policy.mso.MSOResponse;\n\nimport org.openecomp.policy.drools.system.PolicyEngine;\n\n//\n// These parameters are required to build the runtime policy\n//\ndeclare Params\n    closedLoopControlName : String\n    actor : String\n    aaiURL : String\n    aaiUsername : String\n    aaiPassword : String\n    msoURL : String\n    msoUsername : String\n    msoPassword : String\n    aaiNamedQueryUUID : String\n    aaiPatternMatch : int \n    notificationTopic : String\n    appcTopic : String\nend\n\n/*\n*\n* Called once and only once to insert the parameters into working memory for this Closed Loop policy.\n* (Comment SETUP rule out for the first ECOMP opensource release since policy BRMS_GW already puts a Params fact in there)\n*\n*\n*rule \"BRMSParamvFWDemoPolicy.SETUP\"\n*	when\n*	then\n*		System.out.println(\"rule SETUP is triggered.\");\n*		Params params = new Params();\n*		params.setClosedLoopControlName(\"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\");\n*		params.setActor(\"APPC\");\n*		params.setAaiURL(\"null\");\n*		params.setAaiUsername(\"null\");\n*		params.setAaiPassword(\"null\");\n*		params.setMsoURL(\"null\");\n*		params.setMsoUsername(\"null\");\n*		params.setMsoPassword(\"null\");\n*		params.setAaiNamedQueryUUID(\"null\");\n*		params.setAaiPatternMatch(1);\n*		params.setNotificationTopic(\"POLICY-CL-MGT\");\n*		params.setAppcTopic(\"APPC-CL\");\n*		//\n*		// This stays in memory as long as the rule is alive and running\n*		//\n*		insert(params);\n*end\n*/\n/*\n*\n* This rule responds to DCAE Events\n*\n*/\nrule \"BRMSParamvFWDemoPolicy.EVENT\"\n	when\n        $params : Params( getClosedLoopControlName() == \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n        $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n        not ( EventManager( closedLoopControlName == $event.closedLoopControlName ))\n	then\n		System.out.println(\"rule EVENT is triggered.\");\n		try {\n			// \n			// Check the requestID in the event to make sure it is not null before we create the EventManager. \n			// The EventManager will do extra syntax checking as well check if the closed loop is disabled/\n			//\n			if ($event.requestID == null) {\n				VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n				notification.notification = ControlLoopNotificationType.REJECTED;\n				notification.from = \"policy\";\n				notification.message = \"Missing requestID from DCAE event\";\n				notification.policyName = drools.getRule().getName();\n				notification.policyScope = \"com\";\n				notification.policyVersion = \"1\";\n				//\n				// Let interested parties know\n				//\n				try {\n					System.out.println(Serialization.gsonPretty.toJson(notification));\n					PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n				} catch (Exception e) {\n					e.printStackTrace();\n					System.out.println(\"Can\'t deliver notification: \" + notification);\n				}\n				//\n				// Retract it from memory\n				//\n				retract($event);\n				System.out.println(\"Event with requestID=null has been retracted.\");\n			} else {\n				//\n				// Create an EventManager\n				//\n				EventManager manager = new EventManager($params.getClosedLoopControlName(), $event.requestID, $event.target);\n				//\n				// Determine if EventManager can actively process the event (i.e. syntax)\n				//\n				VirtualControlLoopNotification notification = manager.activate($event);\n				notification.from = \"policy\"; \n				notification.policyName = drools.getRule().getName();\n				notification.policyScope = \"com\";\n				notification.policyVersion = \"1\";\n				//\n				// Are we actively pursuing this event?\n				//\n				if (notification.notification == ControlLoopNotificationType.ACTIVE) {\n					//\n					// Insert Event Manager into memory, this will now kick off processing.\n					//\n					insert(manager);\n					//\n					// Let interested parties know\n					//\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						e.printStackTrace();\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n					}		\n				} else {\n					//\n					// Let interested parties know\n					//\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						e.printStackTrace();\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n					}\n					//\n					// Retract it from memory\n					//\n					retract($event);\n				}\n				//\n				// Now that the manager is inserted into Drools working memory, we\'ll wait for\n				// another rule to fire in order to continue processing. This way we can also\n				// then screen for additional ONSET and ABATED events for this same RequestIDs \n				// and for different RequestIDs but with the same closedLoopControlName and target.\n				//\n			}\n		//\n		} catch (Exception e) {\n			e.printStackTrace();\n			VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n			notification.notification = ControlLoopNotificationType.REJECTED;\n			notification.message = \"Exception occurred \" + e.getMessage();\n			notification.policyName = drools.getRule().getName();\n			notification.policyScope = \"com\";\n			notification.policyVersion = \"1\";\n			//\n			//\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e1) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e1.printStackTrace();\n			}\n			//\n			// Retract the event\n			//\n			retract($event);\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid ONSET, closed loop is enabled and an Event Manager\n* is created. We can start the operations for this closed loop.\n*\n*/\nrule \"BRMSParamvFWDemoPolicy.EVENT.MANAGER\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName, controlLoopResult == null)\n	then\n		System.out.println(\"rule EVENT.MANAGER is triggered.\");\n		//\n		// Check which event this is.\n		//\n		EventManager.NEW_EVENT_STATUS eventStatus = $manager.onNewEvent($event);\n		//\n		// We only want the initial ONSET event in memory,\n		// all the other events need to be retracted to support\n		// cleanup and avoid the other rules being fired for this event.\n		//\n		if (eventStatus != EventManager.NEW_EVENT_STATUS.FIRST_ONSET) {\n			System.out.println(\"Retracting \"+eventStatus+\" Event.\");\n			retract($event);\n			return;\n		}\n		//\n		// Now the event in memory is first onset event\n		//\n		try {\n			//\n			// Pull the known AAI field from the Event\n			//\n			// generic-vnf is needed for vFirewall case\n			// vserver-name is needed for vLoadBalancer case\n			//\n			String genericVNF = $event.AAI.get(\"generic-vnf.vnf-id\");\n			String vserver = $event.AAI.get(\"vserver.vserver-name\");\n			//\n			// Check if we are implementing a simple pattern match.\n			//\n			if ($params.getAaiPatternMatch() == 1) {\n				//\n				// Yes\n				//\n				//Basic naming characteristics:\n				//VF Name (9 char)+VM name (13 char total)+VFC (19 char total)\n				//Example: \n				//VF Name (9 characters):    cscf0001v\n				//VM Name(13 characters): cscf0001vm001\n				//VFC name(19 characters): cscf0001vm001cfg001\n				//\n				// zdfw1fwl01fwl02 or zdfw1fwl01fwl01  \n				// replaced with\n				// zdfw1fwl01pgn02 or zdfw1fwl01pgn01\n				//\n				int index = genericVNF.lastIndexOf(\"fwl\");\n				if (index == -1) {\n					System.err.println(\"The generic-vnf.vnf-id from DCAE Event is not valid.\");\n				} else {\n					genericVNF = genericVNF.substring(0, index) + \"pgn\" + genericVNF.substring(index+\"fwl\".length());\n				}\n				//\n				// Construct an APPC request\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"ModifyConfig\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// insert operationWrapper into memory\n				//\n				insert(operationWrapper);\n				//\n				Request request = new Request();\n				request.CommonHeader = new CommonHeader();\n				request.CommonHeader.RequestID = $event.requestID;\n				request.Action = operation.operation;\n				request.Payload = new HashMap<String, Object>();\n				//\n				// Fill in the payload\n				//\n				request.Payload.put(\"generic-vnf.vnf-id\", genericVNF);\n				//\n				PGRequest pgRequest = new PGRequest();\n				pgRequest.pgStreams = new PGStreams();\n				\n				PGStream pgStream;\n				for(int i = 0; i < 5; i++){\n					pgStream = new PGStream();\n					pgStream.streamId = \"fw_udp\"+(i+1);\n					pgStream.isEnabled = \"true\";\n					pgRequest.pgStreams.pgStream.add(pgStream);\n				}\n				request.Payload.put(\"pg-streams\", pgRequest.pgStreams);\n				\n				if (request != null) {\n					//\n					// Insert request into memory\n					//\n					insert(request);\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					// message and history ??\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"com\";\n					notification.policyVersion = \"1\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Now send the operation request\n					//\n					if (request instanceof Request) {\n						try {\n							System.out.println(\"APPC request sent:\");\n							System.out.println(Serialization.gsonPretty.toJson(request));\n							PolicyEngine.manager.deliver($params.getAppcTopic(), request);\n						} catch (Exception e) {\n							e.printStackTrace();\n							System.out.println(\"Can\'t deliver request: \" + request);\n						}\n					}\n				} else {\n					//\n					// what happens if it is null\n					//\n				}\n				//\n			} else {\n				//\n				// create AAI named-query request with UUID started with \"F199\"\n				//\n				AAINQF199Request aainqf199request = new AAINQF199Request();\n				AAINQF199QueryParameters aainqf199queryparam = new AAINQF199QueryParameters();\n				AAINQF199NamedQuery aainqf199namedquery = new AAINQF199NamedQuery();\n				AAINQF199InstanceFilters aainqf199instancefilter = new AAINQF199InstanceFilters();\n				//\n				// queryParameters\n				//\n				aainqf199namedquery.namedQueryUUID = UUID.fromString($params.getAaiNamedQueryUUID()); \n				aainqf199queryparam.namedQuery = aainqf199namedquery;\n				aainqf199request.queryParameters = aainqf199queryparam;\n				//\n				// instanceFilters\n				//\n				Map aainqf199instancefiltermap = new HashMap();\n				Map aainqf199instancefiltermapitem = new HashMap();\n				aainqf199instancefiltermapitem.put(\"vserver-name\", vserver); \n				aainqf199instancefiltermap.put(\"vserver\", aainqf199instancefiltermapitem);\n				aainqf199instancefilter.instanceFilter.add(aainqf199instancefiltermap);\n				aainqf199request.instanceFilters = aainqf199instancefilter;\n				//\n				// print aainqf199request for debug\n				//\n				System.out.println(\"AAI Request sent:\");\n				System.out.println(Serialization.gsonPretty.toJson(aainqf199request));\n				//\n				// Create AAINQF199RequestWrapper\n				//\n				AAINQF199RequestWrapper aainqf199RequestWrapper = new AAINQF199RequestWrapper($event.requestID, aainqf199request);\n				//\n				// insert aainqf199request into memory\n				//\n				insert(aainqf199RequestWrapper);\n			}\n			//\n		} catch (Exception e) {\n		 e.printStackTrace();\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid ONSET, closed loop is enabled, an Event Manager\n* is created, AAI Manager and AAI Request are ready in memory. We can start sending query to AAI and then wait for response.\n*\n*/\nrule \"BRMSParamvFWDemoPolicy.EVENT.MANAGER.AAINQF199REQUEST\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$aainqf199RequestWrapper : AAINQF199RequestWrapper(requestID == $event.requestID)\n	then\n		System.out.println(\"rule EVENT.MANAGER.AAINQF199REQUEST is triggered.\");\n		//\n		// send the request\n		//\n		AAINQF199Response aainqf199response = AAINQF199Manager.postQuery($params.getAaiURL(), $params.getAaiUsername(), $params.getAaiPassword(),\n													   $aainqf199RequestWrapper.aainqf199request, $event.requestID);\n		//\n		// Check AAI response\n		//\n		if (aainqf199response == null) {\n			System.err.println(\"Failed to get AAI response\");\n			//\n			// Fail and retract everything\n			//\n			retract($event);\n			retract($manager);\n			retract($aainqf199RequestWrapper);\n		} else {\n			//\n			// Create AAINQF199ResponseWrapper\n			//\n			AAINQF199ResponseWrapper aainqf199ResponseWrapper = new AAINQF199ResponseWrapper($event.requestID, aainqf199response);\n			//\n			// insert aainqf199ResponseWrapper to memeory\n			//\n			insert(aainqf199ResponseWrapper);\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid AAI response. We can start sending request to APPC or MSO now.\n*\n*/\nrule \"BRMSParamvFWDemoPolicy.EVENT.MANAGER.AAINQF199RESPONSE\"\n	when \n		$params : Params( getClosedLoopControlName() == \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$aainqf199RequestWrapper : AAINQF199RequestWrapper(requestID == $event.requestID)\n		$aainqf199ResponseWrapper : AAINQF199ResponseWrapper(requestID == $event.requestID)\n	then\n		System.out.println(\"rule EVENT.MANAGER.AAINQF199RESPONSE is triggered.\");\n		//\n		// Extract related fields out of AAINQF199RESPONSE\n		//\n		String vnfItemVnfId, vnfItemVnfType, vnfItemPersonaModelId, vnfItemPersonaModelVersion, vnfItemModelName, \n		       vnfItemModelVersion, vnfItemModelNameVersionId, serviceItemServiceInstanceId, serviceItemPersonaModelId,\n		       serviceItemModelName, serviceItemModelType, serviceItemModelVersion, serviceItemModelNameVersionId,\n		       vfModuleItemVfModuleName, vfModuleItemPersonaModelId, vfModuleItemPersonaModelVersion, vfModuleItemModelName, \n		       vfModuleItemModelNameVersionId, tenantItemTenantId, cloudRegionItemCloudRegionId;\n		try {\n			//\n			// vnfItem\n			//\n			vnfItemVnfId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfID;\n			vnfItemVnfType = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfType;\n			vnfItemVnfType = vnfItemVnfType.substring(vnfItemVnfType.lastIndexOf(\"/\")+1);\n			vnfItemPersonaModelId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelId;\n			vnfItemPersonaModelVersion = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelVersion;\n			vnfItemModelName = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;\n			vnfItemModelVersion = 		$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(2).propertyValue;\n			vnfItemModelNameVersionId = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// serviceItem\n			//\n			serviceItemServiceInstanceId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.serviceInstanceID;\n			serviceItemPersonaModelId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelId;\n			serviceItemModelName = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;\n			serviceItemModelType = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(1).propertyValue;\n			serviceItemModelVersion = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelVersion;\n			serviceItemModelNameVersionId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// Find the index for base vf module and non-base vf module\n			//\n			int baseIndex = -1;\n			int nonBaseIndex = -1;\n			List<AAINQF199InventoryResponseItem> inventoryItems = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems;\n			for (AAINQF199InventoryResponseItem m : inventoryItems) {\n				if (m.vfModule != null && m.vfModule.isBaseVfModule == true) {\n					baseIndex = inventoryItems.indexOf(m);\n				} else if (m.vfModule != null && m.vfModule.isBaseVfModule == false && m.vfModule.orchestrationStatus == null) {\n					nonBaseIndex = inventoryItems.indexOf(m);\n				}\n				//\n				if (baseIndex != -1 && nonBaseIndex != -1) {\n					break;\n				}\n			}\n			//\n			// Report the error if either base vf module or non-base vf module is not found\n			//\n			if (baseIndex == -1 || nonBaseIndex == -1) {\n				System.err.println(\"Either base or non-base vf module is not found from AAI response.\");\n				retract($aainqf199RequestWrapper);\n				retract($aainqf199ResponseWrapper);\n				retract($manager);\n				retract($event);\n				return;\n			}\n			//\n			// This comes from the base module\n			//\n			vfModuleItemVfModuleName = 			$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(baseIndex).vfModule.vfModuleName;\n			vfModuleItemVfModuleName = vfModuleItemVfModuleName.replace(\"Vfmodule\", \"vDNS\");\n			//\n			// vfModuleItem - NOT the base module\n			//\n			vfModuleItemPersonaModelId = 		$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).vfModule.personaModelId;\n			vfModuleItemPersonaModelVersion = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).vfModule.personaModelVersion;\n			vfModuleItemModelName = 			$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).extraProperties.extraProperty.get(0).propertyValue;\n			vfModuleItemModelNameVersionId = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// tenantItem\n			//\n			tenantItemTenantId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).tenant.tenantId;\n			//\n			// cloudRegionItem\n			//\n			cloudRegionItemCloudRegionId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).items.inventoryResponseItems.get(0).cloudRegion.cloudRegionId;\n			//\n		} catch (Exception e) {\n			e.printStackTrace();\n			VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n			notification.notification = ControlLoopNotificationType.REJECTED;\n			notification.message = \"Exception occurred \" + e.getMessage();\n			notification.policyName = drools.getRule().getName();\n			notification.policyScope = \"com\";\n			notification.policyVersion = \"1\";\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e1) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e1.printStackTrace();\n			}\n			//\n			notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n			notification.message = \"Invalid named-query response from AAI\";\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n                PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e1) {\n                System.out.println(\"Can\'t deliver notification: \" + notification);\n                e1.printStackTrace();\n            }\n			//\n			// Retract everything\n			//\n			retract($aainqf199RequestWrapper);\n			retract($aainqf199ResponseWrapper);\n			retract($manager);\n			retract($event);\n			return;\n		}	\n		//\n		// Extracted fields should not be null\n		//\n		if ((vnfItemVnfId == null) || (vnfItemVnfType == null) ||\n		    (vnfItemPersonaModelId == null) || (vnfItemModelName == null) ||\n		    (vnfItemModelVersion == null) || (vnfItemModelNameVersionId == null) ||\n		    (serviceItemServiceInstanceId == null) || (serviceItemModelName == null) ||\n		    (serviceItemModelType == null) || (serviceItemModelVersion == null) ||\n		    (serviceItemModelNameVersionId == null) || (vfModuleItemVfModuleName == null) ||\n		    (vfModuleItemPersonaModelId == null) || (vfModuleItemPersonaModelVersion == null) ||\n		    (vfModuleItemModelName == null) || (vfModuleItemModelNameVersionId == null) ||\n		    (tenantItemTenantId == null) || (cloudRegionItemCloudRegionId == null)) {\n			//\n			System.err.println(\"some fields are missing from AAI response.\");\n			//\n			// Fail and retract everything\n			//\n			retract($aainqf199RequestWrapper);\n			retract($aainqf199ResponseWrapper);\n			retract($manager);\n			retract($event);\n			return;\n		}\n		//\n		// We don\'t need them any more\n		//\n		retract($aainqf199ResponseWrapper);\n		retract($aainqf199RequestWrapper);  \n		//\n		// check the actor of this closed loop\n		//\n		switch ($params.getActor()) {\n			case \"APPC\":\n			{\n				//\n				// Construct an APPC request\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"ModifyConfig\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// insert operationWrapper into memory\n				//\n				insert(operationWrapper);\n				//\n				Request request = new Request();\n				request.CommonHeader = new CommonHeader();\n				request.CommonHeader.RequestID = $event.requestID;\n				request.Action = operation.operation;\n				request.Payload = new HashMap<String, Object>();\n				//\n				// Fill in the payload\n				// Hardcode genericVNF for now since AAI has not been ready for vFirewall demo case\n				//\n				String genericVNF = \"zdfw1fwl01pgn02\";\n				request.Payload.put(\"generic-vnf.vnf-id\", genericVNF);\n				//\n				PGRequest pgRequest = new PGRequest();\n				pgRequest.pgStreams = new PGStreams();\n				\n				PGStream pgStream;\n				for(int i = 0; i < 5; i++){\n					pgStream = new PGStream();\n					pgStream.streamId = \"fw_udp\"+(i+1);\n					pgStream.isEnabled = \"true\";\n					pgRequest.pgStreams.pgStream.add(pgStream);\n				}\n				request.Payload.put(\"pg-streams\", pgRequest.pgStreams);\n				\n				if (request != null) {\n					//\n					// Insert request into memory\n					//\n					insert(request);\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					// message and history ??\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"com\";\n					notification.policyVersion = \"1\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Now send the operation request\n					//\n					if (request instanceof Request) {\n						try {\n							System.out.println(\"APPC request sent:\");\n							System.out.println(Serialization.gsonPretty.toJson(request));\n							PolicyEngine.manager.deliver($params.getAppcTopic(), request);\n						} catch (Exception e) {\n							e.printStackTrace();\n							System.out.println(\"Can\'t deliver request: \" + request);\n						}\n					}\n				} else {\n					//\n					// what happens if it is null\n					//\n				}\n			}\n			break;\n			case \"MSO\":\n			{\n				//\n				// Construct an operation\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"createModuleInstance\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// Construct an MSO request\n				//\n				MSORequest request = new MSORequest();\n				request.requestDetails = new MSORequestDetails();\n				request.requestDetails.modelInfo = new MSOModelInfo();\n				request.requestDetails.cloudConfiguration = new MSOCloudConfiguration();\n				request.requestDetails.requestInfo = new MSORequestInfo();\n				request.requestDetails.requestParameters = new MSORequestParameters();\n				request.requestDetails.requestParameters.userParams = null;\n				//\n				// cloudConfiguration\n				//\n				request.requestDetails.cloudConfiguration.lcpCloudRegionId = cloudRegionItemCloudRegionId;\n				request.requestDetails.cloudConfiguration.tenantId = tenantItemTenantId;\n				//\n				// modelInfo\n				//\n				request.requestDetails.modelInfo.modelType = \"vfModule\";\n				request.requestDetails.modelInfo.modelInvariantId = vfModuleItemPersonaModelId;\n				request.requestDetails.modelInfo.modelNameVersionId = vfModuleItemModelNameVersionId;\n				request.requestDetails.modelInfo.modelName = vfModuleItemModelName;\n				request.requestDetails.modelInfo.modelVersion = vfModuleItemPersonaModelVersion;\n				//\n				// requestInfo\n				//\n				request.requestDetails.requestInfo.instanceName = vfModuleItemVfModuleName;\n				request.requestDetails.requestInfo.source = \"POLICY\";\n				request.requestDetails.requestInfo.suppressRollback = false;\n				//\n				// relatedInstanceList\n				//\n				MSORelatedInstanceListElement relatedInstanceListElement1 = new MSORelatedInstanceListElement();\n				MSORelatedInstanceListElement relatedInstanceListElement2 = new MSORelatedInstanceListElement();\n				relatedInstanceListElement1.relatedInstance = new MSORelatedInstance();\n				relatedInstanceListElement2.relatedInstance = new MSORelatedInstance();\n				//\n				relatedInstanceListElement1.relatedInstance.instanceId = serviceItemServiceInstanceId;\n				relatedInstanceListElement1.relatedInstance.modelInfo = new MSOModelInfo();\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelType = \"service\";\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelInvariantId = serviceItemPersonaModelId;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelNameVersionId = serviceItemModelNameVersionId;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelName = serviceItemModelName;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelVersion = serviceItemModelVersion;\n				//\n				relatedInstanceListElement2.relatedInstance.instanceId = vnfItemVnfId;\n				relatedInstanceListElement2.relatedInstance.modelInfo = new MSOModelInfo();\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelType = \"vnf\";\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelInvariantId = vnfItemPersonaModelId;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelNameVersionId = vnfItemModelNameVersionId;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelName = vnfItemModelName;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelVersion = vnfItemModelVersion;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelCustomizationName = vnfItemVnfType;\n				//	\n				request.requestDetails.relatedInstanceList.add(relatedInstanceListElement1);\n				request.requestDetails.relatedInstanceList.add(relatedInstanceListElement2);\n				//\n				// print MSO request for debug\n				//\n				System.out.println(\"MSO request sent:\");\n				System.out.println(Serialization.gsonPretty.toJson(request));\n				//\n				//\n				//\n				if (request != null) {\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"com\";\n					notification.policyVersion = \"1\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Concatenate serviceItemServiceInstanceId and vnfItemVnfId to msoURL\n					//\n					String MSOUrl = $params.getMsoURL() + \"/serviceInstances/v2/\" + serviceItemServiceInstanceId + \"/vnfs/\" + vnfItemVnfId + \"/vfModules\";\n					//\n					// Call MSO\n					//\n					MSOResponse response = MSOManager.createModuleInstance(MSOUrl, $params.getMsoURL(), $params.getMsoUsername(), $params.getMsoPassword(), request);\n					//\n					if (response != null) {\n						//\n						// Assign requestId\n						//\n						request.requestId = $event.requestID.toString();						\n						response.request.requestId = $event.requestID.toString();\n						//\n						// Insert facts\n						//\n						insert(operationWrapper);\n						insert(request);\n						insert(response);\n					} else {\n						//\n						// MSO request not even accepted\n						//\n						notification.message = operationWrapper.operation.toMessage();\n						operationWrapper.operation.message = operationWrapper.operation.toMessage();\n						operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n						$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n						notification.history.add(operationWrapper.operation);\n						notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n						//\n						// Let interested parties know\n						//\n						try {\n							System.out.println(Serialization.gsonPretty.toJson(notification));\n							PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n						} catch (Exception e) {\n							System.out.println(\"Can\'t deliver notification: \" + notification);\n							e.printStackTrace();\n						}\n	                    notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n                        try {\n                        	System.out.println(Serialization.gsonPretty.toJson(notification));\n                        	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n                        } catch (Exception e) {\n                        	System.out.println(\"Can\'t deliver notification: \" + notification);\n                        	e.printStackTrace();\n                        }\n						//\n						// Retract everything\n						//\n						retract($event);\n						retract($manager);\n					}\n				} else {\n					System.err.println(\"constructed MSO request is invalid.\");\n				}\n			}\n			break; \n		} \nend\n		\n/*\n*\n* This rule responds to APPC Response Events\n*\n*/\nrule \"BRMSParamvFWDemoPolicy.APPC.RESPONSE\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$operationWrapper : ControlLoopOperationWrapper( requestID == $event.requestID )\n		$request : Request( getCommonHeader().RequestID == $event.requestID )\n		$response : Response( getCommonHeader().RequestID == $event.requestID )	\n	then\n		System.out.println(\"rule APPC.RESPONSE is triggered.\");\n		if ($response.Status == null) {\n			$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n			$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n		} \n		//\n		// Get the Response Code\n		//\n		ResponseCode code = ResponseCode.toResponseCode($response.Status.Code);\n		if (code == null) {\n			$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n			$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n		}\n		//\n		// Construct notification\n		//\n		VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n		notification.from = \"policy\";\n		notification.policyName = drools.getRule().getName();\n		notification.policyScope = \"com\";\n		notification.policyVersion = \"1\";\n		notification.message = $operationWrapper.operation.toMessage();\n		$operationWrapper.operation.message = $operationWrapper.operation.toMessage();\n		//\n		// Ok, let\'s figure out what APP-C\'s response is\n		//\n		switch (code) {\n			case ACCEPT:\n				$operationWrapper.operation.outcome = \"PROCESSING\";\n				break;\n			case ERROR:\n			case REJECT:\n				$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n				$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n				break;\n			case SUCCESS:\n				$operationWrapper.operation.outcome = \"SUCCESS\";\n				$manager.setControlLoopResult(\"SUCCESS\");\n				break;\n			case FAILURE:\n				$operationWrapper.operation.outcome = \"FAILURE\";\n				$manager.setControlLoopResult(\"FAILURE\");\n				break;\n		}\n		if ($operationWrapper.operation.outcome.equals(\"SUCCESS\")) {\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n            notification.notification = ControlLoopNotificationType.FINAL_SUCCESS;\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n\n			//\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		} else if ($operationWrapper.operation.outcome.equals(\"PROCESSING\")) {\n			retract($response);\n		} else {\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n            notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n			//\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		}\n		\nend		\n\n/*\n*\n* This rule is used to clean up APPC response\n*\n*/		\nrule \"BRMSParamvFWDemoPolicy.APPC.RESPONSE.CLEANUP\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n        $response : Response($id : getCommonHeader().RequestID )\n		not ( VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), requestID == $id, closedLoopEventStatus == ControlLoopEventStatus.ONSET ) ) \n	then\n		System.out.println(\"rule APPC.RESPONSE.CLEANUP is triggered.\");\n		retract($response);\nend\n\n/*\n*\n* This rule responds to MSO Response Events\n*\n*/\nrule \"BRMSParamvFWDemoPolicy.MSO.RESPONSE\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$operationWrapper : ControlLoopOperationWrapper( requestID == $event.requestID )\n		$request : MSORequest( requestId == $event.requestID.toString() )\n		$response : MSOResponse( request.requestId == $event.requestID.toString() )	\n	then\n		System.out.println(\"rule MSO.RESPONSE is triggered.\");\n		//\n		// Construct notification\n		//\n		VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n		notification.from = \"policy\";\n		notification.policyName = drools.getRule().getName();\n		notification.policyScope = \"com\";\n		notification.policyVersion = \"1\";\n		notification.message = $operationWrapper.operation.toMessage();\n		$operationWrapper.operation.message = $operationWrapper.operation.toMessage();\n		//\n		// The operation can either be succeeded or failed\n		// \n		if($response.request.requestStatus.requestState.equals(\"COMPLETE\")) {\n			$operationWrapper.operation.outcome = \"SUCCESS\";\n			$manager.setControlLoopResult(\"SUCCESS\");\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n			notification.notification = ControlLoopNotificationType.FINAL_SUCCESS;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n            //\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		} else {\n			$operationWrapper.operation.outcome = \"FAILURE\";\n			$manager.setControlLoopResult(\"FAILURE\");\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n			notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n            //\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		}\n		\nend	\nrule \"com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.Params\" \n	salience 1000 \n	when\n	then\n		Params params = new Params();\n		params.setAaiPatternMatch(1);\n		params.setAppcTopic(\"APPC-CL\");\n		params.setAaiURL(\"null\");\n		params.setMsoPassword(\"null\");\n		params.setClosedLoopControlName(\"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\");\n		params.setMsoURL(\"null\");\n		params.setAaiUsername(\"null\");\n		params.setActor(\"APPC\");\n		params.setMsoUsername(\"null\");\n		params.setAaiNamedQueryUUID(\"null\");\n		params.setAaiPassword(\"null\");\n		params.setNotificationTopic(\"POLICY-CL-MGT\");\n		insert(params);\nend\r\n','OTHER','com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.txt','doACPolicyPut','2017-03-14 19:58:19',0,'','doACPolicyPut','2017-03-14 19:58:19',1),(3203,'/* Autogenerated Code Please Don\'t change/remove this comment section. This is for the UI purpose. \n	 <$%BRMSParamTemplate=ControlLoopDemo__closedLoopControlName%$> \n */ \n\r\n\r\n/*-\n * ============LICENSE_START=======================================================\n * archetype-closed-loop-demo-rules\n * ================================================================================\n * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.\n * ================================================================================\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============LICENSE_END=========================================================\n */\n\npackage org.onap.policy.controlloop;\n\nimport java.util.List;\nimport java.util.LinkedList;\nimport java.util.Map;\nimport java.util.HashMap;\nimport java.util.UUID;\n\nimport org.onap.policy.controlloop.VirtualControlLoopEvent;\nimport org.onap.policy.controlloop.ControlLoopEventStatus;\nimport org.onap.policy.controlloop.VirtualControlLoopNotification;\nimport org.onap.policy.controlloop.ControlLoopNotificationType;\nimport org.onap.policy.controlloop.ControlLoopOperation;\nimport org.onap.policy.controlloop.ControlLoopOperationWrapper;\nimport org.onap.policy.template.demo.ControlLoopException;\n\nimport org.onap.policy.aai.AAINQF199.AAINQF199CloudRegion;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ExtraProperties;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ExtraProperty;\nimport org.onap.policy.aai.AAINQF199.AAINQF199GenericVNF;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InstanceFilters;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InventoryResponseItem;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InventoryResponseItems;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Manager;\nimport org.onap.policy.aai.AAINQF199.AAINQF199NamedQuery;\nimport org.onap.policy.aai.AAINQF199.AAINQF199QueryParameters;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Request;\nimport org.onap.policy.aai.AAINQF199.AAINQF199RequestWrapper;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Response;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ResponseWrapper;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ServiceInstance;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Tenant;\nimport org.onap.policy.aai.AAINQF199.AAINQF199VfModule;\nimport org.onap.policy.aai.AAINQF199.AAINQF199VServer;\nimport org.onap.policy.aai.util.Serialization;\n\nimport org.onap.policy.appc.CommonHeader;\nimport org.onap.policy.appc.Request;\nimport org.onap.policy.appc.Response;\nimport org.onap.policy.appc.ResponseCode;\nimport org.onap.policy.appc.ResponseStatus;\nimport org.onap.policy.appc.ResponseValue;\n\nimport org.onap.policy.template.demo.EventManager;\nimport org.onap.policy.vnf.trafficgenerator.PGRequest;\nimport org.onap.policy.vnf.trafficgenerator.PGStream;\nimport org.onap.policy.vnf.trafficgenerator.PGStreams;\n\nimport org.onap.policy.mso.MSOManager;\nimport org.onap.policy.mso.MSORequest;\nimport org.onap.policy.mso.MSORequestStatus;\nimport org.onap.policy.mso.MSORequestDetails;\nimport org.onap.policy.mso.MSOModelInfo;\nimport org.onap.policy.mso.MSOCloudConfiguration;\nimport org.onap.policy.mso.MSORequestInfo;\nimport org.onap.policy.mso.MSORequestParameters;\nimport org.onap.policy.mso.MSORelatedInstanceListElement;\nimport org.onap.policy.mso.MSORelatedInstance;\nimport org.onap.policy.mso.MSOResponse;\n\nimport org.openecomp.policy.drools.system.PolicyEngine;\n\n//\n// These parameters are required to build the runtime policy\n//\ndeclare Params\n    closedLoopControlName : String\n    actor : String\n    aaiURL : String\n    aaiUsername : String\n    aaiPassword : String\n    msoURL : String\n    msoUsername : String\n    msoPassword : String\n    aaiNamedQueryUUID : String\n    aaiPatternMatch : int \n    notificationTopic : String\n    appcTopic : String\nend\n\n/*\n*\n* Called once and only once to insert the parameters into working memory for this Closed Loop policy.\n* (Comment SETUP rule out for the first ECOMP opensource release since policy BRMS_GW already puts a Params fact in there)\n*\n*\n*rule \"BRMSParamvLBDemoPolicy.SETUP\"\n*	when\n*	then\n*		System.out.println(\"rule SETUP is triggered.\");\n*		Params params = new Params();\n*		params.setClosedLoopControlName(\"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\");\n*		params.setActor(\"MSO\");\n*		params.setAaiURL(\"https://aai.api.simpledemo.openecomp.org:8443\");\n*		params.setAaiUsername(\"POLICY\");\n*		params.setAaiPassword(\"POLICY\");\n*		params.setMsoURL(\"http://vm1.mso.simpledemo.openecomp.org:8080/ecomp/mso/infra\");\n*		params.setMsoUsername(\"InfraPortalClient\");\n*		params.setMsoPassword(\"password1$\");\n*		params.setAaiNamedQueryUUID(\"f199cb88-5e69-4b1f-93e0-6f257877d066\");\n*		params.setAaiPatternMatch(0);\n*		params.setNotificationTopic(\"POLICY-CL-MGT\");\n*		params.setAppcTopic(\"APPC-CL\");\n*		//\n*		// This stays in memory as long as the rule is alive and running\n*		//\n*		insert(params);\n*end\n*/\n/*\n*\n* This rule responds to DCAE Events\n*\n*/\nrule \"BRMSParamvLBDemoPolicy.EVENT\"\n	when\n        $params : Params( getClosedLoopControlName() == \"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n        $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n        not ( EventManager( closedLoopControlName == $event.closedLoopControlName ))\n	then\n		System.out.println(\"rule EVENT is triggered.\");\n		try {\n			// \n			// Check the requestID in the event to make sure it is not null before we create the EventManager. \n			// The EventManager will do extra syntax checking as well check if the closed loop is disabled/\n			//\n			if ($event.requestID == null) {\n				VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n				notification.notification = ControlLoopNotificationType.REJECTED;\n				notification.from = \"policy\";\n				notification.message = \"Missing requestID from DCAE event\";\n				notification.policyName = drools.getRule().getName();\n				notification.policyScope = \"com\";\n				notification.policyVersion = \"1\";\n				//\n				// Let interested parties know\n				//\n				try {\n					System.out.println(Serialization.gsonPretty.toJson(notification));\n					PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n				} catch (Exception e) {\n					e.printStackTrace();\n					System.out.println(\"Can\'t deliver notification: \" + notification);\n				}\n				//\n				// Retract it from memory\n				//\n				retract($event);\n				System.out.println(\"Event with requestID=null has been retracted.\");\n			} else {\n				//\n				// Create an EventManager\n				//\n				EventManager manager = new EventManager($params.getClosedLoopControlName(), $event.requestID, $event.target);\n				//\n				// Determine if EventManager can actively process the event (i.e. syntax)\n				//\n				VirtualControlLoopNotification notification = manager.activate($event);\n				notification.from = \"policy\"; \n				notification.policyName = drools.getRule().getName();\n				notification.policyScope = \"com\";\n				notification.policyVersion = \"1\";\n				//\n				// Are we actively pursuing this event?\n				//\n				if (notification.notification == ControlLoopNotificationType.ACTIVE) {\n					//\n					// Insert Event Manager into memory, this will now kick off processing.\n					//\n					insert(manager);\n					//\n					// Let interested parties know\n					//\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						e.printStackTrace();\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n					}		\n				} else {\n					//\n					// Let interested parties know\n					//\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						e.printStackTrace();\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n					}\n					//\n					// Retract it from memory\n					//\n					retract($event);\n				}\n				//\n				// Now that the manager is inserted into Drools working memory, we\'ll wait for\n				// another rule to fire in order to continue processing. This way we can also\n				// then screen for additional ONSET and ABATED events for this same RequestIDs \n				// and for different RequestIDs but with the same closedLoopControlName and target.\n				//\n			}\n		//\n		} catch (Exception e) {\n			e.printStackTrace();\n			VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n			notification.notification = ControlLoopNotificationType.REJECTED;\n			notification.message = \"Exception occurred \" + e.getMessage();\n			notification.policyName = drools.getRule().getName();\n			notification.policyScope = \"com\";\n			notification.policyVersion = \"1\";\n			//\n			//\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e1) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e1.printStackTrace();\n			}\n			//\n			// Retract the event\n			//\n			retract($event);\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid ONSET, closed loop is enabled and an Event Manager\n* is created. We can start the operations for this closed loop.\n*\n*/\nrule \"BRMSParamvLBDemoPolicy.EVENT.MANAGER\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName, controlLoopResult == null)\n	then\n		System.out.println(\"rule EVENT.MANAGER is triggered.\");\n		//\n		// Check which event this is.\n		//\n		EventManager.NEW_EVENT_STATUS eventStatus = $manager.onNewEvent($event);\n		//\n		// We only want the initial ONSET event in memory,\n		// all the other events need to be retracted to support\n		// cleanup and avoid the other rules being fired for this event.\n		//\n		if (eventStatus != EventManager.NEW_EVENT_STATUS.FIRST_ONSET) {\n			System.out.println(\"Retracting \"+eventStatus+\" Event.\");\n			retract($event);\n			return;\n		}\n		//\n		// Now the event in memory is first onset event\n		//\n		try {\n			//\n			// Pull the known AAI field from the Event\n			//\n			// generic-vnf is needed for vFirewall case\n			// vserver-name is needed for vLoadBalancer case\n			//\n			String genericVNF = $event.AAI.get(\"generic-vnf.vnf-id\");\n			String vserver = $event.AAI.get(\"vserver.vserver-name\");\n			//\n			// Check if we are implementing a simple pattern match.\n			//\n			if ($params.getAaiPatternMatch() == 1) {\n				//\n				// Yes\n				//\n				//Basic naming characteristics:\n				//VF Name (9 char)+VM name (13 char total)+VFC (19 char total)\n				//Example: \n				//VF Name (9 characters):    cscf0001v\n				//VM Name(13 characters): cscf0001vm001\n				//VFC name(19 characters): cscf0001vm001cfg001\n				//\n				// zdfw1fwl01fwl02 or zdfw1fwl01fwl01  \n				// replaced with\n				// zdfw1fwl01pgn02 or zdfw1fwl01pgn01\n				//\n				int index = genericVNF.lastIndexOf(\"fwl\");\n				if (index == -1) {\n					System.err.println(\"The generic-vnf.vnf-id from DCAE Event is not valid.\");\n				} else {\n					genericVNF = genericVNF.substring(0, index) + \"pgn\" + genericVNF.substring(index+\"fwl\".length());\n				}\n				//\n				// Construct an APPC request\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"ModifyConfig\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// insert operationWrapper into memory\n				//\n				insert(operationWrapper);\n				//\n				Request request = new Request();\n				request.CommonHeader = new CommonHeader();\n				request.CommonHeader.RequestID = $event.requestID;\n				request.Action = operation.operation;\n				request.Payload = new HashMap<String, Object>();\n				//\n				// Fill in the payload\n				//\n				request.Payload.put(\"generic-vnf.vnf-id\", genericVNF);\n				//\n				PGRequest pgRequest = new PGRequest();\n				pgRequest.pgStreams = new PGStreams();\n				\n				PGStream pgStream;\n				for(int i = 0; i < 5; i++){\n					pgStream = new PGStream();\n					pgStream.streamId = \"fw_udp\"+(i+1);\n					pgStream.isEnabled = \"true\";\n					pgRequest.pgStreams.pgStream.add(pgStream);\n				}\n				request.Payload.put(\"pg-streams\", pgRequest.pgStreams);\n				\n				if (request != null) {\n					//\n					// Insert request into memory\n					//\n					insert(request);\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					// message and history ??\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"com\";\n					notification.policyVersion = \"1\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Now send the operation request\n					//\n					if (request instanceof Request) {\n						try {\n							System.out.println(\"APPC request sent:\");\n							System.out.println(Serialization.gsonPretty.toJson(request));\n							PolicyEngine.manager.deliver($params.getAppcTopic(), request);\n						} catch (Exception e) {\n							e.printStackTrace();\n							System.out.println(\"Can\'t deliver request: \" + request);\n						}\n					}\n				} else {\n					//\n					// what happens if it is null\n					//\n				}\n				//\n			} else {\n				//\n				// create AAI named-query request with UUID started with \"F199\"\n				//\n				AAINQF199Request aainqf199request = new AAINQF199Request();\n				AAINQF199QueryParameters aainqf199queryparam = new AAINQF199QueryParameters();\n				AAINQF199NamedQuery aainqf199namedquery = new AAINQF199NamedQuery();\n				AAINQF199InstanceFilters aainqf199instancefilter = new AAINQF199InstanceFilters();\n				//\n				// queryParameters\n				//\n				aainqf199namedquery.namedQueryUUID = UUID.fromString($params.getAaiNamedQueryUUID()); \n				aainqf199queryparam.namedQuery = aainqf199namedquery;\n				aainqf199request.queryParameters = aainqf199queryparam;\n				//\n				// instanceFilters\n				//\n				Map aainqf199instancefiltermap = new HashMap();\n				Map aainqf199instancefiltermapitem = new HashMap();\n				aainqf199instancefiltermapitem.put(\"vserver-name\", vserver); \n				aainqf199instancefiltermap.put(\"vserver\", aainqf199instancefiltermapitem);\n				aainqf199instancefilter.instanceFilter.add(aainqf199instancefiltermap);\n				aainqf199request.instanceFilters = aainqf199instancefilter;\n				//\n				// print aainqf199request for debug\n				//\n				System.out.println(\"AAI Request sent:\");\n				System.out.println(Serialization.gsonPretty.toJson(aainqf199request));\n				//\n				// Create AAINQF199RequestWrapper\n				//\n				AAINQF199RequestWrapper aainqf199RequestWrapper = new AAINQF199RequestWrapper($event.requestID, aainqf199request);\n				//\n				// insert aainqf199request into memory\n				//\n				insert(aainqf199RequestWrapper);\n			}\n			//\n		} catch (Exception e) {\n		 e.printStackTrace();\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid ONSET, closed loop is enabled, an Event Manager\n* is created, AAI Manager and AAI Request are ready in memory. We can start sending query to AAI and then wait for response.\n*\n*/\nrule \"BRMSParamvLBDemoPolicy.EVENT.MANAGER.AAINQF199REQUEST\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$aainqf199RequestWrapper : AAINQF199RequestWrapper(requestID == $event.requestID)\n	then\n		System.out.println(\"rule EVENT.MANAGER.AAINQF199REQUEST is triggered.\");\n		//\n		// send the request\n		//\n		AAINQF199Response aainqf199response = AAINQF199Manager.postQuery($params.getAaiURL(), $params.getAaiUsername(), $params.getAaiPassword(),\n													   $aainqf199RequestWrapper.aainqf199request, $event.requestID);\n		//\n		// Check AAI response\n		//\n		if (aainqf199response == null) {\n			System.err.println(\"Failed to get AAI response\");\n			//\n			// Fail and retract everything\n			//\n			retract($event);\n			retract($manager);\n			retract($aainqf199RequestWrapper);\n		} else {\n			//\n			// Create AAINQF199ResponseWrapper\n			//\n			AAINQF199ResponseWrapper aainqf199ResponseWrapper = new AAINQF199ResponseWrapper($event.requestID, aainqf199response);\n			//\n			// insert aainqf199ResponseWrapper to memeory\n			//\n			insert(aainqf199ResponseWrapper);\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid AAI response. We can start sending request to APPC or MSO now.\n*\n*/\nrule \"BRMSParamvLBDemoPolicy.EVENT.MANAGER.AAINQF199RESPONSE\"\n	when \n		$params : Params( getClosedLoopControlName() == \"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$aainqf199RequestWrapper : AAINQF199RequestWrapper(requestID == $event.requestID)\n		$aainqf199ResponseWrapper : AAINQF199ResponseWrapper(requestID == $event.requestID)\n	then\n		System.out.println(\"rule EVENT.MANAGER.AAINQF199RESPONSE is triggered.\");\n		//\n		// Extract related fields out of AAINQF199RESPONSE\n		//\n		String vnfItemVnfId, vnfItemVnfType, vnfItemPersonaModelId, vnfItemPersonaModelVersion, vnfItemModelName, \n		       vnfItemModelVersion, vnfItemModelNameVersionId, serviceItemServiceInstanceId, serviceItemPersonaModelId,\n		       serviceItemModelName, serviceItemModelType, serviceItemModelVersion, serviceItemModelNameVersionId,\n		       vfModuleItemVfModuleName, vfModuleItemPersonaModelId, vfModuleItemPersonaModelVersion, vfModuleItemModelName, \n		       vfModuleItemModelNameVersionId, tenantItemTenantId, cloudRegionItemCloudRegionId;\n		try {\n			//\n			// vnfItem\n			//\n			vnfItemVnfId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfID;\n			vnfItemVnfType = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfType;\n			vnfItemVnfType = vnfItemVnfType.substring(vnfItemVnfType.lastIndexOf(\"/\")+1);\n			vnfItemPersonaModelId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelId;\n			vnfItemPersonaModelVersion = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelVersion;\n			vnfItemModelName = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;\n			vnfItemModelVersion = 		$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(2).propertyValue;\n			vnfItemModelNameVersionId = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// serviceItem\n			//\n			serviceItemServiceInstanceId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.serviceInstanceID;\n			serviceItemPersonaModelId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelId;\n			serviceItemModelName = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;\n			serviceItemModelType = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(1).propertyValue;\n			serviceItemModelVersion = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelVersion;\n			serviceItemModelNameVersionId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// Find the index for base vf module and non-base vf module\n			//\n			int baseIndex = -1;\n			int nonBaseIndex = -1;\n			List<AAINQF199InventoryResponseItem> inventoryItems = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems;\n			for (AAINQF199InventoryResponseItem m : inventoryItems) {\n				if (m.vfModule != null && m.vfModule.isBaseVfModule == true) {\n					baseIndex = inventoryItems.indexOf(m);\n				} else if (m.vfModule != null && m.vfModule.isBaseVfModule == false && m.vfModule.orchestrationStatus == null) {\n					nonBaseIndex = inventoryItems.indexOf(m);\n				}\n				//\n				if (baseIndex != -1 && nonBaseIndex != -1) {\n					break;\n				}\n			}\n			//\n			// Report the error if either base vf module or non-base vf module is not found\n			//\n			if (baseIndex == -1 || nonBaseIndex == -1) {\n				System.err.println(\"Either base or non-base vf module is not found from AAI response.\");\n				retract($aainqf199RequestWrapper);\n				retract($aainqf199ResponseWrapper);\n				retract($manager);\n				retract($event);\n				return;\n			}\n			//\n			// This comes from the base module\n			//\n			vfModuleItemVfModuleName = 			$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(baseIndex).vfModule.vfModuleName;\n			vfModuleItemVfModuleName = vfModuleItemVfModuleName.replace(\"Vfmodule\", \"vDNS\");\n			//\n			// vfModuleItem - NOT the base module\n			//\n			vfModuleItemPersonaModelId = 		$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).vfModule.personaModelId;\n			vfModuleItemPersonaModelVersion = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).vfModule.personaModelVersion;\n			vfModuleItemModelName = 			$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).extraProperties.extraProperty.get(0).propertyValue;\n			vfModuleItemModelNameVersionId = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// tenantItem\n			//\n			tenantItemTenantId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).tenant.tenantId;\n			//\n			// cloudRegionItem\n			//\n			cloudRegionItemCloudRegionId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).items.inventoryResponseItems.get(0).cloudRegion.cloudRegionId;\n			//\n		} catch (Exception e) {\n			e.printStackTrace();\n			VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n			notification.notification = ControlLoopNotificationType.REJECTED;\n			notification.message = \"Exception occurred \" + e.getMessage();\n			notification.policyName = drools.getRule().getName();\n			notification.policyScope = \"com\";\n			notification.policyVersion = \"1\";\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e1) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e1.printStackTrace();\n			}\n			//\n			notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n			notification.message = \"Invalid named-query response from AAI\";\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n                PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e1) {\n                System.out.println(\"Can\'t deliver notification: \" + notification);\n                e1.printStackTrace();\n            }\n			//\n			// Retract everything\n			//\n			retract($aainqf199RequestWrapper);\n			retract($aainqf199ResponseWrapper);\n			retract($manager);\n			retract($event);\n			return;\n		}	\n		//\n		// Extracted fields should not be null\n		//\n		if ((vnfItemVnfId == null) || (vnfItemVnfType == null) ||\n		    (vnfItemPersonaModelId == null) || (vnfItemModelName == null) ||\n		    (vnfItemModelVersion == null) || (vnfItemModelNameVersionId == null) ||\n		    (serviceItemServiceInstanceId == null) || (serviceItemModelName == null) ||\n		    (serviceItemModelType == null) || (serviceItemModelVersion == null) ||\n		    (serviceItemModelNameVersionId == null) || (vfModuleItemVfModuleName == null) ||\n		    (vfModuleItemPersonaModelId == null) || (vfModuleItemPersonaModelVersion == null) ||\n		    (vfModuleItemModelName == null) || (vfModuleItemModelNameVersionId == null) ||\n		    (tenantItemTenantId == null) || (cloudRegionItemCloudRegionId == null)) {\n			//\n			System.err.println(\"some fields are missing from AAI response.\");\n			//\n			// Fail and retract everything\n			//\n			retract($aainqf199RequestWrapper);\n			retract($aainqf199ResponseWrapper);\n			retract($manager);\n			retract($event);\n			return;\n		}\n		//\n		// We don\'t need them any more\n		//\n		retract($aainqf199ResponseWrapper);\n		retract($aainqf199RequestWrapper);  \n		//\n		// check the actor of this closed loop\n		//\n		switch ($params.getActor()) {\n			case \"APPC\":\n			{\n				//\n				// Construct an APPC request\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"ModifyConfig\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// insert operationWrapper into memory\n				//\n				insert(operationWrapper);\n				//\n				Request request = new Request();\n				request.CommonHeader = new CommonHeader();\n				request.CommonHeader.RequestID = $event.requestID;\n				request.Action = operation.operation;\n				request.Payload = new HashMap<String, Object>();\n				//\n				// Fill in the payload\n				// Hardcode genericVNF for now since AAI has not been ready for vFirewall demo case\n				//\n				String genericVNF = \"zdfw1fwl01pgn02\";\n				request.Payload.put(\"generic-vnf.vnf-id\", genericVNF);\n				//\n				PGRequest pgRequest = new PGRequest();\n				pgRequest.pgStreams = new PGStreams();\n				\n				PGStream pgStream;\n				for(int i = 0; i < 5; i++){\n					pgStream = new PGStream();\n					pgStream.streamId = \"fw_udp\"+(i+1);\n					pgStream.isEnabled = \"true\";\n					pgRequest.pgStreams.pgStream.add(pgStream);\n				}\n				request.Payload.put(\"pg-streams\", pgRequest.pgStreams);\n				\n				if (request != null) {\n					//\n					// Insert request into memory\n					//\n					insert(request);\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					// message and history ??\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"com\";\n					notification.policyVersion = \"1\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Now send the operation request\n					//\n					if (request instanceof Request) {\n						try {\n							System.out.println(\"APPC request sent:\");\n							System.out.println(Serialization.gsonPretty.toJson(request));\n							PolicyEngine.manager.deliver($params.getAppcTopic(), request);\n						} catch (Exception e) {\n							e.printStackTrace();\n							System.out.println(\"Can\'t deliver request: \" + request);\n						}\n					}\n				} else {\n					//\n					// what happens if it is null\n					//\n				}\n			}\n			break;\n			case \"MSO\":\n			{\n				//\n				// Construct an operation\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"createModuleInstance\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// Construct an MSO request\n				//\n				MSORequest request = new MSORequest();\n				request.requestDetails = new MSORequestDetails();\n				request.requestDetails.modelInfo = new MSOModelInfo();\n				request.requestDetails.cloudConfiguration = new MSOCloudConfiguration();\n				request.requestDetails.requestInfo = new MSORequestInfo();\n				request.requestDetails.requestParameters = new MSORequestParameters();\n				request.requestDetails.requestParameters.userParams = null;\n				//\n				// cloudConfiguration\n				//\n				request.requestDetails.cloudConfiguration.lcpCloudRegionId = cloudRegionItemCloudRegionId;\n				request.requestDetails.cloudConfiguration.tenantId = tenantItemTenantId;\n				//\n				// modelInfo\n				//\n				request.requestDetails.modelInfo.modelType = \"vfModule\";\n				request.requestDetails.modelInfo.modelInvariantId = vfModuleItemPersonaModelId;\n				request.requestDetails.modelInfo.modelNameVersionId = vfModuleItemModelNameVersionId;\n				request.requestDetails.modelInfo.modelName = vfModuleItemModelName;\n				request.requestDetails.modelInfo.modelVersion = vfModuleItemPersonaModelVersion;\n				//\n				// requestInfo\n				//\n				request.requestDetails.requestInfo.instanceName = vfModuleItemVfModuleName;\n				request.requestDetails.requestInfo.source = \"POLICY\";\n				request.requestDetails.requestInfo.suppressRollback = false;\n				//\n				// relatedInstanceList\n				//\n				MSORelatedInstanceListElement relatedInstanceListElement1 = new MSORelatedInstanceListElement();\n				MSORelatedInstanceListElement relatedInstanceListElement2 = new MSORelatedInstanceListElement();\n				relatedInstanceListElement1.relatedInstance = new MSORelatedInstance();\n				relatedInstanceListElement2.relatedInstance = new MSORelatedInstance();\n				//\n				relatedInstanceListElement1.relatedInstance.instanceId = serviceItemServiceInstanceId;\n				relatedInstanceListElement1.relatedInstance.modelInfo = new MSOModelInfo();\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelType = \"service\";\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelInvariantId = serviceItemPersonaModelId;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelNameVersionId = serviceItemModelNameVersionId;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelName = serviceItemModelName;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelVersion = serviceItemModelVersion;\n				//\n				relatedInstanceListElement2.relatedInstance.instanceId = vnfItemVnfId;\n				relatedInstanceListElement2.relatedInstance.modelInfo = new MSOModelInfo();\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelType = \"vnf\";\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelInvariantId = vnfItemPersonaModelId;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelNameVersionId = vnfItemModelNameVersionId;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelName = vnfItemModelName;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelVersion = vnfItemModelVersion;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelCustomizationName = vnfItemVnfType;\n				//	\n				request.requestDetails.relatedInstanceList.add(relatedInstanceListElement1);\n				request.requestDetails.relatedInstanceList.add(relatedInstanceListElement2);\n				//\n				// print MSO request for debug\n				//\n				System.out.println(\"MSO request sent:\");\n				System.out.println(Serialization.gsonPretty.toJson(request));\n				//\n				//\n				//\n				if (request != null) {\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"com\";\n					notification.policyVersion = \"1\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Concatenate serviceItemServiceInstanceId and vnfItemVnfId to msoURL\n					//\n					String MSOUrl = $params.getMsoURL() + \"/serviceInstances/v2/\" + serviceItemServiceInstanceId + \"/vnfs/\" + vnfItemVnfId + \"/vfModules\";\n					//\n					// Call MSO\n					//\n					MSOResponse response = MSOManager.createModuleInstance(MSOUrl, $params.getMsoURL(), $params.getMsoUsername(), $params.getMsoPassword(), request);\n					//\n					if (response != null) {\n						//\n						// Assign requestId\n						//\n						request.requestId = $event.requestID.toString();						\n						response.request.requestId = $event.requestID.toString();\n						//\n						// Insert facts\n						//\n						insert(operationWrapper);\n						insert(request);\n						insert(response);\n					} else {\n						//\n						// MSO request not even accepted\n						//\n						notification.message = operationWrapper.operation.toMessage();\n						operationWrapper.operation.message = operationWrapper.operation.toMessage();\n						operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n						$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n						notification.history.add(operationWrapper.operation);\n						notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n						//\n						// Let interested parties know\n						//\n						try {\n							System.out.println(Serialization.gsonPretty.toJson(notification));\n							PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n						} catch (Exception e) {\n							System.out.println(\"Can\'t deliver notification: \" + notification);\n							e.printStackTrace();\n						}\n	                    notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n                        try {\n                        	System.out.println(Serialization.gsonPretty.toJson(notification));\n                        	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n                        } catch (Exception e) {\n                        	System.out.println(\"Can\'t deliver notification: \" + notification);\n                        	e.printStackTrace();\n                        }\n						//\n						// Retract everything\n						//\n						retract($event);\n						retract($manager);\n					}\n				} else {\n					System.err.println(\"constructed MSO request is invalid.\");\n				}\n			}\n			break; \n		} \nend\n		\n/*\n*\n* This rule responds to APPC Response Events\n*\n*/\nrule \"BRMSParamvLBDemoPolicy.APPC.RESPONSE\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$operationWrapper : ControlLoopOperationWrapper( requestID == $event.requestID )\n		$request : Request( getCommonHeader().RequestID == $event.requestID )\n		$response : Response( getCommonHeader().RequestID == $event.requestID )	\n	then\n		System.out.println(\"rule APPC.RESPONSE is triggered.\");\n		if ($response.Status == null) {\n			$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n			$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n		} \n		//\n		// Get the Response Code\n		//\n		ResponseCode code = ResponseCode.toResponseCode($response.Status.Code);\n		if (code == null) {\n			$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n			$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n		}\n		//\n		// Construct notification\n		//\n		VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n		notification.from = \"policy\";\n		notification.policyName = drools.getRule().getName();\n		notification.policyScope = \"com\";\n		notification.policyVersion = \"1\";\n		notification.message = $operationWrapper.operation.toMessage();\n		$operationWrapper.operation.message = $operationWrapper.operation.toMessage();\n		//\n		// Ok, let\'s figure out what APP-C\'s response is\n		//\n		switch (code) {\n			case ACCEPT:\n				$operationWrapper.operation.outcome = \"PROCESSING\";\n				break;\n			case ERROR:\n			case REJECT:\n				$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n				$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n				break;\n			case SUCCESS:\n				$operationWrapper.operation.outcome = \"SUCCESS\";\n				$manager.setControlLoopResult(\"SUCCESS\");\n				break;\n			case FAILURE:\n				$operationWrapper.operation.outcome = \"FAILURE\";\n				$manager.setControlLoopResult(\"FAILURE\");\n				break;\n		}\n		if ($operationWrapper.operation.outcome.equals(\"SUCCESS\")) {\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n            notification.notification = ControlLoopNotificationType.FINAL_SUCCESS;\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n\n			//\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		} else if ($operationWrapper.operation.outcome.equals(\"PROCESSING\")) {\n			retract($response);\n		} else {\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n            notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n			//\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		}\n		\nend		\n\n/*\n*\n* This rule is used to clean up APPC response\n*\n*/		\nrule \"BRMSParamvLBDemoPolicy.APPC.RESPONSE.CLEANUP\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n        $response : Response($id : getCommonHeader().RequestID )\n		not ( VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), requestID == $id, closedLoopEventStatus == ControlLoopEventStatus.ONSET ) ) \n	then\n		System.out.println(\"rule APPC.RESPONSE.CLEANUP is triggered.\");\n		retract($response);\nend\n\n/*\n*\n* This rule responds to MSO Response Events\n*\n*/\nrule \"BRMSParamvLBDemoPolicy.MSO.RESPONSE\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$operationWrapper : ControlLoopOperationWrapper( requestID == $event.requestID )\n		$request : MSORequest( requestId == $event.requestID.toString() )\n		$response : MSOResponse( request.requestId == $event.requestID.toString() )	\n	then\n		System.out.println(\"rule MSO.RESPONSE is triggered.\");\n		//\n		// Construct notification\n		//\n		VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n		notification.from = \"policy\";\n		notification.policyName = drools.getRule().getName();\n		notification.policyScope = \"com\";\n		notification.policyVersion = \"1\";\n		notification.message = $operationWrapper.operation.toMessage();\n		$operationWrapper.operation.message = $operationWrapper.operation.toMessage();\n		//\n		// The operation can either be succeeded or failed\n		// \n		if($response.request.requestStatus.requestState.equals(\"COMPLETE\")) {\n			$operationWrapper.operation.outcome = \"SUCCESS\";\n			$manager.setControlLoopResult(\"SUCCESS\");\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n			notification.notification = ControlLoopNotificationType.FINAL_SUCCESS;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n            //\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		} else {\n			$operationWrapper.operation.outcome = \"FAILURE\";\n			$manager.setControlLoopResult(\"FAILURE\");\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n			notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n            //\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		}\n		\nend	\nrule \"com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.Params\" \n	salience 1000 \n	when\n	then\n		Params params = new Params();\n		params.setAaiPatternMatch(0);\n		params.setAppcTopic(\"APPC-CL\");\n		params.setAaiURL(\"https://aai.api.simpledemo.openecomp.org:8443\");\n		params.setMsoPassword(\"password1$\");\n		params.setClosedLoopControlName(\"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\");\n		params.setAaiUsername(\"POLICY\");\n		params.setMsoURL(\"http://vm1.mso.simpledemo.openecomp.org:8080/ecomp/mso/infra\");\n		params.setActor(\"MSO\");\n		params.setMsoUsername(\"InfraPortalClient\");\n		params.setAaiNamedQueryUUID(\"f199cb88-5e69-4b1f-93e0-6f257877d066\");\n		params.setAaiPassword(\"POLICY\");\n		params.setNotificationTopic(\"POLICY-CL-MGT\");\n		insert(params);\nend\r\n','OTHER','com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.txt','doACPolicyPut','2017-03-14 20:00:56',0,'','doACPolicyPut','2017-03-14 20:00:56',1);
+INSERT INTO `configurationdataentity` VALUES (3201,'/* Autogenerated Code Please Don\'t change/remove this comment section. This is for the UI purpose. \n	 <$%BRMSParamTemplate=ControlLoopDemo__closedLoopControlName%$> \n */ \n\r\n\r\n/*-\n * ============LICENSE_START=======================================================\n * archetype-closed-loop-demo-rules\n * ================================================================================\n * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.\n * ================================================================================\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============LICENSE_END=========================================================\n */\n\npackage org.onap.policy.controlloop;\n\nimport java.util.List;\nimport java.util.LinkedList;\nimport java.util.Map;\nimport java.util.HashMap;\nimport java.util.UUID;\n\nimport org.onap.policy.controlloop.VirtualControlLoopEvent;\nimport org.onap.policy.controlloop.ControlLoopEventStatus;\nimport org.onap.policy.controlloop.VirtualControlLoopNotification;\nimport org.onap.policy.controlloop.ControlLoopNotificationType;\nimport org.onap.policy.controlloop.ControlLoopOperation;\nimport org.onap.policy.controlloop.ControlLoopOperationWrapper;\nimport org.onap.policy.template.demo.ControlLoopException;\n\nimport org.onap.policy.aai.AAINQF199.AAINQF199CloudRegion;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ExtraProperties;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ExtraProperty;\nimport org.onap.policy.aai.AAINQF199.AAINQF199GenericVNF;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InstanceFilters;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InventoryResponseItem;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InventoryResponseItems;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Manager;\nimport org.onap.policy.aai.AAINQF199.AAINQF199NamedQuery;\nimport org.onap.policy.aai.AAINQF199.AAINQF199QueryParameters;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Request;\nimport org.onap.policy.aai.AAINQF199.AAINQF199RequestWrapper;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Response;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ResponseWrapper;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ServiceInstance;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Tenant;\nimport org.onap.policy.aai.AAINQF199.AAINQF199VfModule;\nimport org.onap.policy.aai.AAINQF199.AAINQF199VServer;\nimport org.onap.policy.aai.util.Serialization;\n\nimport org.onap.policy.appc.CommonHeader;\nimport org.onap.policy.appc.Request;\nimport org.onap.policy.appc.Response;\nimport org.onap.policy.appc.ResponseCode;\nimport org.onap.policy.appc.ResponseStatus;\nimport org.onap.policy.appc.ResponseValue;\n\nimport org.onap.policy.template.demo.EventManager;\nimport org.onap.policy.vnf.trafficgenerator.PGRequest;\nimport org.onap.policy.vnf.trafficgenerator.PGStream;\nimport org.onap.policy.vnf.trafficgenerator.PGStreams;\n\nimport org.onap.policy.mso.MSOManager;\nimport org.onap.policy.mso.MSORequest;\nimport org.onap.policy.mso.MSORequestStatus;\nimport org.onap.policy.mso.MSORequestDetails;\nimport org.onap.policy.mso.MSOModelInfo;\nimport org.onap.policy.mso.MSOCloudConfiguration;\nimport org.onap.policy.mso.MSORequestInfo;\nimport org.onap.policy.mso.MSORequestParameters;\nimport org.onap.policy.mso.MSORelatedInstanceListElement;\nimport org.onap.policy.mso.MSORelatedInstance;\nimport org.onap.policy.mso.MSOResponse;\n\nimport org.onap.policy.drools.system.PolicyEngine;\n\n//\n// These parameters are required to build the runtime policy\n//\ndeclare Params\n    closedLoopControlName : String\n    actor : String\n    aaiURL : String\n    aaiUsername : String\n    aaiPassword : String\n    msoURL : String\n    msoUsername : String\n    msoPassword : String\n    aaiNamedQueryUUID : String\n    aaiPatternMatch : int \n    notificationTopic : String\n    appcTopic : String\nend\n\n/*\n*\n* Called once and only once to insert the parameters into working memory for this Closed Loop policy.\n* (Comment SETUP rule out for the first ONAP opensource release since policy BRMS_GW already puts a Params fact in there)\n*\n*\n*rule \"BRMSParamvFWDemoPolicy.SETUP\"\n*	when\n*	then\n*		System.out.println(\"rule SETUP is triggered.\");\n*		Params params = new Params();\n*		params.setClosedLoopControlName(\"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\");\n*		params.setActor(\"APPC\");\n*		params.setAaiURL(\"null\");\n*		params.setAaiUsername(\"null\");\n*		params.setAaiPassword(\"null\");\n*		params.setMsoURL(\"null\");\n*		params.setMsoUsername(\"null\");\n*		params.setMsoPassword(\"null\");\n*		params.setAaiNamedQueryUUID(\"null\");\n*		params.setAaiPatternMatch(1);\n*		params.setNotificationTopic(\"POLICY-CL-MGT\");\n*		params.setAppcTopic(\"APPC-CL\");\n*		//\n*		// This stays in memory as long as the rule is alive and running\n*		//\n*		insert(params);\n*end\n*/\n/*\n*\n* This rule responds to DCAE Events\n*\n*/\nrule \"BRMSParamvFWDemoPolicy.EVENT\"\n	when\n        $params : Params( getClosedLoopControlName() == \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n        $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n        not ( EventManager( closedLoopControlName == $event.closedLoopControlName ))\n	then\n		System.out.println(\"rule EVENT is triggered.\");\n		try {\n			// \n			// Check the requestID in the event to make sure it is not null before we create the EventManager. \n			// The EventManager will do extra syntax checking as well check if the closed loop is disabled/\n			//\n			if ($event.requestID == null) {\n				VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n				notification.notification = ControlLoopNotificationType.REJECTED;\n				notification.from = \"policy\";\n				notification.message = \"Missing requestID from DCAE event\";\n				notification.policyName = drools.getRule().getName();\n				notification.policyScope = \"com\";\n				notification.policyVersion = \"1\";\n				//\n				// Let interested parties know\n				//\n				try {\n					System.out.println(Serialization.gsonPretty.toJson(notification));\n					PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n				} catch (Exception e) {\n					e.printStackTrace();\n					System.out.println(\"Can\'t deliver notification: \" + notification);\n				}\n				//\n				// Retract it from memory\n				//\n				retract($event);\n				System.out.println(\"Event with requestID=null has been retracted.\");\n			} else {\n				//\n				// Create an EventManager\n				//\n				EventManager manager = new EventManager($params.getClosedLoopControlName(), $event.requestID, $event.target);\n				//\n				// Determine if EventManager can actively process the event (i.e. syntax)\n				//\n				VirtualControlLoopNotification notification = manager.activate($event);\n				notification.from = \"policy\"; \n				notification.policyName = drools.getRule().getName();\n				notification.policyScope = \"com\";\n				notification.policyVersion = \"1\";\n				//\n				// Are we actively pursuing this event?\n				//\n				if (notification.notification == ControlLoopNotificationType.ACTIVE) {\n					//\n					// Insert Event Manager into memory, this will now kick off processing.\n					//\n					insert(manager);\n					//\n					// Let interested parties know\n					//\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						e.printStackTrace();\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n					}		\n				} else {\n					//\n					// Let interested parties know\n					//\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						e.printStackTrace();\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n					}\n					//\n					// Retract it from memory\n					//\n					retract($event);\n				}\n				//\n				// Now that the manager is inserted into Drools working memory, we\'ll wait for\n				// another rule to fire in order to continue processing. This way we can also\n				// then screen for additional ONSET and ABATED events for this same RequestIDs \n				// and for different RequestIDs but with the same closedLoopControlName and target.\n				//\n			}\n		//\n		} catch (Exception e) {\n			e.printStackTrace();\n			VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n			notification.notification = ControlLoopNotificationType.REJECTED;\n			notification.message = \"Exception occurred \" + e.getMessage();\n			notification.policyName = drools.getRule().getName();\n			notification.policyScope = \"com\";\n			notification.policyVersion = \"1\";\n			//\n			//\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e1) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e1.printStackTrace();\n			}\n			//\n			// Retract the event\n			//\n			retract($event);\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid ONSET, closed loop is enabled and an Event Manager\n* is created. We can start the operations for this closed loop.\n*\n*/\nrule \"BRMSParamvFWDemoPolicy.EVENT.MANAGER\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName, controlLoopResult == null)\n	then\n		System.out.println(\"rule EVENT.MANAGER is triggered.\");\n		//\n		// Check which event this is.\n		//\n		EventManager.NEW_EVENT_STATUS eventStatus = $manager.onNewEvent($event);\n		//\n		// We only want the initial ONSET event in memory,\n		// all the other events need to be retracted to support\n		// cleanup and avoid the other rules being fired for this event.\n		//\n		if (eventStatus != EventManager.NEW_EVENT_STATUS.FIRST_ONSET) {\n			System.out.println(\"Retracting \"+eventStatus+\" Event.\");\n			retract($event);\n			return;\n		}\n		//\n		// Now the event in memory is first onset event\n		//\n		try {\n			//\n			// Pull the known AAI field from the Event\n			//\n			// generic-vnf is needed for vFirewall case\n			// vserver-name is needed for vLoadBalancer case\n			//\n			String genericVNF = $event.AAI.get(\"generic-vnf.vnf-id\");\n			String vserver = $event.AAI.get(\"vserver.vserver-name\");\n			//\n			// Check if we are implementing a simple pattern match.\n			//\n			if ($params.getAaiPatternMatch() == 1) {\n				//\n				// Yes\n				//\n				//Basic naming characteristics:\n				//VF Name (9 char)+VM name (13 char total)+VFC (19 char total)\n				//Example: \n				//VF Name (9 characters):    cscf0001v\n				//VM Name(13 characters): cscf0001vm001\n				//VFC name(19 characters): cscf0001vm001cfg001\n				//\n				// zdfw1fwl01fwl02 or zdfw1fwl01fwl01  \n				// replaced with\n				// zdfw1fwl01pgn02 or zdfw1fwl01pgn01\n				//\n				int index = genericVNF.lastIndexOf(\"fwl\");\n				if (index == -1) {\n					System.err.println(\"The generic-vnf.vnf-id from DCAE Event is not valid.\");\n				} else {\n					genericVNF = genericVNF.substring(0, index) + \"pgn\" + genericVNF.substring(index+\"fwl\".length());\n				}\n				//\n				// Construct an APPC request\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"ModifyConfig\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// insert operationWrapper into memory\n				//\n				insert(operationWrapper);\n				//\n				Request request = new Request();\n				request.CommonHeader = new CommonHeader();\n				request.CommonHeader.RequestID = $event.requestID;\n				request.Action = operation.operation;\n				request.Payload = new HashMap<String, Object>();\n				//\n				// Fill in the payload\n				//\n				request.Payload.put(\"generic-vnf.vnf-id\", genericVNF);\n				//\n				PGRequest pgRequest = new PGRequest();\n				pgRequest.pgStreams = new PGStreams();\n				\n				PGStream pgStream;\n				for(int i = 0; i < 5; i++){\n					pgStream = new PGStream();\n					pgStream.streamId = \"fw_udp\"+(i+1);\n					pgStream.isEnabled = \"true\";\n					pgRequest.pgStreams.pgStream.add(pgStream);\n				}\n				request.Payload.put(\"pg-streams\", pgRequest.pgStreams);\n				\n				if (request != null) {\n					//\n					// Insert request into memory\n					//\n					insert(request);\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					// message and history ??\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"com\";\n					notification.policyVersion = \"1\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Now send the operation request\n					//\n					if (request instanceof Request) {\n						try {\n							System.out.println(\"APPC request sent:\");\n							System.out.println(Serialization.gsonPretty.toJson(request));\n							PolicyEngine.manager.deliver($params.getAppcTopic(), request);\n						} catch (Exception e) {\n							e.printStackTrace();\n							System.out.println(\"Can\'t deliver request: \" + request);\n						}\n					}\n				} else {\n					//\n					// what happens if it is null\n					//\n				}\n				//\n			} else {\n				//\n				// create AAI named-query request with UUID started with \"F199\"\n				//\n				AAINQF199Request aainqf199request = new AAINQF199Request();\n				AAINQF199QueryParameters aainqf199queryparam = new AAINQF199QueryParameters();\n				AAINQF199NamedQuery aainqf199namedquery = new AAINQF199NamedQuery();\n				AAINQF199InstanceFilters aainqf199instancefilter = new AAINQF199InstanceFilters();\n				//\n				// queryParameters\n				//\n				aainqf199namedquery.namedQueryUUID = UUID.fromString($params.getAaiNamedQueryUUID()); \n				aainqf199queryparam.namedQuery = aainqf199namedquery;\n				aainqf199request.queryParameters = aainqf199queryparam;\n				//\n				// instanceFilters\n				//\n				Map aainqf199instancefiltermap = new HashMap();\n				Map aainqf199instancefiltermapitem = new HashMap();\n				aainqf199instancefiltermapitem.put(\"vserver-name\", vserver); \n				aainqf199instancefiltermap.put(\"vserver\", aainqf199instancefiltermapitem);\n				aainqf199instancefilter.instanceFilter.add(aainqf199instancefiltermap);\n				aainqf199request.instanceFilters = aainqf199instancefilter;\n				//\n				// print aainqf199request for debug\n				//\n				System.out.println(\"AAI Request sent:\");\n				System.out.println(Serialization.gsonPretty.toJson(aainqf199request));\n				//\n				// Create AAINQF199RequestWrapper\n				//\n				AAINQF199RequestWrapper aainqf199RequestWrapper = new AAINQF199RequestWrapper($event.requestID, aainqf199request);\n				//\n				// insert aainqf199request into memory\n				//\n				insert(aainqf199RequestWrapper);\n			}\n			//\n		} catch (Exception e) {\n		 e.printStackTrace();\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid ONSET, closed loop is enabled, an Event Manager\n* is created, AAI Manager and AAI Request are ready in memory. We can start sending query to AAI and then wait for response.\n*\n*/\nrule \"BRMSParamvFWDemoPolicy.EVENT.MANAGER.AAINQF199REQUEST\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$aainqf199RequestWrapper : AAINQF199RequestWrapper(requestID == $event.requestID)\n	then\n		System.out.println(\"rule EVENT.MANAGER.AAINQF199REQUEST is triggered.\");\n		//\n		// send the request\n		//\n		AAINQF199Response aainqf199response = AAINQF199Manager.postQuery($params.getAaiURL(), $params.getAaiUsername(), $params.getAaiPassword(),\n													   $aainqf199RequestWrapper.aainqf199request, $event.requestID);\n		//\n		// Check AAI response\n		//\n		if (aainqf199response == null) {\n			System.err.println(\"Failed to get AAI response\");\n			//\n			// Fail and retract everything\n			//\n			retract($event);\n			retract($manager);\n			retract($aainqf199RequestWrapper);\n		} else {\n			//\n			// Create AAINQF199ResponseWrapper\n			//\n			AAINQF199ResponseWrapper aainqf199ResponseWrapper = new AAINQF199ResponseWrapper($event.requestID, aainqf199response);\n			//\n			// insert aainqf199ResponseWrapper to memeory\n			//\n			insert(aainqf199ResponseWrapper);\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid AAI response. We can start sending request to APPC or MSO now.\n*\n*/\nrule \"BRMSParamvFWDemoPolicy.EVENT.MANAGER.AAINQF199RESPONSE\"\n	when \n		$params : Params( getClosedLoopControlName() == \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$aainqf199RequestWrapper : AAINQF199RequestWrapper(requestID == $event.requestID)\n		$aainqf199ResponseWrapper : AAINQF199ResponseWrapper(requestID == $event.requestID)\n	then\n		System.out.println(\"rule EVENT.MANAGER.AAINQF199RESPONSE is triggered.\");\n		//\n		// Extract related fields out of AAINQF199RESPONSE\n		//\n		String vnfItemVnfId, vnfItemVnfType, vnfItemPersonaModelId, vnfItemPersonaModelVersion, vnfItemModelName, \n		       vnfItemModelVersion, vnfItemModelNameVersionId, serviceItemServiceInstanceId, serviceItemPersonaModelId,\n		       serviceItemModelName, serviceItemModelType, serviceItemModelVersion, serviceItemModelNameVersionId,\n		       vfModuleItemVfModuleName, vfModuleItemPersonaModelId, vfModuleItemPersonaModelVersion, vfModuleItemModelName, \n		       vfModuleItemModelNameVersionId, tenantItemTenantId, cloudRegionItemCloudRegionId;\n		try {\n			//\n			// vnfItem\n			//\n			vnfItemVnfId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfID;\n			vnfItemVnfType = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfType;\n			vnfItemVnfType = vnfItemVnfType.substring(vnfItemVnfType.lastIndexOf(\"/\")+1);\n			vnfItemPersonaModelId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelId;\n			vnfItemPersonaModelVersion = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelVersion;\n			vnfItemModelName = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;\n			vnfItemModelVersion = 		$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(2).propertyValue;\n			vnfItemModelNameVersionId = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// serviceItem\n			//\n			serviceItemServiceInstanceId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.serviceInstanceID;\n			serviceItemPersonaModelId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelId;\n			serviceItemModelName = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;\n			serviceItemModelType = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(1).propertyValue;\n			serviceItemModelVersion = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelVersion;\n			serviceItemModelNameVersionId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// Find the index for base vf module and non-base vf module\n			//\n			int baseIndex = -1;\n			int nonBaseIndex = -1;\n			List<AAINQF199InventoryResponseItem> inventoryItems = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems;\n			for (AAINQF199InventoryResponseItem m : inventoryItems) {\n				if (m.vfModule != null && m.vfModule.isBaseVfModule == true) {\n					baseIndex = inventoryItems.indexOf(m);\n				} else if (m.vfModule != null && m.vfModule.isBaseVfModule == false && m.vfModule.orchestrationStatus == null) {\n					nonBaseIndex = inventoryItems.indexOf(m);\n				}\n				//\n				if (baseIndex != -1 && nonBaseIndex != -1) {\n					break;\n				}\n			}\n			//\n			// Report the error if either base vf module or non-base vf module is not found\n			//\n			if (baseIndex == -1 || nonBaseIndex == -1) {\n				System.err.println(\"Either base or non-base vf module is not found from AAI response.\");\n				retract($aainqf199RequestWrapper);\n				retract($aainqf199ResponseWrapper);\n				retract($manager);\n				retract($event);\n				return;\n			}\n			//\n			// This comes from the base module\n			//\n			vfModuleItemVfModuleName = 			$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(baseIndex).vfModule.vfModuleName;\n			vfModuleItemVfModuleName = vfModuleItemVfModuleName.replace(\"Vfmodule\", \"vDNS\");\n			//\n			// vfModuleItem - NOT the base module\n			//\n			vfModuleItemPersonaModelId = 		$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).vfModule.personaModelId;\n			vfModuleItemPersonaModelVersion = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).vfModule.personaModelVersion;\n			vfModuleItemModelName = 			$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).extraProperties.extraProperty.get(0).propertyValue;\n			vfModuleItemModelNameVersionId = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// tenantItem\n			//\n			tenantItemTenantId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).tenant.tenantId;\n			//\n			// cloudRegionItem\n			//\n			cloudRegionItemCloudRegionId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).items.inventoryResponseItems.get(0).cloudRegion.cloudRegionId;\n			//\n		} catch (Exception e) {\n			e.printStackTrace();\n			VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n			notification.notification = ControlLoopNotificationType.REJECTED;\n			notification.message = \"Exception occurred \" + e.getMessage();\n			notification.policyName = drools.getRule().getName();\n			notification.policyScope = \"com\";\n			notification.policyVersion = \"1\";\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e1) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e1.printStackTrace();\n			}\n			//\n			notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n			notification.message = \"Invalid named-query response from AAI\";\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n                PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e1) {\n                System.out.println(\"Can\'t deliver notification: \" + notification);\n                e1.printStackTrace();\n            }\n			//\n			// Retract everything\n			//\n			retract($aainqf199RequestWrapper);\n			retract($aainqf199ResponseWrapper);\n			retract($manager);\n			retract($event);\n			return;\n		}	\n		//\n		// Extracted fields should not be null\n		//\n		if ((vnfItemVnfId == null) || (vnfItemVnfType == null) ||\n		    (vnfItemPersonaModelId == null) || (vnfItemModelName == null) ||\n		    (vnfItemModelVersion == null) || (vnfItemModelNameVersionId == null) ||\n		    (serviceItemServiceInstanceId == null) || (serviceItemModelName == null) ||\n		    (serviceItemModelType == null) || (serviceItemModelVersion == null) ||\n		    (serviceItemModelNameVersionId == null) || (vfModuleItemVfModuleName == null) ||\n		    (vfModuleItemPersonaModelId == null) || (vfModuleItemPersonaModelVersion == null) ||\n		    (vfModuleItemModelName == null) || (vfModuleItemModelNameVersionId == null) ||\n		    (tenantItemTenantId == null) || (cloudRegionItemCloudRegionId == null)) {\n			//\n			System.err.println(\"some fields are missing from AAI response.\");\n			//\n			// Fail and retract everything\n			//\n			retract($aainqf199RequestWrapper);\n			retract($aainqf199ResponseWrapper);\n			retract($manager);\n			retract($event);\n			return;\n		}\n		//\n		// We don\'t need them any more\n		//\n		retract($aainqf199ResponseWrapper);\n		retract($aainqf199RequestWrapper);  \n		//\n		// check the actor of this closed loop\n		//\n		switch ($params.getActor()) {\n			case \"APPC\":\n			{\n				//\n				// Construct an APPC request\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"ModifyConfig\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// insert operationWrapper into memory\n				//\n				insert(operationWrapper);\n				//\n				Request request = new Request();\n				request.CommonHeader = new CommonHeader();\n				request.CommonHeader.RequestID = $event.requestID;\n				request.Action = operation.operation;\n				request.Payload = new HashMap<String, Object>();\n				//\n				// Fill in the payload\n				// Hardcode genericVNF for now since AAI has not been ready for vFirewall demo case\n				//\n				String genericVNF = \"zdfw1fwl01pgn02\";\n				request.Payload.put(\"generic-vnf.vnf-id\", genericVNF);\n				//\n				PGRequest pgRequest = new PGRequest();\n				pgRequest.pgStreams = new PGStreams();\n				\n				PGStream pgStream;\n				for(int i = 0; i < 5; i++){\n					pgStream = new PGStream();\n					pgStream.streamId = \"fw_udp\"+(i+1);\n					pgStream.isEnabled = \"true\";\n					pgRequest.pgStreams.pgStream.add(pgStream);\n				}\n				request.Payload.put(\"pg-streams\", pgRequest.pgStreams);\n				\n				if (request != null) {\n					//\n					// Insert request into memory\n					//\n					insert(request);\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					// message and history ??\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"com\";\n					notification.policyVersion = \"1\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Now send the operation request\n					//\n					if (request instanceof Request) {\n						try {\n							System.out.println(\"APPC request sent:\");\n							System.out.println(Serialization.gsonPretty.toJson(request));\n							PolicyEngine.manager.deliver($params.getAppcTopic(), request);\n						} catch (Exception e) {\n							e.printStackTrace();\n							System.out.println(\"Can\'t deliver request: \" + request);\n						}\n					}\n				} else {\n					//\n					// what happens if it is null\n					//\n				}\n			}\n			break;\n			case \"MSO\":\n			{\n				//\n				// Construct an operation\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"createModuleInstance\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// Construct an MSO request\n				//\n				MSORequest request = new MSORequest();\n				request.requestDetails = new MSORequestDetails();\n				request.requestDetails.modelInfo = new MSOModelInfo();\n				request.requestDetails.cloudConfiguration = new MSOCloudConfiguration();\n				request.requestDetails.requestInfo = new MSORequestInfo();\n				request.requestDetails.requestParameters = new MSORequestParameters();\n				request.requestDetails.requestParameters.userParams = null;\n				//\n				// cloudConfiguration\n				//\n				request.requestDetails.cloudConfiguration.lcpCloudRegionId = cloudRegionItemCloudRegionId;\n				request.requestDetails.cloudConfiguration.tenantId = tenantItemTenantId;\n				//\n				// modelInfo\n				//\n				request.requestDetails.modelInfo.modelType = \"vfModule\";\n				request.requestDetails.modelInfo.modelInvariantId = vfModuleItemPersonaModelId;\n				request.requestDetails.modelInfo.modelNameVersionId = vfModuleItemModelNameVersionId;\n				request.requestDetails.modelInfo.modelName = vfModuleItemModelName;\n				request.requestDetails.modelInfo.modelVersion = vfModuleItemPersonaModelVersion;\n				//\n				// requestInfo\n				//\n				request.requestDetails.requestInfo.instanceName = vfModuleItemVfModuleName;\n				request.requestDetails.requestInfo.source = \"POLICY\";\n				request.requestDetails.requestInfo.suppressRollback = false;\n				//\n				// relatedInstanceList\n				//\n				MSORelatedInstanceListElement relatedInstanceListElement1 = new MSORelatedInstanceListElement();\n				MSORelatedInstanceListElement relatedInstanceListElement2 = new MSORelatedInstanceListElement();\n				relatedInstanceListElement1.relatedInstance = new MSORelatedInstance();\n				relatedInstanceListElement2.relatedInstance = new MSORelatedInstance();\n				//\n				relatedInstanceListElement1.relatedInstance.instanceId = serviceItemServiceInstanceId;\n				relatedInstanceListElement1.relatedInstance.modelInfo = new MSOModelInfo();\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelType = \"service\";\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelInvariantId = serviceItemPersonaModelId;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelNameVersionId = serviceItemModelNameVersionId;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelName = serviceItemModelName;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelVersion = serviceItemModelVersion;\n				//\n				relatedInstanceListElement2.relatedInstance.instanceId = vnfItemVnfId;\n				relatedInstanceListElement2.relatedInstance.modelInfo = new MSOModelInfo();\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelType = \"vnf\";\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelInvariantId = vnfItemPersonaModelId;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelNameVersionId = vnfItemModelNameVersionId;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelName = vnfItemModelName;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelVersion = vnfItemModelVersion;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelCustomizationName = vnfItemVnfType;\n				//	\n				request.requestDetails.relatedInstanceList.add(relatedInstanceListElement1);\n				request.requestDetails.relatedInstanceList.add(relatedInstanceListElement2);\n				//\n				// print MSO request for debug\n				//\n				System.out.println(\"MSO request sent:\");\n				System.out.println(Serialization.gsonPretty.toJson(request));\n				//\n				//\n				//\n				if (request != null) {\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"com\";\n					notification.policyVersion = \"1\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Concatenate serviceItemServiceInstanceId and vnfItemVnfId to msoURL\n					//\n					String MSOUrl = $params.getMsoURL() + \"/serviceInstances/v2/\" + serviceItemServiceInstanceId + \"/vnfs/\" + vnfItemVnfId + \"/vfModules\";\n					//\n					// Call MSO\n					//\n					MSOResponse response = MSOManager.createModuleInstance(MSOUrl, $params.getMsoURL(), $params.getMsoUsername(), $params.getMsoPassword(), request);\n					//\n					if (response != null) {\n						//\n						// Assign requestId\n						//\n						request.requestId = $event.requestID.toString();						\n						response.request.requestId = $event.requestID.toString();\n						//\n						// Insert facts\n						//\n						insert(operationWrapper);\n						insert(request);\n						insert(response);\n					} else {\n						//\n						// MSO request not even accepted\n						//\n						notification.message = operationWrapper.operation.toMessage();\n						operationWrapper.operation.message = operationWrapper.operation.toMessage();\n						operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n						$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n						notification.history.add(operationWrapper.operation);\n						notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n						//\n						// Let interested parties know\n						//\n						try {\n							System.out.println(Serialization.gsonPretty.toJson(notification));\n							PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n						} catch (Exception e) {\n							System.out.println(\"Can\'t deliver notification: \" + notification);\n							e.printStackTrace();\n						}\n	                    notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n                        try {\n                        	System.out.println(Serialization.gsonPretty.toJson(notification));\n                        	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n                        } catch (Exception e) {\n                        	System.out.println(\"Can\'t deliver notification: \" + notification);\n                        	e.printStackTrace();\n                        }\n						//\n						// Retract everything\n						//\n						retract($event);\n						retract($manager);\n					}\n				} else {\n					System.err.println(\"constructed MSO request is invalid.\");\n				}\n			}\n			break; \n		} \nend\n		\n/*\n*\n* This rule responds to APPC Response Events\n*\n*/\nrule \"BRMSParamvFWDemoPolicy.APPC.RESPONSE\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$operationWrapper : ControlLoopOperationWrapper( requestID == $event.requestID )\n		$request : Request( getCommonHeader().RequestID == $event.requestID )\n		$response : Response( getCommonHeader().RequestID == $event.requestID )	\n	then\n		System.out.println(\"rule APPC.RESPONSE is triggered.\");\n		if ($response.Status == null) {\n			$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n			$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n		} \n		//\n		// Get the Response Code\n		//\n		ResponseCode code = ResponseCode.toResponseCode($response.Status.Code);\n		if (code == null) {\n			$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n			$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n		}\n		//\n		// Construct notification\n		//\n		VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n		notification.from = \"policy\";\n		notification.policyName = drools.getRule().getName();\n		notification.policyScope = \"com\";\n		notification.policyVersion = \"1\";\n		notification.message = $operationWrapper.operation.toMessage();\n		$operationWrapper.operation.message = $operationWrapper.operation.toMessage();\n		//\n		// Ok, let\'s figure out what APP-C\'s response is\n		//\n		switch (code) {\n			case ACCEPT:\n				$operationWrapper.operation.outcome = \"PROCESSING\";\n				break;\n			case ERROR:\n			case REJECT:\n				$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n				$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n				break;\n			case SUCCESS:\n				$operationWrapper.operation.outcome = \"SUCCESS\";\n				$manager.setControlLoopResult(\"SUCCESS\");\n				break;\n			case FAILURE:\n				$operationWrapper.operation.outcome = \"FAILURE\";\n				$manager.setControlLoopResult(\"FAILURE\");\n				break;\n		}\n		if ($operationWrapper.operation.outcome.equals(\"SUCCESS\")) {\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n            notification.notification = ControlLoopNotificationType.FINAL_SUCCESS;\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n\n			//\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		} else if ($operationWrapper.operation.outcome.equals(\"PROCESSING\")) {\n			retract($response);\n		} else {\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n            notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n			//\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		}\n		\nend		\n\n/*\n*\n* This rule is used to clean up APPC response\n*\n*/		\nrule \"BRMSParamvFWDemoPolicy.APPC.RESPONSE.CLEANUP\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n        $response : Response($id : getCommonHeader().RequestID )\n		not ( VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), requestID == $id, closedLoopEventStatus == ControlLoopEventStatus.ONSET ) ) \n	then\n		System.out.println(\"rule APPC.RESPONSE.CLEANUP is triggered.\");\n		retract($response);\nend\n\n/*\n*\n* This rule responds to MSO Response Events\n*\n*/\nrule \"BRMSParamvFWDemoPolicy.MSO.RESPONSE\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$operationWrapper : ControlLoopOperationWrapper( requestID == $event.requestID )\n		$request : MSORequest( requestId == $event.requestID.toString() )\n		$response : MSOResponse( request.requestId == $event.requestID.toString() )	\n	then\n		System.out.println(\"rule MSO.RESPONSE is triggered.\");\n		//\n		// Construct notification\n		//\n		VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n		notification.from = \"policy\";\n		notification.policyName = drools.getRule().getName();\n		notification.policyScope = \"com\";\n		notification.policyVersion = \"1\";\n		notification.message = $operationWrapper.operation.toMessage();\n		$operationWrapper.operation.message = $operationWrapper.operation.toMessage();\n		//\n		// The operation can either be succeeded or failed\n		// \n		if($response.request.requestStatus.requestState.equals(\"COMPLETE\")) {\n			$operationWrapper.operation.outcome = \"SUCCESS\";\n			$manager.setControlLoopResult(\"SUCCESS\");\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n			notification.notification = ControlLoopNotificationType.FINAL_SUCCESS;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n            //\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		} else {\n			$operationWrapper.operation.outcome = \"FAILURE\";\n			$manager.setControlLoopResult(\"FAILURE\");\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n			notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n            //\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		}\n		\nend	\nrule \"com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.Params\" \n	salience 1000 \n	when\n	then\n		Params params = new Params();\n		params.setAaiPatternMatch(1);\n		params.setAppcTopic(\"APPC-CL\");\n		params.setAaiURL(\"null\");\n		params.setMsoPassword(\"null\");\n		params.setClosedLoopControlName(\"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\");\n		params.setMsoURL(\"null\");\n		params.setAaiUsername(\"null\");\n		params.setActor(\"APPC\");\n		params.setMsoUsername(\"null\");\n		params.setAaiNamedQueryUUID(\"null\");\n		params.setAaiPassword(\"null\");\n		params.setNotificationTopic(\"POLICY-CL-MGT\");\n		insert(params);\nend\r\n','OTHER','com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.txt','doACPolicyPut','2017-03-14 19:58:19',0,'','doACPolicyPut','2017-03-14 19:58:19',1),(3203,'/* Autogenerated Code Please Don\'t change/remove this comment section. This is for the UI purpose. \n	 <$%BRMSParamTemplate=ControlLoopDemo__closedLoopControlName%$> \n */ \n\r\n\r\n/*-\n * ============LICENSE_START=======================================================\n * archetype-closed-loop-demo-rules\n * ================================================================================\n * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.\n * ================================================================================\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *      http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============LICENSE_END=========================================================\n */\n\npackage org.onap.policy.controlloop;\n\nimport java.util.List;\nimport java.util.LinkedList;\nimport java.util.Map;\nimport java.util.HashMap;\nimport java.util.UUID;\n\nimport org.onap.policy.controlloop.VirtualControlLoopEvent;\nimport org.onap.policy.controlloop.ControlLoopEventStatus;\nimport org.onap.policy.controlloop.VirtualControlLoopNotification;\nimport org.onap.policy.controlloop.ControlLoopNotificationType;\nimport org.onap.policy.controlloop.ControlLoopOperation;\nimport org.onap.policy.controlloop.ControlLoopOperationWrapper;\nimport org.onap.policy.template.demo.ControlLoopException;\n\nimport org.onap.policy.aai.AAINQF199.AAINQF199CloudRegion;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ExtraProperties;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ExtraProperty;\nimport org.onap.policy.aai.AAINQF199.AAINQF199GenericVNF;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InstanceFilters;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InventoryResponseItem;\nimport org.onap.policy.aai.AAINQF199.AAINQF199InventoryResponseItems;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Manager;\nimport org.onap.policy.aai.AAINQF199.AAINQF199NamedQuery;\nimport org.onap.policy.aai.AAINQF199.AAINQF199QueryParameters;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Request;\nimport org.onap.policy.aai.AAINQF199.AAINQF199RequestWrapper;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Response;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ResponseWrapper;\nimport org.onap.policy.aai.AAINQF199.AAINQF199ServiceInstance;\nimport org.onap.policy.aai.AAINQF199.AAINQF199Tenant;\nimport org.onap.policy.aai.AAINQF199.AAINQF199VfModule;\nimport org.onap.policy.aai.AAINQF199.AAINQF199VServer;\nimport org.onap.policy.aai.util.Serialization;\n\nimport org.onap.policy.appc.CommonHeader;\nimport org.onap.policy.appc.Request;\nimport org.onap.policy.appc.Response;\nimport org.onap.policy.appc.ResponseCode;\nimport org.onap.policy.appc.ResponseStatus;\nimport org.onap.policy.appc.ResponseValue;\n\nimport org.onap.policy.template.demo.EventManager;\nimport org.onap.policy.vnf.trafficgenerator.PGRequest;\nimport org.onap.policy.vnf.trafficgenerator.PGStream;\nimport org.onap.policy.vnf.trafficgenerator.PGStreams;\n\nimport org.onap.policy.mso.MSOManager;\nimport org.onap.policy.mso.MSORequest;\nimport org.onap.policy.mso.MSORequestStatus;\nimport org.onap.policy.mso.MSORequestDetails;\nimport org.onap.policy.mso.MSOModelInfo;\nimport org.onap.policy.mso.MSOCloudConfiguration;\nimport org.onap.policy.mso.MSORequestInfo;\nimport org.onap.policy.mso.MSORequestParameters;\nimport org.onap.policy.mso.MSORelatedInstanceListElement;\nimport org.onap.policy.mso.MSORelatedInstance;\nimport org.onap.policy.mso.MSOResponse;\n\nimport org.onap.policy.drools.system.PolicyEngine;\n\n//\n// These parameters are required to build the runtime policy\n//\ndeclare Params\n    closedLoopControlName : String\n    actor : String\n    aaiURL : String\n    aaiUsername : String\n    aaiPassword : String\n    msoURL : String\n    msoUsername : String\n    msoPassword : String\n    aaiNamedQueryUUID : String\n    aaiPatternMatch : int \n    notificationTopic : String\n    appcTopic : String\nend\n\n/*\n*\n* Called once and only once to insert the parameters into working memory for this Closed Loop policy.\n* (Comment SETUP rule out for the first ONAP opensource release since policy BRMS_GW already puts a Params fact in there)\n*\n*\n*rule \"BRMSParamvLBDemoPolicy.SETUP\"\n*	when\n*	then\n*		System.out.println(\"rule SETUP is triggered.\");\n*		Params params = new Params();\n*		params.setClosedLoopControlName(\"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\");\n*		params.setActor(\"MSO\");\n*		params.setAaiURL(\"https://aai.api.simpledemo.openecomp.org:8443\");\n*		params.setAaiUsername(\"POLICY\");\n*		params.setAaiPassword(\"POLICY\");\n*		params.setMsoURL(\"http://vm1.mso.simpledemo.openecomp.org:8080/onap/mso/infra\");\n*		params.setMsoUsername(\"InfraPortalClient\");\n*		params.setMsoPassword(\"password1$\");\n*		params.setAaiNamedQueryUUID(\"f199cb88-5e69-4b1f-93e0-6f257877d066\");\n*		params.setAaiPatternMatch(0);\n*		params.setNotificationTopic(\"POLICY-CL-MGT\");\n*		params.setAppcTopic(\"APPC-CL\");\n*		//\n*		// This stays in memory as long as the rule is alive and running\n*		//\n*		insert(params);\n*end\n*/\n/*\n*\n* This rule responds to DCAE Events\n*\n*/\nrule \"BRMSParamvLBDemoPolicy.EVENT\"\n	when\n        $params : Params( getClosedLoopControlName() == \"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n        $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n        not ( EventManager( closedLoopControlName == $event.closedLoopControlName ))\n	then\n		System.out.println(\"rule EVENT is triggered.\");\n		try {\n			// \n			// Check the requestID in the event to make sure it is not null before we create the EventManager. \n			// The EventManager will do extra syntax checking as well check if the closed loop is disabled/\n			//\n			if ($event.requestID == null) {\n				VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n				notification.notification = ControlLoopNotificationType.REJECTED;\n				notification.from = \"policy\";\n				notification.message = \"Missing requestID from DCAE event\";\n				notification.policyName = drools.getRule().getName();\n				notification.policyScope = \"com\";\n				notification.policyVersion = \"1\";\n				//\n				// Let interested parties know\n				//\n				try {\n					System.out.println(Serialization.gsonPretty.toJson(notification));\n					PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n				} catch (Exception e) {\n					e.printStackTrace();\n					System.out.println(\"Can\'t deliver notification: \" + notification);\n				}\n				//\n				// Retract it from memory\n				//\n				retract($event);\n				System.out.println(\"Event with requestID=null has been retracted.\");\n			} else {\n				//\n				// Create an EventManager\n				//\n				EventManager manager = new EventManager($params.getClosedLoopControlName(), $event.requestID, $event.target);\n				//\n				// Determine if EventManager can actively process the event (i.e. syntax)\n				//\n				VirtualControlLoopNotification notification = manager.activate($event);\n				notification.from = \"policy\"; \n				notification.policyName = drools.getRule().getName();\n				notification.policyScope = \"com\";\n				notification.policyVersion = \"1\";\n				//\n				// Are we actively pursuing this event?\n				//\n				if (notification.notification == ControlLoopNotificationType.ACTIVE) {\n					//\n					// Insert Event Manager into memory, this will now kick off processing.\n					//\n					insert(manager);\n					//\n					// Let interested parties know\n					//\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						e.printStackTrace();\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n					}		\n				} else {\n					//\n					// Let interested parties know\n					//\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						e.printStackTrace();\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n					}\n					//\n					// Retract it from memory\n					//\n					retract($event);\n				}\n				//\n				// Now that the manager is inserted into Drools working memory, we\'ll wait for\n				// another rule to fire in order to continue processing. This way we can also\n				// then screen for additional ONSET and ABATED events for this same RequestIDs \n				// and for different RequestIDs but with the same closedLoopControlName and target.\n				//\n			}\n		//\n		} catch (Exception e) {\n			e.printStackTrace();\n			VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n			notification.notification = ControlLoopNotificationType.REJECTED;\n			notification.message = \"Exception occurred \" + e.getMessage();\n			notification.policyName = drools.getRule().getName();\n			notification.policyScope = \"com\";\n			notification.policyVersion = \"1\";\n			//\n			//\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e1) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e1.printStackTrace();\n			}\n			//\n			// Retract the event\n			//\n			retract($event);\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid ONSET, closed loop is enabled and an Event Manager\n* is created. We can start the operations for this closed loop.\n*\n*/\nrule \"BRMSParamvLBDemoPolicy.EVENT.MANAGER\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName, controlLoopResult == null)\n	then\n		System.out.println(\"rule EVENT.MANAGER is triggered.\");\n		//\n		// Check which event this is.\n		//\n		EventManager.NEW_EVENT_STATUS eventStatus = $manager.onNewEvent($event);\n		//\n		// We only want the initial ONSET event in memory,\n		// all the other events need to be retracted to support\n		// cleanup and avoid the other rules being fired for this event.\n		//\n		if (eventStatus != EventManager.NEW_EVENT_STATUS.FIRST_ONSET) {\n			System.out.println(\"Retracting \"+eventStatus+\" Event.\");\n			retract($event);\n			return;\n		}\n		//\n		// Now the event in memory is first onset event\n		//\n		try {\n			//\n			// Pull the known AAI field from the Event\n			//\n			// generic-vnf is needed for vFirewall case\n			// vserver-name is needed for vLoadBalancer case\n			//\n			String genericVNF = $event.AAI.get(\"generic-vnf.vnf-id\");\n			String vserver = $event.AAI.get(\"vserver.vserver-name\");\n			//\n			// Check if we are implementing a simple pattern match.\n			//\n			if ($params.getAaiPatternMatch() == 1) {\n				//\n				// Yes\n				//\n				//Basic naming characteristics:\n				//VF Name (9 char)+VM name (13 char total)+VFC (19 char total)\n				//Example: \n				//VF Name (9 characters):    cscf0001v\n				//VM Name(13 characters): cscf0001vm001\n				//VFC name(19 characters): cscf0001vm001cfg001\n				//\n				// zdfw1fwl01fwl02 or zdfw1fwl01fwl01  \n				// replaced with\n				// zdfw1fwl01pgn02 or zdfw1fwl01pgn01\n				//\n				int index = genericVNF.lastIndexOf(\"fwl\");\n				if (index == -1) {\n					System.err.println(\"The generic-vnf.vnf-id from DCAE Event is not valid.\");\n				} else {\n					genericVNF = genericVNF.substring(0, index) + \"pgn\" + genericVNF.substring(index+\"fwl\".length());\n				}\n				//\n				// Construct an APPC request\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"ModifyConfig\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// insert operationWrapper into memory\n				//\n				insert(operationWrapper);\n				//\n				Request request = new Request();\n				request.CommonHeader = new CommonHeader();\n				request.CommonHeader.RequestID = $event.requestID;\n				request.Action = operation.operation;\n				request.Payload = new HashMap<String, Object>();\n				//\n				// Fill in the payload\n				//\n				request.Payload.put(\"generic-vnf.vnf-id\", genericVNF);\n				//\n				PGRequest pgRequest = new PGRequest();\n				pgRequest.pgStreams = new PGStreams();\n				\n				PGStream pgStream;\n				for(int i = 0; i < 5; i++){\n					pgStream = new PGStream();\n					pgStream.streamId = \"fw_udp\"+(i+1);\n					pgStream.isEnabled = \"true\";\n					pgRequest.pgStreams.pgStream.add(pgStream);\n				}\n				request.Payload.put(\"pg-streams\", pgRequest.pgStreams);\n				\n				if (request != null) {\n					//\n					// Insert request into memory\n					//\n					insert(request);\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					// message and history ??\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"com\";\n					notification.policyVersion = \"1\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Now send the operation request\n					//\n					if (request instanceof Request) {\n						try {\n							System.out.println(\"APPC request sent:\");\n							System.out.println(Serialization.gsonPretty.toJson(request));\n							PolicyEngine.manager.deliver($params.getAppcTopic(), request);\n						} catch (Exception e) {\n							e.printStackTrace();\n							System.out.println(\"Can\'t deliver request: \" + request);\n						}\n					}\n				} else {\n					//\n					// what happens if it is null\n					//\n				}\n				//\n			} else {\n				//\n				// create AAI named-query request with UUID started with \"F199\"\n				//\n				AAINQF199Request aainqf199request = new AAINQF199Request();\n				AAINQF199QueryParameters aainqf199queryparam = new AAINQF199QueryParameters();\n				AAINQF199NamedQuery aainqf199namedquery = new AAINQF199NamedQuery();\n				AAINQF199InstanceFilters aainqf199instancefilter = new AAINQF199InstanceFilters();\n				//\n				// queryParameters\n				//\n				aainqf199namedquery.namedQueryUUID = UUID.fromString($params.getAaiNamedQueryUUID()); \n				aainqf199queryparam.namedQuery = aainqf199namedquery;\n				aainqf199request.queryParameters = aainqf199queryparam;\n				//\n				// instanceFilters\n				//\n				Map aainqf199instancefiltermap = new HashMap();\n				Map aainqf199instancefiltermapitem = new HashMap();\n				aainqf199instancefiltermapitem.put(\"vserver-name\", vserver); \n				aainqf199instancefiltermap.put(\"vserver\", aainqf199instancefiltermapitem);\n				aainqf199instancefilter.instanceFilter.add(aainqf199instancefiltermap);\n				aainqf199request.instanceFilters = aainqf199instancefilter;\n				//\n				// print aainqf199request for debug\n				//\n				System.out.println(\"AAI Request sent:\");\n				System.out.println(Serialization.gsonPretty.toJson(aainqf199request));\n				//\n				// Create AAINQF199RequestWrapper\n				//\n				AAINQF199RequestWrapper aainqf199RequestWrapper = new AAINQF199RequestWrapper($event.requestID, aainqf199request);\n				//\n				// insert aainqf199request into memory\n				//\n				insert(aainqf199RequestWrapper);\n			}\n			//\n		} catch (Exception e) {\n		 e.printStackTrace();\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid ONSET, closed loop is enabled, an Event Manager\n* is created, AAI Manager and AAI Request are ready in memory. We can start sending query to AAI and then wait for response.\n*\n*/\nrule \"BRMSParamvLBDemoPolicy.EVENT.MANAGER.AAINQF199REQUEST\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$aainqf199RequestWrapper : AAINQF199RequestWrapper(requestID == $event.requestID)\n	then\n		System.out.println(\"rule EVENT.MANAGER.AAINQF199REQUEST is triggered.\");\n		//\n		// send the request\n		//\n		AAINQF199Response aainqf199response = AAINQF199Manager.postQuery($params.getAaiURL(), $params.getAaiUsername(), $params.getAaiPassword(),\n													   $aainqf199RequestWrapper.aainqf199request, $event.requestID);\n		//\n		// Check AAI response\n		//\n		if (aainqf199response == null) {\n			System.err.println(\"Failed to get AAI response\");\n			//\n			// Fail and retract everything\n			//\n			retract($event);\n			retract($manager);\n			retract($aainqf199RequestWrapper);\n		} else {\n			//\n			// Create AAINQF199ResponseWrapper\n			//\n			AAINQF199ResponseWrapper aainqf199ResponseWrapper = new AAINQF199ResponseWrapper($event.requestID, aainqf199response);\n			//\n			// insert aainqf199ResponseWrapper to memeory\n			//\n			insert(aainqf199ResponseWrapper);\n		}\nend\n\n/*\n*\n* This rule happens when we got a valid AAI response. We can start sending request to APPC or MSO now.\n*\n*/\nrule \"BRMSParamvLBDemoPolicy.EVENT.MANAGER.AAINQF199RESPONSE\"\n	when \n		$params : Params( getClosedLoopControlName() == \"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$aainqf199RequestWrapper : AAINQF199RequestWrapper(requestID == $event.requestID)\n		$aainqf199ResponseWrapper : AAINQF199ResponseWrapper(requestID == $event.requestID)\n	then\n		System.out.println(\"rule EVENT.MANAGER.AAINQF199RESPONSE is triggered.\");\n		//\n		// Extract related fields out of AAINQF199RESPONSE\n		//\n		String vnfItemVnfId, vnfItemVnfType, vnfItemPersonaModelId, vnfItemPersonaModelVersion, vnfItemModelName, \n		       vnfItemModelVersion, vnfItemModelNameVersionId, serviceItemServiceInstanceId, serviceItemPersonaModelId,\n		       serviceItemModelName, serviceItemModelType, serviceItemModelVersion, serviceItemModelNameVersionId,\n		       vfModuleItemVfModuleName, vfModuleItemPersonaModelId, vfModuleItemPersonaModelVersion, vfModuleItemModelName, \n		       vfModuleItemModelNameVersionId, tenantItemTenantId, cloudRegionItemCloudRegionId;\n		try {\n			//\n			// vnfItem\n			//\n			vnfItemVnfId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfID;\n			vnfItemVnfType = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfType;\n			vnfItemVnfType = vnfItemVnfType.substring(vnfItemVnfType.lastIndexOf(\"/\")+1);\n			vnfItemPersonaModelId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelId;\n			vnfItemPersonaModelVersion = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelVersion;\n			vnfItemModelName = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;\n			vnfItemModelVersion = 		$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(2).propertyValue;\n			vnfItemModelNameVersionId = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// serviceItem\n			//\n			serviceItemServiceInstanceId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.serviceInstanceID;\n			serviceItemPersonaModelId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelId;\n			serviceItemModelName = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;\n			serviceItemModelType = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(1).propertyValue;\n			serviceItemModelVersion = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelVersion;\n			serviceItemModelNameVersionId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// Find the index for base vf module and non-base vf module\n			//\n			int baseIndex = -1;\n			int nonBaseIndex = -1;\n			List<AAINQF199InventoryResponseItem> inventoryItems = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems;\n			for (AAINQF199InventoryResponseItem m : inventoryItems) {\n				if (m.vfModule != null && m.vfModule.isBaseVfModule == true) {\n					baseIndex = inventoryItems.indexOf(m);\n				} else if (m.vfModule != null && m.vfModule.isBaseVfModule == false && m.vfModule.orchestrationStatus == null) {\n					nonBaseIndex = inventoryItems.indexOf(m);\n				}\n				//\n				if (baseIndex != -1 && nonBaseIndex != -1) {\n					break;\n				}\n			}\n			//\n			// Report the error if either base vf module or non-base vf module is not found\n			//\n			if (baseIndex == -1 || nonBaseIndex == -1) {\n				System.err.println(\"Either base or non-base vf module is not found from AAI response.\");\n				retract($aainqf199RequestWrapper);\n				retract($aainqf199ResponseWrapper);\n				retract($manager);\n				retract($event);\n				return;\n			}\n			//\n			// This comes from the base module\n			//\n			vfModuleItemVfModuleName = 			$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(baseIndex).vfModule.vfModuleName;\n			vfModuleItemVfModuleName = vfModuleItemVfModuleName.replace(\"Vfmodule\", \"vDNS\");\n			//\n			// vfModuleItem - NOT the base module\n			//\n			vfModuleItemPersonaModelId = 		$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).vfModule.personaModelId;\n			vfModuleItemPersonaModelVersion = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).vfModule.personaModelVersion;\n			vfModuleItemModelName = 			$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).extraProperties.extraProperty.get(0).propertyValue;\n			vfModuleItemModelNameVersionId = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).extraProperties.extraProperty.get(4).propertyValue;\n			//\n			// tenantItem\n			//\n			tenantItemTenantId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).tenant.tenantId;\n			//\n			// cloudRegionItem\n			//\n			cloudRegionItemCloudRegionId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).items.inventoryResponseItems.get(0).cloudRegion.cloudRegionId;\n			//\n		} catch (Exception e) {\n			e.printStackTrace();\n			VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n			notification.notification = ControlLoopNotificationType.REJECTED;\n			notification.message = \"Exception occurred \" + e.getMessage();\n			notification.policyName = drools.getRule().getName();\n			notification.policyScope = \"com\";\n			notification.policyVersion = \"1\";\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e1) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e1.printStackTrace();\n			}\n			//\n			notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n			notification.message = \"Invalid named-query response from AAI\";\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n                PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e1) {\n                System.out.println(\"Can\'t deliver notification: \" + notification);\n                e1.printStackTrace();\n            }\n			//\n			// Retract everything\n			//\n			retract($aainqf199RequestWrapper);\n			retract($aainqf199ResponseWrapper);\n			retract($manager);\n			retract($event);\n			return;\n		}	\n		//\n		// Extracted fields should not be null\n		//\n		if ((vnfItemVnfId == null) || (vnfItemVnfType == null) ||\n		    (vnfItemPersonaModelId == null) || (vnfItemModelName == null) ||\n		    (vnfItemModelVersion == null) || (vnfItemModelNameVersionId == null) ||\n		    (serviceItemServiceInstanceId == null) || (serviceItemModelName == null) ||\n		    (serviceItemModelType == null) || (serviceItemModelVersion == null) ||\n		    (serviceItemModelNameVersionId == null) || (vfModuleItemVfModuleName == null) ||\n		    (vfModuleItemPersonaModelId == null) || (vfModuleItemPersonaModelVersion == null) ||\n		    (vfModuleItemModelName == null) || (vfModuleItemModelNameVersionId == null) ||\n		    (tenantItemTenantId == null) || (cloudRegionItemCloudRegionId == null)) {\n			//\n			System.err.println(\"some fields are missing from AAI response.\");\n			//\n			// Fail and retract everything\n			//\n			retract($aainqf199RequestWrapper);\n			retract($aainqf199ResponseWrapper);\n			retract($manager);\n			retract($event);\n			return;\n		}\n		//\n		// We don\'t need them any more\n		//\n		retract($aainqf199ResponseWrapper);\n		retract($aainqf199RequestWrapper);  \n		//\n		// check the actor of this closed loop\n		//\n		switch ($params.getActor()) {\n			case \"APPC\":\n			{\n				//\n				// Construct an APPC request\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"ModifyConfig\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// insert operationWrapper into memory\n				//\n				insert(operationWrapper);\n				//\n				Request request = new Request();\n				request.CommonHeader = new CommonHeader();\n				request.CommonHeader.RequestID = $event.requestID;\n				request.Action = operation.operation;\n				request.Payload = new HashMap<String, Object>();\n				//\n				// Fill in the payload\n				// Hardcode genericVNF for now since AAI has not been ready for vFirewall demo case\n				//\n				String genericVNF = \"zdfw1fwl01pgn02\";\n				request.Payload.put(\"generic-vnf.vnf-id\", genericVNF);\n				//\n				PGRequest pgRequest = new PGRequest();\n				pgRequest.pgStreams = new PGStreams();\n				\n				PGStream pgStream;\n				for(int i = 0; i < 5; i++){\n					pgStream = new PGStream();\n					pgStream.streamId = \"fw_udp\"+(i+1);\n					pgStream.isEnabled = \"true\";\n					pgRequest.pgStreams.pgStream.add(pgStream);\n				}\n				request.Payload.put(\"pg-streams\", pgRequest.pgStreams);\n				\n				if (request != null) {\n					//\n					// Insert request into memory\n					//\n					insert(request);\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					// message and history ??\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"com\";\n					notification.policyVersion = \"1\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Now send the operation request\n					//\n					if (request instanceof Request) {\n						try {\n							System.out.println(\"APPC request sent:\");\n							System.out.println(Serialization.gsonPretty.toJson(request));\n							PolicyEngine.manager.deliver($params.getAppcTopic(), request);\n						} catch (Exception e) {\n							e.printStackTrace();\n							System.out.println(\"Can\'t deliver request: \" + request);\n						}\n					}\n				} else {\n					//\n					// what happens if it is null\n					//\n				}\n			}\n			break;\n			case \"MSO\":\n			{\n				//\n				// Construct an operation\n				//\n				ControlLoopOperation operation = new ControlLoopOperation();\n				operation.actor = $params.getActor();\n				operation.operation = \"createModuleInstance\";\n				operation.target = $event.target;\n				//\n				// Create operationWrapper\n				//\n				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);\n				//\n				// Construct an MSO request\n				//\n				MSORequest request = new MSORequest();\n				request.requestDetails = new MSORequestDetails();\n				request.requestDetails.modelInfo = new MSOModelInfo();\n				request.requestDetails.cloudConfiguration = new MSOCloudConfiguration();\n				request.requestDetails.requestInfo = new MSORequestInfo();\n				request.requestDetails.requestParameters = new MSORequestParameters();\n				request.requestDetails.requestParameters.userParams = null;\n				//\n				// cloudConfiguration\n				//\n				request.requestDetails.cloudConfiguration.lcpCloudRegionId = cloudRegionItemCloudRegionId;\n				request.requestDetails.cloudConfiguration.tenantId = tenantItemTenantId;\n				//\n				// modelInfo\n				//\n				request.requestDetails.modelInfo.modelType = \"vfModule\";\n				request.requestDetails.modelInfo.modelInvariantId = vfModuleItemPersonaModelId;\n				request.requestDetails.modelInfo.modelNameVersionId = vfModuleItemModelNameVersionId;\n				request.requestDetails.modelInfo.modelName = vfModuleItemModelName;\n				request.requestDetails.modelInfo.modelVersion = vfModuleItemPersonaModelVersion;\n				//\n				// requestInfo\n				//\n				request.requestDetails.requestInfo.instanceName = vfModuleItemVfModuleName;\n				request.requestDetails.requestInfo.source = \"POLICY\";\n				request.requestDetails.requestInfo.suppressRollback = false;\n				//\n				// relatedInstanceList\n				//\n				MSORelatedInstanceListElement relatedInstanceListElement1 = new MSORelatedInstanceListElement();\n				MSORelatedInstanceListElement relatedInstanceListElement2 = new MSORelatedInstanceListElement();\n				relatedInstanceListElement1.relatedInstance = new MSORelatedInstance();\n				relatedInstanceListElement2.relatedInstance = new MSORelatedInstance();\n				//\n				relatedInstanceListElement1.relatedInstance.instanceId = serviceItemServiceInstanceId;\n				relatedInstanceListElement1.relatedInstance.modelInfo = new MSOModelInfo();\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelType = \"service\";\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelInvariantId = serviceItemPersonaModelId;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelNameVersionId = serviceItemModelNameVersionId;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelName = serviceItemModelName;\n				relatedInstanceListElement1.relatedInstance.modelInfo.modelVersion = serviceItemModelVersion;\n				//\n				relatedInstanceListElement2.relatedInstance.instanceId = vnfItemVnfId;\n				relatedInstanceListElement2.relatedInstance.modelInfo = new MSOModelInfo();\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelType = \"vnf\";\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelInvariantId = vnfItemPersonaModelId;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelNameVersionId = vnfItemModelNameVersionId;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelName = vnfItemModelName;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelVersion = vnfItemModelVersion;\n				relatedInstanceListElement2.relatedInstance.modelInfo.modelCustomizationName = vnfItemVnfType;\n				//	\n				request.requestDetails.relatedInstanceList.add(relatedInstanceListElement1);\n				request.requestDetails.relatedInstanceList.add(relatedInstanceListElement2);\n				//\n				// print MSO request for debug\n				//\n				System.out.println(\"MSO request sent:\");\n				System.out.println(Serialization.gsonPretty.toJson(request));\n				//\n				//\n				//\n				if (request != null) {\n					//\n					// Tell interested parties we are performing this Operation\n					//\n					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n					notification.notification = ControlLoopNotificationType.OPERATION;\n					notification.from = \"policy\";\n					notification.policyName = drools.getRule().getName();\n					notification.policyScope = \"com\";\n					notification.policyVersion = \"1\";\n					try {\n						System.out.println(Serialization.gsonPretty.toJson(notification));\n						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n					} catch (Exception e) {\n						System.out.println(\"Can\'t deliver notification: \" + notification);\n						e.printStackTrace();\n					}\n					//\n					// Concatenate serviceItemServiceInstanceId and vnfItemVnfId to msoURL\n					//\n					String MSOUrl = $params.getMsoURL() + \"/serviceInstances/v2/\" + serviceItemServiceInstanceId + \"/vnfs/\" + vnfItemVnfId + \"/vfModules\";\n					//\n					// Call MSO\n					//\n					MSOResponse response = MSOManager.createModuleInstance(MSOUrl, $params.getMsoURL(), $params.getMsoUsername(), $params.getMsoPassword(), request);\n					//\n					if (response != null) {\n						//\n						// Assign requestId\n						//\n						request.requestId = $event.requestID.toString();						\n						response.request.requestId = $event.requestID.toString();\n						//\n						// Insert facts\n						//\n						insert(operationWrapper);\n						insert(request);\n						insert(response);\n					} else {\n						//\n						// MSO request not even accepted\n						//\n						notification.message = operationWrapper.operation.toMessage();\n						operationWrapper.operation.message = operationWrapper.operation.toMessage();\n						operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n						$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n						notification.history.add(operationWrapper.operation);\n						notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n						//\n						// Let interested parties know\n						//\n						try {\n							System.out.println(Serialization.gsonPretty.toJson(notification));\n							PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n						} catch (Exception e) {\n							System.out.println(\"Can\'t deliver notification: \" + notification);\n							e.printStackTrace();\n						}\n	                    notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n                        try {\n                        	System.out.println(Serialization.gsonPretty.toJson(notification));\n                        	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n                        } catch (Exception e) {\n                        	System.out.println(\"Can\'t deliver notification: \" + notification);\n                        	e.printStackTrace();\n                        }\n						//\n						// Retract everything\n						//\n						retract($event);\n						retract($manager);\n					}\n				} else {\n					System.err.println(\"constructed MSO request is invalid.\");\n				}\n			}\n			break; \n		} \nend\n		\n/*\n*\n* This rule responds to APPC Response Events\n*\n*/\nrule \"BRMSParamvLBDemoPolicy.APPC.RESPONSE\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$operationWrapper : ControlLoopOperationWrapper( requestID == $event.requestID )\n		$request : Request( getCommonHeader().RequestID == $event.requestID )\n		$response : Response( getCommonHeader().RequestID == $event.requestID )	\n	then\n		System.out.println(\"rule APPC.RESPONSE is triggered.\");\n		if ($response.Status == null) {\n			$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n			$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n		} \n		//\n		// Get the Response Code\n		//\n		ResponseCode code = ResponseCode.toResponseCode($response.Status.Code);\n		if (code == null) {\n			$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n			$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n		}\n		//\n		// Construct notification\n		//\n		VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n		notification.from = \"policy\";\n		notification.policyName = drools.getRule().getName();\n		notification.policyScope = \"com\";\n		notification.policyVersion = \"1\";\n		notification.message = $operationWrapper.operation.toMessage();\n		$operationWrapper.operation.message = $operationWrapper.operation.toMessage();\n		//\n		// Ok, let\'s figure out what APP-C\'s response is\n		//\n		switch (code) {\n			case ACCEPT:\n				$operationWrapper.operation.outcome = \"PROCESSING\";\n				break;\n			case ERROR:\n			case REJECT:\n				$operationWrapper.operation.outcome = \"FAILURE_EXCEPTION\";\n				$manager.setControlLoopResult(\"FAILURE_EXCEPTION\");\n				break;\n			case SUCCESS:\n				$operationWrapper.operation.outcome = \"SUCCESS\";\n				$manager.setControlLoopResult(\"SUCCESS\");\n				break;\n			case FAILURE:\n				$operationWrapper.operation.outcome = \"FAILURE\";\n				$manager.setControlLoopResult(\"FAILURE\");\n				break;\n		}\n		if ($operationWrapper.operation.outcome.equals(\"SUCCESS\")) {\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n            notification.notification = ControlLoopNotificationType.FINAL_SUCCESS;\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n\n			//\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		} else if ($operationWrapper.operation.outcome.equals(\"PROCESSING\")) {\n			retract($response);\n		} else {\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n            notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n			//\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		}\n		\nend		\n\n/*\n*\n* This rule is used to clean up APPC response\n*\n*/		\nrule \"BRMSParamvLBDemoPolicy.APPC.RESPONSE.CLEANUP\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n        $response : Response($id : getCommonHeader().RequestID )\n		not ( VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), requestID == $id, closedLoopEventStatus == ControlLoopEventStatus.ONSET ) ) \n	then\n		System.out.println(\"rule APPC.RESPONSE.CLEANUP is triggered.\");\n		retract($response);\nend\n\n/*\n*\n* This rule responds to MSO Response Events\n*\n*/\nrule \"BRMSParamvLBDemoPolicy.MSO.RESPONSE\"\n	when\n		$params : Params( getClosedLoopControlName() == \"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\" )\n		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )\n		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )\n		$operationWrapper : ControlLoopOperationWrapper( requestID == $event.requestID )\n		$request : MSORequest( requestId == $event.requestID.toString() )\n		$response : MSOResponse( request.requestId == $event.requestID.toString() )	\n	then\n		System.out.println(\"rule MSO.RESPONSE is triggered.\");\n		//\n		// Construct notification\n		//\n		VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);\n		notification.from = \"policy\";\n		notification.policyName = drools.getRule().getName();\n		notification.policyScope = \"com\";\n		notification.policyVersion = \"1\";\n		notification.message = $operationWrapper.operation.toMessage();\n		$operationWrapper.operation.message = $operationWrapper.operation.toMessage();\n		//\n		// The operation can either be succeeded or failed\n		// \n		if($response.request.requestStatus.requestState.equals(\"COMPLETE\")) {\n			$operationWrapper.operation.outcome = \"SUCCESS\";\n			$manager.setControlLoopResult(\"SUCCESS\");\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n			notification.notification = ControlLoopNotificationType.FINAL_SUCCESS;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n            //\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		} else {\n			$operationWrapper.operation.outcome = \"FAILURE\";\n			$manager.setControlLoopResult(\"FAILURE\");\n			notification.history.add($operationWrapper.operation);\n			notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;\n			//\n			// Let interested parties know\n			//\n			try {\n				System.out.println(Serialization.gsonPretty.toJson(notification));\n				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n			} catch (Exception e) {\n				System.out.println(\"Can\'t deliver notification: \" + notification);\n				e.printStackTrace();\n			}\n			notification.notification = ControlLoopNotificationType.FINAL_FAILURE;\n            //\n            // Let interested parties know\n            //\n            try {\n            	System.out.println(Serialization.gsonPretty.toJson(notification));\n            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);\n            } catch (Exception e) {\n            	System.out.println(\"Can\'t deliver notification: \" + notification);\n            	e.printStackTrace();\n            }\n            //\n			// We are going to retract these objects from memory\n			//\n			System.out.println(\"Retracting everything\");\n			retract($operationWrapper);\n			retract($request);\n			retract($response);\n			retract($event);\n			retract($manager);\n		}\n		\nend	\nrule \"com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.Params\" \n	salience 1000 \n	when\n	then\n		Params params = new Params();\n		params.setAaiPatternMatch(0);\n		params.setAppcTopic(\"APPC-CL\");\n		params.setAaiURL(\"https://aai.api.simpledemo.openecomp.org:8443\");\n		params.setMsoPassword(\"password1$\");\n		params.setClosedLoopControlName(\"CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\");\n		params.setAaiUsername(\"POLICY\");\n		params.setMsoURL(\"http://vm1.mso.simpledemo.openecomp.org:8080/onap/mso/infra\");\n		params.setActor(\"MSO\");\n		params.setMsoUsername(\"InfraPortalClient\");\n		params.setAaiNamedQueryUUID(\"f199cb88-5e69-4b1f-93e0-6f257877d066\");\n		params.setAaiPassword(\"POLICY\");\n		params.setNotificationTopic(\"POLICY-CL-MGT\");\n		insert(params);\nend\r\n','OTHER','com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.txt','doACPolicyPut','2017-03-14 20:00:56',0,'','doACPolicyPut','2017-03-14 20:00:56',1);
 
-INSERT INTO `policyentity` VALUES (3202,'doACPolicyPut','2017-03-14 19:58:19',0,'BRMSParam vFW Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:','doACPolicyPut','2017-03-14 19:58:19','<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Policy xmlns=\"urn:oasis:names:tc:xacml:3.0:core:schema:wd-17\" PolicyId=\"urn:com:xacml:policy:id:256f4712-a965-4817-a851-a71bdeb9fb49\" Version=\"1\" RuleCombiningAlgId=\"urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides\">\n    <Description>BRMSParam vFW Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:</Description>\n    <Target>\n        <AnyOf>\n            <AllOf>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"PolicyName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n            <AllOf>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DROOLS</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ECOMPName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">BRMS_PARAM_RULE</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ConfigName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskType\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskLevel\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">False</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"guard\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"TTLDate\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n        </AnyOf>\n    </Target>\n    <Rule RuleId=\"urn:com:xacml:rule:id:8cdb88aa-448b-4ed1-bce5-6a037651e73c\" Effect=\"Permit\">\n        <Target>\n            <AnyOf>\n                <AllOf>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">ACCESS</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:action\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:action:action-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Config</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:resource:resource-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                </AllOf>\n            </AnyOf>\n        </Target>\n        <AdviceExpressions>\n            <AdviceExpression AdviceId=\"BRMSPARAMID\" AppliesTo=\"Permit\">\n                <AttributeAssignmentExpression AttributeId=\"type\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Configuration</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"URLID\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#anyURI\">$URL/Config/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.txt</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"PolicyName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"VersionNumber\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ECOMPName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DROOLS</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ConfigName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">BRMS_PARAM_RULE</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"key:controller\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">vFW</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskType\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskLevel\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"guard\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">False</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"TTLDate\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                </AttributeAssignmentExpression>\n            </AdviceExpression>\n        </AdviceExpressions>\n    </Rule>\n</Policy>\n','Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml',0,'com',1,NULL,3201),(3204,'doACPolicyPut','2017-03-14 20:00:56',0,'BRMSParam vLB Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:','doACPolicyPut','2017-03-14 20:00:56','<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Policy xmlns=\"urn:oasis:names:tc:xacml:3.0:core:schema:wd-17\" PolicyId=\"urn:com:xacml:policy:id:ace93d23-7a21-450a-87b4-5ff11e01d4b1\" Version=\"1\" RuleCombiningAlgId=\"urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides\">\n    <Description>BRMSParam vLB Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:</Description>\n    <Target>\n        <AnyOf>\n            <AllOf>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"PolicyName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n            <AllOf>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DROOLS</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ECOMPName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">BRMS_PARAM_RULE</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ConfigName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskType\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskLevel\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">False</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"guard\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"TTLDate\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n        </AnyOf>\n    </Target>\n    <Rule RuleId=\"urn:com:xacml:rule:id:9d472f3a-bab1-4bee-8bfc-0ee1b4e11ad6\" Effect=\"Permit\">\n        <Target>\n            <AnyOf>\n                <AllOf>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">ACCESS</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:action\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:action:action-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Config</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:resource:resource-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                </AllOf>\n            </AnyOf>\n        </Target>\n        <AdviceExpressions>\n            <AdviceExpression AdviceId=\"BRMSPARAMID\" AppliesTo=\"Permit\">\n                <AttributeAssignmentExpression AttributeId=\"type\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Configuration</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"URLID\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#anyURI\">$URL/Config/com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.txt</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"PolicyName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"VersionNumber\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ECOMPName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DROOLS</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ConfigName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">BRMS_PARAM_RULE</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"key:controller\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">vDNS</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskType\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskLevel\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"guard\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">False</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"TTLDate\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                </AttributeAssignmentExpression>\n            </AdviceExpression>\n        </AdviceExpressions>\n    </Rule>\n</Policy>\n','Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml',0,'com',1,NULL,3203);
+INSERT INTO `policyentity` VALUES (3202,'doACPolicyPut','2017-03-14 19:58:19',0,'BRMSParam vFW Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:','doACPolicyPut','2017-03-14 19:58:19','<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Policy xmlns=\"urn:oasis:names:tc:xacml:3.0:core:schema:wd-17\" PolicyId=\"urn:com:xacml:policy:id:256f4712-a965-4817-a851-a71bdeb9fb49\" Version=\"1\" RuleCombiningAlgId=\"urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides\">\n    <Description>BRMSParam vFW Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:</Description>\n    <Target>\n        <AnyOf>\n            <AllOf>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"PolicyName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n            <AllOf>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DROOLS</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ONAPName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">BRMS_PARAM_RULE</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ConfigName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskType\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskLevel\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">False</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"guard\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"TTLDate\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n        </AnyOf>\n    </Target>\n    <Rule RuleId=\"urn:com:xacml:rule:id:8cdb88aa-448b-4ed1-bce5-6a037651e73c\" Effect=\"Permit\">\n        <Target>\n            <AnyOf>\n                <AllOf>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">ACCESS</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:action\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:action:action-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Config</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:resource:resource-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                </AllOf>\n            </AnyOf>\n        </Target>\n        <AdviceExpressions>\n            <AdviceExpression AdviceId=\"BRMSPARAMID\" AppliesTo=\"Permit\">\n                <AttributeAssignmentExpression AttributeId=\"type\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Configuration</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"URLID\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#anyURI\">$URL/Config/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.txt</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"PolicyName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"VersionNumber\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ONAPName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DROOLS</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ConfigName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">BRMS_PARAM_RULE</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"key:controller\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">vFW</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskType\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskLevel\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"guard\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">False</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"TTLDate\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                </AttributeAssignmentExpression>\n            </AdviceExpression>\n        </AdviceExpressions>\n    </Rule>\n</Policy>\n','Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml',0,'com',1,NULL,3201),(3204,'doACPolicyPut','2017-03-14 20:00:56',0,'BRMSParam vLB Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:','doACPolicyPut','2017-03-14 20:00:56','<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Policy xmlns=\"urn:oasis:names:tc:xacml:3.0:core:schema:wd-17\" PolicyId=\"urn:com:xacml:policy:id:ace93d23-7a21-450a-87b4-5ff11e01d4b1\" Version=\"1\" RuleCombiningAlgId=\"urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides\">\n    <Description>BRMSParam vLB Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:</Description>\n    <Target>\n        <AnyOf>\n            <AllOf>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"PolicyName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n            <AllOf>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DROOLS</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ONAPName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">BRMS_PARAM_RULE</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:access-subject\" AttributeId=\"ConfigName\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskType\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"RiskLevel\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">False</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"guard\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n                <Match MatchId=\"org.onap.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"TTLDate\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n        </AnyOf>\n    </Target>\n    <Rule RuleId=\"urn:com:xacml:rule:id:9d472f3a-bab1-4bee-8bfc-0ee1b4e11ad6\" Effect=\"Permit\">\n        <Target>\n            <AnyOf>\n                <AllOf>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">ACCESS</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:action\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:action:action-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                    <Match MatchId=\"urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case\">\n                        <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Config</AttributeValue>\n                        <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"urn:oasis:names:tc:xacml:1.0:resource:resource-id\" DataType=\"http://www.w3.org/2001/XMLSchema#string\" MustBePresent=\"false\"/>\n                    </Match>\n                </AllOf>\n            </AnyOf>\n        </Target>\n        <AdviceExpressions>\n            <AdviceExpression AdviceId=\"BRMSPARAMID\" AppliesTo=\"Permit\">\n                <AttributeAssignmentExpression AttributeId=\"type\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">Configuration</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"URLID\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#anyURI\">$URL/Config/com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.txt</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"PolicyName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"VersionNumber\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ONAPName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">DROOLS</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"matching:ConfigName\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">BRMS_PARAM_RULE</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"key:controller\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">vDNS</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskType\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">SampleRiskType</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"RiskLevel\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">1</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"guard\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">False</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"TTLDate\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" Issuer=\"\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">NA</AttributeValue>\n                </AttributeAssignmentExpression>\n            </AdviceExpression>\n        </AdviceExpressions>\n    </Rule>\n</Policy>\n','Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml',0,'com',1,NULL,3203);
 
 INSERT INTO `policyversion` VALUES (1,'com/Config_BRMS_Param_BRMSParamvFWDemoPolicy',1,1,'2017-03-03 17:16:37','demo','2017-03-03 17:16:37','demo'),(2,'com/Config_BRMS_Param_BRMSParamvLBDemoPolicy',1,1,'2017-03-03 17:20:03','demo','2017-03-03 17:20:03','demo');
 
diff --git a/packages/base/src/files/install/mysql/data/170204_downgrade_script.sql b/packages/base/src/files/install/mysql/data/170204_downgrade_script.sql
index 8fead9c..842f6e9 100644
--- a/packages/base/src/files/install/mysql/data/170204_downgrade_script.sql
+++ b/packages/base/src/files/install/mysql/data/170204_downgrade_script.sql
@@ -1,6 +1,6 @@
 /*-
 * ============LICENSE_START=======================================================
-* ECOMP Policy Engine
+* ONAP Policy Engine
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
@@ -17,7 +17,7 @@
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */
-use ecomp_sdk;
+use onap_sdk;
 drop table if exists brmsgroup_info;
 drop table if exists brmsgroup_policy;
 drop table if exists operationshistory10;
diff --git a/packages/base/src/files/install/mysql/data/170204_upgrade_script.sql b/packages/base/src/files/install/mysql/data/170204_upgrade_script.sql
index c474f1b..32868b9 100644
--- a/packages/base/src/files/install/mysql/data/170204_upgrade_script.sql
+++ b/packages/base/src/files/install/mysql/data/170204_upgrade_script.sql
@@ -1,6 +1,6 @@
 /*-
 * ============LICENSE_START=======================================================
-* ECOMP Policy Engine
+* ONAP Policy Engine
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
@@ -17,7 +17,7 @@
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */
-use ecomp_sdk;
+use onap_sdk;
 set foreign_key_checks=0;
 drop table if exists brmsgroup_info;
 CREATE TABLE brmsgroup_info
diff --git a/packages/base/src/files/install/mysql/data/170701_downgrade_script.sql b/packages/base/src/files/install/mysql/data/170701_downgrade_script.sql
index d81fa15..2609634 100644
--- a/packages/base/src/files/install/mysql/data/170701_downgrade_script.sql
+++ b/packages/base/src/files/install/mysql/data/170701_downgrade_script.sql
@@ -1,6 +1,6 @@
 /*-
 * ============LICENSE_START=======================================================
-* ECOMP Policy Engine
+* ONAP Policy Engine
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
@@ -17,7 +17,7 @@
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */
-use ecomp_sdk;
+use onap_sdk;
 ALTER TABLE fwtagpicker drop networkRole;
 alter table microservicemodels drop column enumValues, drop column annotation; 
 drop table if exists FWTag; 
diff --git a/packages/base/src/files/install/mysql/data/170701_upgrade_script.sql b/packages/base/src/files/install/mysql/data/170701_upgrade_script.sql
index 9091d9f..acfdd00 100644
--- a/packages/base/src/files/install/mysql/data/170701_upgrade_script.sql
+++ b/packages/base/src/files/install/mysql/data/170701_upgrade_script.sql
@@ -1,6 +1,6 @@
 /*-
 * ============LICENSE_START=======================================================
-* ECOMP Policy Engine
+* ONAP Policy Engine
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
@@ -17,13 +17,13 @@
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */
-use ecomp_sdk;
+use onap_sdk;
 
 INSERT INTO policyeditorscopes (`id`, `scopename`, `created_date`, `created_by`, `modified_date`, `modified_by`) VALUES ('1', 'com', '2017-06-01 11:45:36', 'demo', '2017-06-01 11:45:36', 'demo');
 
 alter table IntegrityAuditEntity modify jdbcUrl varchar(200) not null; 
 
-alter table `ecomp_sdk`.`microservicemodels` 
+alter table `onap_sdk`.`microservicemodels` 
 add column `enumValues` longtext null default null after `version`, 
 add column `annotation` longtext null after `enumValues`;
 
diff --git a/packages/base/src/files/install/mysql/data/171001_downgrade_script.sql b/packages/base/src/files/install/mysql/data/171001_downgrade_script.sql
index c7c7428..469e951 100644
--- a/packages/base/src/files/install/mysql/data/171001_downgrade_script.sql
+++ b/packages/base/src/files/install/mysql/data/171001_downgrade_script.sql
@@ -1,6 +1,6 @@
 /*-
 * ============LICENSE_START=======================================================
-* ECOMP Policy Engine
+* ONAP Policy Engine
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
@@ -17,5 +17,5 @@
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */
-use ecomp_sdk;
+use onap_sdk;
 drop table if exists rainydaytreatments;
\ No newline at end of file
diff --git a/packages/base/src/files/install/mysql/data/171001_upgrade_script.sql b/packages/base/src/files/install/mysql/data/171001_upgrade_script.sql
index 6be2f25..c6f6303 100644
--- a/packages/base/src/files/install/mysql/data/171001_upgrade_script.sql
+++ b/packages/base/src/files/install/mysql/data/171001_upgrade_script.sql
@@ -1,6 +1,6 @@
 /*-
 * ============LICENSE_START=======================================================
-* ECOMP Policy Engine
+* ONAP Policy Engine
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
@@ -17,10 +17,10 @@
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */
-use ecomp_sdk;
-drop table if exists `ecomp_sdk`.`rainydaytreatments`;
+use onap_sdk;
+drop table if exists `onap_sdk`.`rainydaytreatments`;
 
-CREATE TABLE `ecomp_sdk`.`rainydaytreatments` (
+CREATE TABLE `onap_sdk`.`rainydaytreatments` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `bbid` varchar(250) DEFAULT NULL,
   `workstep` varchar(250) DEFAULT NULL,
diff --git a/packages/base/src/files/install/servers/brmsgw/client.properties b/packages/base/src/files/install/servers/brmsgw/client.properties
index 97156b6..4a39cf1 100644
--- a/packages/base/src/files/install/servers/brmsgw/client.properties
+++ b/packages/base/src/files/install/servers/brmsgw/client.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/brmsgw/config.properties b/packages/base/src/files/install/servers/brmsgw/config.properties
index 30b14b1..9e95ed7 100644
--- a/packages/base/src/files/install/servers/brmsgw/config.properties
+++ b/packages/base/src/files/install/servers/brmsgw/config.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/brmsgw/config/policyLogger.properties b/packages/base/src/files/install/servers/brmsgw/config/policyLogger.properties
index 0deb1b3..bbb0ecf 100644
--- a/packages/base/src/files/install/servers/brmsgw/config/policyLogger.properties
+++ b/packages/base/src/files/install/servers/brmsgw/config/policyLogger.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/common/tomcat/bin/setenv.sh b/packages/base/src/files/install/servers/common/tomcat/bin/setenv.sh
index 154b2a5..0ba7ab8 100644
--- a/packages/base/src/files/install/servers/common/tomcat/bin/setenv.sh
+++ b/packages/base/src/files/install/servers/common/tomcat/bin/setenv.sh
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/common/tomcat/conf/server.xml b/packages/base/src/files/install/servers/common/tomcat/conf/server.xml
index e454500..7873472 100644
--- a/packages/base/src/files/install/servers/common/tomcat/conf/server.xml
+++ b/packages/base/src/files/install/servers/common/tomcat/conf/server.xml
@@ -1,7 +1,7 @@
 <?xml version='1.0' encoding='utf-8'?>
 <!--
   ============LICENSE_START=======================================================
-  ECOMP Policy Engine
+  ONAP Policy Engine
   ================================================================================
   Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
   ================================================================================
diff --git a/packages/base/src/files/install/servers/configs/conf/server.xml b/packages/base/src/files/install/servers/configs/conf/server.xml
index acda634..2a6191e 100644
--- a/packages/base/src/files/install/servers/configs/conf/server.xml
+++ b/packages/base/src/files/install/servers/configs/conf/server.xml
@@ -1,7 +1,7 @@
 <?xml version='1.0' encoding='utf-8'?>
 <!--
   ============LICENSE_START=======================================================
-  ECOMP Policy Engine
+  ONAP Policy Engine
   ================================================================================
   Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
   ================================================================================
diff --git a/packages/base/src/files/install/servers/console/bin/Policy-Admin.xml b/packages/base/src/files/install/servers/console/bin/Policy-Admin.xml
index b2d70de..1f304b9 100644
--- a/packages/base/src/files/install/servers/console/bin/Policy-Admin.xml
+++ b/packages/base/src/files/install/servers/console/bin/Policy-Admin.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <!--
   ============LICENSE_START=======================================================
-  ECOMP Policy Engine
+  ONAP Policy Engine
   ================================================================================
   Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
   ================================================================================
diff --git a/packages/base/src/files/install/servers/console/bin/config/policyLogger.properties b/packages/base/src/files/install/servers/console/bin/config/policyLogger.properties
index 0deb1b3..bbb0ecf 100644
--- a/packages/base/src/files/install/servers/console/bin/config/policyLogger.properties
+++ b/packages/base/src/files/install/servers/console/bin/config/policyLogger.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/console/bin/model.properties b/packages/base/src/files/install/servers/console/bin/model.properties
index ce448b9..450654f 100644
--- a/packages/base/src/files/install/servers/console/bin/model.properties
+++ b/packages/base/src/files/install/servers/console/bin/model.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml b/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml
index 38405d6..e57f8fa 100755
--- a/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml
+++ b/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml
@@ -4,33 +4,33 @@
     <Target>
         <AnyOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="PolicyName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
             </AllOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DROOLS</AttributeValue>
-                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ECOMPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ONAPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">BRMS_PARAM_RULE</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ConfigName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleRiskType</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskType" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskLevel" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">False</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="guard" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">NA</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="TTLDate" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
@@ -66,7 +66,7 @@
                 <AttributeAssignmentExpression AttributeId="VersionNumber" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                 </AttributeAssignmentExpression>
-                <AttributeAssignmentExpression AttributeId="matching:ECOMPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                <AttributeAssignmentExpression AttributeId="matching:ONAPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DROOLS</AttributeValue>
                 </AttributeAssignmentExpression>
                 <AttributeAssignmentExpression AttributeId="matching:ConfigName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
diff --git a/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml b/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml
index 25af35a..7b60d8e 100755
--- a/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml
+++ b/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml
@@ -4,33 +4,33 @@
     <Target>
         <AnyOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="PolicyName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
             </AllOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DROOLS</AttributeValue>
-                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ECOMPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ONAPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">BRMS_PARAM_RULE</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ConfigName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleRiskType</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskType" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskLevel" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">False</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="guard" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">NA</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="TTLDate" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
@@ -66,7 +66,7 @@
                 <AttributeAssignmentExpression AttributeId="VersionNumber" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                 </AttributeAssignmentExpression>
-                <AttributeAssignmentExpression AttributeId="matching:ECOMPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                <AttributeAssignmentExpression AttributeId="matching:ONAPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DROOLS</AttributeValue>
                 </AttributeAssignmentExpression>
                 <AttributeAssignmentExpression AttributeId="matching:ConfigName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
diff --git a/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_MS_vFirewall.1.xml b/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_MS_vFirewall.1.xml
index 336504c..3b81613 100644
--- a/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_MS_vFirewall.1.xml
+++ b/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_MS_vFirewall.1.xml
@@ -4,45 +4,45 @@
     <Target>
         <AnyOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_MS_vFirewall.1.xml</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="PolicyName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
             </AllOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DCAE</AttributeValue>
-                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ECOMPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ONAPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleConfigName</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ConfigName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">TcaMetrics-v1.0.0.5</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="service" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vFirewall</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="uuid" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleServiceLocation</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="location" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleRiskType</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskType" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskLevel" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">False</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="guard" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">NA</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="TTLDate" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
@@ -78,7 +78,7 @@
                 <AttributeAssignmentExpression AttributeId="VersionNumber" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                 </AttributeAssignmentExpression>
-                <AttributeAssignmentExpression AttributeId="matching:ECOMPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                <AttributeAssignmentExpression AttributeId="matching:ONAPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DCAE</AttributeValue>
                 </AttributeAssignmentExpression>
                 <AttributeAssignmentExpression AttributeId="matching:ConfigName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
diff --git a/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_MS_vLoadBalancer.1.xml b/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_MS_vLoadBalancer.1.xml
index bb183c5..d48bf9e 100644
--- a/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_MS_vLoadBalancer.1.xml
+++ b/packages/base/src/files/install/servers/console/bin/workspace/admin/repository/com/Config_MS_vLoadBalancer.1.xml
@@ -4,45 +4,45 @@
     <Target>
         <AnyOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_MS_vLoadBalancer.1.xml</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="PolicyName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
             </AllOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DCAE</AttributeValue>
-                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ECOMPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ONAPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleConfigName</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ConfigName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">TcaMetrics-v1.0.0.5</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="service" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vLoadBalancer</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="uuid" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleServiceLocation</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="location" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleRiskType</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskType" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskLevel" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">False</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="guard" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">NA</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="TTLDate" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
@@ -78,7 +78,7 @@
                 <AttributeAssignmentExpression AttributeId="VersionNumber" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                 </AttributeAssignmentExpression>
-                <AttributeAssignmentExpression AttributeId="matching:ECOMPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                <AttributeAssignmentExpression AttributeId="matching:ONAPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DCAE</AttributeValue>
                 </AttributeAssignmentExpression>
                 <AttributeAssignmentExpression AttributeId="matching:ConfigName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
diff --git a/packages/base/src/files/install/servers/console/bin/xacml.admin.properties b/packages/base/src/files/install/servers/console/bin/xacml.admin.properties
index 7c2d1d2..755d0f2 100644
--- a/packages/base/src/files/install/servers/console/bin/xacml.admin.properties
+++ b/packages/base/src/files/install/servers/console/bin/xacml.admin.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
@@ -39,12 +39,12 @@
 #
 xacml.att.evaluationContextFactory=com.att.research.xacmlatt.pdp.std.StdEvaluationContextFactory
 xacml.att.combiningAlgorithmFactory=com.att.research.xacmlatt.pdp.std.StdCombiningAlgorithmFactory
-xacml.att.functionDefinitionFactory=org.openecomp.policy.xacml.custom.EcompFunctionDefinitionFactory
+xacml.att.functionDefinitionFactory=org.onap.policy.xacml.custom.OnapFunctionDefinitionFactory
 xacml.att.policyFinderFactory=com.att.research.xacmlatt.pdp.std.StdPolicyFinderFactory
 #
 # Policy Adapter Implementation class 
 #
-policyAdapter.impl.className = org.openecomp.policy.admin.PolicyAdapter
+policyAdapter.impl.className = org.onap.policy.admin.PolicyAdapter
 
 #
 # This is an extremely simple policy to demonstrate authorization
@@ -56,12 +56,12 @@
 #
 # PAP Servlet properties
 #
-xacml.PAP.papEngineFactory=org.openecomp.policy.xacml.std.pap.StdEngineFactory
+xacml.PAP.papEngineFactory=org.onap.policy.xacml.std.pap.StdEngineFactory
 
 #
 # Admin Console properties
 #
-xacml.AC.papEngineFactory=org.openecomp.policy.xacml.admin.util.RESTfulPAPFactory
+xacml.AC.papEngineFactory=org.onap.policy.xacml.admin.util.RESTfulPAPFactory
 
 # Set your domain here:
 
@@ -185,8 +185,8 @@
 
 
 #Dashboard Tab Limit
-xacml.ecomp.dashboard.logTableLimit = 5000
-xacml.ecomp.dashboard.systemAlertTableLimit = 2000                                     
+xacml.onap.dashboard.logTableLimit = 5000
+xacml.onap.dashboard.systemAlertTableLimit = 2000                                     
 
 #Diff of policies for Firewall feature
 FW_GETURL=${{FW_GETURL}}
@@ -195,16 +195,16 @@
 FW_PORT=${{FW_PORT}}
 
 #SMTP Server Details for Java Mail
-ecomp.smtp.host = ${{ecomp_smtp_host}}
-ecomp.smtp.port = ${{ecomp_smtp_port}}
-ecomp.smtp.userName = ${{ecomp_smtp_userName}}
-ecomp.smtp.password = ${{ecomp_smtp_password}}
-ecomp.smtp.emailExtension=${{ecomp_smtp_emailExtension}}
-ecomp.application.name = ${{ecomp_application_name}}
+onap.smtp.host = ${{onap_smtp_host}}
+onap.smtp.port = ${{onap_smtp_port}}
+onap.smtp.userName = ${{onap_smtp_userName}}
+onap.smtp.password = ${{onap_smtp_password}}
+onap.smtp.emailExtension=${{onap_smtp_emailExtension}}
+onap.application.name = ${{onap_application_name}}
 
 #Dialect for Database
-ecomp.dialect = org.hibernate.dialect.MySQLDialect
+onap.dialect = org.hibernate.dialect.MySQLDialect
 
 #Micro Service Model Properties
-xacml.policy.msEcompName=${{policy_msEcompName}}
+xacml.policy.msOnapName=${{policy_msOnapName}}
 xacml.policy.msPolicyName=${{policy_msPolicyName}}
\ No newline at end of file
diff --git a/packages/base/src/files/install/servers/console/conf/server.xml b/packages/base/src/files/install/servers/console/conf/server.xml
index f45c564..53d563b 100644
--- a/packages/base/src/files/install/servers/console/conf/server.xml
+++ b/packages/base/src/files/install/servers/console/conf/server.xml
@@ -1,7 +1,7 @@
 <?xml version='1.0' encoding='utf-8'?>
 <!--
   ============LICENSE_START=======================================================
-  ECOMP Policy Engine
+  ONAP Policy Engine
   ================================================================================
   Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
   ================================================================================
@@ -106,7 +106,7 @@
          documentation
 	-->
 
-    <!-- ECOMP portal currently using http instead of https 
+    <!-- ONAP portal currently using http instead of https 
     <Connector port="${{SSL_HTTP_CONNECTOR_PORT}}" protocol="org.apache.coyote.http11.Http11NioProtocol"
                maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
                clientAuth="false" sslEnabledProtocols="TLSv1, TLSv1.1, TLSv1.2"
diff --git a/packages/base/src/files/install/servers/ecomp/WEB-INF/classes/portal.properties b/packages/base/src/files/install/servers/onap/WEB-INF/classes/portal.properties
similarity index 77%
rename from packages/base/src/files/install/servers/ecomp/WEB-INF/classes/portal.properties
rename to packages/base/src/files/install/servers/onap/WEB-INF/classes/portal.properties
index 7b12df4..e7332be 100644
--- a/packages/base/src/files/install/servers/ecomp/WEB-INF/classes/portal.properties
+++ b/packages/base/src/files/install/servers/onap/WEB-INF/classes/portal.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
@@ -18,7 +18,7 @@
 # ============LICENSE_END=========================================================
 ###
 
-# Properties read by ECOMP Framework library, ecompFW.jar
+# Properties read by ONAP Framework library, onapFW.jar
 
 ##########################################################################
 # The following properties should NOT be changed by partner applications.
@@ -41,14 +41,14 @@
 ##########################################################################
 
 # Name of java class that implements the OnBoardingApiService interface.
-portal.api.impl.class = org.openecomp.portalapp.service.OnBoardingApiServiceImpl
+portal.api.impl.class = org.onap.portalapp.service.OnBoardingApiServiceImpl
 
 # CSP Global Log On for single sign on
-ecomp_redirect_url = ${{ECOMP_REDIRECT_URL}}
+onap_redirect_url = ${{ONAP_REDIRECT_URL}}
 
-# URL of the ECOMP Portal REST API
-# ecomp.homer.com is a development machine
-ecomp_rest_url = ${{ECOMP_REST_URL}}
+# URL of the ONAP Portal REST API
+# onap.homer.com is a development machine
+onap_rest_url = ${{ONAP_REST_URL}}
 
 # Applications do not need to run a UEB listener in 1610.  
 ueb_listeners_enable = false
@@ -58,14 +58,14 @@
 # In release 1610, if key ueb_listeners_enable is set to false,
 # then only the ueb_app_key is required.
 # UEB servers
-ueb_url_list = ${{ECOMP_UEB_URL_LIST}}
-# ECOMP Portal listens on this UEB topic
-ecomp_portal_inbox_name = ${{ECOMP_PORTAL_INBOX_NAME}}
+ueb_url_list = ${{ONAP_UEB_URL_LIST}}
+# ONAP Portal listens on this UEB topic
+onap_portal_inbox_name = ${{ONAP_PORTAL_INBOX_NAME}}
 # Replace these 3 default values with the ones for your specific App,
-# as shown on the on-boarding page on the ECOMP Portal web application.
-ueb_app_key = ${{ECOMP_UEB_APP_KEY}}
-ueb_app_secret = ${{ECOMP_UEB_APP_SECRET}}
-ueb_app_mailbox_name = ${{ECOMP_UEB_APP_MAILBOX_NAME}}
+# as shown on the on-boarding page on the ONAP Portal web application.
+ueb_app_key = ${{ONAP_UEB_APP_KEY}}
+ueb_app_secret = ${{ONAP_UEB_APP_SECRET}}
+ueb_app_mailbox_name = ${{ONAP_UEB_APP_MAILBOX_NAME}}
 # Consumer group name for UEB topic.
 # Use the special tag '{UUID}' to generate a unique one for each sdk-app server.
 ueb_app_consumer_group_name = {UUID}
diff --git a/packages/base/src/files/install/servers/ecomp/WEB-INF/conf/system.properties b/packages/base/src/files/install/servers/onap/WEB-INF/conf/system.properties
similarity index 91%
rename from packages/base/src/files/install/servers/ecomp/WEB-INF/conf/system.properties
rename to packages/base/src/files/install/servers/onap/WEB-INF/conf/system.properties
index 4ae54c1..484a617 100644
--- a/packages/base/src/files/install/servers/ecomp/WEB-INF/conf/system.properties
+++ b/packages/base/src/files/install/servers/onap/WEB-INF/conf/system.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
@@ -18,7 +18,7 @@
 # ============LICENSE_END=========================================================
 ###
 
-# Properties read by ECOMP Core library, ecompSDK-core.jar
+# Properties read by ONAP Core library, onapSDK-core.jar
 
 ##########################################################################
 # The following properties should NOT be changed by partner applications.
@@ -64,8 +64,8 @@
 #sessiontimeout_feed_cron	  = 0 * * * * ? *
 my_login_feed_output_dir      = /tmp/MyLogins
 
-# ECOMP Portal Shared Context REST API URL
-ecomp_shared_context_rest_url= ${{ECOMP_SHARED_CONTEXT_REST_URL}}
+# ONAP Portal Shared Context REST API URL
+onap_shared_context_rest_url= ${{ONAP_SHARED_CONTEXT_REST_URL}}
 
 # Link shown in Help menu
 contact_us_link = 
@@ -73,7 +73,7 @@
 # An Unique 128-bit value defined to identify a specific version
 # of an application deployed on a specific virtual machine.
 # This value must be generated and updated by the application 
-# which is using the ECOMP SDK at the time of its deployment.
+# which is using the ONAP SDK at the time of its deployment.
 # Online Unique UUID generator - https://www.uuidgenerator.net/
 instance_uuid=8da691c9-987d-43ed-a358-00ac2f35685d
 
diff --git a/packages/base/src/files/install/servers/pap/bin/autopush.properties b/packages/base/src/files/install/servers/pap/bin/autopush.properties
index 8d78084..134ff5d 100644
--- a/packages/base/src/files/install/servers/pap/bin/autopush.properties
+++ b/packages/base/src/files/install/servers/pap/bin/autopush.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/pap/bin/config/policyLogger.properties b/packages/base/src/files/install/servers/pap/bin/config/policyLogger.properties
index 0deb1b3..bbb0ecf 100644
--- a/packages/base/src/files/install/servers/pap/bin/config/policyLogger.properties
+++ b/packages/base/src/files/install/servers/pap/bin/config/policyLogger.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml b/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml
index 33c0c4a..e27f163 100644
--- a/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml
+++ b/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml
@@ -4,33 +4,33 @@
     <Target>
         <AnyOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="PolicyName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
             </AllOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DROOLS</AttributeValue>
-                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ECOMPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ONAPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">BRMS_PARAM_RULE</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ConfigName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleRiskType</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskType" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskLevel" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">False</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="guard" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">NA</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="TTLDate" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
@@ -66,7 +66,7 @@
                 <AttributeAssignmentExpression AttributeId="VersionNumber" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                 </AttributeAssignmentExpression>
-                <AttributeAssignmentExpression AttributeId="matching:ECOMPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                <AttributeAssignmentExpression AttributeId="matching:ONAPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DROOLS</AttributeValue>
                 </AttributeAssignmentExpression>
                 <AttributeAssignmentExpression AttributeId="matching:ConfigName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
diff --git a/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml b/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml
index 2901462..54bcbaa 100644
--- a/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml
+++ b/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml
@@ -4,33 +4,33 @@
     <Target>
         <AnyOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.xml</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="PolicyName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
             </AllOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DROOLS</AttributeValue>
-                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ECOMPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ONAPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">BRMS_PARAM_RULE</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ConfigName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleRiskType</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskType" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskLevel" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">False</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="guard" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">NA</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="TTLDate" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
@@ -66,7 +66,7 @@
                 <AttributeAssignmentExpression AttributeId="VersionNumber" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                 </AttributeAssignmentExpression>
-                <AttributeAssignmentExpression AttributeId="matching:ECOMPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                <AttributeAssignmentExpression AttributeId="matching:ONAPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DROOLS</AttributeValue>
                 </AttributeAssignmentExpression>
                 <AttributeAssignmentExpression AttributeId="matching:ConfigName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
diff --git a/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_MS_vFirewall.1.xml b/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_MS_vFirewall.1.xml
index a18b59f..ca01be5 100644
--- a/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_MS_vFirewall.1.xml
+++ b/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_MS_vFirewall.1.xml
@@ -4,45 +4,45 @@
     <Target>
         <AnyOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_MS_vFirewall.1.xml</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="PolicyName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
             </AllOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DCAE</AttributeValue>
-                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ECOMPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ONAPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleConfigName</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ConfigName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">TcaMetrics-v1.0.0.5</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="service" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vFirewall</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="uuid" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleServiceLocation</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="location" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleRiskType</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskType" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskLevel" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">False</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="guard" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">NA</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="TTLDate" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
@@ -78,7 +78,7 @@
                 <AttributeAssignmentExpression AttributeId="VersionNumber" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                 </AttributeAssignmentExpression>
-                <AttributeAssignmentExpression AttributeId="matching:ECOMPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                <AttributeAssignmentExpression AttributeId="matching:ONAPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DCAE</AttributeValue>
                 </AttributeAssignmentExpression>
                 <AttributeAssignmentExpression AttributeId="matching:ConfigName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
diff --git a/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_MS_vLoadBalancer.1.xml b/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_MS_vLoadBalancer.1.xml
index 03ae3e8..663f4f3 100644
--- a/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_MS_vLoadBalancer.1.xml
+++ b/packages/base/src/files/install/servers/pap/bin/pdps/default/com.Config_MS_vLoadBalancer.1.xml
@@ -4,45 +4,45 @@
     <Target>
         <AnyOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_MS_vLoadBalancer.1.xml</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="PolicyName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
             </AllOf>
             <AllOf>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DCAE</AttributeValue>
-                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ECOMPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                    <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ONAPName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleConfigName</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ConfigName" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">TcaMetrics-v1.0.0.5</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="service" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vLoadBalancer</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="uuid" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleServiceLocation</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="location" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleRiskType</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskType" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="RiskLevel" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">False</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="guard" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
-                <Match MatchId="org.openecomp.function.regex-match">
+                <Match MatchId="org.onap.function.regex-match">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">NA</AttributeValue>
                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="TTLDate" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
                 </Match>
@@ -78,7 +78,7 @@
                 <AttributeAssignmentExpression AttributeId="VersionNumber" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1</AttributeValue>
                 </AttributeAssignmentExpression>
-                <AttributeAssignmentExpression AttributeId="matching:ECOMPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                <AttributeAssignmentExpression AttributeId="matching:ONAPName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DCAE</AttributeValue>
                 </AttributeAssignmentExpression>
                 <AttributeAssignmentExpression AttributeId="matching:ConfigName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
diff --git a/packages/base/src/files/install/servers/pap/bin/pdps/default/xacml.pip.properties b/packages/base/src/files/install/servers/pap/bin/pdps/default/xacml.pip.properties
index 4dba1f5..846848f 100644
--- a/packages/base/src/files/install/servers/pap/bin/pdps/default/xacml.pip.properties
+++ b/packages/base/src/files/install/servers/pap/bin/pdps/default/xacml.pip.properties
@@ -1,6 +1,6 @@
 #
 #Tue Feb 07 10:35:08 EST 2017
 AAF.description=AAFEngine to communicate with AAF to take decisions
-AAF.classname=org.openecomp.policy.xacml.std.pip.engines.aaf.AAFEngine
+AAF.classname=org.onap.policy.xacml.std.pip.engines.aaf.AAFEngine
 AAF.name=AAFEngine
 xacml.pip.engines=AAF
\ No newline at end of file
diff --git a/packages/base/src/files/install/servers/pap/bin/pip.properties b/packages/base/src/files/install/servers/pap/bin/pip.properties
index d9df903..b5d46af 100644
--- a/packages/base/src/files/install/servers/pap/bin/pip.properties
+++ b/packages/base/src/files/install/servers/pap/bin/pip.properties
@@ -5,11 +5,11 @@
 
 ### AAF PIP Configuration. 
 AAF.description=AAFEngine to communicate with AAF to take decisions
-AAF.classname=org.openecomp.policy.xacml.std.pip.engines.aaf.AAFEngine
+AAF.classname=org.onap.policy.xacml.std.pip.engines.aaf.AAFEngine
 AAF.name=AAFEngine
 
 # PIP Engine Definition
 #
-historydb.classname=org.openecomp.policy.xacml.std.pip.engines.OperationHistoryEngine
+historydb.classname=org.onap.policy.xacml.std.pip.engines.OperationHistoryEngine
 historydb.issuer=org:onap:xacml:guard:historydb
 historydb.name=operationHistoryDB
\ No newline at end of file
diff --git a/packages/base/src/files/install/servers/pap/bin/policyelk.properties b/packages/base/src/files/install/servers/pap/bin/policyelk.properties
index 88fa7d7..4071e99 100644
--- a/packages/base/src/files/install/servers/pap/bin/policyelk.properties
+++ b/packages/base/src/files/install/servers/pap/bin/policyelk.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/pap/bin/test.properties b/packages/base/src/files/install/servers/pap/bin/test.properties
index e983c3b..993c7e8 100644
--- a/packages/base/src/files/install/servers/pap/bin/test.properties
+++ b/packages/base/src/files/install/servers/pap/bin/test.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/pap/bin/xacml.pap.properties b/packages/base/src/files/install/servers/pap/bin/xacml.pap.properties
index 3e30bde..5646cf4 100644
--- a/packages/base/src/files/install/servers/pap/bin/xacml.pap.properties
+++ b/packages/base/src/files/install/servers/pap/bin/xacml.pap.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
@@ -21,11 +21,11 @@
 #
 # This is our factory that will create our engine
 #
-xacml.PAP.papEngineFactory=org.openecomp.policy.xacml.std.pap.StdEngineFactory
-dictionary.impl.className=org.openecomp.policy.pap.xacml.rest.handler.DictionaryHandlerImpl
-savePolicy.impl.className=org.openecomp.policy.pap.xacml.rest.handler.SavePolicyHandler
-pushPolicy.impl.className=org.openecomp.policy.pap.xacml.rest.handler.PushPolicyHandler
-deletePolicy.impl.className=org.openecomp.policy.pap.xacml.rest.handler.DeleteHandler
+xacml.PAP.papEngineFactory=org.onap.policy.xacml.std.pap.StdEngineFactory
+dictionary.impl.className=org.onap.policy.pap.xacml.rest.handler.DictionaryHandlerImpl
+savePolicy.impl.className=org.onap.policy.pap.xacml.rest.handler.SavePolicyHandler
+pushPolicy.impl.className=org.onap.policy.pap.xacml.rest.handler.PushPolicyHandler
+deletePolicy.impl.className=org.onap.policy.pap.xacml.rest.handler.DeleteHandler
 #
 # Where we store our PAP PDP Group/Node information
 #
@@ -137,5 +137,5 @@
 ENVIRONMENT=${{ENVIRONMENT}}
 
 #Micro Service Model Properties
-xacml.policy.msEcompName=${{policy_msEcompName}}
+xacml.policy.msOnapName=${{policy_msOnapName}}
 xacml.policy.msPolicyName=${{policy_msPolicyName}}
\ No newline at end of file
diff --git a/packages/base/src/files/install/servers/pap/webapps/Config/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.txt b/packages/base/src/files/install/servers/pap/webapps/Config/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.txt
index c731b3f..6ff244e 100755
--- a/packages/base/src/files/install/servers/pap/webapps/Config/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.txt
+++ b/packages/base/src/files/install/servers/pap/webapps/Config/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.txt
@@ -83,7 +83,7 @@
 import org.onap.policy.mso.MSORelatedInstance;
 import org.onap.policy.mso.MSOResponse;
 
-import org.openecomp.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyEngine;
 
 //
 // These parameters are required to build the runtime policy
@@ -106,7 +106,7 @@
 /*
 *
 * Called once and only once to insert the parameters into working memory for this Closed Loop policy.
-* (Comment SETUP rule out for the first ECOMP opensource release since policy BRMS_GW already puts a Params fact in there)
+* (Comment SETUP rule out for the first ONAP opensource release since policy BRMS_GW already puts a Params fact in there)
 *
 *
 *rule "BRMSParamvFWDemoPolicy.SETUP"
diff --git a/packages/base/src/files/install/servers/pap/webapps/Config/com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.txt b/packages/base/src/files/install/servers/pap/webapps/Config/com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.txt
index 77408a2..f9accdd 100755
--- a/packages/base/src/files/install/servers/pap/webapps/Config/com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.txt
+++ b/packages/base/src/files/install/servers/pap/webapps/Config/com.Config_BRMS_Param_BRMSParamvLBDemoPolicy.1.txt
@@ -83,7 +83,7 @@
 import org.onap.policy.mso.MSORelatedInstance;
 import org.onap.policy.mso.MSOResponse;
 
-import org.openecomp.policy.drools.system.PolicyEngine;
+import org.onap.policy.drools.system.PolicyEngine;
 
 //
 // These parameters are required to build the runtime policy
@@ -106,7 +106,7 @@
 /*
 *
 * Called once and only once to insert the parameters into working memory for this Closed Loop policy.
-* (Comment SETUP rule out for the first ECOMP opensource release since policy BRMS_GW already puts a Params fact in there)
+* (Comment SETUP rule out for the first ONAP opensource release since policy BRMS_GW already puts a Params fact in there)
 *
 *
 *rule "BRMSParamvLBDemoPolicy.SETUP"
@@ -119,7 +119,7 @@
 *		params.setAaiURL("https://aai.api.simpledemo.openecomp.org:8443");
 *		params.setAaiUsername("POLICY");
 *		params.setAaiPassword("POLICY");
-*		params.setMsoURL("http://vm1.mso.simpledemo.openecomp.org:8080/ecomp/mso/infra");
+*		params.setMsoURL("http://vm1.mso.simpledemo.openecomp.org:8080/onap/mso/infra");
 *		params.setMsoUsername("InfraPortalClient");
 *		params.setMsoPassword("password1$");
 *		params.setAaiNamedQueryUUID("f199cb88-5e69-4b1f-93e0-6f257877d066");
@@ -1135,7 +1135,7 @@
 		params.setMsoPassword("password1$");
 		params.setClosedLoopControlName("CL-DNS-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8");
 		params.setAaiUsername("POLICY");
-		params.setMsoURL("http://vm1.mso.simpledemo.openecomp.org:8080/ecomp/mso/infra");
+		params.setMsoURL("http://vm1.mso.simpledemo.openecomp.org:8080/onap/mso/infra");
 		params.setActor("MSO");
 		params.setMsoUsername("InfraPortalClient");
 		params.setAaiNamedQueryUUID("f199cb88-5e69-4b1f-93e0-6f257877d066");
diff --git a/packages/base/src/files/install/servers/paplp/bin/config/policyLogger.properties b/packages/base/src/files/install/servers/paplp/bin/config/policyLogger.properties
index 0deb1b3..bbb0ecf 100644
--- a/packages/base/src/files/install/servers/paplp/bin/config/policyLogger.properties
+++ b/packages/base/src/files/install/servers/paplp/bin/config/policyLogger.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/paplp/bin/parserlog.properties b/packages/base/src/files/install/servers/paplp/bin/parserlog.properties
index 8dbd70e..e9189f9 100644
--- a/packages/base/src/files/install/servers/paplp/bin/parserlog.properties
+++ b/packages/base/src/files/install/servers/paplp/bin/parserlog.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/pdp/bin/client.properties b/packages/base/src/files/install/servers/pdp/bin/client.properties
index 97156b6..4a39cf1 100644
--- a/packages/base/src/files/install/servers/pdp/bin/client.properties
+++ b/packages/base/src/files/install/servers/pdp/bin/client.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/pdp/bin/config/policyLogger.properties b/packages/base/src/files/install/servers/pdp/bin/config/policyLogger.properties
index 0deb1b3..bbb0ecf 100644
--- a/packages/base/src/files/install/servers/pdp/bin/config/policyLogger.properties
+++ b/packages/base/src/files/install/servers/pdp/bin/config/policyLogger.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/pdp/bin/xacml.pdp.properties b/packages/base/src/files/install/servers/pdp/bin/xacml.pdp.properties
index 7653963..ac7a5bb 100644
--- a/packages/base/src/files/install/servers/pdp/bin/xacml.pdp.properties
+++ b/packages/base/src/files/install/servers/pdp/bin/xacml.pdp.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
@@ -32,17 +32,17 @@
 #
 xacml.att.evaluationContextFactory=com.att.research.xacmlatt.pdp.std.StdEvaluationContextFactory
 xacml.att.combiningAlgorithmFactory=com.att.research.xacmlatt.pdp.std.StdCombiningAlgorithmFactory
-xacml.att.functionDefinitionFactory=org.openecomp.policy.xacml.custom.EcompFunctionDefinitionFactory
+xacml.att.functionDefinitionFactory=org.onap.policy.xacml.custom.OnapFunctionDefinitionFactory
 # NOT USED SEE BELOW xacml.att.policyFinderFactory=com.att.research.xacmlatt.pdp.std.StdPolicyFinderFactory
 # creteUpdate Policy Implementation Class details. 
-createUpdatePolicy.impl.className=org.openecomp.policy.pdp.rest.api.services.CreateUpdatePolicyServiceImpl
+createUpdatePolicy.impl.className=org.onap.policy.pdp.rest.api.services.CreateUpdatePolicyServiceImpl
 # AAF Implementation class details
-aafClient.impl.className=org.openecomp.policy.utils.AAFPolicyClientImpl
+aafClient.impl.className=org.onap.policy.utils.AAFPolicyClientImpl
 #
 # AT&T RESTful PDP Implementation Factories
 #
-xacml.pipFinderFactory=org.openecomp.policy.pdp.rest.impl.XACMLPdpPIPFinderFactory
-xacml.att.policyFinderFactory=org.openecomp.policy.pdp.rest.XACMLPdpPolicyFinderFactory
+xacml.pipFinderFactory=org.onap.policy.pdp.rest.impl.XACMLPdpPIPFinderFactory
+xacml.att.policyFinderFactory=org.onap.policy.pdp.rest.XACMLPdpPolicyFinderFactory
 #
 # When set to true, this flag tells the StdPolicyFinderFactory to combined all the root policy files into
 # into one PolicySet and use the given Policy Algorithm.
diff --git a/packages/base/src/files/install/servers/pdplp/bin/config/policyLogger.properties b/packages/base/src/files/install/servers/pdplp/bin/config/policyLogger.properties
index 0deb1b3..bbb0ecf 100644
--- a/packages/base/src/files/install/servers/pdplp/bin/config/policyLogger.properties
+++ b/packages/base/src/files/install/servers/pdplp/bin/config/policyLogger.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/install/servers/pdplp/bin/parserlog.properties b/packages/base/src/files/install/servers/pdplp/bin/parserlog.properties
index 42c3ade..245af07 100755
--- a/packages/base/src/files/install/servers/pdplp/bin/parserlog.properties
+++ b/packages/base/src/files/install/servers/pdplp/bin/parserlog.properties
@@ -1,6 +1,6 @@
 ###
 # ============LICENSE_START=======================================================
-# ECOMP Policy Engine
+# ONAP Policy Engine
 # ================================================================================
 # Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
diff --git a/packages/base/src/files/m2/settings.xml b/packages/base/src/files/m2/settings.xml
index df187ef..50bda75 100644
--- a/packages/base/src/files/m2/settings.xml
+++ b/packages/base/src/files/m2/settings.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
   ============LICENSE_START=======================================================
-  ECOMP Policy Engine
+  ONAP Policy Engine
   ================================================================================
   Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
   ================================================================================
