Included Policy GUI Enhancements and validations

Added hover messages for all policy templates.
Resolved few sonar issues.
Added fixes for Policy GUI Validations.

Issue-ID: POLICY-597
Change-Id: I74abb92dd6ac8722d7869b6a316fad1d8db11d9c
Signed-off-by: rb7147 <rb7147@att.com>
diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/util/AbstractPolicyCreation.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/util/AbstractPolicyCreation.java
index aa33729..0c98a44 100644
--- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/util/AbstractPolicyCreation.java
+++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/util/AbstractPolicyCreation.java
@@ -44,6 +44,8 @@
 		String formateDate = null;
 		if(dateTTL.contains("/")){
 			formateDate = dateTTL.replace("/", "-");
+		}else {
+			formateDate = dateTTL;
 		}
 		return formateDate;
 	}
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/adapter/ClosedLoopFaultTrapDatas.java b/ONAP-REST/src/main/java/org/onap/policy/rest/adapter/ClosedLoopFaultTrapDatas.java
new file mode 100644
index 0000000..efbbf27
--- /dev/null
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/adapter/ClosedLoopFaultTrapDatas.java
@@ -0,0 +1,69 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Engine
+ * ================================================================================
+ * 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.onap.policy.rest.adapter;
+
+import java.util.List;
+
+public class ClosedLoopFaultTrapDatas {
+
+	private List<Object> trap1;
+	private List<Object> trap2;
+	private List<Object> trap3;
+	private List<Object> trap4;
+	private List<Object> trap5;
+	private List<Object> trap6;
+	public List<Object> getTrap1() {
+		return trap1;
+	}
+	public void setTrap1(List<Object> trap1) {
+		this.trap1 = trap1;
+	}
+	public List<Object> getTrap2() {
+		return trap2;
+	}
+	public void setTrap2(List<Object> trap2) {
+		this.trap2 = trap2;
+	}
+	public List<Object> getTrap3() {
+		return trap3;
+	}
+	public void setTrap3(List<Object> trap3) {
+		this.trap3 = trap3;
+	}
+	public List<Object> getTrap4() {
+		return trap4;
+	}
+	public void setTrap4(List<Object> trap4) {
+		this.trap4 = trap4;
+	}
+	public List<Object> getTrap5() {
+		return trap5;
+	}
+	public void setTrap5(List<Object> trap5) {
+		this.trap5 = trap5;
+	}
+	public List<Object> getTrap6() {
+		return trap6;
+	}
+	public void setTrap6(List<Object> trap6) {
+		this.trap6 = trap6;
+	}
+
+}
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/adapter/PolicyRestAdapter.java b/ONAP-REST/src/main/java/org/onap/policy/rest/adapter/PolicyRestAdapter.java
index b4056a3..dfc6dff 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/adapter/PolicyRestAdapter.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/adapter/PolicyRestAdapter.java
@@ -98,6 +98,8 @@
 	private String trapMaxAge;
 	private String verificationclearTimeOut;
 	private Map<String , String> dynamicLayoutMap;
+	private ClosedLoopFaultTrapDatas trapDatas;
+	private ClosedLoopFaultTrapDatas faultDatas;
 	
     //FireWall
     private String fwPolicyType;
@@ -893,4 +895,17 @@
 	public void setPolicyJSON(Object policyJSON) {
 		this.policyJSON = policyJSON;
 	}
+	
+	public ClosedLoopFaultTrapDatas getTrapDatas() {
+		return trapDatas;
+	}
+	public void setTrapDatas(ClosedLoopFaultTrapDatas trapDatas) {
+		this.trapDatas = trapDatas;
+	}
+	public ClosedLoopFaultTrapDatas getFaultDatas() {
+		return faultDatas;
+	}
+	public void setFaultDatas(ClosedLoopFaultTrapDatas faultDatas) {
+		this.faultDatas = faultDatas;
+	}
 }
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/TermList.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/TermList.java
index 099257c..9c18343 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/TermList.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/TermList.java
@@ -109,6 +109,20 @@
 	@JoinColumn(name="modified_by")
 	private UserInfo userModifiedBy;
 	
+	public Date getCreatedDate() {
+		return this.createdDate;
+	}
+	public void setCreatedDate(Date createdDate) {
+		this.createdDate = createdDate;
+	}
+	
+	public Date getModifiedDate() {
+		return this.modifiedDate;
+	}
+	public void setModifiedDate(Date modifiedDate) {
+		this.modifiedDate = modifiedDate;
+	}
+	
 	public UserInfo getUserCreatedBy() {
 		return userCreatedBy;
 	}
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/util/MSModelUtils.java b/ONAP-REST/src/main/java/org/onap/policy/rest/util/MSModelUtils.java
index 3880b35..e96396e 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/util/MSModelUtils.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/util/MSModelUtils.java
@@ -315,7 +315,11 @@
 						if (annotation &&  obj instanceof EReference) {
 							EClass refType = ((EReference) obj).getEReferenceType();
 							if(!refType.toString().contains(eProxyURI)){
-								subAttribute.put(eStrucClassifier.getName(), refType.getName());						
+								String required = ":required-false";
+								if(eStrucClassifier.getLowerBound() == 1){
+									required = ":required-true";
+								}
+								subAttribute.put(eStrucClassifier.getName(), refType.getName() + required);						
 							}
 						}	
 					}
@@ -390,18 +394,28 @@
 								refAttribute.put(eStrucClassifier.getName(), refValue);							
 							} else {
 								String array = arrayCheck(((EStructuralFeature) obj).getUpperBound());
-								refAttribute.put(eStrucClassifier.getName(), refType.getName() + array);
+								String required = ":required-false";
+								if(((EStructuralFeature) obj).getLowerBound() == 1){
+									required = ":required-true";
+								}
+								refAttribute.put(eStrucClassifier.getName(), refType.getName() + array + required);
 							}
 						} else if (annotation &&  obj instanceof EAttributeImpl){
 							EClassifier refType = ((EAttributeImpl) obj).getEType();
 							if (refType instanceof EEnumImpl){
 								String array = arrayCheck(((EStructuralFeature) obj).getUpperBound());
-								refAttribute.put(eStrucClassifier.getName(), refType.getName() + array);							}
+								String required = ":required-false";
+								if(((EStructuralFeature) obj).getLowerBound() == 1){
+									required = ":required-true";
+								}
+								refAttribute.put(eStrucClassifier.getName(), refType.getName() + array + required);							
+							}
 						}	
 					}
 				}
 			}
 		}
+		
 		return refAttribute;
 	}
 
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java b/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java
index df4fbf6..77dcbdc 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java
@@ -20,6 +20,8 @@
 package org.onap.policy.rest.util;
 
 import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -27,6 +29,12 @@
 import java.util.Map;
 import java.util.Map.Entry;
 
+import javax.json.Json;
+import javax.json.JsonException;
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+import javax.json.JsonValue;
+
 import org.apache.commons.lang.StringUtils;
 import org.json.JSONObject;
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
@@ -65,6 +73,8 @@
 	public static final String EMPTY_COMPONENT_ATTR = "Component Attributes: One or more Fields in Component Attributes is Empty.";
 	
 	private static Map<String, String> mapAttribute = new HashMap<>();
+	private static Map<String, String> jsonRequestMap = new HashMap<>();
+	private static List<String> modelRequiredFieldsList = new ArrayList<>();
 	
 	private static CommonClassDao commonClassDao;
 	
@@ -90,21 +100,126 @@
 			if(policyData.getPolicyName() != null){
 				String policyNameValidate = PolicyUtils.policySpecialCharValidator(policyData.getPolicyName());
 				if(!policyNameValidate.contains(SUCCESS)){
-					responseString.append("PolicyName:" +  policyNameValidate + "<br>");
+					responseString.append("<b>PolicyName</b>:<i>" +  policyNameValidate + HTML_ITALICS_LNBREAK);
 					valid = false;
-				};
+				}
 			}else{
-				responseString.append( "PolicyName: PolicyName Should not be empty" + "<br>");
+				responseString.append( "<b>PolicyName</b>: PolicyName Should not be empty" + HTML_ITALICS_LNBREAK);
 				valid = false;
 			}
 			if(policyData.getPolicyDescription() != null){
 				String descriptionValidate = PolicyUtils.descriptionValidator(policyData.getPolicyDescription());
 				if(!descriptionValidate.contains(SUCCESS)){
-					responseString.append("Description:" +  descriptionValidate + "<br>");
+					responseString.append("<b>Description</b>:<i>" +  descriptionValidate + HTML_ITALICS_LNBREAK);
 					valid = false;
 				}	
 			}
 
+			if(!"API".equals(policyData.getApiflag()) && policyData.getAttributes() != null && !policyData.getAttributes().isEmpty()){
+                for(Object attribute : policyData.getAttributes()){
+                    if(attribute instanceof LinkedHashMap<?, ?>){
+                        String value = null;
+                        String key = null;
+                        if(((LinkedHashMap<?, ?>) attribute).get("key") != null){
+                            key = ((LinkedHashMap<?, ?>) attribute).get("key").toString();
+                            if(!PolicyUtils.policySpecialCharValidator(key).contains("success")){
+                                responseString.append("<b>Attributes or Component Attributes</b>:<i>" +  value + " : value has spaces or invalid characters</i><br>");
+                                valid = false;
+                            }
+                        }else{
+                            if(CONFIG_POLICY.equals(policyData.getPolicyType())){
+                                if("Base".equals(policyData.getConfigPolicyType())){
+                                    responseString.append("<b>Attributes</b>:<i> has one missing Attribute key</i><br>");
+                                }
+                                if("BRMS_Param".equals(policyData.getConfigPolicyType()) || "BRMS_Raw".equals(policyData.getConfigPolicyType())){
+                                    responseString.append("<b>Rule Attributes</b>:<i> has one missing Attribute key</i><br>");
+                                }
+                            }else{
+                                responseString.append("<b>Component Attributes</b>:<i> has one missing Component Attribute key</i><br>");
+                            }
+                            valid = false;
+                        }
+                        if(((LinkedHashMap<?, ?>) attribute).get("value") != null){
+                            value = ((LinkedHashMap<?, ?>) attribute).get("value").toString();
+                            if(!PolicyUtils.policySpecialCharValidator(value).contains("success")){
+                                if(CONFIG_POLICY.equals(policyData.getPolicyType())){
+                                    if("Base".equals(policyData.getConfigPolicyType())){
+                                        responseString.append("<b>Attributes</b>:<i>" +  value + " : value has spaces or invalid characters</i><br>");
+                                    }
+                                    if("BRMS_Param".equals(policyData.getConfigPolicyType()) || "BRMS_Raw".equals(policyData.getConfigPolicyType())){
+                                        responseString.append("<b>Rule Attributes</b>:<i>" +  value + " : value has spaces or invalid characters</i><br>");
+                                    }
+                                }else{
+                                    responseString.append("<b>Component Attributes</b>:<i>" +  value + " : value has spaces or invalid characters</i><br>");
+                                }
+                                valid = false;
+                            }
+                        }else{
+                            if(CONFIG_POLICY.equals(policyData.getPolicyType())){
+                                if("Base".equals(policyData.getConfigPolicyType())){
+                                    responseString.append("<b>Attributes</b>:<i> has one missing Attribute value</i><br>");
+                                }
+                                if("BRMS_Param".equals(policyData.getConfigPolicyType()) || "BRMS_Raw".equals(policyData.getConfigPolicyType())){
+                                    responseString.append("<b>Rule Attributes</b>:<i> has one missing Attribute value</i><br>");
+                                }
+                            }else{
+                                responseString.append("<b>Component Attributes</b>:<i> has one missing Component Attribute value</i><br>");
+                            }
+                            valid = false;
+                        }
+                    }
+                }
+            }
+			
+            //Decision Policy Attributes Validation
+            if(!"API".equals(policyData.getApiflag()) && policyData.getSettings() != null && !policyData.getSettings().isEmpty()){
+                for(Object attribute : policyData.getAttributes()){
+                    if(attribute instanceof LinkedHashMap<?, ?>){
+                        String value = null;
+                        if(((LinkedHashMap<?, ?>) attribute).get("key") == null){
+                            responseString.append("<b>Settings Attributes</b>:<i> has one missing Attribute key</i><br>");
+                            valid = false;
+                        }
+                        if(((LinkedHashMap<?, ?>) attribute).get("value") != null){
+                            value = ((LinkedHashMap<?, ?>) attribute).get("value").toString();
+                            if(!PolicyUtils.policySpecialCharValidator(value).contains("success")){
+                                responseString.append("<b>Settings Attributes</b>:<i>" +  value + " : value has spaces or invalid characters</i><br>");
+                                valid = false;
+                            }
+                        }else{
+                            responseString.append("<b>Settings Attributes</b>:<i> has one missing Attribute Value</i><br>");
+                            valid = false;
+                        }
+                    }
+                }
+            }
+            
+            if(!"API".equals(policyData.getApiflag()) && policyData.getRuleAlgorithmschoices() != null &&  !policyData.getRuleAlgorithmschoices().isEmpty()){
+                for(Object attribute : policyData.getRuleAlgorithmschoices()){
+                    if(attribute instanceof LinkedHashMap<?, ?>){
+                        String label = ((LinkedHashMap<?, ?>) attribute).get("id").toString();
+                        if(((LinkedHashMap<?, ?>) attribute).get("dynamicRuleAlgorithmField1") == null){
+                            responseString.append("<b>Rule Algorithms</b>:<i>" +  label + " : Field 1 value is not selected</i><br>");
+                            valid = false;
+                        }
+                        if(((LinkedHashMap<?, ?>) attribute).get("dynamicRuleAlgorithmCombo") == null){
+                            responseString.append("<b>Rule Algorithms</b>:<i>" +  label + " : Field 2 value is not selected</i><br>");
+                            valid = false;
+                        }
+                        if(((LinkedHashMap<?, ?>) attribute).get("dynamicRuleAlgorithmField2") != null){
+                            String value = ((LinkedHashMap<?, ?>) attribute).get("dynamicRuleAlgorithmField2").toString();
+                            if(!PolicyUtils.policySpecialCharValidator(value).contains("success")){
+                                responseString.append("<b>Rule Algorithms</b>:<i>" +  label + " : Field 3 value has special characters</i><br>");
+                                valid = false;
+                            }
+                        }else{
+                            responseString.append("<b>Rule Algorithms</b>:<i>" +  label + " : Field 3 value is empty</i><br>");
+                            valid = false;
+                        }
+                    }
+                }
+            }
+            
 			if(CONFIG_POLICY.equalsIgnoreCase(policyData.getPolicyType())){
 				if ("Base".equals(policyData.getConfigPolicyType()) || CLOSEDLOOP_POLICY.equals(policyData.getConfigPolicyType())
 						||  CLOSEDLOOP_PM.equals(policyData.getConfigPolicyType()) || ENFORCER_CONFIG_POLICY.equals(policyData.getConfigPolicyType()) 
@@ -113,11 +228,11 @@
 					if(!Strings.isNullOrEmpty(policyData.getOnapName())) {
 						String onapNameValidate = PolicyUtils.policySpecialCharValidator(policyData.getOnapName());
 						if(!onapNameValidate.contains(SUCCESS)){
-							responseString.append("OnapName:" +  onapNameValidate + "<br>");
+							responseString.append("<b>OnapName</b>:<i>" +  onapNameValidate + HTML_ITALICS_LNBREAK);
 							valid = false;
 						}
 					}else{
-						responseString.append("Onap Name: Onap Name Should not be empty" + "<br>");
+						responseString.append("<b>Onap Name</b>: Onap Name Should not be empty" + HTML_ITALICS_LNBREAK);
 						valid = false;
 					}
 				}
@@ -125,33 +240,33 @@
 				if(!Strings.isNullOrEmpty(policyData.getRiskType())) {
 					String riskTypeValidate = PolicyUtils.policySpecialCharValidator(policyData.getRiskType());
 					if(!riskTypeValidate.contains(SUCCESS)){
-						responseString.append("RiskType:" +  riskTypeValidate + "<br>");
+						responseString.append("<b>RiskType</b>:<i>" +  riskTypeValidate + HTML_ITALICS_LNBREAK);
 						valid = false;
 					}
 				}else {
-					responseString.append("Risk Type: Risk Type Should not be Empty" + "<br>");
+					responseString.append("<b>RiskType</b>: Risk Type Should not be Empty" + HTML_ITALICS_LNBREAK);
 					valid = false;
 				}
 
 				if(!Strings.isNullOrEmpty(policyData.getRiskLevel())) {
 					String validateRiskLevel = PolicyUtils.policySpecialCharValidator(policyData.getRiskLevel());
 					if(!validateRiskLevel.contains(SUCCESS)){
-						responseString.append("RiskLevel:" +  validateRiskLevel + "<br>");
+						responseString.append("<b>RiskLevel</b>:<i>" +  validateRiskLevel + HTML_ITALICS_LNBREAK);
 						valid = false;
 					}
 				}else {
-					responseString.append("Risk Level: Risk Level Should not be Empty" + "<br>");
+					responseString.append("<b>RiskLevel</b>: Risk Level Should not be Empty" + HTML_ITALICS_LNBREAK);
 					valid = false;
 				}
 
 				if(!Strings.isNullOrEmpty(policyData.getGuard())) {
 					String validateGuard = PolicyUtils.policySpecialCharValidator(policyData.getGuard());
 					if(!validateGuard.contains(SUCCESS)){
-						responseString.append("Guard:" +  validateGuard + "<br>");
+						responseString.append("<b>Guard</b>:<i>" +  validateGuard + HTML_ITALICS_LNBREAK);
 						valid = false;
 					}
 				}else {
-					responseString.append("Guard: Guard Value Should not be Empty" + "<br>");
+					responseString.append("<b>Guard</b>: Guard Value Should not be Empty" + HTML_ITALICS_LNBREAK);
 					valid = false;
 				}
 
@@ -159,21 +274,21 @@
 					if(!Strings.isNullOrEmpty(policyData.getConfigName())) {
 						String configNameValidate = PolicyUtils.policySpecialCharValidator(policyData.getConfigName());
 						if(!configNameValidate.contains(SUCCESS)){
-							responseString.append("ConfigName:" +  configNameValidate + "<br>");
+							responseString.append("ConfigName:" +  configNameValidate + HTML_ITALICS_LNBREAK);
 							valid = false;
 						}
 					}else{
-						responseString.append("Config Name: Config Name Should not be Empty" + "<br>");
+						responseString.append("Config Name: Config Name Should not be Empty" + HTML_ITALICS_LNBREAK);
 						valid = false;
 					}
 					if(!Strings.isNullOrEmpty(policyData.getConfigType())) {
 						String configTypeValidate = PolicyUtils.policySpecialCharValidator(policyData.getConfigType());
 						if(!configTypeValidate.contains(SUCCESS)){
-							responseString.append("ConfigType:" +  configTypeValidate + "<br>");
+							responseString.append("ConfigType:" +  configTypeValidate + HTML_ITALICS_LNBREAK);
 							valid = false;
 						}
 					}else{
-						responseString.append("Config Type: Config Type Should not be Empty" + "<br>");
+						responseString.append("Config Type: Config Type Should not be Empty" + HTML_ITALICS_LNBREAK);
 						valid = false;
 					}
 					if(!Strings.isNullOrEmpty(policyData.getConfigBodyData())) {
@@ -182,26 +297,26 @@
 						if (configType != null) {
 							if ("JSON".equals(configType)) {
 								if (!PolicyUtils.isJSONValid(configBodyData)) {
-									responseString.append("Config Body: JSON Content is not valid" + "<br>");
+									responseString.append("Config Body: JSON Content is not valid" + HTML_ITALICS_LNBREAK);
 									valid = false;
 								}
 							} else if ("XML".equals(configType)) {
 								if (!PolicyUtils.isXMLValid(configBodyData)) {
-									responseString.append("Config Body: XML Content data is not valid" + "<br>");
+									responseString.append("Config Body: XML Content data is not valid" + HTML_ITALICS_LNBREAK);
 									valid = false;
 								}
 							} else if ("PROPERTIES".equals(configType)) {
 								if (!PolicyUtils.isPropValid(configBodyData)||configBodyData.equals("")) {
-									responseString.append("Config Body: Property data is not valid" + "<br>");
+									responseString.append("Config Body: Property data is not valid" + HTML_ITALICS_LNBREAK);
 									valid = false;
 								} 
 							} else if ("OTHER".equals(configType) && ("".equals(configBodyData))) {
-								responseString.append("Config Body: Config Body Should not be Empty" + "<br>");
+								responseString.append("Config Body: Config Body Should not be Empty" + HTML_ITALICS_LNBREAK);
 								valid = false;
 							}
 						}
 					}else{
-						responseString.append("Config Body: Config Body Should not be Empty" + "<br>");
+						responseString.append("Config Body: Config Body Should not be Empty" + HTML_ITALICS_LNBREAK);
 						valid = false;
 					}
 				}
@@ -259,7 +374,7 @@
 						if(pmBody.getEmailAddress() != null){
 							String result = emailValidation(pmBody.getEmailAddress(), responseString.toString());
 							if(result != SUCCESS){
-								responseString.append(result + "<br>");
+								responseString.append(result + HTML_ITALICS_LNBREAK);
 								valid = false;
 							}
 						}
@@ -272,7 +387,7 @@
 							if(!result.contains(SUCCESS)){
 								responseString.append("<b>GeoLink</b>:<i>" +  result + HTML_ITALICS_LNBREAK);
 								valid = false;
-							};
+							}
 						}
 						if(pmBody.getAttributes() != null && !pmBody.getAttributes().isEmpty()){
 							for(Entry<String, String> entry : pmBody.getAttributes().entrySet()){
@@ -283,7 +398,7 @@
 									if(!attributeValidate.contains(SUCCESS)){
 										responseString.append("<b>Attributes</b>:<i>" +  key + " : value has spaces or invalid characters" + HTML_ITALICS_LNBREAK);
 										valid = false;
-									};
+									}
 								}
 							}	
 						}
@@ -308,13 +423,28 @@
 								responseString.append("<b>Conditions</b>: <i>There were no conditions provided in configBody json" + HTML_ITALICS_LNBREAK);
 								return responseString;
 							}
+						}else{
+							if(policyData.getTrapDatas().getTrap1() != null){
+								if(policyData.getClearTimeOut() == null){
+									responseString.append("<b>Trigger Clear TimeOut</b>: <i>Trigger Clear TimeOut is required when atleast One Trigger Signature is enabled</i><br>");
+									valid = false;
+								}
+								if(policyData.getTrapMaxAge() == null){
+									responseString.append("<b>Trap Max Age</b>: <i>Trap Max Age is required when atleast One Trigger Signature is enabled</i><br>");
+									valid = false;
+								}
+							}
+							if(policyData.getFaultDatas().getTrap1() != null && policyData.getVerificationclearTimeOut() == null){
+								responseString.append("<b>Fault Clear TimeOut</b>: <i>Fault Clear TimeOut is required when atleast One Fault Signature is enabled</i><br>");
+								valid = false;
+							}
 						}
 
 						ClosedLoopFaultBody faultBody = mapper.readValue(policyData.getJsonBody(), ClosedLoopFaultBody.class);
 						if(faultBody.getEmailAddress() != null && !faultBody.getEmailAddress().isEmpty()){
 							String result = emailValidation(faultBody.getEmailAddress(), responseString.toString());
-							if(result != SUCCESS){
-								responseString.append(result+ "<br>");
+							if(!SUCCESS.equals(result)){
+								responseString.append(result+ HTML_ITALICS_LNBREAK);
 								valid = false;
 							}
 						}
@@ -384,6 +514,8 @@
 
 				if (MICROSERVICES.equals(policyData.getConfigPolicyType())){
 					if(!Strings.isNullOrEmpty(policyData.getServiceType())){
+						
+						modelRequiredFieldsList = new ArrayList<>();
 						pullJsonKeyPairs((JsonNode) policyData.getPolicyJSON());
 
 						String service;
@@ -400,7 +532,12 @@
 							MicroServiceModels returnModel = getAttributeObject(service, version);
 							
 							if(returnModel != null) {
+								
 								String annotation = returnModel.getAnnotation();
+								String refAttributes = returnModel.getRef_attributes();
+								String subAttributes = returnModel.getSub_attributes();
+								String modelAttributes = returnModel.getAttributes();
+								
 								if (!Strings.isNullOrEmpty(annotation)){ 
 									Map<String, String> rangeMap = Splitter.on(",").withKeyValueSeparator("=").split(annotation);
 									for (Entry<String, String> rMap : rangeMap.entrySet()){
@@ -431,18 +568,85 @@
 
 										}
 									}
+								} else {
+									// Validate for configName, location, uuid, and policyScope if no annotations exist for this model
+									if(Strings.isNullOrEmpty(policyData.getMsLocation())){
+										responseString.append("<b>Micro Service Model</b>:<i> location is required for this model" + HTML_ITALICS_LNBREAK);
+										valid = false;
+									}
+									
+									if(Strings.isNullOrEmpty(policyData.getConfigName())){
+										responseString.append("<b>Micro Service Model</b>:<i> configName is required for this model" + HTML_ITALICS_LNBREAK);
+										valid = false;
+									}	
+									
+									if(Strings.isNullOrEmpty(policyData.getUuid())){
+										responseString.append("<b>Micro Service Model</b>:<i> uuid is required for this model" + HTML_ITALICS_LNBREAK);
+										valid = false;
+									}	
+									
+									if(Strings.isNullOrEmpty(policyData.getPolicyScope())){
+										responseString.append("<b>Micro Service Model</b>:<i> policyScope is required for this model" + HTML_ITALICS_LNBREAK);
+										valid = false;
+									}	
 								}
+								
+								// get list of required fields from the sub_Attributes of the Model
+								if(!Strings.isNullOrEmpty(subAttributes)) {
+									JsonObject subAttributesJson = stringToJsonObject(subAttributes);
+									findRequiredFields(subAttributesJson);
+								}
+								
+								// get list of required fields from the attributes of the Model
+								if (!Strings.isNullOrEmpty(modelAttributes)) {
+									Map<String, String> modelAttributesMap = Splitter.on(",").withKeyValueSeparator("=").split(modelAttributes);
+									String json = new ObjectMapper().writeValueAsString(modelAttributesMap);
+									findRequiredFields(stringToJsonObject(json));
+								}
+								
+								// get list of required fields from the ref_Attributes of the Model
+								if (!Strings.isNullOrEmpty(refAttributes)) {
+									Map<String, String> refAttributesMap = Splitter.on(",").withKeyValueSeparator("=").split(refAttributes);
+									String json = new ObjectMapper().writeValueAsString(refAttributesMap);
+									findRequiredFields(stringToJsonObject(json));
+								}
+								
+								// Validate Required Fields in the Micro Service Model
+								if (modelRequiredFieldsList!=null || !modelRequiredFieldsList.isEmpty()) {
+									// create jsonRequestMap with all json keys and values from request
+									JsonNode rootNode = (JsonNode) policyData.getPolicyJSON();
+									pullModelJsonKeyPairs(rootNode);
+									
+									// validate if the requiredFields are in the request
+									for(String requiredField : modelRequiredFieldsList) {
+										if (jsonRequestMap.containsKey(requiredField)) {
+											String value = jsonRequestMap.get(requiredField);
+											if(Strings.isNullOrEmpty(jsonRequestMap.get(requiredField)) || 
+													"\"\"".equals(value) || 
+													"".equals(jsonRequestMap.get(requiredField))){
+												responseString.append("<b>Micro Service Model</b>:<i> " + requiredField + " is required" + HTML_ITALICS_LNBREAK);
+												valid = false; 
+											}
+										} else {
+											responseString.append("<b>Micro Service Model</b>:<i> " + requiredField + " is required" + HTML_ITALICS_LNBREAK);
+											valid = false; 
+										}
+									}
+								}
+								
+
+								
 							} else {
 								responseString.append("<b>Micro Service Model</b>:<i> Invalid Model. The model name, " + service + 
 										" of version, " + version + " was not found in the dictionary" + HTML_ITALICS_LNBREAK);
 								valid = false;
 							}
 						} else {
-							responseString.append("<b>Micro Version</b>:<i> Micro Service Version is required" + HTML_ITALICS_LNBREAK);
+							responseString.append("<b>Micro Service Version</b>:<i> Micro Service Version is required" + HTML_ITALICS_LNBREAK);
 							valid = false;
 						}
 					} else {
-						responseString.append("<b>Micro Service</b>:<i> Micro Service is required" + HTML_ITALICS_LNBREAK);
+						responseString.append("<b>Micro Service</b>:<i> Micro Service Model is required" + HTML_ITALICS_LNBREAK);
 						valid = false;
 					}
 
@@ -456,11 +660,11 @@
 				if(!Strings.isNullOrEmpty(policyData.getOnapName())){
 					String onapNameValidate = PolicyUtils.policySpecialCharValidator(policyData.getOnapName());
 					if(!onapNameValidate.contains(SUCCESS)){
-						responseString.append("OnapName:" +  onapNameValidate + "<br>");
+						responseString.append("OnapName:" +  onapNameValidate + HTML_ITALICS_LNBREAK);
 						valid = false;
 					}
 				}else{
-					responseString.append("Onap Name: Onap Name Should not be empty" + "<br>");
+					responseString.append("Onap Name: Onap Name Should not be empty" + HTML_ITALICS_LNBREAK);
 					valid = false;
 				}
 
@@ -527,52 +731,52 @@
 				
 				if("GUARD_YAML".equals(policyData.getRuleProvider()) || "GUARD_BL_YAML".equals(policyData.getRuleProvider())){
 					if(policyData.getYamlparams()==null){
-						responseString.append("<b> Guard Params are Required </b>" + "<br>");
+						responseString.append("<b> Guard Params are Required </b>" + HTML_ITALICS_LNBREAK);
 						valid = false;
 					}else{
 						if(Strings.isNullOrEmpty(policyData.getYamlparams().getActor())){
-							responseString.append("Guard Params <b>Actor</b> is Required " + "<br>");
+							responseString.append("Guard Params <b>Actor</b> is Required " + HTML_ITALICS_LNBREAK);
 							valid = false;
 						}
 						if(Strings.isNullOrEmpty(policyData.getYamlparams().getRecipe())){
-							responseString.append("Guard Params <b>Recipe</b> is Required " + "<br>");
+							responseString.append("Guard Params <b>Recipe</b> is Required " + HTML_ITALICS_LNBREAK);
 							valid = false;
 						}
 						if(Strings.isNullOrEmpty(policyData.getYamlparams().getGuardActiveStart())){
-							responseString.append("Guard Params <b>Guard Active Start</b> is Required " + "<br>");
+							responseString.append("Guard Params <b>Guard Active Start</b> is Required " + HTML_ITALICS_LNBREAK);
 							valid = false;
 						}
 						if(Strings.isNullOrEmpty(policyData.getYamlparams().getGuardActiveEnd())){
-							responseString.append("Guard Params <b>Guard Active End</b> is Required " + "<br>");
+							responseString.append("Guard Params <b>Guard Active End</b> is Required " + HTML_ITALICS_LNBREAK);
 							valid = false;
 						}
 						if("GUARD_YAML".equals(policyData.getRuleProvider())){
 							if(Strings.isNullOrEmpty(policyData.getYamlparams().getLimit())){
-								responseString.append(" Guard Params <b>Limit</b> is Required " + "<br>");
+								responseString.append(" Guard Params <b>Limit</b> is Required " + HTML_ITALICS_LNBREAK);
 								valid = false;
 							}else if(!PolicyUtils.isInteger(policyData.getYamlparams().getLimit())){
-								responseString.append(" Guard Params <b>Limit</b> Should be Integer " + "<br>");
+								responseString.append(" Guard Params <b>Limit</b> Should be Integer " + HTML_ITALICS_LNBREAK);
 								valid = false;
 							}
 							if(Strings.isNullOrEmpty(policyData.getYamlparams().getTimeWindow())){
-								responseString.append("Guard Params <b>Time Window</b> is Required" + "<br>");
+								responseString.append("Guard Params <b>Time Window</b> is Required" + HTML_ITALICS_LNBREAK);
 								valid = false;
 							}else if(!PolicyUtils.isInteger(policyData.getYamlparams().getTimeWindow())){
-								responseString.append(" Guard Params <b>Time Window</b> Should be Integer " + "<br>");
+								responseString.append(" Guard Params <b>Time Window</b> Should be Integer " + HTML_ITALICS_LNBREAK);
 								valid = false;
 							}
 							if(Strings.isNullOrEmpty(policyData.getYamlparams().getTimeUnits())){
-								responseString.append("Guard Params <b>Time Units</b> is Required" + "<br>");
+								responseString.append("Guard Params <b>Time Units</b> is Required" + HTML_ITALICS_LNBREAK);
 								valid = false;
 							}
 						}else if("GUARD_BL_YAML".equals(policyData.getRuleProvider())){
 							if(policyData.getYamlparams().getBlackList()==null || policyData.getYamlparams().getBlackList().isEmpty()){
-								responseString.append(" Guard Params <b>BlackList</b> is Required " + "<br>");
+								responseString.append(" Guard Params <b>BlackList</b> is Required " + HTML_ITALICS_LNBREAK);
 								valid = false;
 							}else{
 								for(String blackList: policyData.getYamlparams().getBlackList()){
 									if(blackList==null || !(SUCCESS.equals(PolicyUtils.policySpecialCharValidator(blackList)))){
-										responseString.append(" Guard Params <b>BlackList</b> Should be valid String" + "<br>");
+										responseString.append(" Guard Params <b>BlackList</b> Should be valid String" + HTML_ITALICS_LNBREAK);
 										valid = false;
 										break;
 									}
@@ -587,69 +791,23 @@
 				if(!Strings.isNullOrEmpty(policyData.getActionPerformer())){
 					String actionPerformer = PolicyUtils.policySpecialCharValidator(policyData.getActionPerformer());
 					if(!actionPerformer.contains(SUCCESS)){
-						responseString.append("ActionPerformer:" +  actionPerformer + "<br>");
+						responseString.append("<b>ActionPerformer</b>:<i>" +  actionPerformer + HTML_ITALICS_LNBREAK);
 						valid = false;
 					}
 				}else{
-					responseString.append("ActionPerformer: ActionPerformer Should not be empty" + "<br>");
+					responseString.append("<b>ActionPerformer</b>:<i> ActionPerformer Should not be empty" + HTML_ITALICS_LNBREAK);
 					valid = false;
 				}
-				if(policyData.getAttributes() != null){
-					for(Object attribute : policyData.getAttributes()){
-						if(attribute instanceof LinkedHashMap<?, ?>){
-							try{
-								//This is for validation check if the value exists or not
-								String key = ((LinkedHashMap<?, ?>) attribute).get("key").toString();
-								String value =  ((LinkedHashMap<?, ?>) attribute).get("value").toString();
-								if("".equals(key) || "".equals(value)){
-									responseString.append(EMPTY_COMPONENT_ATTR + "<br>");
-									valid = false;
-									break;	
-								}
-							}catch(Exception e){
-								LOGGER.error("This is a Policy Validation check" +e);
-								responseString.append(EMPTY_COMPONENT_ATTR + "<br>");
-								valid = false;
-								break;
-							}
-						}
-					}
-				}else{
-					responseString.append(EMPTY_COMPONENT_ATTR + "<br>");
-					valid = false;
-				}
+	
 				if(!Strings.isNullOrEmpty(policyData.getActionAttributeValue())){
 					String actionAttribute = PolicyUtils.policySpecialCharValidator(policyData.getActionAttributeValue());
 					if(!actionAttribute.contains(SUCCESS)){
-						responseString.append("ActionAttribute:" +  actionAttribute + "<br>");
+						responseString.append("<b>ActionAttribute</b>:<i>" +  actionAttribute + HTML_ITALICS_LNBREAK);
 						valid = false;
-					};
-				}else{
-					responseString.append("ActionAttribute: ActionAttribute Should not be empty" + "<br>");
-					valid = false;
-				}
-				
-				if(!policyData.getRuleAlgorithmschoices().isEmpty()){
-					for(Object attribute : policyData.getRuleAlgorithmschoices()){
-						if(attribute instanceof LinkedHashMap<?, ?>){
-							try{
-								String label = ((LinkedHashMap<?, ?>) attribute).get("id").toString();
-								String key = ((LinkedHashMap<?, ?>) attribute).get("dynamicRuleAlgorithmField1").toString();
-								String rule = ((LinkedHashMap<?, ?>) attribute).get("dynamicRuleAlgorithmCombo").toString();
-								String value = ((LinkedHashMap<?, ?>) attribute).get("dynamicRuleAlgorithmField2").toString();
-
-								if(Strings.isNullOrEmpty(label) || Strings.isNullOrEmpty(key) || Strings.isNullOrEmpty(rule) || Strings.isNullOrEmpty(value)){
-									responseString.append("Rule Algorithms: One or more Fields in Rule Algorithms is Empty." + "<br>");
-									valid = false;
-								}
-							}catch(Exception e){
-								LOGGER.error("This is a Policy Validation check" +e);
-								responseString.append("Rule Algorithms: One or more Fields in Rule Algorithms is Empty." + "<br>");
-								valid = false;
-								break;
-							}
-						}
 					}
+				}else{
+					responseString.append("<b>ActionAttribute</b>:<i> ActionAttribute Should not be empty" + HTML_ITALICS_LNBREAK);
+					valid = false;
 				}
 			}
 
@@ -660,7 +818,7 @@
 						List<Object> spData = commonClassDao.getDataById(SafePolicyWarning.class, "riskType", policyData.getRiskType());
 						if (!spData.isEmpty()){
 							SafePolicyWarning safePolicyWarningData  = (SafePolicyWarning) spData.get(0);
-							value = "Message:" +  safePolicyWarningData.getMessage();
+							value = "<b>Message</b>:<i>" +  safePolicyWarningData.getMessage() +"</i>";
 						}
 					}
 					responseString.append(SUCCESS + "@#"+ value);
@@ -729,5 +887,60 @@
 			}
 		}
 	}
+	
+	private void pullModelJsonKeyPairs(JsonNode rootNode) {
+		Iterator<Map.Entry<String, JsonNode>> fieldsIterator = rootNode.fields();
+		
+		while (fieldsIterator.hasNext()) {
+			Map.Entry<String, JsonNode> field = fieldsIterator.next();
+			final String key = field.getKey();
+			final JsonNode value = field.getValue();
+			
+			if (value.isContainerNode() && !value.isArray()) {
+				pullModelJsonKeyPairs(value); // RECURSIVE CALL
+			} else if (value.isArray()) {
+				try {
+					String stringValue = StringUtils.replaceEach(value.toString(), new String[]{"[", "]"}, new String[]{"",""});
+					ObjectMapper mapper = new ObjectMapper();
+					JsonNode newValue = mapper.readTree(stringValue);
+					pullModelJsonKeyPairs(newValue);
+				} catch (IOException e) {
+					LOGGER.info("PolicyValidation: Exception occurred while mapping string to JsonNode " + e);
+				}
+			} else {
+				jsonRequestMap.put(key, value.toString().trim());
+			}
+		}
+				
+	}
+	
+    private JsonObject stringToJsonObject(String value) {
+    	try(JsonReader jsonReader = Json.createReader(new StringReader(value))){
+            return jsonReader.readObject();
+        } catch(JsonException| IllegalStateException e){
+            LOGGER.info(XACMLErrorConstants.ERROR_DATA_ISSUE+ "Improper JSON format... may or may not cause issues in validating the policy: " + value, e);
+            return null;
+        }
+    }
+    
+    private void findRequiredFields(JsonObject json) {
+
+    	for(Entry<String, JsonValue> keyMap : json.entrySet()){
+    		Object obj = keyMap.getValue();
+    		if(obj instanceof JsonObject){
+    			JsonObject jsonObj = (JsonObject)obj;
+    			for(Entry<String, JsonValue> jsonMap : jsonObj.entrySet()){
+    				if(jsonMap.getValue().toString().contains("required-true")){
+    					modelRequiredFieldsList.add(jsonMap.getKey());
+    				}
+    			}
+    		} else {
+    			if(keyMap.getValue().toString().contains("required-true")){
+    				modelRequiredFieldsList.add(keyMap.getKey());
+    			}
+    		}
+    	}
+    	    	
+    }
 
 }
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidationRequestWrapper.java b/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidationRequestWrapper.java
index ac97fb0..4267ff9 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidationRequestWrapper.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidationRequestWrapper.java
@@ -37,6 +37,7 @@
 import org.onap.policy.api.PolicyParameters;
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.rest.adapter.ClosedLoopFaultTrapDatas;
 import org.onap.policy.rest.adapter.PolicyRestAdapter;
 import org.onap.policy.rest.adapter.RainyDayParams;
 import org.onap.policy.rest.adapter.YAMLParams;
@@ -55,12 +56,21 @@
 	public PolicyRestAdapter populateRequestParameters(HttpServletRequest request) {
 		
 		PolicyRestAdapter policyData = null;
-		
+		ClosedLoopFaultTrapDatas trapDatas = null;
+		ClosedLoopFaultTrapDatas faultDatas = null;
 		try {
 			ObjectMapper mapper = new ObjectMapper();
 			mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 			JsonNode root = mapper.readTree(request.getReader());
 			policyData = mapper.readValue(root.get("policyData").toString(), PolicyRestAdapter.class);
+			if(root.get("trapData") != null){
+				trapDatas = mapper.readValue(root.get("trapData").toString(), ClosedLoopFaultTrapDatas.class);
+				policyData.setTrapDatas(trapDatas);
+			}
+			if(root.get("faultData") != null){
+				faultDatas = mapper.readValue(root.get("faultData").toString(), ClosedLoopFaultTrapDatas.class);
+				policyData.setFaultDatas(faultDatas);
+			}
 			
 			JsonObject json;
 			json = stringToJsonObject(root.toString());
@@ -88,9 +98,15 @@
 		/*
 		 * set policy adapter values for Building JSON object containing policy data
 		 */
-		//Common among policy types
+		//Common Policy Fields
 		policyData.setPolicyName(parameters.getPolicyName());
 		policyData.setOnapName(parameters.getOnapName()); 
+		policyData.setPriority(parameters.getPriority()); //Micro Service
+		policyData.setConfigName(parameters.getConfigName());  //Base and Firewall
+		policyData.setRiskType(parameters.getRiskType()); //Safe parameters Attributes
+		policyData.setRiskLevel(parameters.getRiskLevel());//Safe parameters Attributes
+		policyData.setGuard(String.valueOf(parameters.getGuard()));//Safe parameters Attributes
+		policyData.setTtlDate(convertDate(parameters.getTtlDate()));//Safe parameters Attributes
 		
 		//Some policies require jsonObject conversion from String for configBody (i.e. MicroService and Firewall)
 		JsonObject json = null;
@@ -298,6 +314,26 @@
 			        	String version = json.get("version").toString().replace("\"", "");
 			        	policyData.setVersion(version);
 			        }
+			        if(json.containsKey("policyScope")){
+			        	String policyScope = json.get("policyScope").toString().replace("\"", "");
+			        	policyData.setPolicyScope(policyScope);
+			        }
+			        if(json.containsKey("riskType")){
+			        	String riskType = json.get("riskType").toString().replace("\"", "");
+			        	policyData.setRiskType(riskType);
+			        }
+			        if(json.containsKey("riskLevel")){
+			        	String riskLevel = json.get("riskLevel").toString().replace("\"", "");
+			        	policyData.setRiskLevel(riskLevel);
+			        }
+			        if(json.containsKey("guard")){
+			        	String guard = json.get("guard").toString().replace("\"", "");
+			        	policyData.setGuard(guard);
+			        }
+				} else {
+		            String message = XACMLErrorConstants.ERROR_DATA_ISSUE+ " improper JSON object : " + parameters.getConfigBody();
+		            LOGGER.error(message);
+		            return null;				
 				}
 				
 			} else if("Fault".equals(parameters.getPolicyConfigType().toString())){
@@ -337,13 +373,6 @@
 				
 			}
 		}
-		
-		policyData.setPriority(parameters.getPriority()); //Micro Service
-		policyData.setConfigName(parameters.getConfigName());  //Base and Firewall
-		policyData.setRiskType(parameters.getRiskType()); //Safe parameters Attributes
-		policyData.setRiskLevel(parameters.getRiskLevel());//Safe parameters Attributes
-		policyData.setGuard(String.valueOf(parameters.getGuard()));//Safe parameters Attributes
-		policyData.setTtlDate(convertDate(parameters.getTtlDate()));//Safe parameters Attributes
 
 		return policyData;
 				
diff --git a/ONAP-REST/src/test/java/org/onap/policy/rest/adapter/ClosedLoopFaultTrapDatasTest.java b/ONAP-REST/src/test/java/org/onap/policy/rest/adapter/ClosedLoopFaultTrapDatasTest.java
new file mode 100644
index 0000000..bb8385b
--- /dev/null
+++ b/ONAP-REST/src/test/java/org/onap/policy/rest/adapter/ClosedLoopFaultTrapDatasTest.java
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Engine
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.policy.rest.adapter;
+
+import static org.junit.Assert.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Test;
+
+public class ClosedLoopFaultTrapDatasTest {
+
+	@Test
+	public void testClosedLoopFaultTrapDatas(){
+		List<Object> trap = new ArrayList<>();
+		trap.add("Test");
+		ClosedLoopFaultTrapDatas closedLoopTrapData = new ClosedLoopFaultTrapDatas();
+		closedLoopTrapData.setTrap1(trap);
+		assertTrue("Test".equals(closedLoopTrapData.getTrap1().get(0)));
+		closedLoopTrapData.setTrap2(trap);
+		assertTrue("Test".equals(closedLoopTrapData.getTrap2().get(0)));
+		closedLoopTrapData.setTrap3(trap);
+		assertTrue("Test".equals(closedLoopTrapData.getTrap3().get(0)));
+		closedLoopTrapData.setTrap4(trap);
+		assertTrue("Test".equals(closedLoopTrapData.getTrap4().get(0)));
+		closedLoopTrapData.setTrap5(trap);
+		assertTrue("Test".equals(closedLoopTrapData.getTrap5().get(0)));
+		closedLoopTrapData.setTrap6(trap);
+		assertTrue("Test".equals(closedLoopTrapData.getTrap6().get(0)));
+		
+	}
+}
diff --git a/ONAP-SDK-APP/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java b/ONAP-SDK-APP/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java
index ccc4691..2060172 100644
--- a/ONAP-SDK-APP/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java
+++ b/ONAP-SDK-APP/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java
@@ -29,7 +29,6 @@
 import org.onap.portalsdk.core.conf.Configurable;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
 import org.onap.portalsdk.core.objectcache.AbstractCacheManager;
-import org.onap.portalsdk.core.onboarding.exception.PortalAPIException;
 import org.onap.portalsdk.core.service.DataAccessService;
 import org.onap.portalsdk.core.util.CacheManager;
 import org.onap.portalsdk.core.util.SystemProperties;
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AutoPushController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AutoPushController.java
index 9ade81d..e0388e5 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AutoPushController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AutoPushController.java
@@ -52,6 +52,7 @@
 import org.onap.policy.rest.dao.CommonClassDao;
 import org.onap.policy.rest.jpa.PolicyEntity;
 import org.onap.policy.rest.jpa.PolicyVersion;
+import org.onap.policy.utils.PolicyUtils;
 import org.onap.policy.xacml.api.XACMLErrorConstants;
 import org.onap.policy.xacml.api.pap.OnapPDPGroup;
 import org.onap.policy.xacml.std.pap.StdPDPGroup;
@@ -288,6 +289,7 @@
 				updatedGroupObject.setOnapPdps(pdpGroup.getOnapPdps());
 				updatedGroupObject.setPipConfigs(pdpGroup.getPipConfigs());
 				updatedGroupObject.setStatus(pdpGroup.getStatus());
+				updatedGroupObject.setOperation("push");
 
 				// replace the original set of Policies with the set from the
 				// container (possibly modified by the user)
@@ -334,7 +336,7 @@
 			request.setCharacterEncoding("UTF-8");
 			PrintWriter out = response.getWriter();
 			logger.error(e);
-			out.write(e.getMessage());
+			out.write(PolicyUtils.CATCH_EXCEPTION);;
 		}
 		return null;
 	}
@@ -369,6 +371,7 @@
 				updatedGroupObject.setOnapPdps(group.getOnapPdps());
 				updatedGroupObject.setPipConfigs(group.getPipConfigs());
 				updatedGroupObject.setStatus(group.getStatus());
+				updatedGroupObject.setOperation("delete");
 				this.container.updateGroup(updatedGroupObject);
 			}
 			
@@ -390,7 +393,7 @@
 			request.setCharacterEncoding("UTF-8");
 			PrintWriter out = response.getWriter();
 			logger.error(e);
-			out.write(e.getMessage());
+			out.write(PolicyUtils.CATCH_EXCEPTION);;
 		}
 		return null;
 	}
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopFaultController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopFaultController.java
index 158ea62..7cfc4fe 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopFaultController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopFaultController.java
@@ -32,6 +32,7 @@
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.rest.adapter.ClosedLoopFaultBody;
+import org.onap.policy.rest.adapter.ClosedLoopFaultTrapDatas;
 import org.onap.policy.rest.adapter.ClosedLoopFaultTriggerUISignatures;
 import org.onap.policy.rest.adapter.ClosedLoopSignatures;
 import org.onap.policy.rest.adapter.PolicyRestAdapter;
@@ -62,27 +63,27 @@
 public class CreateClosedLoopFaultController extends RestrictedBaseController{
 
 	private static final Logger policyLogger	= FlexLogger.getLogger(CreateClosedLoopFaultController.class);
-	
+
 	protected PolicyRestAdapter policyAdapter = null;
-	
-	
+
+
 	private static CommonClassDao commonclassdao;
-	
+
 	@Autowired
 	private CreateClosedLoopFaultController(CommonClassDao commonclassdao){
 		CreateClosedLoopFaultController.commonclassdao = commonclassdao;
 	}
-	
+
 	public CreateClosedLoopFaultController(){
 		// Empty constructor
 	}
-	
+
 	public PolicyRestAdapter setDataToPolicyRestAdapter(PolicyRestAdapter policyData, JsonNode root){
 		try{
 			ObjectMapper mapper = new ObjectMapper();
 			mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-			TrapDatas trapDatas = mapper.readValue(root.get("trapData").toString(), TrapDatas.class);
-			TrapDatas faultDatas = mapper.readValue(root.get("faultData").toString(), TrapDatas.class);
+			ClosedLoopFaultTrapDatas trapDatas = mapper.readValue(root.get("trapData").toString(), ClosedLoopFaultTrapDatas.class);
+			ClosedLoopFaultTrapDatas faultDatas = mapper.readValue(root.get("faultData").toString(), ClosedLoopFaultTrapDatas.class);
 			ClosedLoopGridJSONData policyJsonData = mapper.readValue(root.get("policyData").get("policy").toString(), ClosedLoopGridJSONData.class);
 			ClosedLoopFaultBody jsonBody = mapper.readValue(root.get("policyData").get("policy").get("jsonBodyData").toString(), ClosedLoopFaultBody.class);
 
@@ -164,7 +165,7 @@
 		}
 		return policyData;
 	}
-	
+
 
 	@SuppressWarnings("unchecked")
 	private String connectTriggerSignature(int index, ArrayList<Object> triggerSignatures, Object object) {
@@ -241,17 +242,17 @@
 		return resultBody.toString();
 	}
 
-	
+
 	private String callTrap(String trap, Object object) {
 		String signatureBody = "";
-		TrapDatas trapDatas = (TrapDatas) object;
-		ArrayList<Object> attributeList = new ArrayList<>();
+		ClosedLoopFaultTrapDatas trapDatas = (ClosedLoopFaultTrapDatas) object;
+		List<Object> attributeList = new ArrayList<>();
 		// Read the Trap 
 		if(! "nill".equals(trap)){
 			try{
 				if(trap.startsWith("Trap")){
 					if("Trap1".equals(trap)){
-						 attributeList = trapDatas.getTrap1();
+						attributeList = trapDatas.getTrap1();
 					}else if("Trap2".equals(trap)){
 						attributeList = trapDatas.getTrap2();
 					}else if("Trap3".equals(trap)){
@@ -281,7 +282,7 @@
 					}
 				}
 			} catch(Exception e){
-			    policyLogger.warn("Error during callTrap" , e);
+				policyLogger.warn("Error during callTrap" , e);
 				return "(" + trap + ")";
 			}
 		}else{
@@ -294,9 +295,9 @@
 		signatureBody = signatureBody + "(" + readAttributes(attributeList, attributeList.size()-1) + ")";
 		return signatureBody;
 	}
-	
+
 	@SuppressWarnings("unchecked")
-	private String readAttributes(ArrayList<Object> object, int index) {
+	private String readAttributes(List<Object> object, int index) {
 		String attributes = "";
 		Map<String, String> trapSignatures = (Map<String, String>) object.get(index);
 		// Read the Elements. 
@@ -365,144 +366,144 @@
 		}
 		return attributes;
 	}
-	
+
 	private String getVarbindOID(String attrib) {
 		VarbindDictionary varbindId = null;
 		try{
-			 varbindId = (VarbindDictionary) commonclassdao.getEntityItem(VarbindDictionary.class, "varbindName", attrib);
-			 return varbindId.getVarbindOID();
+			varbindId = (VarbindDictionary) commonclassdao.getEntityItem(VarbindDictionary.class, "varbindName", attrib);
+			return varbindId.getVarbindOID();
 		}catch(Exception e){
-		    policyLogger.error("Error during retrieving varbindName " + attrib, e);
+			policyLogger.error("Error during retrieving varbindName " + attrib, e);
 			return attrib;
 		}
 	}
 
-	
+
 	//connect traps data set to JSON Body as String
-		@SuppressWarnings({ "unchecked", "rawtypes" })
-		private String getUIConnectTraps(ArrayList<Object> connectTrapSignatures) {
-			StringBuilder resultBody = new StringBuilder();
-			String connectMainBody = "";
-			for(int j = 0; j < connectTrapSignatures.size(); j++){
-				Map<String, String> connectTraps = (Map<String, String>)connectTrapSignatures.get(j);
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+	private String getUIConnectTraps(ArrayList<Object> connectTrapSignatures) {
+		StringBuilder resultBody = new StringBuilder();
+		String connectMainBody = "";
+		for(int j = 0; j < connectTrapSignatures.size(); j++){
+			Map<String, String> connectTraps = (Map<String, String>)connectTrapSignatures.get(j);
+			String connectBody = "";
+			Object object = connectTraps;
+			if(object instanceof LinkedHashMap<?, ?>){
+				String notBox = "";
+				String connectTrap1 = "";
+				String trapCount1 = "";
+				String operatorBox = "";
+				String connectTrap2 = "";
+				String trapCount2 = "";
+				if(((LinkedHashMap) object).keySet().contains("notBox")){
+					notBox = ((LinkedHashMap) object).get("notBox").toString();
+				}
+				if(((LinkedHashMap) object).get("connectTrap1") != null){
+					connectTrap1 = ((LinkedHashMap) object).get("connectTrap1").toString();
+				}
+				if(((LinkedHashMap) object).get("trapCount1") != null){
+					trapCount1 = ((LinkedHashMap) object).get("trapCount1").toString();
+				}
+				if(((LinkedHashMap) object).get("operatorBox") != null){
+					operatorBox = ((LinkedHashMap) object).get("operatorBox").toString();
+				}
+				if(((LinkedHashMap) object).get("connectTrap2") != null){
+					connectTrap2 = ((LinkedHashMap) object).get("connectTrap2").toString();
+				}
+				if(((LinkedHashMap) object).get("trapCount2") != null){
+					trapCount2 = ((LinkedHashMap) object).get("trapCount2").toString();
+				}
+				connectBody = notBox + "@!" + connectTrap1 + "@!" + trapCount1 + "@!" + operatorBox + "@!" + connectTrap2 + "@!" + trapCount2 + "#!?!"; 
+			}
+			resultBody.append(connectBody);
+		}
+		connectMainBody = connectMainBody + resultBody;
+		return connectMainBody;
+	}
+
+
+
+	// get Trigger signature from JSON body
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	private String getUITriggerSignature(String trap, Object object2) {
+		StringBuilder triggerBody = new StringBuilder();
+		ClosedLoopFaultTrapDatas trapDatas = (ClosedLoopFaultTrapDatas) object2;
+		ArrayList<Object> attributeList = new ArrayList<>();
+		// Read the Trap 
+		if(trap.startsWith("Trap")){
+			if(trapDatas.getTrap1()!= null){
+				attributeList.add(trapDatas.getTrap1());
+			}
+			if(trapDatas.getTrap2()!= null){
+				attributeList.add(trapDatas.getTrap2());
+			}
+			if(trapDatas.getTrap3()!= null){
+				attributeList.add(trapDatas.getTrap3());
+			}
+			if(trapDatas.getTrap4()!= null){
+				attributeList.add(trapDatas.getTrap4());
+			}
+			if(trapDatas.getTrap5()!= null){
+				attributeList.add(trapDatas.getTrap5());
+			}
+			if(trapDatas.getTrap6()!= null){
+				attributeList.add(trapDatas.getTrap6());
+			}
+		}else{
+			if(trap.startsWith("Fault")){
+				if(trapDatas.getTrap1()!= null){
+					attributeList.add(trapDatas.getTrap1());
+				}
+				if(trapDatas.getTrap2()!= null){
+					attributeList.add(trapDatas.getTrap2());
+				}
+				if(trapDatas.getTrap3()!= null){
+					attributeList.add(trapDatas.getTrap3());
+				}
+				if(trapDatas.getTrap4()!= null){
+					attributeList.add(trapDatas.getTrap4());
+				}
+				if(trapDatas.getTrap5()!= null){
+					attributeList.add(trapDatas.getTrap5());
+				}
+				if(trapDatas.getTrap6()!= null){
+					attributeList.add(trapDatas.getTrap6());
+				}				
+			}	
+		}
+
+		for(int j = 0; j < attributeList.size(); j++){
+			StringBuilder signatureBody = new StringBuilder();
+			ArrayList<Object> connectTraps = (ArrayList<Object>) attributeList.get(j);
+			for(int i =0 ; i < connectTraps.size(); i++){
 				String connectBody = "";
-				Object object = connectTraps;
+				Object object = connectTraps.get(i);
 				if(object instanceof LinkedHashMap<?, ?>){
 					String notBox = "";
-					String connectTrap1 = "";
-					String trapCount1 = "";
+					String trigger1 = "";
 					String operatorBox = "";
-					String connectTrap2 = "";
-					String trapCount2 = "";
+					String trigger2 = "";
 					if(((LinkedHashMap) object).keySet().contains("notBox")){
 						notBox = ((LinkedHashMap) object).get("notBox").toString();
 					}
-					if(((LinkedHashMap) object).get("connectTrap1") != null){
-						connectTrap1 = ((LinkedHashMap) object).get("connectTrap1").toString();
-					}
-					if(((LinkedHashMap) object).get("trapCount1") != null){
-						trapCount1 = ((LinkedHashMap) object).get("trapCount1").toString();
+					if(((LinkedHashMap) object).get("trigger1") != null){
+						trigger1 = ((LinkedHashMap) object).get("trigger1").toString();
 					}
 					if(((LinkedHashMap) object).get("operatorBox") != null){
 						operatorBox = ((LinkedHashMap) object).get("operatorBox").toString();
 					}
-					if(((LinkedHashMap) object).get("connectTrap2") != null){
-						connectTrap2 = ((LinkedHashMap) object).get("connectTrap2").toString();
+					if(((LinkedHashMap) object).get("trigger2") != null){
+						trigger2 = ((LinkedHashMap) object).get("trigger2").toString();
 					}
-					if(((LinkedHashMap) object).get("trapCount2") != null){
-						trapCount2 = ((LinkedHashMap) object).get("trapCount2").toString();
-					}
-					connectBody = notBox + "@!" + connectTrap1 + "@!" + trapCount1 + "@!" + operatorBox + "@!" + connectTrap2 + "@!" + trapCount2 + "#!?!"; 
+					connectBody = notBox + "@!" + trigger1 + "@!" + operatorBox + "@!" + trigger2 + "#!"; 
 				}
-				resultBody.append(connectBody);
+				signatureBody.append(connectBody);
 			}
-			connectMainBody = connectMainBody + resultBody;
-			return connectMainBody;
+			triggerBody.append(signatureBody + "?!");
 		}
 
-			
-
-			// get Trigger signature from JSON body
-			@SuppressWarnings({ "rawtypes", "unchecked" })
-			private String getUITriggerSignature(String trap, Object object2) {
-				StringBuilder triggerBody = new StringBuilder();
-				TrapDatas trapDatas = (TrapDatas) object2;
-				ArrayList<Object> attributeList = new ArrayList<>();
-				// Read the Trap 
-				if(trap.startsWith("Trap")){
-					if(trapDatas.getTrap1()!= null){
-						attributeList.add(trapDatas.getTrap1());
-					}
-					if(trapDatas.getTrap2()!= null){
-						attributeList.add(trapDatas.getTrap2());
-					}
-					if(trapDatas.getTrap3()!= null){
-						attributeList.add(trapDatas.getTrap3());
-					}
-					if(trapDatas.getTrap4()!= null){
-						attributeList.add(trapDatas.getTrap4());
-					}
-					if(trapDatas.getTrap5()!= null){
-						attributeList.add(trapDatas.getTrap5());
-					}
-					if(trapDatas.getTrap6()!= null){
-						attributeList.add(trapDatas.getTrap6());
-					}
-				}else{
-					if(trap.startsWith("Fault")){
-						if(trapDatas.getTrap1()!= null){
-							attributeList.add(trapDatas.getTrap1());
-						}
-						if(trapDatas.getTrap2()!= null){
-							attributeList.add(trapDatas.getTrap2());
-						}
-						if(trapDatas.getTrap3()!= null){
-							attributeList.add(trapDatas.getTrap3());
-						}
-						if(trapDatas.getTrap4()!= null){
-							attributeList.add(trapDatas.getTrap4());
-						}
-						if(trapDatas.getTrap5()!= null){
-							attributeList.add(trapDatas.getTrap5());
-						}
-						if(trapDatas.getTrap6()!= null){
-							attributeList.add(trapDatas.getTrap6());
-						}				
-					}	
-				}
-
-				for(int j = 0; j < attributeList.size(); j++){
-					StringBuilder signatureBody = new StringBuilder();
-					ArrayList<Object> connectTraps = (ArrayList<Object>) attributeList.get(j);
-					for(int i =0 ; i < connectTraps.size(); i++){
-						String connectBody = "";
-						Object object = connectTraps.get(i);
-						if(object instanceof LinkedHashMap<?, ?>){
-							String notBox = "";
-							String trigger1 = "";
-							String operatorBox = "";
-							String trigger2 = "";
-							if(((LinkedHashMap) object).keySet().contains("notBox")){
-								notBox = ((LinkedHashMap) object).get("notBox").toString();
-							}
-							if(((LinkedHashMap) object).get("trigger1") != null){
-								trigger1 = ((LinkedHashMap) object).get("trigger1").toString();
-							}
-							if(((LinkedHashMap) object).get("operatorBox") != null){
-								operatorBox = ((LinkedHashMap) object).get("operatorBox").toString();
-							}
-							if(((LinkedHashMap) object).get("trigger2") != null){
-								trigger2 = ((LinkedHashMap) object).get("trigger2").toString();
-							}
-							connectBody = notBox + "@!" + trigger1 + "@!" + operatorBox + "@!" + trigger2 + "#!"; 
-						}
-						signatureBody.append(connectBody);
-					}
-					triggerBody.append(signatureBody + "?!");
-				}
-				
-				return triggerBody.toString();		
-			}
+		return triggerBody.toString();		
+	}
 
 	public  void prePopulateClosedLoopFaultPolicyData(PolicyRestAdapter policyAdapter, PolicyEntity entity) {
 		if (policyAdapter.getPolicyData() instanceof PolicyType) {
@@ -515,7 +516,7 @@
 			try{
 				description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:"));
 			}catch(Exception e){
-			    policyLogger.error("Error during collecting the description tag info for createClosedLoopFault " + policyNameValue , e);
+				policyLogger.error("Error during collecting the description tag info for createClosedLoopFault " + policyNameValue , e);
 				description = policy.getDescription();
 			}
 			policyAdapter.setPolicyDescription(description);
@@ -548,7 +549,7 @@
 										String value = (String) attributeValue.getContent().get(0);
 										AttributeDesignatorType designator = match.getAttributeDesignator();
 										String attributeId = designator.getAttributeId();
-										
+
 										// First match in the target is OnapName, so set that value.
 										if ("ONAPName".equals(attributeId)) {
 											policyAdapter.setOnapName(value);
@@ -611,51 +612,6 @@
 
 }
 
-class TrapDatas{
-	private ArrayList<Object> trap1;
-	private ArrayList<Object> trap2;
-	private ArrayList<Object> trap3;
-	private ArrayList<Object> trap4;
-	private ArrayList<Object> trap5;
-	private ArrayList<Object> trap6;
-	public ArrayList<Object> getTrap1() {
-		return trap1;
-	}
-	public void setTrap1(ArrayList<Object> trap1) {
-		this.trap1 = trap1;
-	}
-	public ArrayList<Object> getTrap2() {
-		return trap2;
-	}
-	public void setTrap2(ArrayList<Object> trap2) {
-		this.trap2 = trap2;
-	}
-	public ArrayList<Object> getTrap3() {
-		return trap3;
-	}
-	public void setTrap3(ArrayList<Object> trap3) {
-		this.trap3 = trap3;
-	}
-	public ArrayList<Object> getTrap4() {
-		return trap4;
-	}
-	public void setTrap4(ArrayList<Object> trap4) {
-		this.trap4 = trap4;
-	}
-	public ArrayList<Object> getTrap5() {
-		return trap5;
-	}
-	public void setTrap5(ArrayList<Object> trap5) {
-		this.trap5 = trap5;
-	}
-	public ArrayList<Object> getTrap6() {
-		return trap6;
-	}
-	public void setTrap6(ArrayList<Object> trap6) {
-		this.trap6 = trap6;
-	}
-}
-
 class ClosedLoopGridJSONData{
 
 	private String clearTimeOut;
@@ -682,7 +638,7 @@
 	public void setVerificationclearTimeOut(String verificationclearTimeOut) {
 		this.verificationclearTimeOut = verificationclearTimeOut;
 	}
-	
+
 
 	public ArrayList<Object> getConnecttriggerSignatures() {
 		return connecttriggerSignatures;
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java
index 431482d..d1043f7 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java
@@ -701,6 +701,7 @@
 				//List Datatype
 				Set<String> keys= keyValues.keySet();
 				Iterator<String> itr=keys.iterator();
+				boolean isDefinedType = false;
 				while(itr.hasNext()){
 					String key= itr.next();
 					if(!("type").equals(key) ||("required").equals(key))
@@ -713,18 +714,19 @@
 							    constraints.add(keyValues.get(key));
 							}
 						}else{
-							//This is user defined string
+							//This is user defined type
 							String trimValue=value.substring(value.lastIndexOf('.')+1);
 							StringBuilder referenceIndividualStringBuilder= new StringBuilder();
 							referenceIndividualStringBuilder.append(keySetString+"="+trimValue+":MANY-true");
 							referenceStringBuilder.append(referenceIndividualStringBuilder+",");
+							isDefinedType = true;
 						}
 					}				
 
 				}
 
-				if(keyValues.get("type").equalsIgnoreCase(LIST) &&
-					(constraints == null || constraints.isEmpty()) ) {
+				if(!isDefinedType && keyValues.get("type").equalsIgnoreCase(LIST) &&
+					(constraints == null || constraints.isEmpty()) ) {   //type is list but no constraints defined.
 						referenceStringBuilder.append(keySetString+"=MANY-true"+",");
 				}
 			}else{
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PDPController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PDPController.java
index 7966af1..a8a4279 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PDPController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PDPController.java
@@ -348,8 +348,8 @@
 
 			PrintWriter out = response.getWriter();
 			refreshGroups(request);
-			String responseString = mapper.writeValueAsString(groups);
-			JSONObject j = new JSONObject("{pdpEntityDatas: " + responseString + "}");
+			JsonMessage msg = new JsonMessage(mapper.writeValueAsString(groups));
+			JSONObject j = new JSONObject(msg);
 			out.write(j.toString());
 		}
 		catch (Exception e){
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/CLSiteDictionary.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/CLSiteDictionary.html
index 569f7bf..02175f9 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/CLSiteDictionary.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/CLSiteDictionary.html
@@ -23,10 +23,6 @@
 			<div class="modal-content">
         <div class="modal-header">
             <h2 class="font-showcase-font-name" style="color : #157bb2">{{label}}</h2>
-			<div class="corner-button in">
-				<button type="button" class="close" aria-label="Close"
-				ng-click="$dismiss('cancel')"></button>
-			</div>
         </div>
 		<form name="formdata" ng-submit="saveCLSite(editCLSite);" novalidate>
         <div class="modal-body">
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/CLVarbindDictionary.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/CLVarbindDictionary.html
index 2271992..2858d97 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/CLVarbindDictionary.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/CLVarbindDictionary.html
@@ -23,10 +23,6 @@
 			<div class="modal-content">
         <div class="modal-header">
             <h2 class="font-showcase-font-name" style="color : #157bb2">{{label}}</h2>
-			<div class="corner-button in">
-				<button type="button" class="close" aria-label="Close"
-				ng-click="$dismiss('cancel')"></button>
-			</div>
         </div>
 		<form name="formdata" ng-submit="saveCLVarbind(editCLVarbind);" novalidate>
         <div class="modal-body">
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/FWZoneDictionary.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/FWZoneDictionary.html
index 194f448..380f22b 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/FWZoneDictionary.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/FWZoneDictionary.html
@@ -23,10 +23,6 @@
 			<div class="modal-content">
         <div class="modal-header">
             <h2 class="font-showcase-font-name" style="color : #157bb2">{{label}}</h2>
-			<div class="corner-button in">
-				<button type="button" class="close" aria-label="Close"
-				ng-click="$dismiss('cancel')"></button>
-			</div>
         </div>
 		<form name="formdata" ng-submit="saveZoneName(editZoneName);" novalidate>
         <div class="modal-body">
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSConfigNameDictionary.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSConfigNameDictionary.html
index 0b89a31..cfde1c2 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSConfigNameDictionary.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSConfigNameDictionary.html
@@ -23,10 +23,6 @@
 			<div class="modal-content">
         <div class="modal-header">
             <h2 class="font-showcase-font-name" style="color : #157bb2">{{label}}</h2>
-			<div class="corner-button in">
-				<button type="button" class="close" aria-label="Close"
-				ng-click="$dismiss('cancel')"></button>
-			</div>
         </div>
 		<form name="formdata" ng-submit="saveMSConfig(editMSConfig);" novalidate>
         <div class="modal-body">
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSDCAEUUIDDictionary.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSDCAEUUIDDictionary.html
index 89e3aff..4fded51 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSDCAEUUIDDictionary.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSDCAEUUIDDictionary.html
@@ -23,10 +23,6 @@
 			<div class="modal-content">
         <div class="modal-header">
             <h2 class="font-showcase-font-name" style="color : #157bb2">{{label}}</h2>
-			<div class="corner-button in">
-				<button type="button" class="close" aria-label="Close"
-				ng-click="$dismiss('cancel')"></button>
-			</div>
         </div>
 		<form name="formdata" ng-submit="saveDCAEUUID(editDCAEuuid);" novalidate>
         <div class="modal-body">
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSLocationDictionary.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSLocationDictionary.html
index a691987..609c9f3 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSLocationDictionary.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSLocationDictionary.html
@@ -23,10 +23,6 @@
 			<div class="modal-content">
         <div class="modal-header">
             <h2 class="font-showcase-font-name" style="color : #157bb2">{{label}}</h2>
-			<div class="corner-button in">
-				<button type="button" class="close" aria-label="Close"
-				ng-click="$dismiss('cancel')"></button>
-			</div>
         </div>
 		<form name="formdata" ng-submit="saveMSLocation(editMSLocation);" novalidate>
         <div class="modal-body">
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSModelsDictionary.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSModelsDictionary.html
index 15a4760..fbdd8cd 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSModelsDictionary.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/MSModelsDictionary.html
@@ -23,10 +23,6 @@
 			<div class="modal-content">
         <div class="modal-header">
             <h2 class="font-showcase-font-name" style="color : #157bb2">{{label}}</h2>
-			<div class="corner-button in">
-				<button type="button" class="close" aria-label="Close"
-				ng-click="$dismiss('cancel')"></button>
-			</div>
         </div>
 		<form name="formdata" ng-submit="saveMSModel(editMSmodelName);" novalidate>
         <div class="modal-body">
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/ModelAttributeDictionary.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/ModelAttributeDictionary.html
index 201e1ba..0531a00 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/ModelAttributeDictionary.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Dictionary/ModelAttributeDictionary.html
@@ -24,7 +24,6 @@
         <div class="modal-header">
             <h2 class="font-showcase-font-name" style="color : #157bb2">{{label}}</h2>
         </div>
-        <div class="divider-container"><hr> </div>
 		<form name="formdata" ng-submit="saveModelAttribute(editModelAttribute);" novalidate>
         <div class="modal-body">
 			<div class="form-group row">
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Edit_Roles_Window.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Edit_Roles_Window.html
index 11e960b..7974d4e 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Edit_Roles_Window.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/Edit_Roles_Window.html
@@ -40,13 +40,13 @@
 			<div class="form-group row">
 			<div class="form-group col-sm-6" >
 				<label><sup><b>*</b></sup>Scope:</label><br>
-				<select class="form-control" multiple  ng-model="editRole.scope" ng-options="option for option in scopeDatas" ></select>
+				<select class="form-control" multiple  ng-model="editRole.scope" ng-options="option for option in scopeDatas" title="Select the Scopes from the dropdown."></select>
 			</div>
 			</div>
 		</div>
 		<div class="modal-footer">
-			<button class="btn btn-success" herf="javascript:void(0)" ng-click="saveRole(editRole);">Save</button>
-			<button class="btn btn-default" herf="javascript:void(0)" ng-click="close()">Close</button>
+			<button class="btn btn-success" herf="javascript:void(0)" ng-click="saveRole(editRole);" title="OnClick Policy Role is saved.">Save</button>
+			<button class="btn btn-default" herf="javascript:void(0)" ng-click="close()" title="OnClick Policy Role Window is closed.">Close</button>
 		</div>
 	</div>
 </div>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/PDPTabWindows/AddorEditPDPtoGroup.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/PDPTabWindows/AddorEditPDPtoGroup.html
index cbb617c..cc3d076 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/PDPTabWindows/AddorEditPDPtoGroup.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/PDPTabWindows/AddorEditPDPtoGroup.html
@@ -28,34 +28,34 @@
 			<div class="form-group row">
             <div class="form-group col-sm-6">
                 <label>PDP URL:<sup><b>*</b></sup> </label><br>
-                <input type="text"  class="form-control" ng-model="editPDPInGroup.id" class="form-control" />
+                <input type="text"  class="form-control" ng-model="editPDPInGroup.id" class="form-control" title="Enter the valid PDP URL value."/>
             </div>
 			</div>
 			<div class="form-group row">
             <div class="form-group col-sm-6">
                 <label>JMX Port:<sup><b>*</b></sup></label><br>
                 <input type="text"  class="form-control" ng-model="editPDPInGroup.jmxPort"
-                       class="form-control"  />
+                       class="form-control"  title="Enter the valid PDP JMX Port Number."/>
             </div>
 			</div>
 			<div class="form-group row">
             <div class="form-group col-sm-6">
                 <label>PDP Name:<sup><b>*</b></sup></label><br>
                 <input type="text"  class="form-control" ng-model="editPDPInGroup.name"
-                      class="form-control"  />
+                      class="form-control"  title="Enter the PDP Name."/>
             </div>
 			</div>
 			<div class="form-group row">
             <div class="form-group col-sm-6">
                 <label>PDP Description:</label><br>
                 <input type="text"  class="form-control" ng-model="editPDPInGroup.description"
-                      class="form-control"/>
+                      class="form-control" title="Enter the PDP Description."/>
             </div>
 			</div>
         </div>
         <div class="modal-footer">
-            <button class="btn btn-success"  herf="javascript:void(0)" ng-click="savePDPInGroup(editPDPInGroup);">Save</button>
-            <button class="btn btn-default" herf="javascript:void(0)" ng-click="close()">Close</button>
+            <button class="btn btn-success"  herf="javascript:void(0)" ng-click="savePDPInGroup(editPDPInGroup);" title="OnClick PDP Group is created.">Save</button>
+            <button class="btn btn-default" herf="javascript:void(0)" ng-click="close()" title="OnClick PDP Group Window is closed.">Close</button>
 		</div>
     </div>
 	</div>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/PushtabWindow/removeGroupPoliciesWindow.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/PushtabWindow/removeGroupPoliciesWindow.html
index d6bde69..84c6c3f 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/PushtabWindow/removeGroupPoliciesWindow.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/PushtabWindow/removeGroupPoliciesWindow.html
@@ -29,8 +29,8 @@
             <div style="width: 100%; height:580px" ui-grid = "removePoliciesGrid" ui-grid-pagination ui-grid-selection ui-grid-exporter class= "grid"></div>
         </div>
         <div class="modal-footer">
-            <button class="btn btn-success" herf="javascript:void(0)" ng-click="removePolicies();">Remove</button>
-            <button class="btn btn-default" herf="javascript:void(0)" ng-click="$close()">Close</button>
+            <button class="btn btn-success" herf="javascript:void(0)" ng-click="removePolicies();" title="OnClick Policy will be removed from PDP Group.">Remove</button>
+            <button class="btn btn-default" herf="javascript:void(0)" ng-click="$close()" title="OnClick Remove Policy Window is Closed.">Close</button>
 		</div>
     </div>
 	</div>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/new_PDPGroup_Window.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/new_PDPGroup_Window.html
index e13a140..8eae7a1 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/new_PDPGroup_Window.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/Windows/new_PDPGroup_Window.html
@@ -28,19 +28,19 @@
 			<div class="form-group row">
 			<div class="form-group col-sm-6">
 				<label>Group Name:<sup><b>*</b></sup> </label><br>
-				<input type="text"  class="form-control" ng-model="editPDPGroup.groupName"/>
+				<input type="text"  class="form-control" ng-model="editPDPGroup.groupName" title="Enter the Valid PDP Group Name."/>
 			</div>
 			</div>
 			<div class="form-group row">
 			<div class="form-group col-sm-6">
 				<label><sup><b></b></sup>Group Description:</label><br>
-				<input type="text"   class="form-control" ng-model="editPDPGroup.description"/>
+				<input type="text"   class="form-control" ng-model="editPDPGroup.description" title="Enter the Description"/>
 			</div>
 			</div>
 		</div>
 		<div class="modal-footer">
-			<button class="btn btn-success" herf="javascript:void(0)" ng-click="savePDPGroup(editPDPGroup);">Save</button>
-			<button class="btn btn-default" herf="javascript:void(0)" ng-click="close()">Close</button>
+			<button class="btn btn-success" herf="javascript:void(0)" ng-click="savePDPGroup(editPDPGroup);" title="OnClick PDP Group is saved.">Save</button>
+			<button class="btn btn-default" herf="javascript:void(0)" ng-click="close()" title="OnClick PDP Group Window is closed.">Close</button>
 		</div>
 	</div>
 			</div>
@@ -58,11 +58,11 @@
 			<div class="form-group row">
 			<div class="form-group col-sm-6">
 				<label> Group Name:<sup><b>*</b></sup></label><br>
-				<input type="text"  class="form-control"  ng-model="editPDPGroup.name"/>
+				<input type="text"  class="form-control"  ng-model="editPDPGroup.name" title="Enter the Valid PDP Group Name."/>
 			</div>
 			<div class="form-group col-sm-6">
 				<label>Group Description:</label><br>
-				<input type="text" class="form-control" ng-model="editPDPGroup.description"/>
+				<input type="text" class="form-control" ng-model="editPDPGroup.description" title="Enter the Description"/>
 			</div>
 			</div>
 			<div >
@@ -75,8 +75,8 @@
 			</div>
 		</div>
 	<div class="modal-footer">
-		<button class="btn btn-success" herf="javascript:void(0)" ng-click="savePDPGroup(editPDPGroup);">Save</button>
-		<button class="btn btn-default" herf="javascript:void(0)" ng-click="close()">Close</button>
+		<button class="btn btn-success" herf="javascript:void(0)" ng-click="savePDPGroup(editPDPGroup);" title="OnClick PDP Group is Updated.">Save</button>
+		<button class="btn btn-default" herf="javascript:void(0)" ng-click="close()" title="OnClick PDP Group Window is closed.">Close</button>
 	</div>
 	</div>
 			</div>
@@ -101,7 +101,7 @@
 			</div>
 		</div>
 	<div class="modal-footer">
-		<button class="btn btn-default" herf="javascript:void(0)" ng-click="close()">Close</button>
+		<button class="btn btn-default" herf="javascript:void(0)" ng-click="close()" title="OnClick Show Policies PDP Group Window is closed.">Close</button>
 	</div>
 	</div>
 	</div>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/pdpController.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/pdpController.js
index cab5d26..966a091 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/pdpController.js
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/pdpController.js
@@ -53,14 +53,7 @@
 					 $scope.editPdpGroupId = true;
 				 }   
 			 } 
-
-			 PolicyAppService.getData('get_PDPGroupData').then(function(data){
-				 var j = data;
-				 $scope.pdpdatas = JSON.parse(j.data);
-				 console.log($scope.pdpdatas);
-			 },function(error){
-				 console.log("failed");
-			 });
+			 getPDPGroups();
 		 },function (error) {
 			 console.log("failed");
 		 });
@@ -77,7 +70,6 @@
 	};
 
 	$scope.editPDPGroup = null;
-	var dialog = null;
 	$scope.editPDPGroupFunctionPopup = function(pdpGroupData) {
 		$scope.editPDPGroup = pdpGroupData;
 		$( "#dialog" ).dialog({
@@ -87,8 +79,9 @@
 
 	$scope.editPDPGroupFunctionModalPopup = function(pdpGroupData) {
 		$scope.editPDPGroup = pdpGroupData;
+		var modalInstance;
 		if($scope.userRolesDatas[0] == 'super-guest' || $scope.userRolesDatas[0] == 'guest'){
-			var modalInstance = $modal.open({
+			modalInstance = $modal.open({
 				backdrop: 'static', keyboard: false,
 				templateUrl: 'show_policies_pdp_group_popup.html',
 				controller: 'editPDPGrouppopupController',
@@ -102,7 +95,7 @@
 				}
 			}); 
 		}else{
-			var modalInstance = $modal.open({
+			modalInstance = $modal.open({
 				backdrop: 'static', keyboard: false,
 				templateUrl: 'edit_pdp_group_popup.html',
 				controller: 'editPDPGrouppopupController',
@@ -118,10 +111,20 @@
 		}  
 		modalInstance.result.then(function(response){
 			console.log('response', response);
-			$scope.pdpdatas=response.data;
+			getPDPGroups();
 		});
 	};
 
+	function getPDPGroups(){
+		PolicyAppService.getData('get_PDPGroupData').then(function(data){
+			var j = data;
+			$scope.pdpdatas = JSON.parse(j.data);
+			console.log($scope.pdpdatas);
+		},function(error){
+			console.log("failed");
+		});
+	}
+	
 	$scope.addNewPDPGroupPopUpWindow = function(editPDPGroup) {
 		$scope.editPDPGroup = null;
 		var modalInstance = $modal.open({
@@ -161,9 +164,8 @@
 				dataType: 'json',
 				contentType: 'application/json',
 				data: JSON.stringify(postData),
-				success : function(data){
-					$scope.$apply(function(){$scope.pdpdata=data.data;});
-					$scope.pdpdatas=JSON.parse(data.data);
+				success : function(response){
+					$scope.$apply(function(){$scope.pdpdatas=JSON.parse(response.data);});
 				},
 				error : function(data){
 					console.log(data);
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/pdpGroupPopUpController.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/pdpGroupPopUpController.js
index 4b27476..0e28dc0 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/pdpGroupPopUpController.js
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/pdpGroupPopUpController.js
@@ -18,15 +18,16 @@
  * ============LICENSE_END=========================================================
  */
 app.controller('editPDPGrouppopupController' ,  function ($scope, $modalInstance, message, modalService, $modal, Notification){
-	if(message.pdpGroupData==null)
+	if(message.pdpGroupData==null){
 		$scope.label='Add New PDP Group'
-			else{
-				$scope.label='Edit PDP Group'
-				$scope.disableCd=true;
-				$scope.policies = message.pdpGroupData.policies;
-		        $scope.pdps = message.pdpGroupData.pdps;
-		        $scope.selectedPdp = message.pdpGroupData;
-			}
+	}else{
+		$scope.label='Edit PDP Group'
+			$scope.disableCd=true;
+		$scope.policies = message.pdpGroupData.policies;
+		$scope.pdps = message.pdpGroupData.pdps;
+		$scope.selectedPdp = message.pdpGroupData;
+	}
+	
 	$scope.editPDPGroup = message.pdpGroupData;
 
 	$scope.policiesGrid = {
@@ -76,7 +77,7 @@
 		});
 		modalInstance.result.then(function(response){
 			console.log('response', response);
-			$scope.data=response.data;
+			refreshPDPGroupDatas(response);
 		});
 	};
 
@@ -98,34 +99,34 @@
 		});
 		modalInstance.result.then(function(response){
 			console.log('response', response);
-			$scope.data=response.data;
+			refreshPDPGroupDatas(response);
 		});
 	};
 
 	$scope.deletePDPFromGroup = function(data){
 		modalService.popupConfirmWin("Confirm","You are about to delete the PDP Group :  "+data.name+". Do you want to continue?",
-			function(){
-				var uuu = "pdp_Group/remove_pdpFromGroup.htm";
-				var postData={data: data,
-						activePDP : $scope.selectedPdp};
-				$.ajax({
-					type : 'POST',
-					url : uuu,
-					dataType: 'json',
-					contentType: 'application/json',
-					data: JSON.stringify(postData),
-					success : function(data){
-						$scope.$apply(function(){$scope.data=data.data;});
-						Notification.success("PDP Group Deleted Successfully");
-					},
-					error : function(data){
-						console.log(data);
-						Notification.error("Error Occured While Deleting a PDP Group")
-						//modalService.showFailure("Fail","Error while deleting: "+ data.responseText);
-					}
-				});
-
-			})
+				function(){
+			var uuu = "pdp_Group/remove_pdpFromGroup.htm";
+			var postData={data: data,
+					activePDP : $scope.selectedPdp};
+			$.ajax({
+				type : 'POST',
+				url : uuu,
+				dataType: 'json',
+				contentType: 'application/json',
+				data: JSON.stringify(postData),
+				success : function(data){
+					$scope.$apply(function(){
+						refreshPDPGroupDatas(data);
+					});
+					Notification.success("PDP Group Deleted Successfully");
+				},
+				error : function(data){
+					console.log(data);
+					Notification.error("Error Occured While Deleting a PDP Group");
+				}
+			});
+		})
 	};
 
 	$scope.statusOfPDP = function(status){
@@ -167,10 +168,23 @@
 				$modalInstance.close({data:$scope.data});
 			},
 			error : function(data){
-				alert("Error while saving.");
+				Notification.error("Error while saving PDP Group.");
 			}
 		});
 	};
+	
+	function refreshPDPGroupDatas(response){
+		$scope.selectedPDPName = $scope.selectedPdp.id;
+		if(response != undefined){
+			$scope.data = JSON.parse(response.data);
+			for(var i=0; i< $scope.data.length; i++){
+				if($scope.data[i].id === $scope.selectedPDPName){
+					$scope.policies = $scope.data[i].policies;
+			        $scope.pdps = $scope.data[i].pdps;
+				}
+			}
+		}
+	};
 
 	$scope.close = function() {
 		$modalInstance.close();
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/BaseConfigPolicyController.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/BaseConfigPolicyController.js
index 7425c92..02e10bd 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/BaseConfigPolicyController.js
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/BaseConfigPolicyController.js
@@ -82,14 +82,6 @@
     }, function (error) {
     	console.log("failed");
     });
-
-	
-    function extend(obj, src) {
-        for (var key in src) {
-            if (src.hasOwnProperty(key)) obj[key] = src[key];
-        }
-        return obj;
-    }
     
     $scope.savePolicy = function(policy){
     	if(policy.itemContent != undefined){
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/ClosedLoopFaultController.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/ClosedLoopFaultController.js
index 1015e7a..ebc9001 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/ClosedLoopFaultController.js
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/ClosedLoopFaultController.js
@@ -529,6 +529,64 @@
     	}
 	};
 
+	function trapData(){
+		var data = {};
+		if($scope.temp.policy.triggerTrapSignatures.length == 1 || $scope.temp.policy.triggerTrapSignatures["Trap1"] != null){
+			 data = {trap1 : $scope.temp.policy.triggerTrapSignatures.Trap1 }
+		}
+		if($scope.temp.policy.triggerTrapSignatures.length == 2 || $scope.temp.policy.triggerTrapSignatures["Trap2"] != null){
+			 data = {trap1 : $scope.temp.policy.triggerTrapSignatures.Trap1,  trap2 : $scope.temp.policy.triggerTrapSignatures.Trap2}
+		}
+		if($scope.temp.policy.triggerTrapSignatures.length == 3 || $scope.temp.policy.triggerTrapSignatures["Trap3"] != null){
+			 data = {trap1 : $scope.temp.policy.triggerTrapSignatures.Trap1,  trap2 : $scope.temp.policy.triggerTrapSignatures.Trap2,
+					trap3 : $scope.temp.policy.triggerTrapSignatures.Trap3}
+		}
+		if($scope.temp.policy.triggerTrapSignatures.length == 4 || $scope.temp.policy.triggerTrapSignatures["Trap4"] != null){
+			 data = {trap1 : $scope.temp.policy.triggerTrapSignatures.Trap1,  trap2 : $scope.temp.policy.triggerTrapSignatures.Trap2,
+					trap3 : $scope.temp.policy.triggerTrapSignatures.Trap3,   trap4 : $scope.temp.policy.triggerTrapSignatures.Trap4}
+		}
+		if($scope.temp.policy.triggerTrapSignatures.length == 5 || $scope.temp.policy.triggerTrapSignatures["Trap5"] != null){
+			 data = {trap1 : $scope.temp.policy.triggerTrapSignatures.Trap1,  trap2 : $scope.temp.policy.triggerTrapSignatures.Trap2,
+					trap3 : $scope.temp.policy.triggerTrapSignatures.Trap3,   trap4 : $scope.temp.policy.triggerTrapSignatures.Trap4,
+					trap5 : $scope.temp.policy.triggerTrapSignatures.Trap5}
+		}
+		if($scope.temp.policy.triggerTrapSignatures.length == 6 || $scope.temp.policy.triggerTrapSignatures["Trap6"] != null){
+			 data = {trap1 : $scope.temp.policy.triggerTrapSignatures.Trap1,  trap2 : $scope.temp.policy.triggerTrapSignatures.Trap2,
+					trap3 : $scope.temp.policy.triggerTrapSignatures.Trap3,   trap4 : $scope.temp.policy.triggerTrapSignatures.Trap4,
+					trap5 : $scope.temp.policy.triggerTrapSignatures.Trap5, trap6 : $scope.temp.policy.triggerTrapSignatures.Trap6}
+		}	
+		return data;
+	}
+	
+	function faultDatas(){
+		var faultData = {};
+		if($scope.temp.policy.triggerfaultSignatures.length == 1 || $scope.temp.policy.triggerfaultSignatures["Fault1"] != null){
+			 faultData = {trap1 : $scope.temp.policy.triggerfaultSignatures.Fault1 }
+		}
+		if($scope.temp.policy.triggerfaultSignatures.length == 2 || $scope.temp.policy.triggerfaultSignatures["Fault2"] != null){
+			 faultData = {trap1 : $scope.temp.policy.triggerfaultSignatures.Fault1,  trap2 : $scope.temp.policy.triggerfaultSignatures.Fault2}
+		}
+		if($scope.temp.policy.triggerfaultSignatures.length == 3 || $scope.temp.policy.triggerfaultSignatures["Fault3"] != null){
+			 faultData = {trap1 : $scope.temp.policy.triggerfaultSignatures.Fault1,  trap2 : $scope.temp.policy.triggerfaultSignatures.Fault2,
+					trap3 : $scope.temp.policy.triggerfaultSignatures.Fault3}
+		}
+		if($scope.temp.policy.triggerTrapSignatures.length == 4 || $scope.temp.policy.triggerfaultSignatures["Fault4"] != null){
+			 faultData = {trap1 : $scope.temp.policy.triggerfaultSignatures.Fault1,  trap2 : $scope.temp.policy.triggerfaultSignatures.Fault2,
+					trap3 : $scope.temp.policy.triggerfaultSignatures.Fault3,   trap4 : $scope.temp.policy.triggerfaultSignatures.Fault4}
+		}
+		if($scope.temp.policy.triggerfaultSignatures.length == 5 || $scope.temp.policy.triggerfaultSignatures["Fault5"] != null){
+			 faultData = {trap1 : $scope.temp.policy.triggerfaultSignatures.Fault1,  trap2 : $scope.temp.policy.triggerfaultSignatures.Fault2,
+					trap3 : $scope.temp.policy.triggerfaultSignatures.Fault3,   trap4 : $scope.temp.policy.triggerfaultSignatures.Fault4,
+					trap5 : $scope.temp.policy.triggerfaultSignatures.Fault5}
+		}
+		if($scope.temp.policy.triggerfaultSignatures.length == 6 || $scope.temp.policy.triggerfaultSignatures["Fault6"] != null){
+			 faultData = {trap1 : $scope.temp.policy.triggerfaultSignatures.Fault1,  trap2 : $scope.temp.policy.triggerfaultSignatures.Fault2,
+					trap3 : $scope.temp.policy.triggerfaultSignatures.Fault3,   trap4 : $scope.temp.policy.triggerfaultSignatures.Fault4,
+					trap5 : $scope.temp.policy.triggerfaultSignatures.Fault5, trap6 : $scope.temp.policy.triggerfaultSignatures.Fault6}
+		}
+		return faultData;
+	}
+	
 	$scope.saveFaultPolicy = function(policy){
 		if(policy.itemContent != undefined){
     		$scope.refreshCheck = true; 
@@ -536,57 +594,8 @@
         	policy.itemContent = "";
     	}
 		$scope.savebutton = false;
-		var data = {};
-		var faultData = {};
-		if($scope.temp.policy.triggerTrapSignatures.length == 1 || $scope.temp.policy.triggerTrapSignatures["Trap1"] != null){
-			var data = {trap1 : $scope.temp.policy.triggerTrapSignatures.Trap1 }
-		}
-		if($scope.temp.policy.triggerTrapSignatures.length == 2 || $scope.temp.policy.triggerTrapSignatures["Trap2"] != null){
-			var data = {trap1 : $scope.temp.policy.triggerTrapSignatures.Trap1,  trap2 : $scope.temp.policy.triggerTrapSignatures.Trap2}
-		}
-		if($scope.temp.policy.triggerTrapSignatures.length == 3 || $scope.temp.policy.triggerTrapSignatures["Trap3"] != null){
-			var data = {trap1 : $scope.temp.policy.triggerTrapSignatures.Trap1,  trap2 : $scope.temp.policy.triggerTrapSignatures.Trap2,
-					trap3 : $scope.temp.policy.triggerTrapSignatures.Trap3}
-		}
-		if($scope.temp.policy.triggerTrapSignatures.length == 4 || $scope.temp.policy.triggerTrapSignatures["Trap4"] != null){
-			var data = {trap1 : $scope.temp.policy.triggerTrapSignatures.Trap1,  trap2 : $scope.temp.policy.triggerTrapSignatures.Trap2,
-					trap3 : $scope.temp.policy.triggerTrapSignatures.Trap3,   trap4 : $scope.temp.policy.triggerTrapSignatures.Trap4}
-		}
-		if($scope.temp.policy.triggerTrapSignatures.length == 5 || $scope.temp.policy.triggerTrapSignatures["Trap5"] != null){
-			var data = {trap1 : $scope.temp.policy.triggerTrapSignatures.Trap1,  trap2 : $scope.temp.policy.triggerTrapSignatures.Trap2,
-					trap3 : $scope.temp.policy.triggerTrapSignatures.Trap3,   trap4 : $scope.temp.policy.triggerTrapSignatures.Trap4,
-					trap5 : $scope.temp.policy.triggerTrapSignatures.Trap5}
-		}
-		if($scope.temp.policy.triggerTrapSignatures.length == 6 || $scope.temp.policy.triggerTrapSignatures["Trap6"] != null){
-			var data = {trap1 : $scope.temp.policy.triggerTrapSignatures.Trap1,  trap2 : $scope.temp.policy.triggerTrapSignatures.Trap2,
-					trap3 : $scope.temp.policy.triggerTrapSignatures.Trap3,   trap4 : $scope.temp.policy.triggerTrapSignatures.Trap4,
-					trap5 : $scope.temp.policy.triggerTrapSignatures.Trap5, trap6 : $scope.temp.policy.triggerTrapSignatures.Trap6}
-		}
-
-		if($scope.temp.policy.triggerfaultSignatures.length == 1 || $scope.temp.policy.triggerfaultSignatures["Fault1"] != null){
-			var faultData = {trap1 : $scope.temp.policy.triggerfaultSignatures.Fault1 }
-		}
-		if($scope.temp.policy.triggerfaultSignatures.length == 2 || $scope.temp.policy.triggerfaultSignatures["Fault2"] != null){
-			var faultData = {trap1 : $scope.temp.policy.triggerfaultSignatures.Fault1,  trap2 : $scope.temp.policy.triggerfaultSignatures.Fault2}
-		}
-		if($scope.temp.policy.triggerfaultSignatures.length == 3 || $scope.temp.policy.triggerfaultSignatures["Fault3"] != null){
-			var faultData = {trap1 : $scope.temp.policy.triggerfaultSignatures.Fault1,  trap2 : $scope.temp.policy.triggerfaultSignatures.Fault2,
-					trap3 : $scope.temp.policy.triggerfaultSignatures.Fault3}
-		}
-		if($scope.temp.policy.triggerTrapSignatures.length == 4 || $scope.temp.policy.triggerfaultSignatures["Fault4"] != null){
-			var faultData = {trap1 : $scope.temp.policy.triggerfaultSignatures.Fault1,  trap2 : $scope.temp.policy.triggerfaultSignatures.Fault2,
-					trap3 : $scope.temp.policy.triggerfaultSignatures.Fault3,   trap4 : $scope.temp.policy.triggerfaultSignatures.Fault4}
-		}
-		if($scope.temp.policy.triggerfaultSignatures.length == 5 || $scope.temp.policy.triggerfaultSignatures["Fault5"] != null){
-			var faultData = {trap1 : $scope.temp.policy.triggerfaultSignatures.Fault1,  trap2 : $scope.temp.policy.triggerfaultSignatures.Fault2,
-					trap3 : $scope.temp.policy.triggerfaultSignatures.Fault3,   trap4 : $scope.temp.policy.triggerfaultSignatures.Fault4,
-					trap5 : $scope.temp.policy.triggerfaultSignatures.Fault5}
-		}
-		if($scope.temp.policy.triggerfaultSignatures.length == 6 || $scope.temp.policy.triggerfaultSignatures["Fault6"] != null){
-			var faultData = {trap1 : $scope.temp.policy.triggerfaultSignatures.Fault1,  trap2 : $scope.temp.policy.triggerfaultSignatures.Fault2,
-					trap3 : $scope.temp.policy.triggerfaultSignatures.Fault3,   trap4 : $scope.temp.policy.triggerfaultSignatures.Fault4,
-					trap5 : $scope.temp.policy.triggerfaultSignatures.Fault5, trap6 : $scope.temp.policy.triggerfaultSignatures.Fault6}
-		}
+		var data = trapData();
+		var faultData = faultDatas();
 		var uuu = "policycreation/save_policy";
 		var postData={policyData: policy,
 				trapData : data,
@@ -627,7 +636,9 @@
 		console.log(policy);
 		document.getElementById("validate").innerHTML = "";
 		var uuu = "policyController/validate_policy.htm";
-		var postData={policyData: policy};
+		var data = trapData();
+		var faultData = faultDatas();
+		var postData={policyData: policy, trapData : data, faultData : faultData};
 		$.ajax({
 			type : 'POST',
 			url : uuu,
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/DCAEMicroServicePolicyController.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/DCAEMicroServicePolicyController.js
index 5ae453a..2b3b743 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/DCAEMicroServicePolicyController.js
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplateController/DCAEMicroServicePolicyController.js
@@ -165,7 +165,7 @@
 
 	 $scope.choices = [];
 	 $scope.attributeDatas = [{"attributes" : $scope.choices}];
-	 
+	 $scope.isInitEditTemplate = true;  //just initially create the edit template, didn't click add button yet.
 	 $scope.addNewChoice = function(value) {
 		 console.log(value);
 		 if(value != undefined){
@@ -176,12 +176,23 @@
 			var div = document.getElementById(value+"@0");
 			if(div != null){
 				var clone = div.cloneNode(true); 
-				var addElement = parentElement.childElementCount + 1;
+				var addElement = parentElement.childElementCount;
 				clone.id = ''+value+'@'+addElement;
 				clone.value = '';
-				clone.className += ' child_single'; //here cloned is single element
-				document.getElementById("div."+value).appendChild(clone);
-				plainAttributeKeys.push(''+value+'@'+addElement);
+				if($scope.temp.policy.editPolicy || $scope.temp.policy.readOnly){ //if it's view or edit
+					if($scope.temp.policy.ruleData[clone.id] || ($scope.temp.policy.editPolicy && !$scope.isInitEditTemplate)){  // Only append child if its value found in ruleData or edit mode
+						if($scope.temp.policy.ruleData[clone.id]){
+						    clone.value = $scope.temp.policy.ruleData[clone.id];
+						}
+						clone.className += ' child_single'; //here cloned is single element
+						document.getElementById("div."+value).appendChild(clone);
+						plainAttributeKeys.push(''+value+'@'+addElement);
+					}
+				}else{ //not view or edit
+					clone.className += ' child_single'; //here cloned is single element
+					document.getElementById("div."+value).appendChild(clone);
+					plainAttributeKeys.push(''+value+'@'+addElement);
+				}
 			}else{
 				div = document.getElementById("div."+value+"@0");
 				
@@ -219,6 +230,7 @@
 								plainAttributeKeys.push(inputs[i].id);
 							}
 						} else {
+//							removeValues.push(inputs[i].id);
 							plainAttributeKeys.push(inputs[i].id);
 						}
 					}else {
@@ -320,8 +332,9 @@
                     	var plainAttributeKeys = [];
                     	$scope.dcaeModelData = data[0].dcaeModelData;
                     	$scope.dcaeJsonDate = data[0].jsonValue;
-                    	$scope.allManyTrueKeys =  data[0].allManyTrueKeys;
-                    	console.log("$scope.allManyTrueKeys: " + $scope.allManyTrueKeys);
+                    	if(data[0].allManyTrueKeys){
+	                    	console.log("$scope.allManyTrueKeys: " + $scope.allManyTrueKeys);
+                    	}
                     	console.log("$scope.dcaeJsonDate: " + $scope.dcaeJsonDate);	
                     	var attributes = $scope.dcaeModelData.attributes;
                     	var refAttributes = $scope.dcaeModelData.ref_attributes;
@@ -371,9 +384,15 @@
                 		
                     });
                     
-                    if($scope.temp.policy.editPolicy || $scope.temp.policy.readOnly){
+                    if($scope.temp.policy.editPolicy || $scope.temp.policy.readOnly){  // If it's veiw or edit
+                    	
+                    	if($scope.temp.policy.editPolicy){
+                        	$scope.isInitEditTemplate = true;
+                    	}
+                    	
                     	var checkData = [];
                     	var data = [];
+                    	    // If ruleData contains extra elements created by clicked add button 
 	                    	if($scope.temp.policy.ruleData != null){
 	                    		var propNames = Object.getOwnPropertyNames($scope.temp.policy.ruleData);
 	                    		propNames.forEach(function(name) {
@@ -383,32 +402,36 @@
 	                    		var extraElements = data;
 	                    		
 	            		    	if(plainAttributeKeys != null){
-	            		    		for(b = 0; b < plainAttributeKeys.length; b++){ // remove already populated elements from extraElements array
+	            		    		for(b = 0; b < plainAttributeKeys.length; b++){ // Remove already populated elements from data array
 	            		    			var newValue = plainAttributeKeys[b].split("*");
 	            		    			for(a = 0; a < data.length; a++){
-		            		    			if(data[a] === newValue[0]){
+		            		    			if(data[a] === newValue[0] || data[a] === (newValue[0]+"@0")){
 		            		    				extraElements.splice(a, 1);
 		            		    			}
 	            		    			}
 	            		    	}
 	                    		
-	            		    	//--- populate these extral elements generated from clicking add button
+	            		    	//--- Populate these extra elements created by clicked add button 
 	                    		for(a = 0; a < extraElements.length; a++){            			
 	                    			if(extraElements[a].includes("@")){
 			                    			var n = extraElements[a].lastIndexOf("@");
-			                    			var key = extraElements[a].substring(0, n+2); //include @x in key also by n+2 since x can be  1, or 2, or 3
-				                            checkData.push(key);
+			                    			if(n > 0){
+				                    			var key = extraElements[a].substring(0, n+2); //include @x in key also by n+2 since x can be  1, or 2, or 3
+					                            checkData.push(key);
+			                    			}
 	                    			}
 	                    		}
 	                    		var unique = checkData.filter(onlyUnique);
 	                    		for(i =0; i < unique.length; i++){
 	                    			//remove @x and let addNewChoice add @1 or @2...
 	                    			var newKey = unique[i].substring(0, unique[i].length-2);
+	                    			console.log("newKey: " + newKey);	
 	                    			$scope.addNewChoice(newKey);
 	                    		}
 	                    	}
 	                    }
-
+                        //After initially create the edit template, reset it to false.
+	                    $scope.isInitEditTemplate = false;
                     }
                     var ele = angular.element(document.getElementById("DynamicTemplate"));
             		$compile(ele.contents())($scope);
@@ -517,7 +540,7 @@
 		    		if (lableList.length > 0){
 		    			array = true;
 		    		}
-		    		if ( key=="0"){
+		    		if ( key==="0"){
 		    			var newKey = lableList.pop();
 		    			$scope.labelLayout(baseLevel, newKey, array );
 		    			if (array){
@@ -597,7 +620,7 @@
 		        			if (list.length===0){ //not dropdown element
 		        				$scope.attributeBox(attributekey, array, attirbuteLabel, defaultValue, isRequired, "text");
 		        			}else{
-		        				$scope.dropBoxLayout(attirbuteLabel, attributekey, array, dataTest[key], list);
+		        				$scope.dropBoxLayout(attirbuteLabel, attributekey, array, dataTest[key], list, isRequired);
 		        			}
 		        			break;
 		        	}
@@ -618,9 +641,9 @@
 		var labeltext = null;
 		var requiredLabName = "";
 		if (matching.includes(attibuteKey)){
-			labeltext = document.createTextNode(attibuteKey + "*!");		
+			labeltext = document.createTextNode(attibuteKey + "*!");	
+			isRequired = true;  //set required as true for matching element
 		}else {
-			//var labeltext = document.createTextNode(refattributeLabel);
 			if(isRequired){
 				requiredLabName = attibuteKey + " *";
 				labeltext = document.createTextNode(requiredLabName);
@@ -656,7 +679,7 @@
 		var checkKey;
 		if(attributeManyKey){
 			checkKey = labelValue + attibuteKey+'@0';
-			textField.setAttribute("id" , ''+labelValue + attibuteKey+'@0'+'');
+			textField.setAttribute("id" , ''+labelValue + attibuteKey+'@0'+''); 
 			var divTag = document.createElement("div");
 			divTag.setAttribute("id", "div."+ labelValue +attibuteKey);
 			var addButton = document.createElement("BUTTON");
@@ -679,7 +702,10 @@
 			var divTag = document.createElement("div");
 			divTag.setAttribute("id", id); 
 			document.getElementById(divID).appendChild(divTag);
-			textField.className += ' first_child';			
+			textField.className += ' first_child';	
+			if(isRequired){
+				textField.setAttribute("required", "true");
+			}			
 			divTag.appendChild(textField); 			
 			document.getElementById(divID).appendChild(divTag); 
 			
@@ -720,18 +746,6 @@
 			if (attributeManyKey){
 				var newCheckKey = checkKey.replace(attibuteKey + '@0',attibuteKey);
 				document.getElementById(newCheckKey +'@0').value = $scope.temp.policy.ruleData[newCheckKey +'@0'];
-				var i =1 ;
-				while(true){
-					var newValue = $scope.temp.policy.ruleData[newCheckKey+'@'+i];
-					if(newValue==null){
-						break;
-					}else{
-						$scope.addNewChoice(newCheckKey);
-						document.getElementById(newCheckKey+'@'+i).value = newValue;
-						i = i+1;
-					}
-				}		
-		
 			}else{
 				document.getElementById(checkKey).value = $scope.temp.policy.ruleData[checkKey];
 			}
@@ -807,24 +821,24 @@
 
 
 	var label = document.createElement("Label")
+	
+	var refAttributes = $scope.dcaeModelData.ref_attributes;
+	if(isRequired != true && refAttributes){ //check refAttributes also		
+	   		var refAttributesList = refAttributes.split(splitComma);
+	   		for (k = 0; k < refAttributesList.length; k++){
+	       		var refAttribute = refAttributesList[k].split(splitEqual);	       		
+	       		if (attributeName == refAttribute[0].trim() && refAttribute[1].includes("required-true")){
+	       			isRequired = true;
+	       		}
+	   		}
+	}
+	
 	if (matching.includes(attributeName)){
 		var labeltext = document.createTextNode(attributeName + "*!");
 		label.appendChild(labeltext);
+		isRequired = true;  //set required as true for matching element
 	}else {
-		var labeltext = document.createTextNode(attributeName);
-		var isRequired = false;
-		var refAttributes = $scope.dcaeModelData.ref_attributes;
-		if(refAttributes){		
-       		var refAttributesList = refAttributes.split(splitComma);
-       		for (k = 0; k < refAttributesList.length; k++){
-           		var refAttribute = refAttributesList[k].split(splitEqual);
-           		
-           		if (attributeName == refAttribute[0].trim() && refAttribute[1].includes("required-true")){
-           			isRequired = true;
-           		}
-       		}	    			
-		}
-		
+		var labeltext = document.createTextNode(attributeName);		
 		if(isRequired){
 			requiredLabName = attributeName+ " *";
 			labeltext = document.createTextNode(requiredLabName);
@@ -844,9 +858,11 @@
 	if(isRequired){
 	   listField.setAttribute("required", true);
 	}
-	var optionFirst = document.createElement('option');
-	optionFirst.setAttribute('value', "");
-	listField.appendChild(optionFirst);	
+	if( many != true || isRequired != true){ // add an empty option for not required or not multiple select element
+		var optionFirst = document.createElement('option');
+		optionFirst.setAttribute('value', "");
+		listField.appendChild(optionFirst);	
+	}
 	
 	for (i=0; i < listemunerateValues.length; i += 1) {
 	    option = document.createElement('option');
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/ActionPolicyTemplate.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/ActionPolicyTemplate.html
index 313015d..3aa0508 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/ActionPolicyTemplate.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/ActionPolicyTemplate.html
@@ -7,12 +7,13 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-readonly="temp.policy.editPolicy"
 						ng-model="temp.policy.policyName" required pattern="\S+"
-						title="Enter the Policy Name without any spaces" />
+						title="Enter Policy Name without any spaces and special characters and will accept _." />
 				</div>
 				<div class="form-group col-sm-6">
 					<label>Description:</label> <input type="text" class="form-control"
 						ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.policyDescription" />
+						ng-model="temp.policy.policyDescription" 
+						title="Description field will accept any type of data."/>
 				</div>
 			</div>
 			<div class="well">
@@ -20,7 +21,7 @@
 					<div class="form-group col-sm-2">
 						<label>Component Attributes:<sup><b>*</b></sup></label><br>
 						<button type="button" class="btn btn-default"
-							ng-disabled="temp.policy.readOnly" ng-click="addNewChoice()">
+							ng-disabled="temp.policy.readOnly" ng-click="addNewChoice()" title="onClick Component Attribute row is added.">
 							<i class="fa fa-plus"></i>
 						</button>
 					</div>
@@ -31,18 +32,19 @@
 							<div class="form-group col-sm-3">
 								<select class="form-control" ng-disabled="temp.policy.readOnly"
 									ng-model="choice.key"
-									ng-options="option for option in attributeDictionaryDatas track by option">
+									ng-options="option for option in attributeDictionaryDatas track by option"
+									title="Select the dropdown value driven from Attribute (common)Dictionary.">
 									<option value="">{{choice.key}}</option>
 								</select>
 							</div>
 							<div class="form-group col-sm-3">
 								<input type="text" class="form-control"
 									ng-disabled="temp.policy.readOnly" ng-model="choice.value"
-									placeholder="Attribute Value" />
+									placeholder="Attribute Value" title="Enter the Attribute Value without any spaces and special characters"/>
 							</div>
 							<div class="form-group col-sm-1">
 								<button type="button" class="btn btn-default" ng-show="$last"
-									ng-disabled="temp.policy.readOnly" ng-click="removeChoice()">
+									ng-disabled="temp.policy.readOnly" ng-click="removeChoice()" title="onClick will remove the last row">
 									<i class="fa fa-minus"></i>
 								</button>
 							</div>
@@ -56,7 +58,7 @@
 					<div class="form-group col-sm-1">
 						<button type="button" class="btn btn-default"
 							ng-disabled="temp.policy.readOnly"
-							ng-click="addNewRuleAlgorithm()">
+							ng-click="addNewRuleAlgorithm()" title="onClick Rule Algorithms row is added.">
 							<i class="fa fa-plus"></i>
 						</button>
 					</div>
@@ -75,7 +77,7 @@
 								ng-disabled="temp.policy.readOnly"
 								ng-model="ruleAlgorithmschoice.dynamicRuleAlgorithmField1"
 								ng-options="option for option in attributeDictionaryDatas track by option"
-								name="dynamicRuleAlgorithmField1">
+								name="dynamicRuleAlgorithmField1" title="Select the dropdown value driven from Attribute (common)Dictionary.">
 								<option value="">{{ruleAlgorithmschoice.dynamicRuleAlgorithmField1}}</option>
 							</select>
 						</div>
@@ -84,7 +86,7 @@
 								ng-disabled="temp.policy.readOnly"
 								ng-model="ruleAlgorithmschoice.dynamicRuleAlgorithmCombo"
 								ng-options="option for option in functionDefinitionDatas"
-								name="dynamicRuleAlgorithmCombo">
+								name="dynamicRuleAlgorithmCombo" title="Select the dropdown value driven from FunctionDataType.">
 								<option value="">{{ruleAlgorithmschoice.dynamicRuleAlgorithmCombo}}</option>
 							</select>
 						</div>
@@ -92,12 +94,12 @@
 							<input type="text" class="form-control"
 								ng-disabled="temp.policy.readOnly"
 								ng-model="ruleAlgorithmschoice.dynamicRuleAlgorithmField2"
-								name="dynamicRuleAlgorithmField2" />
+								name="dynamicRuleAlgorithmField2" title="Enter the Value without any spaces and special characters and for rule formation use A1, A2,..etc., based on above Rules."/>
 						</div>
 						<div class="form-group col-sm-1">
 							<button type="button" class="btn btn-default" ng-show="$last"
 								ng-disabled="temp.policy.readOnly"
-								ng-click="removeRuleAlgorithm()">
+								ng-click="removeRuleAlgorithm()" title="onClick will remove the last row">
 								<i class="fa fa-minus"></i>
 							</button>
 						</div>
@@ -110,7 +112,7 @@
 					<div class="form-group col-sm-6">
 						<label>Action Performer:<sup><b>*</b></sup></label><BR> <select
 							class="form-control" ng-disabled="temp.policy.readOnly"
-							ng-model="temp.policy.actionPerformer">
+							ng-model="temp.policy.actionPerformer" title="Select the Action Performer values from dropdown.">
 							<option>PEP</option>
 							<option>PDP</option>
 						</select>
@@ -120,7 +122,7 @@
 							class="form-control"
 							ng-disabled="temp.policy.readOnly"
 							ng-model="temp.policy.actionAttributeValue"
-							ng-options="option for option in actionPolicyDictionaryDatas track by option"></select>
+							ng-options="option for option in actionPolicyDictionaryDatas track by option" title="Select the dropdown value driven from Action (Action)Dictionary."></select>
 					</div>
 				</div>
 			</div>
@@ -129,11 +131,11 @@
 			<div class="modal-footer">
 				<button class="btn btn-primary" herf="javascript:void(0)"
 					ng-disabled="temp.policy.readOnly"
-					ng-click="validatePolicy(temp.policy);">Validate</button>
+					ng-click="validatePolicy(temp.policy);" title="Validate the data entered in the Policy fields.">Validate</button>
 				<button class="btn btn-success" ng-disabled="savebutton"
 					herf="javascript:void(0)" ng-disabled="temp.policy.readOnly"
-					ng-click="saveActionPolicy(temp);">Save</button>
-				<button type="button" class="btn btn-default" ng-click="refresh();">Close</button>
+					ng-click="saveActionPolicy(temp);" title="Save the Policy with validated data.">Save</button>
+				<button type="button" class="btn btn-default" ng-click="refresh();" title="Close the template.">Close</button>
 			</div>
 	</form>
 </div>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/BRMSParamPolicyTemplate.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/BRMSParamPolicyTemplate.html
index d941c24..24994d3 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/BRMSParamPolicyTemplate.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/BRMSParamPolicyTemplate.html
@@ -8,12 +8,13 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-readonly="temp.policy.editPolicy"
 						ng-model="temp.policy.policyName" required pattern="\S+"
-						title="Enter the Policy Name without any spaces" />
+						title="Enter Policy Name without any spaces and special characters and will accept _." />
 				</div>
 				<div class="form-group col-sm-6">
 					<label>Description:</label> <input type="text" class="form-control"
 						ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.policyDescription" />
+						ng-model="temp.policy.policyDescription" 
+						title="Description field will accept any type of data."/>
 				</div>
 			</div>
 			<div class="form-group row">
@@ -22,13 +23,13 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.riskType"
 						ng-options="option for option in riskTypeDictionaryDatas track by option"
-						required pattern="\S+" title="RiskType is required"></select>
+						required pattern="\S+" title="Select the dropdown value driven from RiskType (Safe Policy)Dictionary."></select>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Risk Level:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.riskLevel"
-						required pattern="\S+" title="RiskLevel is required">
+						required pattern="\S+" title="Select the dropdown Risk level value.">
 						<option>1</option>
 						<option>2</option>
 						<option>3</option>
@@ -39,7 +40,7 @@
 					<label>Guard:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.guard"
-						required pattern="\S+" title="Guard is required">
+						required pattern="\S+" title="Select the dropdown Guard value.">
 						<option>True</option>
 						<option>False</option></select>
 				</div>
@@ -48,19 +49,19 @@
 				<div class="form-group col-sm-3">
 					<label>Time to Live Date:</label> <input type="text" id="ttlDate"
 						class="form-control" name="ttlDate" ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.ttlDate" />
+						ng-model="temp.policy.ttlDate" title="Select the date from calender onclick on the field."/>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Controller:<sup></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.brmsController"
-						ng-options="option for option in brmsControllerDatas track by option"></select>
+						ng-options="option for option in brmsControllerDatas track by option" title="Select the dropdown value driven from BRMS Controller (BRMS)Dictionary."></select>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Dependencies:<sup></sup></label> <select
 						class="form-control" multiple ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.brmsDependency"
-						ng-options="option for option in brmsDependencyDatas track by option"></select>
+						ng-options="option for option in brmsDependencyDatas track by option" title="Select the dropdown value driven from BRMS Dependency (BRMS)Dictionary."></select>
 				</div>
 			</div>
 		</div>
@@ -69,7 +70,7 @@
 				<div class="form-group col-sm-2">
 					<label>Rule Attributes:<sup><b></b></sup></label>
 					<button type="button" class="btn btn-default"
-						ng-disabled="temp.policy.readOnly" ng-click="addNewChoice()">
+						ng-disabled="temp.policy.readOnly" ng-click="addNewChoice()" title="onClick Rule Attribute row is added.">
 						<i class="fa fa-plus"></i>
 					</button>
 				</div>
@@ -79,17 +80,17 @@
 					<div class="form-group row" style="margin-left: 2%">
 						<div class="form-group col-sm-3">
 							<input type="text" class="form-control"
-								ng-disabled="temp.policy.readOnly" ng-model="choice.key"
+								ng-disabled="temp.policy.readOnly" ng-model="choice.key" title="Enter the Rule Attribute Key without any spaces and special characters"
 								placeholder="Attribute Key" />
 						</div>
 						<div class="form-group col-sm-3">
 							<input type="text" class="form-control"
-								ng-disabled="temp.policy.readOnly" ng-model="choice.value"
+								ng-disabled="temp.policy.readOnly" ng-model="choice.value" title="Enter the Rule Attribute Value without any spaces and special characters"
 								placeholder="Attribute Value" />
 						</div>
 						<div class="form-group col-sm-1">
 							<button type="button" class="btn btn-default" ng-show="$last"
-								ng-disabled="temp.policy.readOnly" ng-click="removeChoice()">
+								ng-disabled="temp.policy.readOnly" ng-click="removeChoice()" title="onClick will remove the last row">
 								<i class="fa fa-minus"></i>
 							</button>
 						</div>
@@ -104,7 +105,7 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.ruleName"
 						ng-options="option for option in brmsParamDictionaryDatas track by option"
-						ng-click="addDataToFields(temp.policy.ruleName);">
+						ng-click="addDataToFields(temp.policy.ruleName);" title="Select the dropdown value driven from BRMSParamTemplate (BRMS)Dictionary">
 						<option value="">{{temp.policy.ruleName}}</option>
 					</select>
 				</div>
@@ -129,7 +130,7 @@
 			<h2 class="font-showcase-font-name"> Rule Preview: </h2>
 			<div class="divider-container"><hr> </div>
 			<textarea type="text" style="width: 100%; height: 800px" ng-bind="datarule" ng-disabled="true"></textarea>
-			<button class="btn btn-default" herf="javascript:void(0)" ng-click="hideRule();">Hide Rule</button>
+			<button class="btn btn-default" herf="javascript:void(0)" ng-click="hideRule();" title="OnClick the BRMS Rule will be Hidden.">Hide Rule</button>
 		</div>	
 		</div>
 		<br>
@@ -137,14 +138,14 @@
 			<div>
 				<button class="btn btn-primary" herf="javascript:void(0)"
 					ng-disabled="temp.policy.readOnly"
-					ng-click="validatePolicy(temp.policy);">Validate</button>
+					ng-click="validatePolicy(temp.policy);" title="Validate the data entered in the Policy fields.">Validate</button>
 				<button class="btn btn-default" herf="javascript:void(0)"
-					ng-disabled="validateSuccess" ng-click="ShowRule(temp);">Show
+					ng-disabled="validateSuccess" ng-click="ShowRule(temp);" title="OnClick the BRMS Rule will be previewed.">Show
 					Rule</button>
 				<button class="btn btn-success" herf="javascript:void(0)"
 					ng-disabled="savebutton" ng-disabled="temp.policy.readOnly"
-					ng-click="saveBrmsParamPolicy(temp);">Save</button>
-				<button type="button" class="btn btn-default" ng-click="refresh();">Close</button>
+					ng-click="saveBrmsParamPolicy(temp);" title="Save the Policy with validated data.">Save</button>
+				<button type="button" class="btn btn-default" ng-click="refresh();" title="Close the template.">Close</button>
 			</div>
 		</div>
 	</form>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/BRMSRawPolicyTemplate.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/BRMSRawPolicyTemplate.html
index 8751768..bb94f33 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/BRMSRawPolicyTemplate.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/BRMSRawPolicyTemplate.html
@@ -7,12 +7,13 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-readonly="temp.policy.editPolicy"
 						ng-model="temp.policy.policyName" required pattern="\S+"
-						title="Enter the Policy Name without any spaces" />
+						title="Enter Policy Name without any spaces and special characters and will accept _." />
 				</div>
 				<div class="form-group col-sm-6">
 					<label>Description:</label> <input type="text" class="form-control"
 						ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.policyDescription" />
+						ng-model="temp.policy.policyDescription" 
+						title="Description field will accept any type of data."/>
 				</div>
 			</div>
 			<div class="form-group row">
@@ -21,13 +22,13 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.riskType"
 						ng-options="option for option in riskTypeDictionaryDatas track by option"
-						required pattern="\S+" title="RiskType is required"></select>
+						required pattern="\S+" title="Select the dropdown value driven from RiskType (Safe Policy)Dictionary."></select>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Risk Level:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.riskLevel"
-						required pattern="\S+" title="RiskLevel is required">
+						required pattern="\S+" title="Select the dropdown Risk level value.">
 						<option>1</option>
 						<option>2</option>
 						<option>3</option>
@@ -38,7 +39,7 @@
 					<label>Guard:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.guard"
-						required pattern="\S+" title="Guard is required">
+						required pattern="\S+" title="Select the dropdown Guard value.">
 						<option>True</option>
 						<option>False</option></select>
 				</div>
@@ -47,19 +48,19 @@
 				<div class="form-group col-sm-3">
 					<label>Time to Live Date:</label> <input type="text" id="ttlDate"
 						class="form-control" name="ttlDate" ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.ttlDate" />
+						ng-model="temp.policy.ttlDate" title="Select the date from calender onclick on the field."/>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Controller:<sup></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.brmsController"
-						ng-options="option for option in brmsControllerDatas track by option"></select>
+						ng-options="option for option in brmsControllerDatas track by option" title="Select the dropdown value driven from BRMS Controller (BRMS)Dictionary."></select>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Dependencies:<sup></sup></label> <select
 						class="form-control" multiple ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.brmsDependency"
-						ng-options="option for option in brmsDependencyDatas track by option"></select>
+						ng-options="option for option in brmsDependencyDatas track by option" title="Select the dropdown value driven from BRMS Dependency (BRMS)Dictionary."></select>
 				</div>
 			</div>
 		</div>
@@ -68,7 +69,7 @@
 				<div class="form-group col-sm-2">
 					<label>Rule Attributes:<sup></sup></label>
 					<button type="button" class="btn btn-default"
-						ng-disabled="temp.policy.readOnly" ng-click="addNewChoice()">
+						ng-disabled="temp.policy.readOnly" ng-click="addNewChoice()" title="onClick Rule Attribute row is added.">
 						<i class="fa fa-plus"></i>
 					</button>
 				</div>
@@ -78,17 +79,17 @@
 					<div class="form-group row" style="margin-left: 2%">
 						<div class="form-group col-sm-3">
 							<input type="text" class="form-control"
-								ng-disabled="temp.policy.readOnly" ng-model="choice.key"
+								ng-disabled="temp.policy.readOnly" ng-model="choice.key" title="Enter the Rule Attribute Key without any spaces and special characters"
 								placeholder="Attribute Key" />
 						</div>
 						<div class="form-group col-sm-3">
 							<input type="text" class="form-control"
-								ng-disabled="temp.policy.readOnly" ng-model="choice.value"
+								ng-disabled="temp.policy.readOnly" ng-model="choice.value" title="Enter the Rule Attribute Value without any spaces and special characters"
 								placeholder="Attribute Value" />
 						</div>
 						<div class="form-group col-sm-1">
 							<button type="button" class="btn btn-default" ng-show="$last"
-								ng-disabled="temp.policy.readOnly" ng-click="removeChoice()">
+								ng-disabled="temp.policy.readOnly" ng-click="removeChoice()" title="onClick will remove the last row">
 								<i class="fa fa-minus"></i>
 							</button>
 						</div>
@@ -101,7 +102,7 @@
 				<div class="form-group col-sm-12">
 					<label>Raw Rule:<sup><b>*</b></sup></label>
 					<textarea class="form-control"
-						ng-model="temp.policy.configBodyData"
+						ng-model="temp.policy.configBodyData" title="Enter Valid BRMS Rule."
 						ng-disabled="temp.policy.readOnly" style="height: 400px;" required></textarea>
 				</div>
 			</div>
@@ -112,11 +113,11 @@
 			<div>
 				<button class="btn btn-primary" herf="javascript:void(0)"
 					ng-disabled="temp.policy.readOnly"
-					ng-click="validatePolicy(temp.policy);">Validate</button>
+					ng-click="validatePolicy(temp.policy);" title="Validate the data entered in the Policy fields.">Validate</button>
 				<button class="btn btn-success" herf="javascript:void(0)"
 					ng-disabled="savebutton" ng-disabled="temp.policy.readOnly"
-					ng-click="saveBrmsRawPolicy(temp);">Save</button>
-				<button type="button" class="btn btn-default" ng-click="refresh();">Close</button>
+					ng-click="saveBrmsRawPolicy(temp);" title="Save the Policy with validated data.">Save</button>
+				<button type="button" class="btn btn-default" ng-click="refresh();" title="Close the template.">Close</button>
 			</div>
 		</div>
 	</form>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/BasePolicyTemplate.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/BasePolicyTemplate.html
index c81a98d..682abaa 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/BasePolicyTemplate.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/BasePolicyTemplate.html
@@ -7,12 +7,13 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-readonly="temp.policy.editPolicy"
 						ng-model="temp.policy.policyName" required pattern="\S+"
-						title="Enter the Policy Name without any spaces" />
+						title="Enter Policy Name without any spaces and special characters and will accept _." />
 				</div>
 				<div class="form-group col-sm-6">
 					<label>Description:</label> <input type="text" class="form-control"
 						ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.policyDescription" />
+						ng-model="temp.policy.policyDescription" 
+						title="Description field will accept any type of data." />
 				</div>
 			</div>
 			<div class="form-group row">
@@ -21,18 +22,20 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.onapName"
 						ng-options="option for option in onapNameDictionaryDatas track by option"
-						required pattern="\S+" title="OnapName is required"></select>
+						required pattern="\S+"
+						title="Select the dropdown value driven from OnapName (common)Dictionary."></select>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Config Name:<sup><b>*</b></sup></label> <input type="text"
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.configName" required pattern="\S+"
-						title="Enter the Config Name without any spaces" />
+						title="Enter the Config Name without any spaces and special characters." />
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Time to Live Date:</label> <input type="text" id="ttlDate"
 						class="form-control" ng-disabled="temp.policy.readOnly" name="ttlDate"
-						ng-model="temp.policy.ttlDate" />
+						ng-model="temp.policy.ttlDate" 
+						title="Select the date from calender onclick on the field."/>
 				</div>
 			</div>
 
@@ -42,13 +45,13 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.riskType"
 						ng-options="option for option in riskTypeDictionaryDatas track by option"
-						required pattern="\S+" title="RiskType is required"></select>
+						required pattern="\S+" title="Select the dropdown value driven from RiskType (Safe Policy)Dictionary."></select>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Risk Level:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.riskLevel"
-						required pattern="\S+" title="RiskLevel is required">
+						required pattern="\S+" title="Select the dropdown Risk level value.">
 						<option>1</option>
 						<option>2</option>
 						<option>3</option>
@@ -59,7 +62,7 @@
 					<label>Guard:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.guard"
-						required pattern="\S+" title="Guard is required">
+						required pattern="\S+" title="Select the dropdown Guard value.">
 						<option>True</option>
 						<option>False</option></select>
 				</div>
@@ -70,7 +73,7 @@
 				<div class="form-group col-sm-1">
 					<label>Attributes:</label>
 					<button type="button" class="btn btn-default"
-						ng-disabled="temp.policy.readOnly" ng-click="addNewChoice()">
+						ng-disabled="temp.policy.readOnly" ng-click="addNewChoice()" title="onClick Attribute row is added.">
 						<i class="fa fa-plus"></i>
 					</button>
 				</div>
@@ -81,18 +84,19 @@
 						<div class="form-group col-sm-3">
 							<select class="form-control" required
 								ng-disabled="temp.policy.readOnly" ng-model="choice.key"
-								ng-options="option for option in attributeDictionaryDatas track by option"></select>
+								ng-options="option for option in attributeDictionaryDatas track by option"
+								title="Select the dropdown value driven from Attribute (common)Dictionary."></select>
 						</div>
 						<div class="form-group col-sm-3">
 							<input type="text" class="form-control"
 								ng-disabled="temp.policy.readOnly" ng-model="choice.value"
 								placeholder="Attribute Value" required pattern="\S+"
-								title="Enter the Attribute Value without any spaces" />
+								title="Enter the Attribute Value without any spaces and special characters" />
 						</div>
 						<div class="form-group col-sm-1">
 							<button type="button" class="btn btn-default"
 								ng-disabled="temp.policy.readOnly" ng-show="$last"
-								ng-click="removeChoice()">
+								ng-click="removeChoice()" title="onClick will remove the last row">
 								<i class="fa fa-minus"></i>
 							</button>
 						</div>
@@ -106,7 +110,7 @@
 					<label>Config Type:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.configType" required pattern="\S+"
-						title="ConfigType is required">
+						title="Select the dropdown ConfigType value.">
 						<option>JSON</option>
 						<option>XML</option>
 						<option>PROPERTIES</option>
@@ -120,7 +124,7 @@
 					<label>Body:<sup><b>*</b></sup></label>
 					<textarea class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.configBodyData" style="height: 400px;"
-						required title="ConfigBody is required"></textarea>
+						required title="Enter the ConfigBody based on ConfigType Selection"></textarea>
 				</div>
 			</div>
 		</div>
@@ -129,10 +133,10 @@
 		<div class="modal-footer">
 			<div>
 				<button class="btn btn-primary" ng-disabled="temp.policy.readOnly"
-					herf="javascript:void(0)" ng-click="validatePolicy(temp.policy);">Validate</button>
+					herf="javascript:void(0)" ng-click="validatePolicy(temp.policy);" title="Validate the data entered in the Policy fields.">Validate</button>
 				<button class="btn btn-success" ng-disabled="savebutton"
-					herf="javascript:void(0)" ng-click="savePolicy(temp);">Save</button>
-				<button type="button" class="btn btn-default" ng-click="refresh();">Close</button>
+					herf="javascript:void(0)" ng-click="savePolicy(temp);"  title="Save the Policy with validated data.">Save</button>
+				<button type="button" class="btn btn-default" ng-click="refresh();" title="Close the template.">Close</button>
 			</div>
 		</div>
 	</form>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/ClosedLoopFaultPolicyTemplate.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/ClosedLoopFaultPolicyTemplate.html
index 0912ac2..d3700c9 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/ClosedLoopFaultPolicyTemplate.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/ClosedLoopFaultPolicyTemplate.html
@@ -7,12 +7,13 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-readonly="temp.policy.editPolicy"
 						ng-model="temp.policy.policyName" required pattern="\S+"
-						title="Enter the Policy Name without any spaces" />
+						title="Enter Policy Name without any spaces and special characters and will accept _." />
 				</div>
 				<div class="form-group col-sm-6">
 					<label>Description:</label> <input type="text" class="form-control"
 						ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.policyDescription" />
+						ng-model="temp.policy.policyDescription" 
+						title="Description field will accept any type of data."/>
 				</div>
 			</div>
 			<div class="form-group row">
@@ -21,13 +22,13 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.riskType"
 						ng-options="option for option in riskTypeDictionaryDatas track by option"
-						required pattern="\S+" title="RiskType is required"></select>
+						required pattern="\S+" title="Select the dropdown value driven from RiskType (Safe Policy)Dictionary."></select>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Risk Level:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.riskLevel"
-						required pattern="\S+" title="RiskLevel is required">
+						required pattern="\S+" title="Select the dropdown Risk level value.">
 						<option>1</option>
 						<option>2</option>
 						<option>3</option>
@@ -38,7 +39,7 @@
 					<label>Guard:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.guard"
-						required pattern="\S+" title="Guard is required">
+						required pattern="\S+" title="Select the dropdown Guard value.">
 						<option>True</option>
 						<option>False</option></select>
 				</div>
@@ -47,7 +48,7 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.onapName"
 						ng-options="option for option in onapNameDictionaryDatas track by option"
-						required pattern="\S+" title="OnapName is required"></select>
+						required pattern="\S+" title="Select the dropdown value driven from OnapName (common)Dictionary."></select>
 				</div>
 			</div>
 			<div class="form-group row">
@@ -55,7 +56,8 @@
 					<label>Vnf Type:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.jsonBodyData.vnfType"
-						ng-options="option for option in vnfTypeDictionaryDatas  track by option">
+						ng-options="option for option in vnfTypeDictionaryDatas  track by option"
+						title="Select the dropdown value driven from VNF Type (ClosedLoop Policy)Dictionary.">
 						<option value="">{{temp.policy.jsonBodyData.vnfType}}</option>
 					</select>
 				</div>
@@ -63,7 +65,8 @@
 					<label>Policy Status:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-init="init(temp.policy.jsonBodyData);"
-						ng-model="temp.policy.jsonBodyData.closedLoopPolicyStatus">
+						ng-model="temp.policy.jsonBodyData.closedLoopPolicyStatus"
+						title="Select the value from dropdown.">
 						<option value="Active">Active</option>
 						<option>InActive</option>
 					</select>
@@ -84,7 +87,7 @@
 				<div class="form-group col-sm-3">
 					<label>Time to Live Date:</label> <input type="text" id="ttlDate"
 						class="form-control" name="ttlDate" ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.ttlDate" />
+						ng-model="temp.policy.ttlDate" title="Select the date from calender onclick on the field."/>
 				</div>
 			</div>
 		</div>
@@ -95,12 +98,14 @@
 					<div class="form-group row">
 						<div class="form-group col-sm-1">
 							<button type="button" class="btn btn-default"
-								ng-disabled="temp.policy.readOnly" ng-click="addTriggerButton()">
+								ng-disabled="temp.policy.readOnly" ng-click="addTriggerButton()"
+								title="onClick Trigger Signature Trap row is added.">
 								<i class="fa fa-plus"></i>
 							</button>
 							<button type="button" class="btn btn-default"
 								ng-disabled="temp.policy.readOnly"
-								ng-click="removeTriggerButton()">
+								ng-click="removeTriggerButton()"
+								title="onClick Trigger Signature Trap row is removed.">
 								<i class="fa fa-minus"></i>
 							</button>
 						</div>
@@ -112,12 +117,14 @@
 									<label ng-model="choice.label" name="label">{{choice.id}}</label>
 									<button type="button" class="btn btn-default"
 										ng-disabled="temp.policy.readOnly"
-										ng-click="addTrapTriggerButton(choice.id)">
+										ng-click="addTrapTriggerButton(choice.id)"
+										title="onClick Trap Signature row is added.">
 										<i class="fa fa-plus"></i>
 									</button>
 									<button type="button" class="btn btn-default"
 										ng-disabled="temp.policy.readOnly"
-										ng-click="removeTrapTriggerButton(choice.id)">
+										ng-click="removeTrapTriggerButton(choice.id)"
+										title="onClick Trap Signature row is removed.">
 										<i class="fa fa-minus"></i>
 									</button>
 								</div>
@@ -138,7 +145,8 @@
 											<select class="form-control"
 												ng-disabled="temp.policy.readOnly"
 												ng-model="choice.trigger1"
-												ng-options="option for option in varbindDictionaryDatas track by option">
+												ng-options="option for option in varbindDictionaryDatas track by option"
+												title="Select the dropdown value driven from Varbind (ClosedLoop)Dictionary.">
 												<option value="">{{choice.trigger1}}</option>
 											</select>
 										</div>
@@ -152,7 +160,8 @@
 											<select class="form-control"
 												ng-disabled="temp.policy.readOnly"
 												ng-model="choice.trigger2"
-												ng-options="option for option in varbindDictionaryDatas track by option">
+												ng-options="option for option in varbindDictionaryDatas track by option"
+												title="Select the dropdown value driven from Varbind (ClosedLoop)Dictionary.">
 												<option value="">{{choice.trigger2}}</option>
 											</select>
 										</div>
@@ -170,7 +179,7 @@
 					<div class="form-group col-sm-1">
 						<button type="button" class="btn btn-default"
 							ng-disabled="temp.policy.readOnly"
-							ng-click="addTriggerConnectButton()">
+							ng-click="addTriggerConnectButton()" title="onClick Connect Trap Trigger Signature row is added.">
 							<i class="fa fa-plus"></i>
 						</button>
 					</div>
@@ -189,7 +198,8 @@
 							<div class="form-group col-sm-1">
 								<select ng-disabled="temp.policy.readOnly"
 									ng-model="choice.connectTrap1" class="form-control"
-									ng-options="option for option in connectTriggerTrapsList track by option">
+									ng-options="option for option in connectTriggerTrapsList track by option"
+									title="Select the traps to form rule formation.">
 									<option value="">{{choice.connectTrap1}}</option>
 								</select>
 							</div>
@@ -206,7 +216,8 @@
 							<div class="form-group col-sm-1">
 								<select class="form-control" ng-disabled="temp.policy.readOnly"
 									ng-model="choice.connectTrap2"
-									ng-options="option for option in connectTriggerTrapsList track by option">
+									ng-options="option for option in connectTriggerTrapsList track by option"
+									title="Select the traps to form rule formation.">
 									<option value="">{{choice.connectTrap2}}</option>
 								</select>
 							</div>
@@ -218,7 +229,7 @@
 							<div class="form-group col-sm-1">
 								<button type="button" class="btn btn-default" ng-show="$last"
 									ng-disabled="temp.policy.readOnly"
-									ng-click="removeTriggerConnectButton()">
+									ng-click="removeTriggerConnectButton()" title="onClick Connect Trap Trigger Signature row is removed.">
 									<i class="fa fa-minus"></i>
 								</button>
 							</div>
@@ -228,16 +239,15 @@
 			</div>
 			<div class="form-group row">
 				<div class="form-group col-sm-2">
-					<label>Clear TimeOut:<sup><b>*</b></sup>
+					<label>Clear TimeOut:
 					</label><br> <input type="text" ng-disabled="triggerdisabled"
-						ng-model="temp.policy.clearTimeOut" class="form-control" required />
+						ng-model="temp.policy.clearTimeOut" class="form-control" title="Enter the Cleartimeout value and the value should be numeric."/>
 				</div>
 				<div class="form-group col-sm-2">
-					<label>Trap Max Age:<sup><b>*</b></sup></label><br> <input
+					<label>Trap Max Age:</label><br> <input
 						type="text" ng-disabled="triggerdisabled"
 						ng-model="temp.policy.trapMaxAge" class="form-control"
-						ng-init="temp.policy.jsonBodyData.trapMaxAge='300'" value="300"
-						required />
+						ng-init="temp.policy.jsonBodyData.trapMaxAge='300'" value="300" title="Enter the Trap Max Age value and the value should be numeric."/>
 				</div>
 			</div>
 		</div>
@@ -248,7 +258,8 @@
 					<label>vPRO Actions:<sup><b>*</b></sup></label><br> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.jsonBodyData.actions"
-						ng-options="option for option in vsclActionDictionaryDatas  track by option">
+						ng-options="option for option in vsclActionDictionaryDatas  track by option"
+						title="Select the dropdown value driven from VSCL Action (ClosedLoop)Dictionary.">
 						<option value="">{{temp.policy.jsonBodyData.actions}}</option>
 					</select>
 				</div>
@@ -256,25 +267,25 @@
 					<label>Time Interval:<sup><b>*</b></sup>
 					</label><br> <input type="text" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.jsonBodyData.timeInterval"
-						class="form-control" required />
+						class="form-control" required title="Enter the Time Interval value and the value should be numeric."/>
 				</div>
 				<div class="form-group col-sm-2">
 					<label>App-C TimeOut:<sup><b>*</b></sup></label><br> <input
 						type="text" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.jsonBodyData.timeOutvPRO"
-						class="form-control" required />
+						class="form-control" required title="Enter the App-C Timeout value and the value should be numeric."/>
 				</div>
 				<div class="form-group col-sm-2">
 					<label>TimeOut for Ruby:<sup><b>*</b></sup></label><br> <input
 						type="text" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.jsonBodyData.timeOutRuby"
-						class="form-control" required />
+						class="form-control" required title="Enter the Timeout for Ruby value and the value should be numeric."/>
 				</div>
 				<div class="form-group col-sm-2">
 					<label>Number of Retries:<sup><b>*</b></sup></label><br> <input
 						type="text" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.jsonBodyData.retrys" class="form-control"
-						required />
+						required title="Enter the Number of retries value and the value should be numeric."/>
 				</div>
 			</div>
 			<div class="form-group row">
@@ -282,20 +293,20 @@
 					<label>Aging Window:<sup><b>*</b></sup>
 					</label><br> <input type="text" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.jsonBodyData.agingWindow"
-						class="form-control" required />
+						class="form-control" required title="Enter the Aging Window value and the value should be numeric."/>
 				</div>
 				<div class="form-group col-sm-4">
 					<label>Text to Include in UEB messages for AOTS ticket and
 						Geo Link:</label><br> <input type="text"
 						ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.jsonBodyData.geoLink" class="form-control"
-						required />
+						required title="Enter the UEB Message value."/>
 				</div>
 				<div class="form-group col-sm-4">
 					<label>Email Address:</label><br> <input type="text"
 						ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.jsonBodyData.emailAddress"
-						class="form-control" required />
+						class="form-control" required title="Enter the email address for multiple use comma seperated value."/>
 				</div>
 			</div>
 		</div>
@@ -307,7 +318,8 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.jsonBodyData.pepName"
 						ng-options="option for option in pepOptionsDictionaryDatas  track by option"
-						ng-change="getPepActionValues(temp.policy.jsonBodyData.pepName)">
+						ng-change="getPepActionValues(temp.policy.jsonBodyData.pepName)"
+						title="Select the dropdown value driven from PEP Options (ClosedLoop)Dictionary.">
 						<option value="">{{temp.policy.jsonBodyData.pepName}}</option>
 					</select></select></select>
 				</div>
@@ -315,7 +327,8 @@
 					<label>Actions:<sup><b></b></sup></label><br> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.jsonBodyData.pepAction"
-						ng-options="option for option in pepActionDictionaryDatas  track by option">
+						ng-options="option for option in pepActionDictionaryDatas  track by option"
+						title="Select the dropdown value driven based on PEP Options selection from PEP Options (ClosedLoop)Dictionary.">
 						<option value="">{{temp.policy.jsonBodyData.pepAction}}</option>
 					</select>
 				</div>
@@ -329,12 +342,14 @@
 						<div class="form-group col-sm-1">
 							<button type="button" class="btn btn-default"
 								ng-disabled="temp.policy.readOnly"
-								ng-click="addVerFaultButton()">
+								ng-click="addVerFaultButton()"
+								title="onClick Verification Signature Fault row is added.">
 								<i class="fa fa-plus"></i>
 							</button>
 							<button type="button" class="btn btn-default"
 								ng-disabled="temp.policy.readOnly"
-								ng-click="removeVerFaultButton()">
+								ng-click="removeVerFaultButton()"
+								title="onClick Verification Signature Fault row is removed.">
 								<i class="fa fa-minus"></i>
 							</button>
 						</div>
@@ -346,12 +361,14 @@
 									<label ng-model="choice.label" name="label">{{choice.id}}</label>
 									<button type="button" class="btn btn-default"
 										ng-disabled="temp.policy.readOnly"
-										ng-click="addVerTriggerButton(choice.id)">
+										ng-click="addVerTriggerButton(choice.id)"
+										title="onClick Fault Signature row is added.">
 										<i class="fa fa-plus"></i>
 									</button>
 									<button type="button" class="btn btn-default"
 										ng-disabled="temp.policy.readOnly"
-										ng-click="removeVerTriggerButton(choice.id)">
+										ng-click="removeVerTriggerButton(choice.id)"
+										title="onClick Fault Signature row is removed.">
 										<i class="fa fa-minus"></i>
 									</button>
 								</div>
@@ -372,7 +389,8 @@
 											<select class="form-control"
 												ng-disabled="temp.policy.readOnly"
 												ng-model="choice.trigger1"
-												ng-options="option for option in varbindDictionaryDatas track by option">
+												ng-options="option for option in varbindDictionaryDatas track by option"
+												title="Select the dropdown value driven from Varbind (ClosedLoop)Dictionary.">
 												<option value="">{{choice.trigger1}}</option>
 											</select>
 										</div>
@@ -386,7 +404,8 @@
 											<select class="form-control"
 												ng-disabled="temp.policy.readOnly"
 												ng-model="choice.trigger2"
-												ng-options="option for option in varbindDictionaryDatas track by option">
+												ng-options="option for option in varbindDictionaryDatas track by option"
+												title="Select the dropdown value driven from Varbind (ClosedLoop)Dictionary.">
 												<option value="">{{choice.trigger2}}</option>
 											</select>
 										</div>
@@ -403,7 +422,7 @@
 					<div class="form-group col-sm-1">
 						<button type="button" class="btn btn-default"
 							ng-disabled="temp.policy.readOnly"
-							ng-click="addFaultConnectButton()">
+							ng-click="addFaultConnectButton()" title="onClick Connect Fault Verification Signature row is added.">
 							<i class="fa fa-plus"></i>
 						</button>
 					</div>
@@ -422,7 +441,8 @@
 							<div class="form-group col-sm-1">
 								<select ng-disabled="temp.policy.readOnly"
 									ng-model="choice.connectTrap1" class="form-control"
-									ng-options="option for option in connectTriggerFaultsList track by option">
+									ng-options="option for option in connectTriggerFaultsList track by option"
+									title="Select the faults to form rule formation.">
 									<option value="">{{choice.connectTrap1}}</option>
 								</select>
 							</div>
@@ -439,7 +459,8 @@
 							<div class="form-group col-sm-1">
 								<select ng-disabled="temp.policy.readOnly"
 									ng-model="choice.connectTrap2" class="form-control"
-									ng-options="option for option in connectTriggerFaultsList track by option">
+									ng-options="option for option in connectTriggerFaultsList track by option"
+									title="Select the faults to form rule formation.">
 									<option value="">{{choice.connectTrap2}}</option>
 								</select>
 							</div>
@@ -451,7 +472,7 @@
 							<div class="form-group col-sm-1">
 								<button type="button" class="btn btn-default" ng-show="$last"
 									ng-disabled="temp.policy.readOnly"
-									ng-click="removeFaultConnectButton()">
+									ng-click="removeFaultConnectButton()" title="onClick Connect Fault Verification Signature row is removed.">
 									<i class="fa fa-minus"></i>
 								</button>
 							</div>
@@ -461,11 +482,11 @@
 			</div>
 			<div class="form-group row">
 				<div class="form-group col-sm-2">
-					<label>Clear TimeOut:<sup><b>*</b></sup></label><br> <input
+					<label>Clear TimeOut:</label><br> <input
 						type="text" ng-disabled="verificationdisabled"
 						ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.verificationclearTimeOut"
-						class="form-control" required />
+						class="form-control" required title="Enter the Cleartimeout value and the value should be numeric."/>
 				</div>
 			</div>
 		</div>
@@ -493,11 +514,11 @@
 		<div class="modal-footer">
 			<button class="btn btn-primary" herf="javascript:void(0)"
 				ng-disabled="temp.policy.readOnly"
-				ng-click="validatePolicy(temp.policy);">Validate</button>
+				ng-click="validatePolicy(temp.policy);" title="Validate the data entered in the Policy fields.">Validate</button>
 			<button class="btn btn-success" herf="javascript:void(0)"
 				ng-disabled="savebutton" ng-disabled="temp.policy.readOnly"
-				ng-click="saveFaultPolicy(temp);">Save</button>
-			<button type="button" class="btn btn-default" ng-click="refresh();">Close</button>
+				ng-click="saveFaultPolicy(temp);" title="Save the Policy with validated data.">Save</button>
+			<button type="button" class="btn btn-default" ng-click="refresh();" title="Close the template.">Close</button>
 		</div>
 	</form>
 </div>
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/ClosedLoopPMPolicyTemplate.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/ClosedLoopPMPolicyTemplate.html
index 4e7cad3..b743224 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/ClosedLoopPMPolicyTemplate.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/ClosedLoopPMPolicyTemplate.html
@@ -7,12 +7,13 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-readonly="temp.policy.editPolicy"
 						ng-model="temp.policy.policyName" required pattern="\S+"
-						title="Enter the Policy Name without any spaces" />
+						title="Enter Policy Name without any spaces and special characters and will accept _."/>
 				</div>
 				<div class="form-group col-sm-6">
 					<label>Description:</label> <input type="text" class="form-control"
 						ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.policyDescription" />
+						ng-model="temp.policy.policyDescription" 
+						title="Description field will accept any type of data."/>
 				</div>
 			</div>
 			<div class="form-group row">
@@ -21,18 +22,18 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.onapName"
 						ng-options="option for option in onapNameDictionaryDatas track by option"
-						required pattern="\S+" title="OnapName is required"></select>
+						required pattern="\S+" title="Select the dropdown value driven from OnapName (common)Dictionary."></select>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Time to Live Date:</label> <input type="text" id="ttlDate"
 						class="form-control" name="ttlDate" ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.ttlDate" />
+						ng-model="temp.policy.ttlDate" title="Select the date from calender onclick on the field."/>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Guard:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.guard"
-						required pattern="\S+" title="Guard is required">
+						required pattern="\S+" title="Select the dropdown Guard value.">
 						<option>True</option>
 						<option>False</option></select>
 				</div>
@@ -41,7 +42,7 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.riskType"
 						ng-options="option for option in riskTypeDictionaryDatas track by option"
-						required pattern="\S+" title="RiskType is required"></select>
+						required pattern="\S+" title="Select the dropdown value driven from RiskType (Safe Policy)Dictionary."></select>
 				</div>
 			</div>
 			<div class="form-group row">
@@ -49,7 +50,7 @@
 					<label>Risk Level:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.riskLevel"
-						required pattern="\S+" title="RiskLevel is required">
+						required pattern="\S+" title="Select the dropdown Risk level value.">
 						<option>1</option>
 						<option>2</option>
 						<option>3</option>
@@ -74,7 +75,8 @@
 					<select style="width: 400px;" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.serviceTypePolicyName" class="form-control"
 						ng-options="option.serviceTypePolicyName for option in PMData track by option.serviceTypePolicyName"
-						ng-click="addDataToFields(temp.policy.serviceTypePolicyName);"></select>
+						ng-click="addDataToFields(temp.policy.serviceTypePolicyName);"
+						title="Select the Service Type PolicyName from dropdown value."></select>
 				</div>
 			</div>
 		</div>
@@ -125,7 +127,8 @@
 					<div>
 						<input type="text" class="form-control"
 							ng-disabled="temp.policy.readOnly"
-							ng-model="temp.policy.jsonBodyData.geoLink" />
+							ng-model="temp.policy.jsonBodyData.geoLink" 
+							title="Enter the UEB Message value."/>
 					</div>
 				</div>
 				<div class="form-group col-sm-6">
@@ -133,7 +136,8 @@
 					<div>
 						<input type="text" class="form-control"
 							ng-disabled="temp.policy.readOnly"
-							ng-model="temp.policy.jsonBodyData.emailAddress" />
+							ng-model="temp.policy.jsonBodyData.emailAddress" 
+							title="Enter the email address and for multiple use comma seperated value."/>
 					</div>
 				</div>
 			</div>
@@ -144,11 +148,11 @@
 			<div>
 				<button class="btn btn-primary" herf="javascript:void(0)"
 					ng-disabled="temp.policy.readOnly"
-					ng-click="validatePolicy(temp.policy);">Validate</button>
+					ng-click="validatePolicy(temp.policy);" title="Validate the data entered in the Policy fields.">Validate</button>
 				<button class="btn btn-success" herf="javascript:void(0)"
 					ng-disabled="savebutton" ng-disabled="temp.policy.readOnly"
-					ng-click="saveCLPMPolicy(temp);">Save</button>
-				<button type="button" class="btn btn-default" ng-click="refresh();">Close</button>
+					ng-click="saveCLPMPolicy(temp);" title="Save the Policy with validated data.">Save</button>
+				<button type="button" class="btn btn-default" ng-click="refresh();" title="Close the template.">Close</button>
 			</div>
 		</div>
 	</form>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/DCAEMicroServicePolicyTemplate.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/DCAEMicroServicePolicyTemplate.html
index 11472b9..9ce936e 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/DCAEMicroServicePolicyTemplate.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/DCAEMicroServicePolicyTemplate.html
@@ -7,12 +7,13 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-readonly="temp.policy.editPolicy"
 						ng-model="temp.policy.policyName" required pattern="\S+"
-						title="Enter the Policy Name without any spaces" />
+						title="Enter Policy Name without any spaces and special characters and will accept _." />
 				</div>
 				<div class="form-group col-sm-6">
 					<label>Description:</label> <input type="text" class="form-control"
 						ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.policyDescription" />
+						ng-model="temp.policy.policyDescription" 
+						title="Description field will accept any type of data."/>
 				</div>
 			</div>
 			<div class="form-group row">
@@ -21,18 +22,18 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.onapName"
 						ng-options="option for option in onapNameDictionaryDatas track by option"
-						required pattern="\S+" title="OnapName is required"></select>
+						required pattern="\S+" title="Select the dropdown value driven from OnapName (common)Dictionary."></select>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Time to Live Date:</label> <input type="text" id="ttlDate"
 						class="form-control" name="ttlDate" ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.ttlDate" />
+						ng-model="temp.policy.ttlDate" title="Select the date from calender onclick on the field."/>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Guard:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.guard"
-						required pattern="\S+" title="Guard is required">
+						required pattern="\S+" title="Select the dropdown Guard value.">
 						<option>True</option>
 						<option>False</option></select>
 				</div>
@@ -41,7 +42,7 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.riskType"
 						ng-options="option for option in riskTypeDictionaryDatas track by option"
-						required pattern="\S+" title="RiskType is required"></select>
+						required pattern="\S+" title="Select the dropdown value driven from RiskType (Safe Policy)Dictionary."></select>
 				</div>
 			</div>
 			<div class="form-group row">
@@ -49,7 +50,7 @@
 					<label>Risk Level:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.riskLevel"
-						required pattern="\S+" title="RiskLevel is required">
+						required pattern="\S+" title="Select the dropdown Risk level value.">
 						<option>1</option>
 						<option>2</option>
 						<option>3</option>
@@ -60,7 +61,7 @@
 					<label>Priority:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.priority"
-						ng-options="option for option in priorityDatas track by option">
+						ng-options="option for option in priorityDatas track by option" title="Select the dropdown Priority value.">
 						<option value="">{{temp.policy.priority}}</option>
 					</select>
 				</div>
@@ -70,7 +71,8 @@
 						ng-model="temp.policy.serviceType"
 						ng-options="option for option in microServiceModelsDictionaryDatas track by option"
 						ng-init="pullVersion(temp.policy.serviceType);"
-						ng-click="pullVersion(temp.policy.serviceType);"></select>
+						ng-click="pullVersion(temp.policy.serviceType);"
+						title="Select the dropdown value driven from MicroService Models (MicroService Policy)Dictionary."></select>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Micro Service Version:<sup><b>*</b></sup></label> <select
@@ -78,7 +80,8 @@
 						ng-model="temp.policy.version"
 						ng-options="option for option in microServiceModelsDictionaryVersionDatas track by option"
 						ng-init="addDataToFields(temp.policy.serviceType, temp.policy.version);"
-						ng-click="addDataToFields(temp.policy.serviceType, temp.policy.version);"></select>
+						ng-click="addDataToFields(temp.policy.serviceType, temp.policy.version);"
+						title="Select the dropdown value driven based on MicroService Models (MicroService Policy)Dictionary selection."></select>
 				</div>
 			</div>
 		</div>
@@ -93,26 +96,30 @@
 					class="form-control"  class="form-control"
 					ng-disabled="temp.policy.readOnly"
 					ng-model="temp.policy.configName"
-					ng-options="option for option in microServiceCongigNameDictionaryDatas track by option" required="true"></select>
+					ng-options="option for option in microServiceCongigNameDictionaryDatas track by option" required="true"
+					title="Select the dropdown value driven from MicroService ConfigName (MicroService Policy)Dictionary."></select>
 			</div>
 			<div class="form-group col-sm-3" ng-show="isCheck">
 				<label>Location:<sup><b>*!</b></sup></label><br> <select
 					class="form-control"  class="form-control"
 					ng-disabled="temp.policy.readOnly" ng-model="temp.policy.location"
-					ng-options="option for option in microServiceLocationDictionaryDatas track by option" required="true"></select>
+					ng-options="option for option in microServiceLocationDictionaryDatas track by option" required="true"
+					title="Select the dropdown value driven from MicroService Location (MicroService Policy)Dictionary."></select>
 			</div>
 			<div class="form-group col-sm-3" ng-show="isCheck">
 				<label>UUID:<sup><b>*!</b></sup></label><br> <select
 					class="form-control"  class="form-control"
 					ng-disabled="temp.policy.readOnly" ng-model="temp.policy.uuid"
-					ng-options="option for option in dcaeUUIDDictionaryDatas track by option" required="true"></select>
+					ng-options="option for option in dcaeUUIDDictionaryDatas track by option" required="true"
+					title="Select the dropdown value driven from DCAE UUID (MicroService Policy)Dictionary."></select>
 			</div>
 			<div class="form-group col-sm-3" ng-show="isCheck">
 				<label>Policy Scope:<sup><b>*</b></sup></label><br> <select
 					class="form-control"  class="form-control"
 					ng-disabled="temp.policy.readOnly"
 					ng-model="temp.policy.policyScope"
-					ng-options="option for option in groupPolicyScopeListDatas track by option" required="true"></select>
+					ng-options="option for option in groupPolicyScopeListDatas track by option" required="true"
+					title="Select the dropdown value driven from Group Policy Scope (Policy Scope)Dictionary."></select>
 			</div>
 		</div>
 		</div>
@@ -122,11 +129,11 @@
 		<div class="modal-footer">
 			<button class="btn btn-primary" herf="javascript:void(0)"
 				ng-disabled="temp.policy.readOnly"
-				ng-click="validatePolicy(temp.policy);">Validate</button>
+				ng-click="validatePolicy(temp.policy);" title="Validate the data entered in the Policy fields.">Validate</button>
 			<button class="btn btn-success" herf="javascript:void(0)"
 				ng-disabled="savebutton" ng-disabled="temp.policy.readOnly"
-				ng-click="savePolicy(temp);">Save</button>
-			<button type="button" class="btn btn-default" ng-click="refresh();">Close</button>
+				ng-click="savePolicy(temp);" title="Save the Policy with validated data.">Save</button>
+			<button type="button" class="btn btn-default" ng-click="refresh();" title="Close the template.">Close</button>
 		</div>
 	</form>
 </div>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/DecisionPolicyTemplate.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/DecisionPolicyTemplate.html
index 60f3e6d..95bf689 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/DecisionPolicyTemplate.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/DecisionPolicyTemplate.html
@@ -7,12 +7,13 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-readonly="temp.policy.editPolicy"
 						ng-model="temp.policy.policyName" required pattern="\S+"
-						title="Enter the Policy Name without any spaces" />
+						title="Enter Policy Name without any spaces and special characters and will accept _." />
 				</div>
 				<div class="form-group col-sm-6">
 					<label>Description:</label> <input type="text" class="form-control"
 						ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.policyDescription" />
+						ng-model="temp.policy.policyDescription" 
+						title="Description field will accept any type of data."/>
 				</div>
 			</div>
 			<div class="form-group row">
@@ -21,7 +22,7 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.onapName"
 						ng-options="option for option in onapNameDictionaryDatas track by option"
-						required pattern="\S+" title="OnapName is required"></select>
+						required pattern="\S+" title="Select the dropdown value driven from OnapName (common)Dictionary."></select>
 				</div>
 				<div class="form-group col-sm-6">
 					<label>Rule Provider:<sup><b>*</b></sup></label><select
@@ -48,7 +49,7 @@
 						<div class="form-group col-sm-2">
 							<input type="text" class="form-control"
 								ng-disabled="temp.policy.readOnly" ng-model="temp.policy.rainyday.serviceType"
-								placeholder="Service Type" />
+								placeholder="Service Type" title="Enter Service Type value."/>
 						</div>
 						<div class="form-group col-sm-1">
 							<label>VNF Type:<sup><b>*</b></sup></label>
@@ -56,7 +57,7 @@
 						<div class="form-group col-sm-2">
 							<input type="text" class="form-control"
 								ng-disabled="temp.policy.readOnly" ng-model="temp.policy.rainyday.vnfType"
-								placeholder="VNF Type" />
+								placeholder="VNF Type" title="Enter VNF Type value."/>
 						</div>
 						<div class="form-group col-sm-1">
 							<label>Building Block ID:<sup><b>*</b></sup></label>
@@ -66,7 +67,7 @@
 									class="form-control" ng-disabled="temp.policy.readOnly"
 									ng-model="temp.policy.rainyday.bbid"
 									ng-options="option for option in rainyDayDictionaryDatas track by option"
-									ng-change="getWorkstepValues(temp.policy.rainyday.bbid)">
+									ng-change="getWorkstepValues(temp.policy.rainyday.bbid)" title="Select the dropdown value driven from Rainday Allowed Treatments (Decision)Dictionary.">
 									<option value="">{{temp.policy.rainyday.bbid}}</option>
 								</select>
 						</div>
@@ -289,7 +290,7 @@
 							<div class="form-group col-sm-3">
 								<input type="text" class="form-control"
 									ng-disabled="temp.policy.readOnly" ng-model="temp.policy.yamlparams.limit"
-									placeholder="Limit" />
+									placeholder="Limit" title="Enter time limit value."/>
 							</div>
 						</div>
 						<div class="form-group row" style="margin-left: 2%">
@@ -299,11 +300,11 @@
 							<div class="form-group col-sm-2">
 								<input type="text" class="form-control"
 									ng-disabled="temp.policy.readOnly" ng-model="temp.policy.yamlparams.timeWindow"
-									placeholder="Time Window" />
+									placeholder="Time Window" title="Enter time window value."/>
 							</div>
 							<div class="form-group col-sm-1">
 								<select class="form-control" ng-disabled="temp.policy.readOnly" 
-								ng-model="temp.policy.yamlparams.timeUnits">
+								ng-model="temp.policy.yamlparams.timeUnits" title="Select the Time Units value from dropdown options.">
 								<option>minute</option>
 								<option>hour</option>
 								<option>day</option>
@@ -319,7 +320,7 @@
 							</div>
 							<div class="form-group col-sm-3">
 								<input type="text" class="form-control"
-									ng-disabled="temp.policy.readOnly" ng-model="temp.policy.yamlparams.guardActiveStart"
+									ng-disabled="temp.policy.readOnly" ng-model="temp.policy.yamlparams.guardActiveStart" title="Enter Guard Active Start value in following patren '00:00:00-05:00'."
 									placeholder="00:00:00-05:00" />
 							</div>
 						</div>
@@ -329,7 +330,7 @@
 							</div>
 							<div class="form-group col-sm-3">
 								<input type="text" class="form-control"
-									ng-disabled="temp.policy.readOnly" ng-model="temp.policy.yamlparams.guardActiveEnd"
+									ng-disabled="temp.policy.readOnly" ng-model="temp.policy.yamlparams.guardActiveEnd" title="Enter Guard Active End value in following patren '00:00:00-05:00'."
 									placeholder="00:00:00-05:00" />
 							</div>
 						</div>
@@ -344,7 +345,7 @@
 					<div class="form-group col-sm-1">
 						<label>Component Attributes:</label><br>
 						<button type="button" class="btn btn-default"
-							ng-disabled="temp.policy.readOnly" ng-click="addNewChoice()">
+							ng-disabled="temp.policy.readOnly" ng-click="addNewChoice()" title="onClick Component Attribute row is added.">
 							<i class="fa fa-plus"></i>
 						</button>
 					</div>
@@ -355,18 +356,18 @@
 							<div class="form-group col-sm-3">
 								<select class="form-control" ng-disabled="temp.policy.readOnly"
 									ng-model="choice.key"
-									ng-options="option for option in attributeDictionaryDatas track by option">
+									ng-options="option for option in attributeDictionaryDatas track by option" title="Select the dropdown value driven from Attribute (common)Dictionary.">
 									<option value="">{{choice.key}}</option>
 								</select>
 							</div>
 							<div class="form-group col-sm-3">
 								<input type="text" class="form-control"
 									ng-disabled="temp.policy.readOnly" ng-model="choice.value"
-									placeholder="Attribute Value" />
+									placeholder="Attribute Value" title="Enter the Attribute Value without any spaces and special characters"/>
 							</div>
 							<div class="form-group col-sm-1">
 								<button type="button" class="btn btn-default" ng-show="$last"
-									ng-disabled="temp.policy.readOnly" ng-click="removeChoice()">
+									ng-disabled="temp.policy.readOnly" ng-click="removeChoice()" title="onClick will remove the last row">
 									<i class="fa fa-minus"></i>
 								</button>
 							</div>
@@ -383,7 +384,7 @@
 						<label>Settings Attributes:</label><br>
 						<button type="button" class="btn btn-default"
 							ng-disabled="temp.policy.readOnly"
-							ng-click="addNewSettingsChoice()">
+							ng-click="addNewSettingsChoice()" title="onClick Settings Attribute row is added.">
 							<i class="fa fa-plus"></i>
 						</button>
 					</div>
@@ -394,19 +395,19 @@
 							<div class="form-group col-sm-3">
 								<select class="form-control" ng-disabled="temp.policy.readOnly"
 									ng-model="settingschoice.key"
-									ng-options="option for option in settingsDictionaryDatas track by option">
+									ng-options="option for option in settingsDictionaryDatas track by option" title="Select the dropdown value driven from Settings (Decision)Dictionary.">
 									<option value="">{{settingschoice.key}}</option>
 								</select>
 							</div>
 							<div class="form-group col-sm-3">
 								<input type="text" class="form-control"
 									ng-disabled="temp.policy.readOnly"
-									ng-model="settingschoice.value" placeholder="Settings Value" />
+									ng-model="settingschoice.value" placeholder="Settings Value" title="Enter the Settings Attribute Value without any spaces and special characters"/>
 							</div>
 							<div class="form-group col-sm-1">
 								<button type="button" class="btn btn-default" ng-show="$last"
 									ng-disabled="temp.policy.readOnly"
-									ng-click="removeSettingsChoice()">
+									ng-click="removeSettingsChoice()" title="onClick will remove the last row">
 									<i class="fa fa-minus"></i>
 								</button>
 							</div>
@@ -423,7 +424,7 @@
 					<div class="form-group col-sm-1">
 						<button type="button" class="btn btn-default"
 							ng-disabled="temp.policy.readOnly"
-							ng-click="addNewRuleAlgorithm()">
+							ng-click="addNewRuleAlgorithm()" title="onClick Rule Algorithms row is added.">
 							<i class="fa fa-plus"></i>
 						</button>
 					</div>
@@ -442,7 +443,7 @@
 									ng-disabled="temp.policy.readOnly"
 									ng-model="ruleAlgorithmschoice.dynamicRuleAlgorithmField1"
 									ng-options="option for option in attributeDictionaryDatas track by option"
-									name="dynamicRuleAlgorithmField1">
+									name="dynamicRuleAlgorithmField1" title="Select the dropdown value driven from Attribute (common)Dictionary or Settings (Decision)Dictionary.">
 									<option value="">{{ruleAlgorithmschoice.dynamicRuleAlgorithmField1}}</option>
 								</select>
 							</div>
@@ -451,18 +452,18 @@
 									ng-disabled="temp.policy.readOnly"
 									ng-model="ruleAlgorithmschoice.dynamicRuleAlgorithmCombo"
 									ng-options="option for option in functionDefinitionDatas track by option"
-									name="dynamicRuleAlgorithmCombo"></select>
+									name="dynamicRuleAlgorithmCombo" title="Select the dropdown value driven from FunctionDataType."></select>
 							</div>
 							<div class="form-group col-sm-3">
 								<input type="text" class="form-control"
 									ng-disabled="temp.policy.readOnly"
 									ng-model="ruleAlgorithmschoice.dynamicRuleAlgorithmField2"
-									name="dynamicRuleAlgorithmField2" />
+									name="dynamicRuleAlgorithmField2" title="Enter the Value without any spaces and special characters and for rule formation use A1, A2,..etc., based on above Rules."/>
 							</div>
 							<div class="form-group col-sm-1">
 								<button type="button" class="btn btn-default"
 									ng-disabled="temp.policy.readOnly"
-									ng-click="removeRuleAlgorithm()">
+									ng-click="removeRuleAlgorithm()" title="onClick will remove the last row">
 									<i class="fa fa-minus"></i>
 								</button>
 							</div>
@@ -477,11 +478,11 @@
 		<div class="modal-footer">
 			<button class="btn btn-primary" herf="javascript:void(0)"
 				ng-disabled="temp.policy.readOnly"
-				ng-click="validatePolicy(temp.policy);">Validate</button>
+				ng-click="validatePolicy(temp.policy);" title="Validate the data entered in the Policy fields.">Validate</button>
 			<button class="btn btn-success" herf="javascript:void(0)"
 				ng-disabled="savebutton" ng-disabled="temp.policy.readOnly"
-				ng-click="saveDecisionPolicy(temp);">Save</button>
-			<button type="button" class="btn btn-default" ng-click="refresh();">Close</button>
+				ng-click="saveDecisionPolicy(temp);" title="Save the Policy with validated data.">Save</button>
+			<button type="button" class="btn btn-default" ng-click="refresh();" title="Close the template.">Close</button>
 		</div>
 	</form>
 </div>
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/FirewallPolicyTemplate.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/FirewallPolicyTemplate.html
index 7f6a36b..af1bea1 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/FirewallPolicyTemplate.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/PolicyTemplates/FirewallPolicyTemplate.html
@@ -7,12 +7,13 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-readonly="temp.policy.editPolicy"
 						ng-model="temp.policy.policyName" required pattern="\S+"
-						title="Enter the Policy Name without any spaces" />
+						title="Enter Policy Name without any spaces and special characters and will accept _." />
 				</div>
 				<div class="form-group col-sm-6">
 					<label>Description:</label> <input type="text" class="form-control"
 						ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.policyDescription" />
+						ng-model="temp.policy.policyDescription" 
+						title="Description field will accept any type of data."/>
 				</div>
 			</div>
 			<div class="form-group row">
@@ -21,13 +22,13 @@
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.riskType"
 						ng-options="option for option in riskTypeDictionaryDatas track by option"
-						required pattern="\S+" title="RiskType is required"></select>
+						required pattern="\S+" title="Select the dropdown value driven from RiskType (Safe Policy)Dictionary."></select>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Risk Level:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.riskLevel"
-						required pattern="\S+" title="RiskLevel is required">
+						required pattern="\S+" title="Select the dropdown Risk level value.">
 						<option>1</option>
 						<option>2</option>
 						<option>3</option>
@@ -38,7 +39,7 @@
 					<label>Guard:<sup><b>*</b></sup></label> <select
 						class="form-control" ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.guard"
-						required pattern="\S+" title="Guard is required">
+						required pattern="\S+" title="Select the dropdown Guard value.">
 						<option>True</option>
 						<option>False</option></select>
 				</div>
@@ -47,18 +48,19 @@
 				<div class="form-group col-sm-3">
 					<label>Config Name:<sup><b>*</b></sup></label> <input type="text"
 						class="form-control" ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.configName" required />
+						ng-model="temp.policy.configName" required title="Enter the Config Name without any spaces and special characters." />
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Time to Live Date:</label> <input type="text" id="ttlDate"
 						class="form-control" name="ttlDate" ng-disabled="temp.policy.readOnly"
-						ng-model="temp.policy.ttlDate" />
+						ng-model="temp.policy.ttlDate" title="Select the date from calender onclick on the field."/>
 				</div>
 				<div class="form-group col-sm-3">
 					<label>Security Zone:<sup><b>*</b></sup></label> <select class="form-control"
 						ng-disabled="temp.policy.readOnly"
 						ng-model="temp.policy.securityZone"
-						ng-options="option for option in securityZoneDictionaryDatas track by option"></select>
+						ng-options="option for option in securityZoneDictionaryDatas track by option"
+						title="Select the dropdown value driven from Security Zone (Firewall Policy)Dictionary."></select>
 				</div>
 			</div>
 		</div>
@@ -67,7 +69,7 @@
 				<div class="form-group col-sm-1">
 					<label>Rule Setup:</label><br>
 					<button type="button" class="btn btn-default"
-						ng-disabled="temp.policy.readOnly" ng-click="addNewChoice()">
+						ng-disabled="temp.policy.readOnly" ng-click="addNewChoice()" title="onClick Rule Setup row is added.">
 						<i class="fa fa-plus"></i>
 					</button>
 				</div>
@@ -78,19 +80,21 @@
 						<div class="form-group col-sm-3">
 							<select class="form-control" ng-model="choice.key"
 								ng-disabled="temp.policy.readOnly"
-								ng-options="option for option in termListDictionaryDatas track by option"><option
+								ng-options="option for option in termListDictionaryDatas track by option"
+								title="Select the dropdown value driven from Term List (Firewall Policy)Dictionary."><option
 									value="">{{choice.key}}</option></select>
 						</div>
 						<div class="form-group col-sm-3">
 							<select class="form-control" ng-model="choice.value"
 								ng-disabled="temp.policy.readOnly"
-								ng-options="option for option in fwTagPickerDictionaryDatas track by option"><option
+								ng-options="option for option in fwTagPickerDictionaryDatas track by option"
+								title="Select the dropdown value driven from FW TagPicker (Firewall Policy)Dictionary."><option
 									value="">{{choice.value}}</option></select>
 						</div>
 						<div class="form-group col-sm-1">
 							<button type="button" class="btn btn-default"
 								ng-disabled="temp.policy.readOnly" ng-show="$last"
-								ng-click="removeChoice()">
+								ng-click="removeChoice()" title="onClick will remove the last row">
 								<i class="fa fa-minus"></i>
 							</button>
 						</div>
@@ -103,15 +107,15 @@
 		<br>
 		<div class="modal-footer">
 			<button type="button" class="btn btn-default"
-				herf="javascript:void(0)" ng-click="viewFWRule(temp.policy);">Rule
+				herf="javascript:void(0)" ng-click="viewFWRule(temp.policy);" title="onClick Firewall Policy Rule is previewed based on the values entered in the template.">Rule
 				Preview</button>
 			<button class="btn btn-primary" herf="javascript:void(0)"
 				ng-disabled="temp.policy.readOnly"
-				ng-click="validatePolicy(temp.policy);">Validate</button>
+				ng-click="validatePolicy(temp.policy);" title="Validate the data entered in the Policy fields.">Validate</button>
 			<button class="btn btn-success" herf="javascript:void(0)"
 				ng-disabled="savebutton" ng-disabled="temp.policy.readOnly"
-				ng-click="saveFWPolicy(temp);">Save</button>
-			<button type="button" class="btn btn-default" ng-click="refresh();">Close</button>
+				ng-click="saveFWPolicy(temp);" title="Save the Policy with validated data.">Save</button>
+			<button type="button" class="btn btn-default" ng-click="refresh();" title="Close the template.">Close</button>
 		</div>
 	</form>
 </div>
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/css/main.css b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/css/main.css
index 317efd9..078e829 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/css/main.css
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/css/main.css
@@ -373,4 +373,51 @@
   .table.table-files .btn {
     display: none;
   }
+}
+
+/* Tooltip container */
+.tooltip {
+    position: relative;
+    display: inline-block;
+    border-bottom: 1px dotted black; /* If you want dots under the hoverable text */
+}
+
+/* Tooltip text */
+.tooltip .tooltiptext {
+    visibility: hidden;
+    width: 120px;
+    background-color: #555;
+    color: #fff;
+    text-align: center;
+    padding: 5px 0;
+    border-radius: 6px;
+
+    /* Position the tooltip text */
+    position: absolute;
+    z-index: 1;
+    bottom: 125%;
+    left: 50%;
+    margin-left: -60px;
+
+    /* Fade in tooltip */
+    opacity: 0;
+    transition: opacity 1s;
+}
+
+/* Tooltip arrow */
+.tooltip .tooltiptext::after {
+    content: "";
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    margin-left: -5px;
+    border-width: 5px;
+    border-style: solid;
+    border-color: #555 transparent transparent transparent;
+}
+
+/* Show the tooltip text when you mouse over the tooltip container */
+.tooltip:hover .tooltiptext {
+    visibility: visible;
+    opacity: 1;
 }
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/js/controllers/policySearchManager.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/js/controllers/policySearchManager.js
index f973a23..42e6796 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/js/controllers/policySearchManager.js
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/js/controllers/policySearchManager.js
@@ -157,35 +157,38 @@
             return currentPath.indexOf(path) !== -1;
         };
        
-	    $scope.searchPolicy = function(searchContent){
-		    var deferred = $q.defer();
-           var uuu = "searchPolicy";
-           var postData = {searchdata : searchContent};
-           $.ajax({
-               type : 'POST',
-               url : uuu,
-               dataType: 'json',
-               contentType: 'application/json',
-               data: JSON.stringify(postData),
-               success : function(data){
-                   $scope.$apply(function(){
-                      var searchdata = data.result;
-                       if(searchdata.length > 0){
-                    	   if(searchdata[0] == "Elastic Search Server is down"){
-                    		   alert("Elastic Search Server is down.");
-                    	   }else{
-                    		   $scope.policyNavigator.searchrefresh(searchdata);  
-                    	   }
-                       }else{
-                    	   Notification.info("No Matches Found with your Search");
-                       }
-                   });     
-               },
-               error : function(data){
-                   alert("Error while Searching.");
-               }
-           });
-       };
+        $scope.searchPolicy = function(searchContent){
+        	if(searchContent != undefined){
+        		var uuu = "searchPolicy";
+        		var postData = {searchdata : searchContent};
+        		$.ajax({
+        			type : 'POST',
+        			url : uuu,
+        			dataType: 'json',
+        			contentType: 'application/json',
+        			data: JSON.stringify(postData),
+        			success : function(data){
+        				$scope.$apply(function(){
+        					var searchdata = data.result;
+        					if(searchdata.length > 0){
+        						if(searchdata[0] == "Exception"){
+        							Notification.error(searchdata[1]);
+        						}else{
+        							$scope.policyNavigator.searchrefresh(searchdata);  
+        						}
+        					}else{
+        						Notification.info("No Matches Found with your Search");
+        					}
+        				});     
+        			},
+        			error : function(data){
+        				Notification.error("Error while Searching.");
+        			}
+        		});
+        	}else{
+        		Notification.error("No data has been entered or selected to search");
+        	}
+        };
        
        $scope.refresh = function(searchData){
     	   $scope.policyNavigator.searchrefresh(null);
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/item-context-menu.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/item-context-menu.html
index 3c41fbc..732b99b 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/item-context-menu.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/item-context-menu.html
@@ -27,7 +27,7 @@
             </a>
         </li>
          <li ng-show="config.allowedActions.rename && temp.isFolder()">
-            <a href="" tabindex="-1" data-toggle="modal" data-target="#move" ng-show="renameId">
+            <a href="" tabindex="-1" data-toggle="modal" data-target="#moveScope" ng-show="renameId">
                 <i class="glyphicon glyphicon-edit"></i> Move Scope
             </a>
         </li>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/modals.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/modals.html
index 1c33839..e508020 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/modals.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/modals.html
@@ -13,8 +13,8 @@
         <div ng-include data-src="'error-bar'" class="clearfix"></div>
       </div>
       <div class="modal-footer">
-        <button type="button" class="btn btn-pedefault" data-dismiss="modal" ng-click="refresh();" ng-disabled="temp.inprocess">Cancel</button>
-        <button type="submit" class="btn btn-primary" ng-disabled="temp.inprocess" autofocus="autofocus">Delete</button>
+        <button type="button" class="btn btn-pedefault" data-dismiss="modal" ng-click="refresh();" ng-disabled="temp.inprocess" title="Close the Delete Scope Window.">Cancel</button>
+        <button type="submit" class="btn btn-primary" ng-disabled="temp.inprocess" autofocus="autofocus" title="OnClick you can delete the Scopes.">Delete</button>
       </div>
       </form>
     </div>
@@ -42,8 +42,8 @@
         <div ng-include data-src="'error-bar'" class="clearfix"></div>
       </div>
       <div class="modal-footer">
-        <button type="button" class="btn btn-pedefault" data-dismiss="modal" ng-click="refresh();" ng-disabled="temp.inprocess">Cancel</button>
-        <button type="submit" class="btn btn-primary" ng-disabled="!temp.model.versions" autofocus="autofocus">Delete</button>
+        <button type="button" class="btn btn-pedefault" data-dismiss="modal" ng-click="refresh();" ng-disabled="temp.inprocess" title="Close the Delete Policy Window.">Cancel</button>
+        <button type="submit" class="btn btn-primary" ng-disabled="!temp.model.versions" autofocus="autofocus" title="OnClick you can delete the Policies.">Delete</button>
       </div>
       </form>
     </div>
@@ -62,7 +62,7 @@
             </div>
             <div class="modal-body">
               <label class="radio">Enter New Name : <b>{{temp.model.name}}</b></label>
-              <input class="form-control" ng-model="temp.tempModel.name" autofocus="autofocus">
+              <input class="form-control" ng-model="temp.tempModel.name" autofocus="autofocus" title="Enter the value without space or special characters.">
 
               <div ng-include data-src="'error-bar'" class="clearfix"></div>
             </div>
@@ -119,6 +119,29 @@
   </div>
 </div>  
 
+<div class="modal" id="moveScope" data-toggle="modal" data-backdrop="static" data-keyboard="false">
+  <div class="modal-dialog">
+    <div class="modal-content">
+        <form ng-submit="move(temp)">
+            <div class="modal-header">
+              <button type="button" class="close" data-dismiss="modal">
+                  <span class="sr-only">Close</span>
+              </button>
+              <h4 class="modal-title">Move Scope</h4>
+            </div>
+            <div class="modal-body">
+              <div ng-include data-src="'path-selector'" class="clearfix"></div>
+              <div ng-include data-src="'error-bar'" class="clearfix"></div>
+            </div>
+            <div class="modal-footer">
+              <button type="button" class="btn btn-pedefault" data-dismiss="modal" ng-click="refresh();" ng-disabled="temp.inprocess">Cancel</button>
+              <button type="submit" class="btn btn-primary" ng-disabled="temp.inprocess">Move</button>
+            </div>
+        </form>
+    </div>
+  </div>
+</div>  
+
 <div class="modal" id="switchVersion" data-toggle="modal" data-backdrop="static" data-keyboard="false">
   <div class="modal-dialog">
     <div class="modal-content">
@@ -131,16 +154,16 @@
             </div>
             <div class="modal-body">
               <label class="radio">Highest Version <b></b></label>
-              <input class="form-control" ng-disabled="true" ng-model="temp.tempModel.content.highestVersion" autofocus="autofocus">
+              <input class="form-control" ng-disabled="true" ng-model="temp.tempModel.content.highestVersion" autofocus="autofocus" title="The Field shows highest version of Policy.">
             </div>
              <div class="modal-body">
               <label class="radio">Active Version <b></b></label>
-              <select class="form-control" ng-model="temp.tempModel.content.activeVersion" ng-options="option for option in temp.tempModel.content.availableVersions" autofocus="autofocus"></select>
+              <select class="form-control" ng-model="temp.tempModel.content.activeVersion" ng-options="option for option in temp.tempModel.content.availableVersions" autofocus="autofocus" title="Enter the value not greater than highest version to switch policy."></select>
               <div ng-include data-src="'error-bar'" class="clearfix"></div>
             </div>
             <div class="modal-footer">
-              <button type="button" class="btn btn-pedefault" data-dismiss="modal" ng-disabled="temp.inprocess">Cancel</button>
-              <button type="submit" class="btn btn-primary" ng-disabled="temp.tempModel.content.highestVersion === temp.tempModel.content.activeVersion">Save</button>
+              <button type="button" class="btn btn-pedefault" data-dismiss="modal" ng-disabled="temp.inprocess" title="OnClick SwitchVersion Window is closed.">Cancel</button>
+              <button type="submit" class="btn btn-primary" ng-disabled="temp.tempModel.content.highestVersion === temp.tempModel.content.activeVersion" title="OnClick Policy Version will be Switched.">Save</button>
             </div>
         </form>
     </div>
@@ -159,12 +182,12 @@
             </div>
             <div class="modal-body">
               <label class="radio">Enter new Policy Name to Clone <b>{{temp.model.name}}</b></label>
-              <input class="form-control" ng-model="temp.tempModel.name" autofocus="autofocus">
+              <input class="form-control" ng-model="temp.tempModel.name" autofocus="autofocus" title="Enter the PolicyName without space or special characters.">
               <div ng-include data-src="'error-bar'" class="clearfix"></div>
             </div>
             <div class="modal-footer">
-              <button type="button" class="btn btn-pedefault" data-dismiss="modal" ng-disabled="temp.inprocess">Cancel</button>
-              <button type="submit" class="btn btn-primary" ng-disabled="temp.inprocess">Clone</button>
+              <button type="button" class="btn btn-pedefault" data-dismiss="modal" ng-disabled="temp.inprocess" title="OnClick Clone Window is closed.">Cancel</button>
+              <button type="submit" class="btn btn-primary" ng-disabled="temp.inprocess" title="OnClick the Policy will be cloned.">Clone</button>
             </div>
         </form>
     </div>
@@ -183,12 +206,12 @@
             </div>
             <div class="modal-body">
               <label class="radio">Scope Name</label>
-              <input class="form-control" ng-model="temp.tempModel.name" autofocus="autofocus">
+              <input class="form-control" ng-model="temp.tempModel.name" autofocus="autofocus" title="Enter the ScopeName without space or special characters.">
               <div ng-include data-src="'error-bar'" class="clearfix"></div>
             </div>
             <div class="modal-footer">
-              <button id = "cancel" type="button" class="btn btn-pedefault" data-dismiss="modal" ng-disabled="temp.inprocess">Cancel</button>
-              <button type="submit" class="btn btn-primary" ng-disabled="temp.inprocess">Create</button>
+              <button id = "cancel" type="button" class="btn btn-pedefault" data-dismiss="modal" ng-disabled="temp.inprocess" title="OnClick Scope Window is closed.">Cancel</button>
+              <button type="submit" class="btn btn-primary" ng-disabled="temp.inprocess" title="OnClick Scope is created.">Create</button>
             </div>
         </form>
     </div>
@@ -207,12 +230,12 @@
             </div>
             <div class="modal-body">
               <label class="radio">Scope Name</label>
-              <input class="form-control" ng-model="temp.tempModel.subScopename" autofocus="autofocus">
+              <input class="form-control" ng-model="temp.tempModel.subScopename" autofocus="autofocus" title="Enter the SubScopeName without space or special characters.">
               <div ng-include data-src="'error-bar'" class="clearfix"></div>
             </div>
             <div class="modal-footer">
-              <button type="button" class="btn btn-pedefault" data-dismiss="modal" ng-disabled="temp.inprocess">Cancel</button>
-              <button type="submit" class="btn btn-primary" ng-disabled="temp.inprocess">Create</button>
+              <button type="button" class="btn btn-pedefault" data-dismiss="modal" ng-disabled="temp.inprocess" title="OnClick SubScope Window is closed.">Cancel</button>
+              <button type="submit" class="btn btn-primary" ng-disabled="temp.inprocess" title="OnClick SubScope is created.">Create</button>
             </div>
         </form>
     </div>
@@ -236,8 +259,8 @@
             </div>
             <div class="modal-footer">
               <div ng-show="!fileUploader.requesting">
-                  <button type="button" class="btn btn-pedefault" data-dismiss="modal">Cancel</button>
-                  <button type="submit" class="btn btn-primary" ng-disabled="!uploadFileList.length || fileUploader.requesting">{{'upload' | translate}}</button>
+                  <button type="button" class="btn btn-pedefault" data-dismiss="modal" title="OnClick Import window is closed.">Cancel</button>
+                  <button type="submit" class="btn btn-primary" ng-disabled="!uploadFileList.length || fileUploader.requesting" title="OnClick Policy will be Imported.">{{'upload' | translate}}</button>
               </div>
               <div ng-show="fileUploader.requesting">
                   <span class="label label-warning">Uploading......</span>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/navbar.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/navbar.html
index dfac651..54c48da 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/navbar.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/navbar.html
@@ -10,10 +10,10 @@
 		<div class="form-group col-sm-5" style="margin-top: 2%"></div>
 		<div class="form-group col-sm-4" style="margin-top: 2%" align="right" ng-hide="isDisabled">
 			<div class="btn-group">
-  				<button type="button" class="btn btn-primary" ng-show="superAdminId" data-toggle="modal" data-target="#newfolder" ng-click="touch()"><i class="glyphicon glyphicon-plus"></i>Add Scope</button>
-  				<button type="button" class="btn btn-primary" ng-show="importPolicyId" data-toggle="modal" data-target="#uploadfile" ng-show="config.allowedActions.upload" ng-click="touch()"> <i class="glyphicon glyphicon-upload"></i>Import</button>
-  				<button type="button" class="btn btn-primary" ng-show="exportPolicyId" data-toggle="modal" data-target="#exportPolicy" ng-show="config.allowedActions.exportPolicy"> <i class="glyphicon glyphicon-download"></i>Export</button>
-				<button class="btn btn-secondary" type="button" onClick="window.location='policy#/policy_SearchFilter';">Filter</button>
+  				<button type="button" class="btn btn-primary" ng-show="superAdminId" data-toggle="modal" data-target="#newfolder" ng-click="touch()" title="Create Scope for adding policies"><i class="glyphicon glyphicon-plus"></i>Add Scope</button>
+  				<button type="button" class="btn btn-primary" ng-show="importPolicyId" data-toggle="modal" data-target="#uploadfile" ng-show="config.allowedActions.upload" ng-click="touch()" title="On Click Popup will open to Import policies"> <i class="glyphicon glyphicon-upload"></i>Import</button>
+  				<button type="button" class="btn btn-primary" ng-show="exportPolicyId" data-toggle="modal" data-target="#exportPolicy" ng-show="config.allowedActions.exportPolicy" title="On Click Popup will open to Export policies"> <i class="glyphicon glyphicon-download"></i>Export</button>
+				<button class="btn btn-secondary" type="button" onClick="window.location='policy#/policy_SearchFilter';" title="On Click Navigaate to Search window">Filter</button> 
 			</div>
 		</div>
 	</div>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/searchNavbar.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/searchNavbar.html
index 891e27b..f46c5b5 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/searchNavbar.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/templates/searchNavbar.html
@@ -58,7 +58,7 @@
 					<div class="input-group">
 						<div class="input-group" id="adv-search">
 							<input type="text" class="form-control"
-								placeholder="{{'search'}}..." ng-model="search.query" />
+								placeholder="{{'search'}}..." ng-model="search.query" title="Enter the value to filter policies."/>
 							<div class="input-group-btn">
 								<div class="btn-group" role="group">
 									<div class="dropdown dropdown-lg">
@@ -71,7 +71,7 @@
 												<div class="form-group row">
 													<div class="form-group col-sm-4">
 														<label for="filter">Policy Type:</label> <select
-															class="form-control" ng-model="search.policyType">
+															class="form-control" ng-model="search.policyType" title="Select the PolicyType value.">
 															<option>action</option>
 															<option>config</option>
 															<option>closedLoop</option>
@@ -82,7 +82,7 @@
 													<div class="form-group col-sm-8">
 														<label for="filter">Descriptive Type:</label> <select
 															class="form-control" ng-model="search.descriptiveScope"
-															ng-options="option for option in descriptiveScopeDictionaryDatas track by option"></select>
+															ng-options="option for option in descriptiveScopeDictionaryDatas track by option" title="Select Descriptive Scope value driven from Descriptive Scope dictionary."></select>
 													</div>
 												</div>
 												<div ng-if="search.policyType == 'closedLoop'">
@@ -90,21 +90,21 @@
 														<div class="form-group col-sm-6">
 															<label>ClosedLoop Policy Type:</label><BR> <select
 																class="form-control"
-																ng-model="search.closedLooppolicyType">
+																ng-model="search.closedLooppolicyType" title="Select the ClosedLoop Policy Type value.">
 																<option>Config_Fault</option>
 																<option>Config_PM</option>
 															</select>
 														</div>
 														<div class="form-group col-sm-6">
 															<label>Onap Name:</label><BR> <select
-																class="form-control" ng-model="search.onapName"
+																class="form-control" ng-model="search.onapName" title="Select the dropdown value driven from ONAP (Common)Dictionary."
 																ng-options="option for option in onapNameDictionaryDatas track by option"></select>
 														</div>
 													</div>
 													<div class="form-group row">
 														<div class="form-group col-sm-6" ng-if="search.closedLooppolicyType == 'Config_PM'">
 															<label>D2 Service:</label><BR> <select
-																class="form-control" ng-model="search.d2Service">
+																class="form-control" ng-model="search.d2Service" title="Select the ClosedLoop D2 Service value.">
 																<option>Hosted Voice(Trinity)</option>
 																<option>vUSP</option>
 																<option>MCR</option>
@@ -115,7 +115,7 @@
 														<div class="form-group col-sm-6"
 															ng-if="search.closedLooppolicyType == 'Config_PM'">
 															<label>Service Type:</label><BR> <select
-																class="form-control" ng-model="search.serviceType">
+																class="form-control" ng-model="search.serviceType" title="Select the Service Type Value.">
 																<option>Registration Failure(Trinity)</option>
 																<option>International Fraud(Trinity)</option>
 																<option>No Dial Tone(Trinity)</option>
@@ -128,13 +128,13 @@
 														<div class="form-group col-sm-6"
 															ng-if="search.closedLooppolicyType == 'Config_Fault'">
 															<label>VNF Type:</label><BR> <select
-																class="form-control" ng-model="search.vnfType"
+																class="form-control" ng-model="search.vnfType" title="Select the ClosedLoop VNF Type value."
 																ng-options="option for option in vnfTypeDictionaryDatas track by option"></select>
 														</div>
 														<div class="form-group col-sm-6"
 															ng-if="search.closedLooppolicyType == 'Config_Fault'">
 															<label>Policy Status:</label><BR> <select
-																class="form-control" ng-model="search.policyStatus">
+																class="form-control" ng-model="search.policyStatus" title="Select the Policy Status value.">
 																<option>Active</option>
 																<option>InActive</option>
 															</select>
@@ -145,11 +145,11 @@
 															ng-if="search.closedLooppolicyType == 'Config_Fault'">
 															<label>vPRO Action:</label><BR> <select
 																class="form-control" ng-model="search.vproAction"
-																ng-options="option for option in vsclActionDictionaryDatas track by option"></select>
+																ng-options="option for option in vsclActionDictionaryDatas track by option" title="Select vPRO Action value."></select>
 														</div>
 														<div class="form-group col-sm-6" ng-if="search.closedLooppolicyType == 'Config_Fault'">
 															<label>Bind Text Search to:</label><BR> <select
-																class="form-control" ng-model="search.bindTextSearch">
+																class="form-control" ng-model="search.bindTextSearch" title="Select the Bind Text Search value.">
 																<option>Email Address</option>
 																<option>Trigger Signature</option>
 																<option>Connect All Traps</option>
@@ -167,11 +167,11 @@
 										</div>
 									</div>
 									<button type="button" class="btn btn-pedefault"
-										ng-click="refresh(search = null);">
+										ng-click="refresh(search = null);" title="Clear the selected values.">
 										<span aria-hidden="true">Clear</span>
 									</button>
 									<button type="button" class="btn btn-primary"
-										ng-click="searchPolicy(search);">
+										ng-click="searchPolicy(search);" title="Click on the button to search for policies after entering the fields.">
 										<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
 									</button>
 								</div>
@@ -183,8 +183,8 @@
 		</div>
 		<div class="form-group col-sm-4" style="margin-top: 2%" align="right">
 			<div class="btn-group">
-  				<button class="btn btn-secondary" type="button" onClick="window.location='policy#/Editor';">Editor</button>
-				<button class="btn btn-primary" type="button" onClick="window.location='policy#/policy_SearchFilter';">Filter</button>
+  				<button class="btn btn-secondary" type="button" onClick="window.location='policy#/Editor';" title="OnClick navigate to Editor tab.">Editor</button>
+				<button class="btn btn-primary" type="button" onClick="window.location='policy#/policy_SearchFilter';" title="Search Policy window">Filter</button>
 			</div>
 		</div>
 	</div>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_AdminTab.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_AdminTab.html
index 75ad7ca..caca415 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_AdminTab.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_AdminTab.html
@@ -26,7 +26,7 @@
 				<div>
 					<input type="checkbox"
 						ng-click="saveLockDownValue(lockdowndata[0].lockdown);"
-						ng-model="lockdowndata[0].lockdown" b2b-switches>
+						ng-model="lockdowndata[0].lockdown" b2b-switches title="Click on the button to Lockdown Policy Application.">
 				</div>
 			</label>
 			<div ng-show="isDisabled" class="icon-lock"
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_Dictionary.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_Dictionary.html
index 5086ccf..c4559a4 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_Dictionary.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_Dictionary.html
@@ -46,16 +46,16 @@
 					<div class="form-group col-sm-3">
 						<label>Policy Type Dictionary:</label> </br><select class="form-control" 
 							ng-model="option1" ng-options="option for option in options1"
-							ng-change="getOptions2()"></select>
+							ng-change="getOptions2()" title="Dropdown shows values specific to Policy type."></select>
 					</div>
 					<div class="form-group col-sm-3">
 						<label>Select Dictionary:</label></br> <select class="form-control" 
-							ng-model="option2" ng-options="option for option in options2"></select>
+							ng-model="option2" ng-options="option for option in options2" title="Dictionary type values are shown based on specific Policy Type Dictionary selection."></select>
 					</div>
 					<div class="form-group col-sm-1">
 					<label></label></br>
 						<button class="btn btn-primary btn-small" type="button"
-							herf="javascript:void(0)" ng-click="import();">Import
+							herf="javascript:void(0)" ng-click="import();" title="Import Dictionary's and the file ends with .csv format">Import
 							Dictionary's</button>
 					</div>
 			</div>
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_PDPManagement.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_PDPManagement.html
index 55e7a07..1a48e8c 100644
--- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_PDPManagement.html
+++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_PDPManagement.html
@@ -47,13 +47,13 @@
 		<div class="form-group row">
 			<div class="form-group col-sm-3">
 				<button class="btn btn-primary btn-small" type="button"
-					ng-click="addNewPDPGroupPopUpWindow();" ng-show="createPdpGroupId">Create
+					ng-click="addNewPDPGroupPopUpWindow();" ng-show="createPdpGroupId" title="Create PDP Group">Create
 					Group</button>
 			</div>
 			<div class="form-group col-sm-6">
 				<input type="text" class="form-control" class="search"
 					ng-disabled="isDisabled" 
-					placeholder="{{'search'}}..." ng-model="search">
+					placeholder="{{'search'}}..." ng-model="search" title="Filter the PDP Groups based on pdpname or pdp's">
 			</div>
 		</div>
 
@@ -102,13 +102,13 @@
 						</td>
 						<td width="15%">
 							<div ng-click="editPDPGroupFunctionModalPopup(pdpdata);"
-								style="font-size: 20px;" ng-show="editPdpGroupId">
+								style="font-size: 20px;" ng-show="editPdpGroupId" title="Edit PDP Group to create/update/delete pdp's and to see the active policies in PDP Group.">
 								 <span href="javascript:void(0)" class="glyphicon glyphicon-edit"></span>
 							</div>
 						</td>
 						<td width="5%">
 							<div ng-click="removePDPGroup(pdpdata);" style="font-size: 20px;"
-								ng-show="deletePdpGroupId">
+								ng-show="deletePdpGroupId" title="Delete PDP Group.">
 								<span href="javascript:void(0)" class="glyphicon glyphicon-trash"></span>
 							</div>
 						</td>
diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java
index fa23f4a..c058a79 100644
--- a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java
+++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java
@@ -53,12 +53,12 @@
 
 public class PolicyUtils {
     private static final Logger LOGGER = FlexLogger.getLogger(PolicyUtils.class);
-    
+    public static final String CATCH_EXCEPTION = "PE500: An exception was caught.";  
     public static final String EMAIL_PATTERN =
             "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
             + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
     private static final String PACKAGE_ERROR = "mismatched input '{' expecting one of the following tokens: '[package";
-    private static final String SUCCESS = "success";
+    public static final String SUCCESS = "success";
     
     private PolicyUtils(){
         // Private Constructor
@@ -276,6 +276,9 @@
      * @return
      */
     public static boolean isXMLValid(String data) {
+    	if(data == null || data.isEmpty()){
+        	return false;
+        }
         SAXParserFactory factory = SAXParserFactory.newInstance();
         factory.setValidating(false);
         factory.setNamespaceAware(true);