[Policy-52, Policy-92, Policy-93] Policy Enhancements and bugfixes

Change-Id: I5675cf4527e17963b3142cf7184c0df31a766197
Signed-off-by: Tarun Tej Velaga <tt3868@att.com>
diff --git a/POLICY-SDK-APP/src/test/resources/Action_TestActionPolicy.1.xml b/POLICY-SDK-APP/src/test/resources/Action_TestActionPolicy.1.xml
new file mode 100644
index 0000000..77c9367
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/Action_TestActionPolicy.1.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+ <Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="urn:xacml:policy:id:b8e180de-3dcc-4b5b-814d-925e674e573c" Version="1" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides">
+     <Description>TestActionPolicy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:</Description>
+     <Target>
+         <AnyOf>
+             <AllOf>
+                 <Match MatchId="org.openecomp.function.regex-match">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">12</AttributeValue>
+                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="SamplTest" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                 </Match>
+             </AllOf>
+         </AnyOf>
+     </Target>
+     <Rule RuleId="" Effect="Permit">
+         <Target/>
+         <Condition>
+             <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
+                 <Apply FunctionId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                     <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
+                         <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="SamplTest" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                     </Apply>
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">test</AttributeValue>
+                 </Apply>
+                 <Apply FunctionId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                     <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
+                         <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="SamplTest" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                     </Apply>
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Sample</AttributeValue>
+                 </Apply>
+             </Apply>
+         </Condition>
+         <ObligationExpressions>
+             <ObligationExpression ObligationId="Test" FulfillOn="Permit">
+                 <AttributeAssignmentExpression AttributeId="performer" Category="urn:oasis:names:tc:xacml:1.0:subject-category:recipient-subject">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">PEPAction</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="type" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">REST</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="url" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#anyURI">http://localhost.com</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="method" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">GET</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="body" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#anyURI">$URL/Action/com.Action_TestActionPolicy.1.xml.json</AttributeValue>
+                 </AttributeAssignmentExpression>
+             </ObligationExpression>
+         </ObligationExpressions>
+     </Rule>
+ </Policy>
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/test/resources/Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml b/POLICY-SDK-APP/src/test/resources/Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml
new file mode 100644
index 0000000..ddf1864
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<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">
+    <Description>BRMSParam vFW Demo Policy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:</Description>
+    <Target>
+        <AnyOf>
+            <AllOf>
+                <Match MatchId="org.openecomp.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">
+                    <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"/>
+                </Match>
+                <Match MatchId="org.openecomp.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">
+                    <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">
+                    <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">
+                    <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">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">08-06-2017</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>
+            </AllOf>
+        </AnyOf>
+    </Target>
+    <Rule RuleId="urn:com:xacml:rule:id:8cdb88aa-448b-4ed1-bce5-6a037651e73c" Effect="Permit">
+        <Target>
+            <AnyOf>
+                <AllOf>
+                    <Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ACCESS</AttributeValue>
+                        <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"/>
+                    </Match>
+                    <Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Config</AttributeValue>
+                        <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"/>
+                    </Match>
+                </AllOf>
+            </AnyOf>
+        </Target>
+        <AdviceExpressions>
+            <AdviceExpression AdviceId="BRMSPARAMID" AppliesTo="Permit">
+                <AttributeAssignmentExpression AttributeId="type" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Configuration</AttributeValue>
+                </AttributeAssignmentExpression>
+                <AttributeAssignmentExpression AttributeId="URLID" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#anyURI">$URL/Config/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.txt</AttributeValue>
+                </AttributeAssignmentExpression>
+                <AttributeAssignmentExpression AttributeId="PolicyName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.xml</AttributeValue>
+                </AttributeAssignmentExpression>
+                <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="">
+                    <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="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">BRMS_PARAM_RULE</AttributeValue>
+                </AttributeAssignmentExpression>
+                <AttributeAssignmentExpression AttributeId="key:controller" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">vFW</AttributeValue>
+                </AttributeAssignmentExpression>
+                <AttributeAssignmentExpression AttributeId="RiskType" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleRiskType</AttributeValue>
+                </AttributeAssignmentExpression>
+                <AttributeAssignmentExpression AttributeId="RiskLevel" 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="guard" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">False</AttributeValue>
+                </AttributeAssignmentExpression>
+                <AttributeAssignmentExpression AttributeId="TTLDate" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">08-06-2017</AttributeValue>
+                </AttributeAssignmentExpression>
+            </AdviceExpression>
+        </AdviceExpressions>
+    </Rule>
+</Policy>
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/test/resources/Config_BRMS_Raw_TestBRMSRawPolicy.1.xml b/POLICY-SDK-APP/src/test/resources/Config_BRMS_Raw_TestBRMSRawPolicy.1.xml
new file mode 100644
index 0000000..aa8abc4
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/Config_BRMS_Raw_TestBRMSRawPolicy.1.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+ <Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="urn:xacml:policy:id:05c1c4eb-a94c-4f1c-8ff7-548f7d0b03c2" Version="1" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides">
+     <Description>TestBRMSRawPolicy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:</Description>
+     <Target>
+         <AnyOf>
+             <AllOf>
+                 <Match MatchId="org.openecomp.function.regex-match">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_BRMS_Raw_TestBRMSRawPolicy.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">
+                     <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"/>
+                 </Match>
+                 <Match MatchId="org.openecomp.function.regex-match">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">BRMS_RAW_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">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">High</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">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">2</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">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">True</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">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">08-06-2017</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>
+             </AllOf>
+         </AnyOf>
+     </Target>
+     <Rule RuleId="" Effect="Permit">
+         <Target>
+             <AnyOf>
+                 <AllOf>
+                     <Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ACCESS</AttributeValue>
+                         <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"/>
+                     </Match>
+                     <Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Config</AttributeValue>
+                         <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"/>
+                     </Match>
+                 </AllOf>
+             </AnyOf>
+         </Target>
+         <AdviceExpressions>
+             <AdviceExpression AdviceId="BRMSRAWID" AppliesTo="Permit">
+                 <AttributeAssignmentExpression AttributeId="type" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Configuration</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="URLID" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#anyURI">$URL/Config/com.Config_BRMS_Raw_TestBRMSRawPolicy.1.txt</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="PolicyName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_BRMS_Raw_TestBRMSRawPolicy.1.xml</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <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="">
+                     <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="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">BRMS_RAW_RULE</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="controller:TestController" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">{
+     "artifactId": "testing",
+     "groupId" : "org.openecomp"
+ }</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="dependencies:TestBRMSDependency," Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">[{
+     "groupId" :"org.test" ,
+     "artifactId" : "test_2.10",
+     "version" : "3.0.2",
+     "exclusions" : [ {
+         "groupId" :"org.test.tests" ,
+         "artifactId" : "test-config_2.10"
+     }]
+ }]</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="key:controller" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">vFW</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="RiskType" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">High</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="RiskLevel" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">2</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="guard" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">True</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="TTLDate" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">08-06-2017</AttributeValue>
+                 </AttributeAssignmentExpression>
+             </AdviceExpression>
+         </AdviceExpressions>
+     </Rule>
+ </Policy>
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/test/resources/Config_FW_TestFireWallPolicy.1.xml b/POLICY-SDK-APP/src/test/resources/Config_FW_TestFireWallPolicy.1.xml
new file mode 100644
index 0000000..f334cae
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/Config_FW_TestFireWallPolicy.1.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+ <Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="urn:xacml:policy:id:2f5c1b1e-7cd4-4e71-9a0d-2fcef2a6cb7b" Version="1" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides">
+     <Description>TestFireWallPolicy@CreatedBy:@CreatedBy:@ModifiedBy:@ModifiedBy:</Description>
+     <Target>
+         <AnyOf>
+             <AllOf>
+                 <Match MatchId="org.openecomp.function.regex-match">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_FW_TestFireWallPolicy.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">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">TestFireWallPolicy</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">
+                     <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">
+                     <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">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">True</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">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">08-06-2017</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>
+             </AllOf>
+         </AnyOf>
+     </Target>
+     <Rule RuleId="" Effect="Permit">
+         <Target>
+             <AnyOf>
+                 <AllOf>
+                     <Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ACCESS</AttributeValue>
+                         <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"/>
+                     </Match>
+                     <Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Config</AttributeValue>
+                         <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"/>
+                     </Match>
+                 </AllOf>
+             </AnyOf>
+         </Target>
+         <AdviceExpressions>
+             <AdviceExpression AdviceId="firewallConfigID" AppliesTo="Permit">
+                 <AttributeAssignmentExpression AttributeId="type" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Configuration</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="URLID" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#anyURI">$URL/Config/com.Config_FW_TestFireWallPolicy.1.json</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="PolicyName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_FW_TestFireWallPolicy.1.xml</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <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="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string"/>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="matching:ConfigName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">TestFireWallPolicy</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="RiskType" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleRiskType</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="RiskLevel" 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="guard" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">True</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="TTLDate" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">08-06-2017</AttributeValue>
+                 </AttributeAssignmentExpression>
+             </AdviceExpression>
+         </AdviceExpressions>
+     </Rule>
+ </Policy>
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/test/resources/Config_Fault_TestClosedLoopPolicy.1.xml b/POLICY-SDK-APP/src/test/resources/Config_Fault_TestClosedLoopPolicy.1.xml
new file mode 100644
index 0000000..82be342
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/Config_Fault_TestClosedLoopPolicy.1.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+ <Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="urn:xacml:policy:id:947cfa37-71da-4c10-9e64-bb3635aa9f52" Version="1" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides">
+     <Description>TestClosedLoopPolicy@CreatedBy:rb7147@CreatedBy:@ModifiedBy:rb7147@ModifiedBy:</Description>
+     <Target>
+         <AnyOf>
+             <AllOf>
+                 <Match MatchId="org.openecomp.function.regex-match">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_Fault_TestClosedLoopPolicy.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">
+                     <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"/>
+                 </Match>
+                 <Match MatchId="org.openecomp.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">
+                     <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">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">True</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">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">07-06-2017</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>
+             </AllOf>
+         </AnyOf>
+     </Target>
+     <Rule RuleId="" Effect="Permit">
+         <Target>
+             <AnyOf>
+                 <AllOf>
+                     <Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ACCESS</AttributeValue>
+                         <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"/>
+                     </Match>
+                     <Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Config</AttributeValue>
+                         <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"/>
+                     </Match>
+                 </AllOf>
+             </AnyOf>
+         </Target>
+         <AdviceExpressions>
+             <AdviceExpression AdviceId="faultID" AppliesTo="Permit">
+                 <AttributeAssignmentExpression AttributeId="type" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Configuration</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="URLID" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#anyURI">$URL/Config/com.Config_Fault_TestClosedLoopPolicy.1.json</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="PolicyName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_Fault_TestClosedLoopPolicy.1.xml</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <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="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DCAE</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="RiskType" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleRiskType</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="RiskLevel" 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="guard" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">True</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="TTLDate" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">07-06-2017</AttributeValue>
+                 </AttributeAssignmentExpression>
+             </AdviceExpression>
+         </AdviceExpressions>
+     </Rule>
+ </Policy>
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/test/resources/Config_MS_vFirewall.1.xml b/POLICY-SDK-APP/src/test/resources/Config_MS_vFirewall.1.xml
new file mode 100644
index 0000000..4fd0b7b
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/Config_MS_vFirewall.1.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<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">
+    <Description>Micro Service vFirewall Demo Policy@CreatedBy:demo@CreatedBy:@ModifiedBy:demo@ModifiedBy:</Description>
+    <Target>
+        <AnyOf>
+            <AllOf>
+                <Match MatchId="org.openecomp.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">
+                    <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"/>
+                </Match>
+                <Match MatchId="org.openecomp.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">
+                    <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">
+                    <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">
+                    <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">
+                    <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">
+                    <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">
+                    <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">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">07-06-2017</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>
+            </AllOf>
+        </AnyOf>
+    </Target>
+    <Rule RuleId="urn:com:xacml:rule:id:063161de-0534-4989-bd01-42f784daf21e" Effect="Permit">
+        <Target>
+            <AnyOf>
+                <AllOf>
+                    <Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ACCESS</AttributeValue>
+                        <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"/>
+                    </Match>
+                    <Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                        <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Config</AttributeValue>
+                        <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"/>
+                    </Match>
+                </AllOf>
+            </AnyOf>
+        </Target>
+        <AdviceExpressions>
+            <AdviceExpression AdviceId="MSID" AppliesTo="Permit">
+                <AttributeAssignmentExpression AttributeId="type" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Configuration</AttributeValue>
+                </AttributeAssignmentExpression>
+                <AttributeAssignmentExpression AttributeId="URLID" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#anyURI">$URL/Config/com.Config_MS_vFirewall.1.json</AttributeValue>
+                </AttributeAssignmentExpression>
+                <AttributeAssignmentExpression AttributeId="PolicyName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_MS_vFirewall.1.xml</AttributeValue>
+                </AttributeAssignmentExpression>
+                <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="">
+                    <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="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleConfigName</AttributeValue>
+                </AttributeAssignmentExpression>
+                <AttributeAssignmentExpression AttributeId="matching:service" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">TcaMetrics-v1.0.0.5</AttributeValue>
+                </AttributeAssignmentExpression>
+                <AttributeAssignmentExpression AttributeId="matching:uuid" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">/services/cdap-tca-hi-lo/instances/demo/configuration/metricsPerFunctionalRole/vFirewall</AttributeValue>
+                </AttributeAssignmentExpression>
+                <AttributeAssignmentExpression AttributeId="matching:Location" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleServiceLocation</AttributeValue>
+                </AttributeAssignmentExpression>
+                <AttributeAssignmentExpression AttributeId="Priority" 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="RiskType" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleRiskType</AttributeValue>
+                </AttributeAssignmentExpression>
+                <AttributeAssignmentExpression AttributeId="RiskLevel" 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="guard" 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="TTLDate" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">07-06-2017</AttributeValue>
+                </AttributeAssignmentExpression>
+            </AdviceExpression>
+        </AdviceExpressions>
+    </Rule>
+</Policy>
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/test/resources/Config_PM_TestClosedLoopPMPolicy.1.xml b/POLICY-SDK-APP/src/test/resources/Config_PM_TestClosedLoopPMPolicy.1.xml
new file mode 100644
index 0000000..ca56cf4
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/Config_PM_TestClosedLoopPMPolicy.1.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+ <Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="urn:xacml:policy:id:a3ff3c48-b16f-436a-9aaa-ac7a3515b0e8" Version="1" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides">
+     <Description>TestClosedLoopPMPolicy@CreatedBy:rb7147@CreatedBy:@ModifiedBy:rb7147@ModifiedBy:</Description>
+     <Target>
+         <AnyOf>
+             <AllOf>
+                 <Match MatchId="org.openecomp.function.regex-match">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_PM_TestClosedLoopPMPolicy.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">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Test</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"/>
+                 </Match>
+                 <Match MatchId="org.openecomp.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">
+                     <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">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">True</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">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">08-06-2017</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>
+                 <Match MatchId="org.openecomp.function.regex-match">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Registration Failure(Trinity)</AttributeValue>
+                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" AttributeId="ServiceType" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                 </Match>
+             </AllOf>
+         </AnyOf>
+     </Target>
+     <Rule RuleId="" Effect="Permit">
+         <Target>
+             <AnyOf>
+                 <AllOf>
+                     <Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">ACCESS</AttributeValue>
+                         <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"/>
+                     </Match>
+                     <Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Config</AttributeValue>
+                         <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"/>
+                     </Match>
+                 </AllOf>
+             </AnyOf>
+         </Target>
+         <AdviceExpressions>
+             <AdviceExpression AdviceId="PMID" AppliesTo="Permit">
+                 <AttributeAssignmentExpression AttributeId="type" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Configuration</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="URLID" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#anyURI">$URL/Config/com.Config_PM_TestClosedLoopPMPolicy.1.json</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="PolicyName" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Config_PM_TestClosedLoopPMPolicy.1.xml</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <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="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Test</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="matching:ServiceType" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Registration Failure(Trinity)</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="RiskType" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">SampleRiskType</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="RiskLevel" 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="guard" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">True</AttributeValue>
+                 </AttributeAssignmentExpression>
+                 <AttributeAssignmentExpression AttributeId="TTLDate" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">08-06-2017</AttributeValue>
+                 </AttributeAssignmentExpression>
+             </AdviceExpression>
+         </AdviceExpressions>
+     </Rule>
+ </Policy>
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/test/resources/Config_SampleTest1206.1.xml b/POLICY-SDK-APP/src/test/resources/Config_SampleTest1206.1.xml
index 5c32cd4..5390548 100644
--- a/POLICY-SDK-APP/src/test/resources/Config_SampleTest1206.1.xml
+++ b/POLICY-SDK-APP/src/test/resources/Config_SampleTest1206.1.xml
@@ -27,7 +27,7 @@
                     <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">
-                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">NA</AttributeValue>
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">08-06-2017</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>
                 <Match MatchId="org.openecomp.function.regex-match">
@@ -82,7 +82,7 @@
                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">True</AttributeValue>
                 </AttributeAssignmentExpression>
                 <AttributeAssignmentExpression AttributeId="TTLDate" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" Issuer="">
-                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">NA</AttributeValue>
+                    <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">08-06-2017</AttributeValue>
                 </AttributeAssignmentExpression>
             </AdviceExpression>
         </AdviceExpressions>
diff --git a/POLICY-SDK-APP/src/test/resources/Decision_TestDecisionPolicyWithRuleAlgorithms.1.xml b/POLICY-SDK-APP/src/test/resources/Decision_TestDecisionPolicyWithRuleAlgorithms.1.xml
new file mode 100644
index 0000000..74a0e68
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/Decision_TestDecisionPolicyWithRuleAlgorithms.1.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+ <Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="urn:xacml:policy:id:b622d808-ba62-4392-93c8-eaff0cbfb63f" Version="1" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides">
+     <Description>TestDecisionPolicyWithRuleAlgorithms@CreatedBy:rb7147@CreatedBy:@ModifiedBy:rb7147@ModifiedBy:</Description>
+     <Target>
+         <AnyOf>
+             <AllOf>
+                 <Match MatchId="org.openecomp.function.regex-match">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">com.Decision_TestDecisionPolicyWithRuleAlgorithms.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">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Test</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"/>
+                 </Match>
+                 <Match MatchId="org.openecomp.function.regex-match">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">test</AttributeValue>
+                     <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="SamplTest" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                 </Match>
+             </AllOf>
+         </AnyOf>
+     </Target>
+     <VariableDefinition VariableId="TestSettings">
+         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">test</AttributeValue>
+     </VariableDefinition>
+     <Rule RuleId="" Effect="Permit">
+         <Target>
+             <AnyOf>
+                 <AllOf>
+                     <Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DECIDE</AttributeValue>
+                         <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"/>
+                     </Match>
+                 </AllOf>
+             </AnyOf>
+         </Target>
+         <Condition>
+             <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
+                 <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Sample</AttributeValue>
+                     <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
+                         <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="SamplTest" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                     </Apply>
+                 </Apply>
+                 <Apply FunctionId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                     <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">test</AttributeValue>
+                     <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
+                         <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="SamplTest" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                     </Apply>
+                 </Apply>
+             </Apply>
+         </Condition>
+     </Rule>
+     <Rule RuleId="" Effect="Deny">
+         <Target>
+             <AnyOf>
+                 <AllOf>
+                     <Match MatchId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">DECIDE</AttributeValue>
+                         <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"/>
+                     </Match>
+                 </AllOf>
+             </AnyOf>
+         </Target>
+         <Condition>
+             <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:not">
+                 <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
+                     <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
+                         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Sample</AttributeValue>
+                         <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
+                             <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="SamplTest" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                         </Apply>
+                     </Apply>
+                     <Apply FunctionId="urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case">
+                         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">test</AttributeValue>
+                         <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-one-and-only">
+                             <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="SamplTest" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"/>
+                         </Apply>
+                     </Apply>
+                 </Apply>
+             </Apply>
+         </Condition>
+     </Rule>
+ </Policy>
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/test/resources/JSONConfig.json b/POLICY-SDK-APP/src/test/resources/JSONConfig.json
new file mode 100644
index 0000000..23f9859
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/JSONConfig.json
@@ -0,0 +1,132 @@
+[
+    {
+        "serviceTypePolicyName": "Registration Failure(Trinity)",
+        "verticaMetrics": "DATETIMEUTC\n VNFC_NAME\n BW_SIP_STATS_REGISTER_RESPONSE_CODE_VALUE \nBW_SIP_STATS_REGISTER_RESPONSE_INS \n BW_SIP_STATS_REGISTER_RESPONSE_OUTS",
+        "attributes": {
+            "Onset&abatement anomaly detection": {
+                "PtileLimit": "Percentile value used by anomaly detection model",
+                "Threshold": "initial value for the quantile at percentile(PtileLimit) used by the anomaly detection model",
+                "Window": "Number of weeks anomaly detection model keeps in memory to estimate Threshold",
+                "Training": "Number of historical weeks anomaly detection model needs for training ",
+                "FractionSamplePerDay": "This corresponds to the minimum number of samples per day to be used in the daily percentile computation when updating the distribution tail crossing model. When there are less samples than that threshold, the model is not updated with these samples. "
+            },
+            "Onset signature trigger": {
+                "ConsecutiveIntervalOnset": "Number of consecutive intervals normalized metric must trigger the anomaly detection model before resulting in an action",
+                "RetryTimer": "Minimum interval between policy triggers"
+            },
+            "Abatement signature trigger": {
+                "ConsecutiveIntervalAbatement": "Number of consecutive intervals normalized metric does not trigger the anomaly detection model after onset signature was triggered"
+            },
+            "Onset & abatement UEB notification": {
+                "OnsetMessage": "Value of field OnSetMessage sent by Analytics Engine published on UEB",
+                "AbatementMessage": "Value of field AbatementMessage sent by Analytics Engine published on UEB",
+                "PolicyName": "Value of field PolicyName sent by Analytics Engine published on UEB"
+            }
+        },
+        "policyDescription": "Policy to detect instances where SIP registration rate exceeds a normal level over a number of consecutive sampling periods. \n Notes \n (1) Vertica metrics normalized and combined in a SIP registration failure probability per Site and per VM. \n (2) Anomaly detection model operates on SIP registration failure probability. \n (3) Anomaly detection consists of an estimated distribution percentile threshold crossing. \n (4) Actions: Send email and/or UEB notification"
+    },
+    {
+        "serviceTypePolicyName": "International Fraud(Trinity)",
+        "verticaMetrics": "INTERVAL_START_TS\n CUSTOMER\n A_SITE\n A_SBG\n BW\n Z_COUNTRY\n CALL_COUNT\n MINUTES_OF_USE",
+        "attributes": {
+            "Onset&abatement anomaly detection": {
+                "PtileLimit": "Percentile value used by anomaly detection model",
+                "Threshold": "initial value for the quantile at percentile(PtileLimit) used by the anomaly detection model",
+                "Window": "Number of weeks anomaly detection model keeps in memory to estimate Threshold",
+                "Training": "Number of historical weeks anomaly detection model needs for training ",
+                 "FractionSamplePerDay": "This corresponds to the minimum number of samples per day to be used in the daily percentile computation when updating the distribution tail crossing model. When there are less samples than that threshold, the model is not updated with these samples. "
+            },
+            "Onset signature trigger": {
+                "ConsecutiveIntervalOnset": "Number of consecutive intervals normalized metric must trigger the anomaly detection model before resulting in an action",
+                "RetryTimer": "Minimum interval between policy triggers"
+            },
+            "Abatement signature trigger": {
+                "ConsecutiveIntervalAbatement": "Number of consecutive intervals normalized metric does not trigger the anomaly detection model after onset signature was triggered"
+            },
+            "Onset & abatement UEB notification ": {
+                "OnsetMessage": "Value of field OnSetMessage sent by Analytics Engine published on UEB",
+                "AbatementMessage": "Value of field AbatementMessage sent by Analytics Engine published on UEB",
+                "PolicyName": "Value of field PolicyName sent by Analytics Engine published on UEB"
+            }
+        },
+        "policyDescription": "Policy to detect instances where count of calls towards an international destination exceeds a normal level over a number of consecutive sampling periods. \n Notes \n (1) Vertica metrics normalized and combined in a SIP registration failure probability per Customer, per Site and per VM. \n (2) Anomaly detection model operates on counts towards an international destination. \n (3) Anomaly detection consists of an estimated distribution percentile threshold crossing. \n (4) Actions: Send email and/or UEB notification"
+    },
+    {
+        "serviceTypePolicyName": "No dial tone(Trinity)",
+        "verticaMetrics": "INTERVAL_START_TS\n SUM(CALLS_ATTEMPTED)\n SUM(NO_ANSWER_OR_VOICE_MAIL)\n A_SITE or A_SBG or BW or CUSTOMER",
+        "attributes": {
+            "Onset&abatement anomaly detection": {
+                "PtileLimit": "Percentile value used by anomaly detection model",
+                "Threshold": "initial value for the quantile at percentile(PtileLimit) used by the anomaly detection model",
+                "Window": "Number of weeks anomaly detection model keeps in memory to estimate Threshold",
+                "Training": "Number of historical weeks anomaly detection model needs for training ",
+                 "FractionSamplePerDay": "This corresponds to the minimum number of samples per day to be used in the daily percentile computation when updating the distribution tail crossing model. When there are less samples than that threshold, the model is not updated with these samples. "
+            },
+            "Onset signature trigger": {
+                "ConsecutiveIntervalOnset": "Number of consecutive intervals normalized metric must trigger the anomaly detection model before resulting in an action",
+                "RetryTimer": "Minimum interval between policy triggers"
+            },
+            "Abatement signature trigger": {
+                "ConsecutiveIntervalAbatement": "Number of consecutive intervals normalized metric does not trigger the anomaly detection model after onset signature was triggered"
+            },
+            "Onset & abatement UEB notification ": {
+                "OnsetMessage": "Value of field OnSetMessage sent by Analytics Engine published on UEB",
+                "AbatementMessage": "Value of field AbatementMessage sent by Analytics Engine published on UEB",
+                "PolicyName": "Value of field PolicyName sent by Analytics Engine published on UEB"
+            }
+        },
+        "policyDescription": "Policy to detect ? \n Notes:\n (1) Actions: Send email and/or UEB notification"
+    },
+    {
+        "serviceTypePolicyName": "Call storm(Trinity)",
+        "verticaMetrics": "",
+        "attributes": {
+            "Onset&abatement anomaly detection": {
+                "SeasonLength": "Metric seasonality (5min sampling period with 7 days seasonality: 7*288) used by Holt-Winters model",
+                "TrainLength": "Training length (5min sampling period with 7 days seasonality and 5 cycles training: 7*288*5) used by Holt-Winters",
+                "Alpha": "Smoothing parameter (range 0-1, default 0.2)",
+                "Beta": "Trend parameter (range 0-1, default 0) ",
+                "Gamma": "Seasonality (range 0-1, default 0.05)",
+                "Deviation Threshold": "Approximately a limit on the factor by how much current value has deviated compared to expected variance"
+            },
+            "Onset signature trigger": {
+                "RetryTimer": "Minimum interval between policy triggers"
+            },
+            "Abatement signature trigger": {
+                "Hw-Timeout": "Maximum time for an HealthCheck response (measured from the time a positive App-C response was received)",
+                "OnSetMessage": "Value of field Message sent by Analytics Engine published on UEB "
+            },
+            "Onset & abatement UEB notification ": {
+                "AbatementMessage": "Value of field AbatementMessage sent by Analytics Engine published on UEB",
+                "PolicyName": "Value of field PolicyName sent by Analytics Engine published on UEB"
+            }
+        },
+        "policyDescription": "Policy to detect instances where count of Formatted table ? exceeds a predicted level. \n Notes \n (1) Vertica metrics normalized and combined in ? per Customer, per Site and per VM. \n (2) Anomaly detection model operates on ? \n (3) Anomaly detection consists of detecting deviations from Holt-Winters predictions. \n (4) Actions: Send email and/or UEB notification"
+    },
+    {
+        "serviceTypePolicyName": "Registration storm(Trinity)",
+        "verticaMetrics": "",
+        "attributes": {
+            "Onset&abatement anomaly detection": {
+                "SeasonLength": "Metric seasonality (5min sampling period with 7 days seasonality: 7*288) used by Holt-Winters model",
+                "TrainLength": "Training length (5min sampling period with 7 days seasonality and 5 cycles training: 7*288*5) used by Holt-Winters",
+                "Alpha": "Smoothing parameter (range 0-1, default 0.2)",
+                "Beta": "Trend parameter (range 0-1, default 0) ",
+                "Gamma": "Seasonality (range 0-1, default 0.05)",
+                "Deviation Threshold": "Approximately a limit on the factor by how much current value has deviated compared to expected variance"
+            },
+            "Onset signature trigger": {
+                "RetryTimer": "Minimum interval between policy triggers"
+            },
+            "Abatement signature trigger": {
+                "Hw-Timeout": "Maximum time for an HealthCheck response (measured from the time a positive App-C response was received)",
+                "OnSetMessage": "Value of field Message sent by Analytics Engine published on UEB "
+            },
+            "Onset & abatement UEB notification ": {
+                "AbatementMessage": "Value of field AbatementMessage sent by Analytics Engine published on UEB",
+                "PolicyName": "Value of field PolicyName sent by Analytics Engine published on UEB"
+            }
+        },
+        "policyDescription": "Policy to detect instances where count of Formatted table ? exceeds a predicted level. \n Notes \n (1) Vertica metrics normalized and combined in ? per Customer, per Site and per VM. \n (2) Anomaly detection model operates on ? \n (3) Anomaly detection consists of detecting deviations from Holt-Winters predictions. \n (4) Actions: Send email and/or UEB notification"
+    }
+]
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/test/resources/com.Action_TestActionPolicy.1.json b/POLICY-SDK-APP/src/test/resources/com.Action_TestActionPolicy.1.json
new file mode 100644
index 0000000..7f228f9
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/com.Action_TestActionPolicy.1.json
@@ -0,0 +1 @@
+{"a":"b"}
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/test/resources/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.txt b/POLICY-SDK-APP/src/test/resources/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.txt
new file mode 100644
index 0000000..955afbd
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.1.txt
@@ -0,0 +1,1145 @@
+/* Autogenerated Code Please Don't change/remove this comment section. This is for the UI purpose. 
+	 <$%BRMSParamTemplate=ControlLoopDemo__closedLoopControlName%$> 
+ */ 
+
+
+/*-
+ * ============LICENSE_START=======================================================
+ * archetype-closed-loop-demo-rules
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.policy.controlloop;
+
+import java.util.List;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.UUID;
+
+import org.openecomp.policy.controlloop.VirtualControlLoopEvent;
+import org.openecomp.policy.controlloop.ControlLoopEventStatus;
+import org.openecomp.policy.controlloop.VirtualControlLoopNotification;
+import org.openecomp.policy.controlloop.ControlLoopNotificationType;
+import org.openecomp.policy.controlloop.ControlLoopOperation;
+import org.openecomp.policy.controlloop.ControlLoopOperationWrapper;
+import org.openecomp.policy.template.demo.ControlLoopException;
+
+import org.openecomp.policy.aai.AAINQF199.AAINQF199CloudRegion;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199ExtraProperties;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199ExtraProperty;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199GenericVNF;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199InstanceFilters;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199InventoryResponseItem;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199InventoryResponseItems;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199Manager;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199NamedQuery;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199QueryParameters;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199Request;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199RequestWrapper;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199Response;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199ResponseWrapper;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199ServiceInstance;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199Tenant;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199VfModule;
+import org.openecomp.policy.aai.AAINQF199.AAINQF199VServer;
+import org.openecomp.policy.aai.util.Serialization;
+
+import org.openecomp.policy.appc.CommonHeader;
+import org.openecomp.policy.appc.Request;
+import org.openecomp.policy.appc.Response;
+import org.openecomp.policy.appc.ResponseCode;
+import org.openecomp.policy.appc.ResponseStatus;
+import org.openecomp.policy.appc.ResponseValue;
+
+import org.openecomp.policy.template.demo.EventManager;
+import org.openecomp.policy.vnf.trafficgenerator.PGRequest;
+import org.openecomp.policy.vnf.trafficgenerator.PGStream;
+import org.openecomp.policy.vnf.trafficgenerator.PGStreams;
+
+import org.openecomp.policy.mso.MSOManager;
+import org.openecomp.policy.mso.MSORequest;
+import org.openecomp.policy.mso.MSORequestStatus;
+import org.openecomp.policy.mso.MSORequestDetails;
+import org.openecomp.policy.mso.MSOModelInfo;
+import org.openecomp.policy.mso.MSOCloudConfiguration;
+import org.openecomp.policy.mso.MSORequestInfo;
+import org.openecomp.policy.mso.MSORequestParameters;
+import org.openecomp.policy.mso.MSORelatedInstanceListElement;
+import org.openecomp.policy.mso.MSORelatedInstance;
+import org.openecomp.policy.mso.MSOResponse;
+
+import org.openecomp.policy.drools.system.PolicyEngine;
+
+//
+// These parameters are required to build the runtime policy
+//
+declare Params
+    closedLoopControlName : String
+    actor : String
+    aaiURL : String
+    aaiUsername : String
+    aaiPassword : String
+    msoURL : String
+    msoUsername : String
+    msoPassword : String
+    aaiNamedQueryUUID : String
+    aaiPatternMatch : int 
+    notificationTopic : String
+    appcTopic : String
+end
+
+/*
+*
+* 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)
+*
+*
+*rule "BRMSParamvFWDemoPolicy.SETUP"
+*	when
+*	then
+*		System.out.println("rule SETUP is triggered.");
+*		Params params = new Params();
+*		params.setClosedLoopControlName("CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8");
+*		params.setActor("APPC");
+*		params.setAaiURL("null");
+*		params.setAaiUsername("null");
+*		params.setAaiPassword("null");
+*		params.setMsoURL("null");
+*		params.setMsoUsername("null");
+*		params.setMsoPassword("null");
+*		params.setAaiNamedQueryUUID("null");
+*		params.setAaiPatternMatch(1);
+*		params.setNotificationTopic("POLICY-CL-MGT");
+*		params.setAppcTopic("APPC-CL");
+*		//
+*		// This stays in memory as long as the rule is alive and running
+*		//
+*		insert(params);
+*end
+*/
+/*
+*
+* This rule responds to DCAE Events
+*
+*/
+rule "BRMSParamvFWDemoPolicy.EVENT"
+	when
+        $params : Params( getClosedLoopControlName() == "CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8" )
+        $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )
+        not ( EventManager( closedLoopControlName == $event.closedLoopControlName ))
+	then
+		System.out.println("rule EVENT is triggered.");
+		try {
+			// 
+			// Check the requestID in the event to make sure it is not null before we create the EventManager. 
+			// The EventManager will do extra syntax checking as well check if the closed loop is disabled/
+			//
+			if ($event.requestID == null) {
+				VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
+				notification.notification = ControlLoopNotificationType.REJECTED;
+				notification.from = "policy";
+				notification.message = "Missing requestID from DCAE event";
+				notification.policyName = drools.getRule().getName();
+				notification.policyScope = "com";
+				notification.policyVersion = "1";
+				//
+				// Let interested parties know
+				//
+				try {
+					System.out.println(Serialization.gsonPretty.toJson(notification));
+					PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+				} catch (Exception e) {
+					e.printStackTrace();
+					System.out.println("Can't deliver notification: " + notification);
+				}
+				//
+				// Retract it from memory
+				//
+				retract($event);
+				System.out.println("Event with requestID=null has been retracted.");
+			} else {
+				//
+				// Create an EventManager
+				//
+				EventManager manager = new EventManager($params.getClosedLoopControlName(), $event.requestID, $event.target);
+				//
+				// Determine if EventManager can actively process the event (i.e. syntax)
+				//
+				VirtualControlLoopNotification notification = manager.activate($event);
+				notification.from = "policy"; 
+				notification.policyName = drools.getRule().getName();
+				notification.policyScope = "com";
+				notification.policyVersion = "1";
+				//
+				// Are we actively pursuing this event?
+				//
+				if (notification.notification == ControlLoopNotificationType.ACTIVE) {
+					//
+					// Insert Event Manager into memory, this will now kick off processing.
+					//
+					insert(manager);
+					//
+					// Let interested parties know
+					//
+					try {
+						System.out.println(Serialization.gsonPretty.toJson(notification));
+						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+					} catch (Exception e) {
+						e.printStackTrace();
+						System.out.println("Can't deliver notification: " + notification);
+					}		
+				} else {
+					//
+					// Let interested parties know
+					//
+					try {
+						System.out.println(Serialization.gsonPretty.toJson(notification));
+						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+					} catch (Exception e) {
+						e.printStackTrace();
+						System.out.println("Can't deliver notification: " + notification);
+					}
+					//
+					// Retract it from memory
+					//
+					retract($event);
+				}
+				//
+				// Now that the manager is inserted into Drools working memory, we'll wait for
+				// another rule to fire in order to continue processing. This way we can also
+				// then screen for additional ONSET and ABATED events for this same RequestIDs 
+				// and for different RequestIDs but with the same closedLoopControlName and target.
+				//
+			}
+		//
+		} catch (Exception e) {
+			e.printStackTrace();
+			VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
+			notification.notification = ControlLoopNotificationType.REJECTED;
+			notification.message = "Exception occurred " + e.getMessage();
+			notification.policyName = drools.getRule().getName();
+			notification.policyScope = "com";
+			notification.policyVersion = "1";
+			//
+			//
+			//
+			try {
+				System.out.println(Serialization.gsonPretty.toJson(notification));
+				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+			} catch (Exception e1) {
+				System.out.println("Can't deliver notification: " + notification);
+				e1.printStackTrace();
+			}
+			//
+			// Retract the event
+			//
+			retract($event);
+		}
+end
+
+/*
+*
+* This rule happens when we got a valid ONSET, closed loop is enabled and an Event Manager
+* is created. We can start the operations for this closed loop.
+*
+*/
+rule "BRMSParamvFWDemoPolicy.EVENT.MANAGER"
+	when
+		$params : Params( getClosedLoopControlName() == "CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8" )
+		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )
+		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName, controlLoopResult == null)
+	then
+		System.out.println("rule EVENT.MANAGER is triggered.");
+		//
+		// Check which event this is.
+		//
+		EventManager.NEW_EVENT_STATUS eventStatus = $manager.onNewEvent($event);
+		//
+		// We only want the initial ONSET event in memory,
+		// all the other events need to be retracted to support
+		// cleanup and avoid the other rules being fired for this event.
+		//
+		if (eventStatus != EventManager.NEW_EVENT_STATUS.FIRST_ONSET) {
+			System.out.println("Retracting "+eventStatus+" Event.");
+			retract($event);
+			return;
+		}
+		//
+		// Now the event in memory is first onset event
+		//
+		try {
+			//
+			// Pull the known AAI field from the Event
+			//
+			// generic-vnf is needed for vFirewall case
+			// vserver-name is needed for vLoadBalancer case
+			//
+			String genericVNF = $event.AAI.get("generic-vnf.vnf-id");
+			String vserver = $event.AAI.get("vserver.vserver-name");
+			//
+			// Check if we are implementing a simple pattern match.
+			//
+			if ($params.getAaiPatternMatch() == 1) {
+				//
+				// Yes
+				//
+				//Basic naming characteristics:
+				//VF Name (9 char)+VM name (13 char total)+VFC (19 char total)
+				//Example: 
+				//VF Name (9 characters):    cscf0001v
+				//VM Name(13 characters): cscf0001vm001
+				//VFC name(19 characters): cscf0001vm001cfg001
+				//
+				// zdfw1fwl01fwl02 or zdfw1fwl01fwl01  
+				// replaced with
+				// zdfw1fwl01pgn02 or zdfw1fwl01pgn01
+				//
+				int index = genericVNF.lastIndexOf("fwl");
+				if (index == -1) {
+					System.err.println("The generic-vnf.vnf-id from DCAE Event is not valid.");
+				} else {
+					genericVNF = genericVNF.substring(0, index) + "pgn" + genericVNF.substring(index+"fwl".length());
+				}
+				//
+				// Construct an APPC request
+				//
+				ControlLoopOperation operation = new ControlLoopOperation();
+				operation.actor = $params.getActor();
+				operation.operation = "ModifyConfig";
+				operation.target = $event.target;
+				//
+				// Create operationWrapper
+				//
+				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);
+				//
+				// insert operationWrapper into memory
+				//
+				insert(operationWrapper);
+				//
+				Request request = new Request();
+				request.CommonHeader = new CommonHeader();
+				request.CommonHeader.RequestID = $event.requestID;
+				request.Action = operation.operation;
+				request.Payload = new HashMap<String, Object>();
+				//
+				// Fill in the payload
+				//
+				request.Payload.put("generic-vnf.vnf-id", genericVNF);
+				//
+				PGRequest pgRequest = new PGRequest();
+				pgRequest.pgStreams = new PGStreams();
+				
+				PGStream pgStream;
+				for(int i = 0; i < 5; i++){
+					pgStream = new PGStream();
+					pgStream.streamId = "fw_udp"+(i+1);
+					pgStream.isEnabled = "true";
+					pgRequest.pgStreams.pgStream.add(pgStream);
+				}
+				request.Payload.put("pg-streams", pgRequest.pgStreams);
+				
+				if (request != null) {
+					//
+					// Insert request into memory
+					//
+					insert(request);
+					//
+					// Tell interested parties we are performing this Operation
+					//
+					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
+					notification.notification = ControlLoopNotificationType.OPERATION;
+					// message and history ??
+					notification.from = "policy";
+					notification.policyName = drools.getRule().getName();
+					notification.policyScope = "com";
+					notification.policyVersion = "1";
+					try {
+						System.out.println(Serialization.gsonPretty.toJson(notification));
+						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+					} catch (Exception e) {
+						System.out.println("Can't deliver notification: " + notification);
+						e.printStackTrace();
+					}
+					//
+					// Now send the operation request
+					//
+					if (request instanceof Request) {
+						try {
+							System.out.println("APPC request sent:");
+							System.out.println(Serialization.gsonPretty.toJson(request));
+							PolicyEngine.manager.deliver($params.getAppcTopic(), request);
+						} catch (Exception e) {
+							e.printStackTrace();
+							System.out.println("Can't deliver request: " + request);
+						}
+					}
+				} else {
+					//
+					// what happens if it is null
+					//
+				}
+				//
+			} else {
+				//
+				// create AAI named-query request with UUID started with "F199"
+				//
+				AAINQF199Request aainqf199request = new AAINQF199Request();
+				AAINQF199QueryParameters aainqf199queryparam = new AAINQF199QueryParameters();
+				AAINQF199NamedQuery aainqf199namedquery = new AAINQF199NamedQuery();
+				AAINQF199InstanceFilters aainqf199instancefilter = new AAINQF199InstanceFilters();
+				//
+				// queryParameters
+				//
+				aainqf199namedquery.namedQueryUUID = UUID.fromString($params.getAaiNamedQueryUUID()); 
+				aainqf199queryparam.namedQuery = aainqf199namedquery;
+				aainqf199request.queryParameters = aainqf199queryparam;
+				//
+				// instanceFilters
+				//
+				Map aainqf199instancefiltermap = new HashMap();
+				Map aainqf199instancefiltermapitem = new HashMap();
+				aainqf199instancefiltermapitem.put("vserver-name", vserver); 
+				aainqf199instancefiltermap.put("vserver", aainqf199instancefiltermapitem);
+				aainqf199instancefilter.instanceFilter.add(aainqf199instancefiltermap);
+				aainqf199request.instanceFilters = aainqf199instancefilter;
+				//
+				// print aainqf199request for debug
+				//
+				System.out.println("AAI Request sent:");
+				System.out.println(Serialization.gsonPretty.toJson(aainqf199request));
+				//
+				// Create AAINQF199RequestWrapper
+				//
+				AAINQF199RequestWrapper aainqf199RequestWrapper = new AAINQF199RequestWrapper($event.requestID, aainqf199request);
+				//
+				// insert aainqf199request into memory
+				//
+				insert(aainqf199RequestWrapper);
+			}
+			//
+		} catch (Exception e) {
+		 e.printStackTrace();
+		}
+end
+
+/*
+*
+* This rule happens when we got a valid ONSET, closed loop is enabled, an Event Manager
+* is created, AAI Manager and AAI Request are ready in memory. We can start sending query to AAI and then wait for response.
+*
+*/
+rule "BRMSParamvFWDemoPolicy.EVENT.MANAGER.AAINQF199REQUEST"
+	when
+		$params : Params( getClosedLoopControlName() == "CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8" )
+		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )
+		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )
+		$aainqf199RequestWrapper : AAINQF199RequestWrapper(requestID == $event.requestID)
+	then
+		System.out.println("rule EVENT.MANAGER.AAINQF199REQUEST is triggered.");
+		//
+		// send the request
+		//
+		AAINQF199Response aainqf199response = AAINQF199Manager.postQuery($params.getAaiURL(), $params.getAaiUsername(), $params.getAaiPassword(),
+													   $aainqf199RequestWrapper.aainqf199request, $event.requestID);
+		//
+		// Check AAI response
+		//
+		if (aainqf199response == null) {
+			System.err.println("Failed to get AAI response");
+			//
+			// Fail and retract everything
+			//
+			retract($event);
+			retract($manager);
+			retract($aainqf199RequestWrapper);
+		} else {
+			//
+			// Create AAINQF199ResponseWrapper
+			//
+			AAINQF199ResponseWrapper aainqf199ResponseWrapper = new AAINQF199ResponseWrapper($event.requestID, aainqf199response);
+			//
+			// insert aainqf199ResponseWrapper to memeory
+			//
+			insert(aainqf199ResponseWrapper);
+		}
+end
+
+/*
+*
+* This rule happens when we got a valid AAI response. We can start sending request to APPC or MSO now.
+*
+*/
+rule "BRMSParamvFWDemoPolicy.EVENT.MANAGER.AAINQF199RESPONSE"
+	when 
+		$params : Params( getClosedLoopControlName() == "CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8" )
+		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )
+		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )
+		$aainqf199RequestWrapper : AAINQF199RequestWrapper(requestID == $event.requestID)
+		$aainqf199ResponseWrapper : AAINQF199ResponseWrapper(requestID == $event.requestID)
+	then
+		System.out.println("rule EVENT.MANAGER.AAINQF199RESPONSE is triggered.");
+		//
+		// Extract related fields out of AAINQF199RESPONSE
+		//
+		String vnfItemVnfId, vnfItemVnfType, vnfItemPersonaModelId, vnfItemPersonaModelVersion, vnfItemModelName, 
+		       vnfItemModelVersion, vnfItemModelNameVersionId, serviceItemServiceInstanceId, serviceItemPersonaModelId,
+		       serviceItemModelName, serviceItemModelType, serviceItemModelVersion, serviceItemModelNameVersionId,
+		       vfModuleItemVfModuleName, vfModuleItemPersonaModelId, vfModuleItemPersonaModelVersion, vfModuleItemModelName, 
+		       vfModuleItemModelNameVersionId, tenantItemTenantId, cloudRegionItemCloudRegionId;
+		try {
+			//
+			// vnfItem
+			//
+			vnfItemVnfId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfID;
+			vnfItemVnfType = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.vnfType;
+			vnfItemVnfType = vnfItemVnfType.substring(vnfItemVnfType.lastIndexOf("/")+1);
+			vnfItemPersonaModelId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelId;
+			vnfItemPersonaModelVersion = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).genericVNF.personaModelVersion;
+			vnfItemModelName = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;
+			vnfItemModelVersion = 		$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(2).propertyValue;
+			vnfItemModelNameVersionId = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;
+			//
+			// serviceItem
+			//
+			serviceItemServiceInstanceId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.serviceInstanceID;
+			serviceItemPersonaModelId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelId;
+			serviceItemModelName = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(0).propertyValue;
+			serviceItemModelType = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(1).propertyValue;
+			serviceItemModelVersion = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).serviceInstance.personaModelVersion;
+			serviceItemModelNameVersionId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).extraProperties.extraProperty.get(4).propertyValue;
+			//
+			// Find the index for base vf module and non-base vf module
+			//
+			int baseIndex = -1;
+			int nonBaseIndex = -1;
+			List<AAINQF199InventoryResponseItem> inventoryItems = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems;
+			for (AAINQF199InventoryResponseItem m : inventoryItems) {
+				if (m.vfModule != null && m.vfModule.isBaseVfModule == true) {
+					baseIndex = inventoryItems.indexOf(m);
+				} else if (m.vfModule != null && m.vfModule.isBaseVfModule == false && m.vfModule.orchestrationStatus == null) {
+					nonBaseIndex = inventoryItems.indexOf(m);
+				}
+				//
+				if (baseIndex != -1 && nonBaseIndex != -1) {
+					break;
+				}
+			}
+			//
+			// Report the error if either base vf module or non-base vf module is not found
+			//
+			if (baseIndex == -1 || nonBaseIndex == -1) {
+				System.err.println("Either base or non-base vf module is not found from AAI response.");
+				retract($aainqf199RequestWrapper);
+				retract($aainqf199ResponseWrapper);
+				retract($manager);
+				retract($event);
+				return;
+			}
+			//
+			// This comes from the base module
+			//
+			vfModuleItemVfModuleName = 			$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(baseIndex).vfModule.vfModuleName;
+			vfModuleItemVfModuleName = vfModuleItemVfModuleName.replace("Vfmodule", "vDNS");
+			//
+			// vfModuleItem - NOT the base module
+			//
+			vfModuleItemPersonaModelId = 		$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).vfModule.personaModelId;
+			vfModuleItemPersonaModelVersion = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).vfModule.personaModelVersion;
+			vfModuleItemModelName = 			$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).extraProperties.extraProperty.get(0).propertyValue;
+			vfModuleItemModelNameVersionId = 	$aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(0).items.inventoryResponseItems.get(nonBaseIndex).extraProperties.extraProperty.get(4).propertyValue;
+			//
+			// tenantItem
+			//
+			tenantItemTenantId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).tenant.tenantId;
+			//
+			// cloudRegionItem
+			//
+			cloudRegionItemCloudRegionId = $aainqf199ResponseWrapper.aainqf199response.inventoryResponseItems.get(0).items.inventoryResponseItems.get(1).items.inventoryResponseItems.get(0).cloudRegion.cloudRegionId;
+			//
+		} catch (Exception e) {
+			e.printStackTrace();
+			VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
+			notification.notification = ControlLoopNotificationType.REJECTED;
+			notification.message = "Exception occurred " + e.getMessage();
+			notification.policyName = drools.getRule().getName();
+			notification.policyScope = "com";
+			notification.policyVersion = "1";
+			//
+			try {
+				System.out.println(Serialization.gsonPretty.toJson(notification));
+				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+			} catch (Exception e1) {
+				System.out.println("Can't deliver notification: " + notification);
+				e1.printStackTrace();
+			}
+			//
+			notification.notification = ControlLoopNotificationType.FINAL_FAILURE;
+			notification.message = "Invalid named-query response from AAI";
+            //
+            try {
+            	System.out.println(Serialization.gsonPretty.toJson(notification));
+                PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+            } catch (Exception e1) {
+                System.out.println("Can't deliver notification: " + notification);
+                e1.printStackTrace();
+            }
+			//
+			// Retract everything
+			//
+			retract($aainqf199RequestWrapper);
+			retract($aainqf199ResponseWrapper);
+			retract($manager);
+			retract($event);
+			return;
+		}	
+		//
+		// Extracted fields should not be null
+		//
+		if ((vnfItemVnfId == null) || (vnfItemVnfType == null) ||
+		    (vnfItemPersonaModelId == null) || (vnfItemModelName == null) ||
+		    (vnfItemModelVersion == null) || (vnfItemModelNameVersionId == null) ||
+		    (serviceItemServiceInstanceId == null) || (serviceItemModelName == null) ||
+		    (serviceItemModelType == null) || (serviceItemModelVersion == null) ||
+		    (serviceItemModelNameVersionId == null) || (vfModuleItemVfModuleName == null) ||
+		    (vfModuleItemPersonaModelId == null) || (vfModuleItemPersonaModelVersion == null) ||
+		    (vfModuleItemModelName == null) || (vfModuleItemModelNameVersionId == null) ||
+		    (tenantItemTenantId == null) || (cloudRegionItemCloudRegionId == null)) {
+			//
+			System.err.println("some fields are missing from AAI response.");
+			//
+			// Fail and retract everything
+			//
+			retract($aainqf199RequestWrapper);
+			retract($aainqf199ResponseWrapper);
+			retract($manager);
+			retract($event);
+			return;
+		}
+		//
+		// We don't need them any more
+		//
+		retract($aainqf199ResponseWrapper);
+		retract($aainqf199RequestWrapper);  
+		//
+		// check the actor of this closed loop
+		//
+		switch ($params.getActor()) {
+			case "APPC":
+			{
+				//
+				// Construct an APPC request
+				//
+				ControlLoopOperation operation = new ControlLoopOperation();
+				operation.actor = $params.getActor();
+				operation.operation = "ModifyConfig";
+				operation.target = $event.target;
+				//
+				// Create operationWrapper
+				//
+				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);
+				//
+				// insert operationWrapper into memory
+				//
+				insert(operationWrapper);
+				//
+				Request request = new Request();
+				request.CommonHeader = new CommonHeader();
+				request.CommonHeader.RequestID = $event.requestID;
+				request.Action = operation.operation;
+				request.Payload = new HashMap<String, Object>();
+				//
+				// Fill in the payload
+				// Hardcode genericVNF for now since AAI has not been ready for vFirewall demo case
+				//
+				String genericVNF = "zdfw1fwl01pgn02";
+				request.Payload.put("generic-vnf.vnf-id", genericVNF);
+				//
+				PGRequest pgRequest = new PGRequest();
+				pgRequest.pgStreams = new PGStreams();
+				
+				PGStream pgStream;
+				for(int i = 0; i < 5; i++){
+					pgStream = new PGStream();
+					pgStream.streamId = "fw_udp"+(i+1);
+					pgStream.isEnabled = "true";
+					pgRequest.pgStreams.pgStream.add(pgStream);
+				}
+				request.Payload.put("pg-streams", pgRequest.pgStreams);
+				
+				if (request != null) {
+					//
+					// Insert request into memory
+					//
+					insert(request);
+					//
+					// Tell interested parties we are performing this Operation
+					//
+					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
+					notification.notification = ControlLoopNotificationType.OPERATION;
+					// message and history ??
+					notification.from = "policy";
+					notification.policyName = drools.getRule().getName();
+					notification.policyScope = "com";
+					notification.policyVersion = "1";
+					try {
+						System.out.println(Serialization.gsonPretty.toJson(notification));
+						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+					} catch (Exception e) {
+						System.out.println("Can't deliver notification: " + notification);
+						e.printStackTrace();
+					}
+					//
+					// Now send the operation request
+					//
+					if (request instanceof Request) {
+						try {
+							System.out.println("APPC request sent:");
+							System.out.println(Serialization.gsonPretty.toJson(request));
+							PolicyEngine.manager.deliver($params.getAppcTopic(), request);
+						} catch (Exception e) {
+							e.printStackTrace();
+							System.out.println("Can't deliver request: " + request);
+						}
+					}
+				} else {
+					//
+					// what happens if it is null
+					//
+				}
+			}
+			break;
+			case "MSO":
+			{
+				//
+				// Construct an operation
+				//
+				ControlLoopOperation operation = new ControlLoopOperation();
+				operation.actor = $params.getActor();
+				operation.operation = "createModuleInstance";
+				operation.target = $event.target;
+				//
+				// Create operationWrapper
+				//
+				ControlLoopOperationWrapper operationWrapper = new ControlLoopOperationWrapper($event.requestID, operation);
+				//
+				// Construct an MSO request
+				//
+				MSORequest request = new MSORequest();
+				request.requestDetails = new MSORequestDetails();
+				request.requestDetails.modelInfo = new MSOModelInfo();
+				request.requestDetails.cloudConfiguration = new MSOCloudConfiguration();
+				request.requestDetails.requestInfo = new MSORequestInfo();
+				request.requestDetails.requestParameters = new MSORequestParameters();
+				request.requestDetails.requestParameters.userParams = null;
+				//
+				// cloudConfiguration
+				//
+				request.requestDetails.cloudConfiguration.lcpCloudRegionId = cloudRegionItemCloudRegionId;
+				request.requestDetails.cloudConfiguration.tenantId = tenantItemTenantId;
+				//
+				// modelInfo
+				//
+				request.requestDetails.modelInfo.modelType = "vfModule";
+				request.requestDetails.modelInfo.modelInvariantId = vfModuleItemPersonaModelId;
+				request.requestDetails.modelInfo.modelNameVersionId = vfModuleItemModelNameVersionId;
+				request.requestDetails.modelInfo.modelName = vfModuleItemModelName;
+				request.requestDetails.modelInfo.modelVersion = vfModuleItemPersonaModelVersion;
+				//
+				// requestInfo
+				//
+				request.requestDetails.requestInfo.instanceName = vfModuleItemVfModuleName;
+				request.requestDetails.requestInfo.source = "POLICY";
+				request.requestDetails.requestInfo.suppressRollback = false;
+				//
+				// relatedInstanceList
+				//
+				MSORelatedInstanceListElement relatedInstanceListElement1 = new MSORelatedInstanceListElement();
+				MSORelatedInstanceListElement relatedInstanceListElement2 = new MSORelatedInstanceListElement();
+				relatedInstanceListElement1.relatedInstance = new MSORelatedInstance();
+				relatedInstanceListElement2.relatedInstance = new MSORelatedInstance();
+				//
+				relatedInstanceListElement1.relatedInstance.instanceId = serviceItemServiceInstanceId;
+				relatedInstanceListElement1.relatedInstance.modelInfo = new MSOModelInfo();
+				relatedInstanceListElement1.relatedInstance.modelInfo.modelType = "service";
+				relatedInstanceListElement1.relatedInstance.modelInfo.modelInvariantId = serviceItemPersonaModelId;
+				relatedInstanceListElement1.relatedInstance.modelInfo.modelNameVersionId = serviceItemModelNameVersionId;
+				relatedInstanceListElement1.relatedInstance.modelInfo.modelName = serviceItemModelName;
+				relatedInstanceListElement1.relatedInstance.modelInfo.modelVersion = serviceItemModelVersion;
+				//
+				relatedInstanceListElement2.relatedInstance.instanceId = vnfItemVnfId;
+				relatedInstanceListElement2.relatedInstance.modelInfo = new MSOModelInfo();
+				relatedInstanceListElement2.relatedInstance.modelInfo.modelType = "vnf";
+				relatedInstanceListElement2.relatedInstance.modelInfo.modelInvariantId = vnfItemPersonaModelId;
+				relatedInstanceListElement2.relatedInstance.modelInfo.modelNameVersionId = vnfItemModelNameVersionId;
+				relatedInstanceListElement2.relatedInstance.modelInfo.modelName = vnfItemModelName;
+				relatedInstanceListElement2.relatedInstance.modelInfo.modelVersion = vnfItemModelVersion;
+				relatedInstanceListElement2.relatedInstance.modelInfo.modelCustomizationName = vnfItemVnfType;
+				//	
+				request.requestDetails.relatedInstanceList.add(relatedInstanceListElement1);
+				request.requestDetails.relatedInstanceList.add(relatedInstanceListElement2);
+				//
+				// print MSO request for debug
+				//
+				System.out.println("MSO request sent:");
+				System.out.println(Serialization.gsonPretty.toJson(request));
+				//
+				//
+				//
+				if (request != null) {
+					//
+					// Tell interested parties we are performing this Operation
+					//
+					VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
+					notification.notification = ControlLoopNotificationType.OPERATION;
+					notification.from = "policy";
+					notification.policyName = drools.getRule().getName();
+					notification.policyScope = "com";
+					notification.policyVersion = "1";
+					try {
+						System.out.println(Serialization.gsonPretty.toJson(notification));
+						PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+					} catch (Exception e) {
+						System.out.println("Can't deliver notification: " + notification);
+						e.printStackTrace();
+					}
+					//
+					// Concatenate serviceItemServiceInstanceId and vnfItemVnfId to msoURL
+					//
+					String MSOUrl = $params.getMsoURL() + "/serviceInstances/v2/" + serviceItemServiceInstanceId + "/vnfs/" + vnfItemVnfId + "/vfModules";
+					//
+					// Call MSO
+					//
+					MSOResponse response = MSOManager.createModuleInstance(MSOUrl, $params.getMsoURL(), $params.getMsoUsername(), $params.getMsoPassword(), request);
+					//
+					if (response != null) {
+						//
+						// Assign requestId
+						//
+						request.requestId = $event.requestID.toString();						
+						response.request.requestId = $event.requestID.toString();
+						//
+						// Insert facts
+						//
+						insert(operationWrapper);
+						insert(request);
+						insert(response);
+					} else {
+						//
+						// MSO request not even accepted
+						//
+						notification.message = operationWrapper.operation.toMessage();
+						operationWrapper.operation.message = operationWrapper.operation.toMessage();
+						operationWrapper.operation.outcome = "FAILURE_EXCEPTION";
+						$manager.setControlLoopResult("FAILURE_EXCEPTION");
+						notification.history.add(operationWrapper.operation);
+						notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;
+						//
+						// Let interested parties know
+						//
+						try {
+							System.out.println(Serialization.gsonPretty.toJson(notification));
+							PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+						} catch (Exception e) {
+							System.out.println("Can't deliver notification: " + notification);
+							e.printStackTrace();
+						}
+	                    notification.notification = ControlLoopNotificationType.FINAL_FAILURE;
+                        try {
+                        	System.out.println(Serialization.gsonPretty.toJson(notification));
+                        	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+                        } catch (Exception e) {
+                        	System.out.println("Can't deliver notification: " + notification);
+                        	e.printStackTrace();
+                        }
+						//
+						// Retract everything
+						//
+						retract($event);
+						retract($manager);
+					}
+				} else {
+					System.err.println("constructed MSO request is invalid.");
+				}
+			}
+			break; 
+		} 
+end
+		
+/*
+*
+* This rule responds to APPC Response Events
+*
+*/
+rule "BRMSParamvFWDemoPolicy.APPC.RESPONSE"
+	when
+		$params : Params( getClosedLoopControlName() == "CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8" )
+		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )
+		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )
+		$operationWrapper : ControlLoopOperationWrapper( requestID == $event.requestID )
+		$request : Request( getCommonHeader().RequestID == $event.requestID )
+		$response : Response( getCommonHeader().RequestID == $event.requestID )	
+	then
+		System.out.println("rule APPC.RESPONSE is triggered.");
+		if ($response.Status == null) {
+			$operationWrapper.operation.outcome = "FAILURE_EXCEPTION";
+			$manager.setControlLoopResult("FAILURE_EXCEPTION");
+		} 
+		//
+		// Get the Response Code
+		//
+		ResponseCode code = ResponseCode.toResponseCode($response.Status.Code);
+		if (code == null) {
+			$operationWrapper.operation.outcome = "FAILURE_EXCEPTION";
+			$manager.setControlLoopResult("FAILURE_EXCEPTION");
+		}
+		//
+		// Construct notification
+		//
+		VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
+		notification.from = "policy";
+		notification.policyName = drools.getRule().getName();
+		notification.policyScope = "com";
+		notification.policyVersion = "1";
+		notification.message = $operationWrapper.operation.toMessage();
+		$operationWrapper.operation.message = $operationWrapper.operation.toMessage();
+		//
+		// Ok, let's figure out what APP-C's response is
+		//
+		switch (code) {
+			case ACCEPT:
+				$operationWrapper.operation.outcome = "PROCESSING";
+				break;
+			case ERROR:
+			case REJECT:
+				$operationWrapper.operation.outcome = "FAILURE_EXCEPTION";
+				$manager.setControlLoopResult("FAILURE_EXCEPTION");
+				break;
+			case SUCCESS:
+				$operationWrapper.operation.outcome = "SUCCESS";
+				$manager.setControlLoopResult("SUCCESS");
+				break;
+			case FAILURE:
+				$operationWrapper.operation.outcome = "FAILURE";
+				$manager.setControlLoopResult("FAILURE");
+				break;
+		}
+		if ($operationWrapper.operation.outcome.equals("SUCCESS")) {
+			notification.history.add($operationWrapper.operation);
+			notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;
+			//
+			// Let interested parties know
+			//
+			try {
+				System.out.println(Serialization.gsonPretty.toJson(notification));
+				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+			} catch (Exception e) {
+				System.out.println("Can't deliver notification: " + notification);
+				e.printStackTrace();
+			}
+            notification.notification = ControlLoopNotificationType.FINAL_SUCCESS;
+            try {
+            	System.out.println(Serialization.gsonPretty.toJson(notification));
+            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+            } catch (Exception e) {
+            	System.out.println("Can't deliver notification: " + notification);
+            	e.printStackTrace();
+            }
+
+			//
+			// We are going to retract these objects from memory
+			//
+			System.out.println("Retracting everything");
+			retract($operationWrapper);
+			retract($request);
+			retract($response);
+			retract($event);
+			retract($manager);
+		} else if ($operationWrapper.operation.outcome.equals("PROCESSING")) {
+			retract($response);
+		} else {
+			notification.history.add($operationWrapper.operation);
+			notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;
+			//
+			// Let interested parties know
+			//
+			try {
+				System.out.println(Serialization.gsonPretty.toJson(notification));
+				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+			} catch (Exception e) {
+				System.out.println("Can't deliver notification: " + notification);
+				e.printStackTrace();
+			}
+            notification.notification = ControlLoopNotificationType.FINAL_FAILURE;
+            //
+            // Let interested parties know
+            //
+            try {
+            	System.out.println(Serialization.gsonPretty.toJson(notification));
+            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+            } catch (Exception e) {
+            	System.out.println("Can't deliver notification: " + notification);
+            	e.printStackTrace();
+            }
+			//
+			// We are going to retract these objects from memory
+			//
+			System.out.println("Retracting everything");
+			retract($operationWrapper);
+			retract($request);
+			retract($response);
+			retract($event);
+			retract($manager);
+		}
+		
+end		
+
+/*
+*
+* This rule is used to clean up APPC response
+*
+*/		
+rule "BRMSParamvFWDemoPolicy.APPC.RESPONSE.CLEANUP"
+	when
+		$params : Params( getClosedLoopControlName() == "CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8" )
+        $response : Response($id : getCommonHeader().RequestID )
+		not ( VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), requestID == $id, closedLoopEventStatus == ControlLoopEventStatus.ONSET ) ) 
+	then
+		System.out.println("rule APPC.RESPONSE.CLEANUP is triggered.");
+		retract($response);
+end
+
+/*
+*
+* This rule responds to MSO Response Events
+*
+*/
+rule "BRMSParamvFWDemoPolicy.MSO.RESPONSE"
+	when
+		$params : Params( getClosedLoopControlName() == "CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8" )
+		$event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )
+		$manager : EventManager( closedLoopControlName == $event.closedLoopControlName )
+		$operationWrapper : ControlLoopOperationWrapper( requestID == $event.requestID )
+		$request : MSORequest( requestId == $event.requestID.toString() )
+		$response : MSOResponse( request.requestId == $event.requestID.toString() )	
+	then
+		System.out.println("rule MSO.RESPONSE is triggered.");
+		//
+		// Construct notification
+		//
+		VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
+		notification.from = "policy";
+		notification.policyName = drools.getRule().getName();
+		notification.policyScope = "com";
+		notification.policyVersion = "1";
+		notification.message = $operationWrapper.operation.toMessage();
+		$operationWrapper.operation.message = $operationWrapper.operation.toMessage();
+		//
+		// The operation can either be succeeded or failed
+		// 
+		if($response.request.requestStatus.requestState.equals("COMPLETE")) {
+			$operationWrapper.operation.outcome = "SUCCESS";
+			$manager.setControlLoopResult("SUCCESS");
+			notification.history.add($operationWrapper.operation);
+			notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;
+			//
+			// Let interested parties know
+			//
+			try {
+				System.out.println(Serialization.gsonPretty.toJson(notification));
+				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+			} catch (Exception e) {
+				System.out.println("Can't deliver notification: " + notification);
+				e.printStackTrace();
+			}
+			notification.notification = ControlLoopNotificationType.FINAL_SUCCESS;
+            //
+            // Let interested parties know
+            //
+            try {
+            	System.out.println(Serialization.gsonPretty.toJson(notification));
+            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+            } catch (Exception e) {
+            	System.out.println("Can't deliver notification: " + notification);
+            	e.printStackTrace();
+            }
+            //
+			// We are going to retract these objects from memory
+			//
+			System.out.println("Retracting everything");
+			retract($operationWrapper);
+			retract($request);
+			retract($response);
+			retract($event);
+			retract($manager);
+		} else {
+			$operationWrapper.operation.outcome = "FAILURE";
+			$manager.setControlLoopResult("FAILURE");
+			notification.history.add($operationWrapper.operation);
+			notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;
+			//
+			// Let interested parties know
+			//
+			try {
+				System.out.println(Serialization.gsonPretty.toJson(notification));
+				PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+			} catch (Exception e) {
+				System.out.println("Can't deliver notification: " + notification);
+				e.printStackTrace();
+			}
+			notification.notification = ControlLoopNotificationType.FINAL_FAILURE;
+            //
+            // Let interested parties know
+            //
+            try {
+            	System.out.println(Serialization.gsonPretty.toJson(notification));
+            	PolicyEngine.manager.deliver($params.getNotificationTopic(), notification);
+            } catch (Exception e) {
+            	System.out.println("Can't deliver notification: " + notification);
+            	e.printStackTrace();
+            }
+            //
+			// We are going to retract these objects from memory
+			//
+			System.out.println("Retracting everything");
+			retract($operationWrapper);
+			retract($request);
+			retract($response);
+			retract($event);
+			retract($manager);
+		}
+		
+end	
+rule "com.Config_BRMS_Param_BRMSParamvFWDemoPolicy.Params" 
+	salience 1000 
+	when
+	then
+		Params params = new Params();
+		params.setAaiPatternMatch(1);
+		params.setAppcTopic("APPC-CL");
+		params.setAaiURL("null");
+		params.setMsoPassword("null");
+		params.setClosedLoopControlName("CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8");
+		params.setMsoURL("null");
+		params.setAaiUsername("null");
+		params.setActor("APPC");
+		params.setMsoUsername("null");
+		params.setAaiNamedQueryUUID("null");
+		params.setAaiPassword("null");
+		params.setNotificationTopic("POLICY-CL-MGT");
+		insert(params);
+end
diff --git a/POLICY-SDK-APP/src/test/resources/com.Config_BRMS_Raw_TestBRMSRawPolicy.1.txt b/POLICY-SDK-APP/src/test/resources/com.Config_BRMS_Raw_TestBRMSRawPolicy.1.txt
new file mode 100644
index 0000000..6924fc3
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/com.Config_BRMS_Raw_TestBRMSRawPolicy.1.txt
@@ -0,0 +1,35 @@
+package com.sample
+import com.sample.DroolsTest.Message;
+// Declare the Parameters here.
+declare Params
+    samPoll : int
+    value : String
+end
+// This Rule will be generated by the UI.
+rule "Create parameters structure"
+    salience 1000  
+    when
+    then
+        Params params = new Params();
+        params.setSamPoll(76);
+        params.setValue("Bobby");
+        insertLogical(params);
+end
+// Start using the parameters as below in Rules.
+rule "Rule 1: Check parameter structure access from when/then"
+    when
+        $param: Params()
+        Params($param.samPoll > 50)
+    then
+        System.out.println("Firing rule 1");
+        System.out.println($param);
+end
+rule "Rule 2: Check parameter value access from when/then"
+    when
+        $param: Params()
+        Params($param.samPoll > 50)
+    then
+        System.out.println("Firing rule 2");
+        System.out.println($param.getValue());
+        System.out.println($param.getSamPoll());
+end
diff --git a/POLICY-SDK-APP/src/test/resources/com.Config_FW_TestFireWallPolicy.1.json b/POLICY-SDK-APP/src/test/resources/com.Config_FW_TestFireWallPolicy.1.json
new file mode 100644
index 0000000..eae1ed5
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/com.Config_FW_TestFireWallPolicy.1.json
@@ -0,0 +1 @@
+{"serviceTypeId":"/v0/firewall/pan","configName":"TestFireWallPolicy","deploymentOption":{"deployNow":false},"securityZoneId":"1.5.3","vendorServiceId":"vipr","vendorSpecificData":{"idMap":[{"astraId":"1.5.3","vendorId":"deviceGroup:dev"}]},"serviceGroups":[],"addressGroups":[],"firewallRuleList":[{"position":"1","ruleName":"test","fromZones":[],"toZones":[],"negateSource":false,"negateDestination":false,"sourceList":[],"destinationList":[],"sourceServices":[],"destServices":[],"action":null,"description":null,"enabled":true,"log":true}],"ruleToTag":[{"ruleName":"test","tags":[{"key":"test","value":"test"}],"tagPickerName":"test","networkRole":"test"}]}
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/test/resources/com.Config_Fault_TestClosedLoopPolicy.1.json b/POLICY-SDK-APP/src/test/resources/com.Config_Fault_TestClosedLoopPolicy.1.json
new file mode 100644
index 0000000..f7e25ca
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/com.Config_Fault_TestClosedLoopPolicy.1.json
@@ -0,0 +1 @@
+{"trinity":false,"vUSP":true,"mcr":false,"gama":false,"vDNS":false,"vnfType":"SampleVNF","vServices":null,"closedLoopPolicyStatus":"Active","triggerSignatures":{"signatures":"((NOT(NOT(1.0.2.3)AND(1.0.2.3)), Time = 11)AND((NOT(1.0.2.3)AND(1.0.2.3)), Time = 12))","timeWindow":11,"trapMaxAge":12},"actions":"SampleVSCL","timeInterval":11,"timeOutvPRO":11,"timeOutRuby":11,"retrys":1,"agingWindow":1,"geoLink":"TEST","emailAddress":"aa@test.con","verificationSignatures":{"signatures":"(NOT(1.0.2.3)AND(1.0.2.3))","timeWindow":12},"conditions":"SEND","triggerSignaturesUsedForUI":{"signatures":"NOT@!SampleVarbind@!AND@!SampleVarbind#!?!NOT@!SampleVarbind@!OR@!SampleVarbind#!NOT@!A1@!AND@!SampleVarbind#!NOT@!A1@!AND@!A2#!?!","connectSignatures":"NOT@!Trap1@!11@!AND@!Trap1@!12#!?!"},"verificationSignaturesUsedForUI":{"signatures":"NOT@!SampleVarbind@!AND@!SampleVarbind#!?!","connectSignatures":null},"triggerTimeWindowUsedForUI":11,"verfificationTimeWindowUsedForUI":12,"pepName":null,"pepAction":null,"templateVersion":null,"trapMaxAgeUsedForUI":12,"ecompname":null}
diff --git a/POLICY-SDK-APP/src/test/resources/com.Config_MS_vFirewall.1.json b/POLICY-SDK-APP/src/test/resources/com.Config_MS_vFirewall.1.json
new file mode 100644
index 0000000..6b128f1
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/com.Config_MS_vFirewall.1.json
@@ -0,0 +1 @@
+{"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"}}
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/test/resources/com.Config_PM_TestClosedLoopPMPolicy.1.json b/POLICY-SDK-APP/src/test/resources/com.Config_PM_TestClosedLoopPMPolicy.1.json
new file mode 100644
index 0000000..e0057ed
--- /dev/null
+++ b/POLICY-SDK-APP/src/test/resources/com.Config_PM_TestClosedLoopPMPolicy.1.json
@@ -0,0 +1 @@
+{"serviceTypePolicyName": "Registration Failure(Trinity)","vUSP":true,"attributes":{"PtileLimit":"11","Threshold":"12","Window":"13","Training":"14","FractionSamplePerDay":"15","ConsecutiveIntervalOnset":"11","RetryTimer":"12","ConsecutiveIntervalAbatement":"11","OnsetMessage":"11","AbatementMessage":"12","PolicyName":"13"},"geoLink":"TEST","emailAddress":"test@test.com"}