Enhancement on Dashboard 97/61897/8
authorWang,Frank(gw1218) <gw1218@att.com>
Wed, 22 Aug 2018 18:44:09 +0000 (13:44 -0500)
committerWang,Frank(gw1218) <gw1218@att.com>
Thu, 23 Aug 2018 16:30:21 +0000 (11:30 -0500)
Enhancement on dashboard by including more info related to CRUD actions
on policies and also providing an advanced search feature.

Issue-ID: POLICY-1042
Change-Id: I987e0ca13824413f90299a366fb4464fca7de06a
Signed-off-by: Wang,Frank(gw1218) <gw1218@att.com>
ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyEntity.java
POLICY-SDK-APP/src/main/java/org/onap/policy/controller/DashboardController.java
POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dashboardCRUDController.js [new file with mode: 0644]
POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/policyController.js
POLICY-SDK-APP/src/main/webapp/app/policyApp/main/policyEditor.html
POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/Editor/css/main.css
POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardCRUD.html [new file with mode: 0644]
POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardHealth.html
POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardLogging.html
packages/base/src/files/install/mysql/data/181000_upgrade_script.sql [new file with mode: 0644]

index f28a607..40ddb43 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-REST
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */
 
 package org.onap.policy.rest.jpa;
+
 /*
  */
+import com.fasterxml.jackson.annotation.JsonBackReference;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Objects;
-
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
@@ -42,92 +44,96 @@ import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 import javax.persistence.Version;
 
-import com.fasterxml.jackson.annotation.JsonBackReference;
-import com.fasterxml.jackson.annotation.JsonManagedReference;
 
 /*
  * The Entity class to persist a policy object and its configuration data
  */
 
-/**
- *
- */
 @Entity
-//Add a non-unique index and a constraint that says the combo of policyName and scopeId must be unique
-@Table(name="PolicyEntity")
-
+// Add a non-unique index and a constraint that says the combo of policyName and scopeId must be unique
+@Table(name = "PolicyEntity")
 @NamedQueries({
-    @NamedQuery(name="PolicyEntity.findAll", query="SELECT e FROM PolicyEntity e "),
-    @NamedQuery(name="PolicyEntity.findAllByDeletedFlag", query="SELECT e FROM PolicyEntity e WHERE e.deleted = :deleted"),
-    @NamedQuery(name="PolicyEntity.FindById", query="SELECT e FROM PolicyEntity e WHERE e.policyId = :id"),
-    @NamedQuery(name="PolicyEntity.deleteAll", query="DELETE FROM PolicyEntity WHERE 1=1"),
-    @NamedQuery(name="PolicyEntity.findByNameAndScope", query="SELECT e FROM PolicyEntity e WHERE e.policyName = :name AND e.scope = :scope")
+    @NamedQuery(name = "PolicyEntity.findAll", query = "SELECT e FROM PolicyEntity e "),
+    @NamedQuery(name = "PolicyEntity.findAllByDeletedFlag", 
+        query = "SELECT e FROM PolicyEntity e WHERE e.deleted = :deleted"),
+    @NamedQuery(name = "PolicyEntity.FindById", query = "SELECT e FROM PolicyEntity e WHERE e.policyId = :id"),
+    @NamedQuery(name = "PolicyEntity.deleteAll", query = "DELETE FROM PolicyEntity WHERE 1=1"),
+    @NamedQuery(name = "PolicyEntity.findByNameAndScope", 
+        query = "SELECT e FROM PolicyEntity e WHERE e.policyName = :name AND e.scope = :scope")
 })
-
 public class PolicyEntity implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
-    @Column (name="policyId")
+    @Column(name = "policyId")
     @JsonBackReference
     private long policyId;
 
-    @Column(name="policyName", nullable=false, unique=false, length=255)
+    @Column(name = "policyName", nullable = false, unique = false, length = 255)
     private String policyName;
 
-    //The scope is the directory structure in dot notation.  For example: org.onap.myproject
-    @Column(name="scope", nullable=false, unique=false, length=255)
+    // The scope is the directory structure in dot notation. For example: org.onap.myproject
+    @Column(name = "scope", nullable = false, unique = false, length = 255)
     private String scope;
 
     @Version
-    @Column(name="version")
+    @Column(name = "version")
     private int version;
 
-    //not going to be used
-    @Column(name="policyVersion")
+    // not going to be used
+    @Column(name = "policyVersion")
     private int policyVersion = 0;
 
     @Lob
-    @Column(name="policyData", nullable=false, columnDefinition="TEXT")
+    @Column(name = "policyData", nullable = false, columnDefinition = "TEXT")
     private String policyData = "NoData";
 
-    @OneToOne(optional=true, orphanRemoval=true)
-    @JoinColumn(name="configurationDataId")
+    @OneToOne(optional = true, orphanRemoval = true)
+    @JoinColumn(name = "configurationDataId")
     @JsonManagedReference
     private ConfigurationDataEntity configurationDataEntity;
 
-    @OneToOne(optional=true, orphanRemoval=true)
-    @JoinColumn(name="actionBodyId")
+    @OneToOne(optional = true, orphanRemoval = true)
+    @JoinColumn(name = "actionBodyId")
     @JsonManagedReference
     private ActionBodyEntity actionBodyEntity;
 
-    @Column(name="created_by", nullable=false, length=255)
+    @Column(name = "created_by", nullable = false, length = 255)
     private String createdBy = "guest";
 
     @Temporal(TemporalType.TIMESTAMP)
-    @Column(name="created_date", updatable=false)
+    @Column(name = "created_date", updatable = false)
     private Date createdDate;
 
-    @Column(name="description", nullable=false, length=2048)
+    @Column(name = "description", nullable = false, length = 2048)
     private String description = "NoDescription";
 
-    @Column(name="modified_by", nullable=false, length=255)
+    @Column(name = "modified_by", nullable = false, length = 255)
     private String modifiedBy = "guest";
 
     @Temporal(TemporalType.TIMESTAMP)
-    @Column(name="modified_date", nullable=false)
+    @Column(name = "modified_date", nullable = false)
     private Date modifiedDate;
 
-    @Column(name="deleted", nullable=false)
+    @Column(name = "deleted", nullable = false)
     private boolean deleted = false;
 
+    @Column(name = "delete_reason_code", nullable = true, length = 100)
+    private String deleteReasonCode;
+
+    @Column(name = "deleted_by", nullable = true, length = 45)
+    private String deletedBy;
+
     public PolicyEntity() {
         super();
     }
 
+    /**
+     * Set default values.
+     */
     @PrePersist
-    public void        prePersist() {
+    public void prePersist() {
         Date date = new Date();
         this.createdDate = date;
         this.modifiedDate = date;
@@ -139,6 +145,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Returns Policy Id.
      * @return the policyId
      */
     public long getPolicyId() {
@@ -146,9 +153,9 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
-     * @param policyId cannot be set
+     * Returns policy name.
+     * @return the policy name
      */
-
     public String getPolicyName() {
         return policyName;
     }
@@ -158,6 +165,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Returns policy data.
      * @return the policyData
      */
     public String getPolicyData() {
@@ -165,6 +173,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Set policy data.
      * @param policyData the policyData to set
      */
     public void setPolicyData(String policyData) {
@@ -172,6 +181,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Returns configurationDataEntity.
      * @return the configurationDataEntity
      */
     public ConfigurationDataEntity getConfigurationData() {
@@ -179,6 +189,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Set configurationDataEntity.
      * @param configurationDataEntity the configurationDataEntity to set
      */
     public void setConfigurationData(ConfigurationDataEntity configurationDataEntity) {
@@ -186,6 +197,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Returns actionBodyEntity.
      * @return the actionBodyEntity
      */
     public ActionBodyEntity getActionBodyEntity() {
@@ -193,6 +205,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Set actionBodyEntity.
      * @param actionBodyEntity the actionBodyEntity to set
      */
     public void setActionBodyEntity(ActionBodyEntity actionBodyEntity) {
@@ -200,6 +213,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Returns scope.
      * @return the scope
      */
     public String getScope() {
@@ -207,6 +221,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Set scope.
      * @param scope the scope to set
      */
     public void setScope(String scope) {
@@ -214,6 +229,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Returns createdBy.
      * @return the createdBy
      */
     public String getCreatedBy() {
@@ -221,6 +237,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Set createdBy. 
      * @param createdBy the createdBy to set
      */
     public void setCreatedBy(String createdBy) {
@@ -228,6 +245,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Returns description.
      * @return the description
      */
     public String getDescription() {
@@ -235,6 +253,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Set description.
      * @param description the description to set
      */
     public void setDescription(String description) {
@@ -242,6 +261,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Returns modifiedBy.
      * @return the modifiedBy
      */
     public String getModifiedBy() {
@@ -249,6 +269,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Set modifiedBy.
      * @param modifiedBy the modifiedBy to set
      */
     public void setModifiedBy(String modifiedBy) {
@@ -256,13 +277,15 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
-     * @return the version
+     * Returns version.
+     * @return version
      */
     public int getVersion() {
         return version;
     }
 
     /**
+     * Returns createdDate.
      * @return the createdDate
      */
     public Date getCreatedDate() {
@@ -270,6 +293,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Returns modifiedDate.
      * @return the modifiedDate
      */
     public Date getModifiedDate() {
@@ -277,6 +301,7 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Return deleted.
      * @return the deleted
      */
     public boolean isDeleted() {
@@ -284,46 +309,80 @@ public class PolicyEntity implements Serializable {
     }
 
     /**
+     * Set deleted.
      * @param deleted the deleted to set
      */
     public void setDeleted(boolean deleted) {
         this.deleted = deleted;
     }
 
+    /**
+     * Return the reason code.
+     * @return deleted reason code
+     */
+    public String getDeleteReasonCode() {
+        return deleteReasonCode;
+    }
+
+    /**
+     * Set the reason of deletion.
+     * @param deleteReasonCode String object
+     */
+    public void setDeleteReasonCode(String deleteReasonCode) {
+        this.deleteReasonCode = deleteReasonCode;
+    }
+
+    /**
+     * Return deleted By.
+     * @return deletedBy
+     */
+    public String getDeletedBy() {
+        return deletedBy;
+    }
+
+    /**
+     * Set deleted By.
+     * @param deletedBy String object
+     */
+    public void setDeletedBy(String deletedBy) {
+        this.deletedBy = deletedBy;
+    }
+
     @Override
     public int hashCode() {
-    return Objects.hash(policyId, policyName, scope, version, policyVersion, policyData, configurationDataEntity,
-            actionBodyEntity, createdBy, createdDate, description, modifiedBy, modifiedDate, deleted);
+        return Objects.hash(policyId, policyName, scope, version, policyVersion, policyData, configurationDataEntity,
+                actionBodyEntity, createdBy, createdDate, description, modifiedBy, modifiedDate, deleted);
     }
 
     @Override
     public boolean equals(Object obj) {
-        if(obj == null){
+        if (obj == null) {
             return false;
         }
-        if(obj == this){
+        if (obj == this) {
             return true;
         }
-        if(!(obj instanceof PolicyEntity)){
+        if (!(obj instanceof PolicyEntity)) {
             return false;
         }
 
         PolicyEntity p = (PolicyEntity) obj;
 
-        return policyId == p.policyId &&
-                policyName.equals(p.policyName) &&
-                scope.equals(p.scope) &&
-                version == p.version &&
-                policyVersion == p.policyVersion &&
-                policyData.equals(p.policyData) &&
-                ((configurationDataEntity == null && p.configurationDataEntity == null) || (configurationDataEntity!=null && configurationDataEntity.equals(p.configurationDataEntity))) &&
-                ((actionBodyEntity == null && p.actionBodyEntity == null) || (actionBodyEntity!=null && actionBodyEntity.equals(p.actionBodyEntity))) &&
-                createdBy.equals(p.createdBy) &&
-                createdDate.equals(p.createdDate) &&
-                description.equals(p.description) &&
-                modifiedBy.equals(p.modifiedBy) &&
-                modifiedDate.equals(p.modifiedDate) &&
-                deleted == p.deleted;
+        return policyId == p.policyId
+                && policyName.equals(p.policyName)
+                && scope.equals(p.scope)
+                && version == p.version
+                && policyVersion == p.policyVersion
+                && policyData.equals(p.policyData)
+                && ((configurationDataEntity == null && p.configurationDataEntity == null) 
+                        || (configurationDataEntity != null
+                && configurationDataEntity
+                        .equals(p.configurationDataEntity)))
+                && ((actionBodyEntity == null && p.actionBodyEntity == null) || (actionBodyEntity != null 
+                && actionBodyEntity
+                        .equals(p.actionBodyEntity))) && createdBy.equals(p.createdBy)
+                && createdDate.equals(p.createdDate) && description.equals(p.description)
+                && modifiedBy.equals(p.modifiedBy) && modifiedDate.equals(p.modifiedDate) && deleted == p.deleted;
     }
 
 
index d1483a2..d3af75d 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Engine
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 package org.onap.policy.controller;
 
-
+import com.att.research.xacml.api.pap.PAPException;
+import com.att.research.xacml.api.pap.PDP;
+import com.att.research.xacml.api.pap.PDPGroup;
+import com.att.research.xacml.api.pap.PDPPolicy;
+import com.att.research.xacml.util.XACMLProperties;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import java.io.IOException;
+import java.io.PrintWriter;
 import java.net.MalformedURLException;
+import java.sql.Timestamp;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -30,7 +41,6 @@ import java.util.Map;
 import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-
 import javax.management.AttributeNotFoundException;
 import javax.management.InstanceNotFoundException;
 import javax.management.MBeanException;
@@ -43,7 +53,6 @@ import javax.management.remote.JMXServiceURL;
 import javax.script.SimpleBindings;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.json.JSONObject;
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
@@ -51,6 +60,8 @@ import org.onap.policy.dao.SystemLogDbDao;
 import org.onap.policy.model.PDPGroupContainer;
 import org.onap.policy.rest.XACMLRestProperties;
 import org.onap.policy.rest.dao.CommonClassDao;
+import org.onap.policy.rest.jpa.PolicyEntity;
+import org.onap.policy.utils.PolicyUtils;
 import org.onap.policy.xacml.api.XACMLErrorConstants;
 import org.onap.policy.xacml.api.pap.OnapPDP;
 import org.onap.policy.xacml.api.pap.OnapPDPGroup;
@@ -61,365 +72,641 @@ import org.springframework.http.MediaType;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-import com.att.research.xacml.api.pap.PAPException;
-import com.att.research.xacml.api.pap.PDP;
-import com.att.research.xacml.api.pap.PDPGroup;
-import com.att.research.xacml.api.pap.PDPPolicy;
-import com.att.research.xacml.util.XACMLProperties;
-import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
 @Controller
 @RequestMapping({"/"})
-public class DashboardController  extends RestrictedBaseController{
-       private static final Logger policyLogger = FlexLogger.getLogger(DashboardController.class);
-       @Autowired
-       CommonClassDao commonClassDao;
-       
-       @Autowired
-       SystemLogDbDao systemDAO;
-
-       public void setCommonClassDao(CommonClassDao commonClassDao) {
-               this.commonClassDao = commonClassDao;
-       }
-       public void setSystemLogDbDao(SystemLogDbDao systemDAO){
-               this.systemDAO = systemDAO;
-       }
-        
-       private int pdpCount;
-       private PDPGroupContainer pdpConatiner;
-       private ArrayList<Object> pdpStatusData;
-       private ArrayList<Object> papStatusData;
-       private ArrayList<Object> policyActivityData;
-
-       private PolicyController policyController;
-       public PolicyController getPolicyController() {
-               return policyController;
-       }
-
-       public void setPolicyController(PolicyController policyController) {
-               this.policyController = policyController;
-       }
-
-       private PolicyController getPolicyControllerInstance(){
-               return policyController != null ? getPolicyController() : new PolicyController();
-       }
-
-       @RequestMapping(value={"/get_DashboardLoggingData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
-       public void getData(HttpServletRequest request, HttpServletResponse response){
-               try{
-                       Map<String, Object> model = new HashMap<>();
-                       ObjectMapper mapper = new ObjectMapper();
-                       model.put("availableLoggingDatas", mapper.writeValueAsString(systemDAO.getLoggingData()));
-                       JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
-                       JSONObject j = new JSONObject(msg);
-                       response.getWriter().write(j.toString());
-               }
-               catch (Exception e){
-                       policyLogger.error("Exception Occured"+e);
-               }
-       }
-
-       @RequestMapping(value={"/get_DashboardSystemAlertData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
-       public void getSystemAlertData(HttpServletRequest request, HttpServletResponse response){
-               try{
-                       Map<String, Object> model = new HashMap<>();
-                       ObjectMapper mapper = new ObjectMapper();
-                       model.put("systemAlertsTableDatas", mapper.writeValueAsString(systemDAO.getSystemAlertData()));
-                       JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
-                       JSONObject j = new JSONObject(msg);
-                       response.getWriter().write(j.toString());
-               }
-               catch (Exception e){
-                       policyLogger.error("Exception Occured"+e);
-               }
-       }
-
-       @RequestMapping(value={"/get_DashboardPAPStatusData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
-       public void getPAPStatusData(HttpServletRequest request, HttpServletResponse response){
-               try{
-                       Map<String, Object> model = new HashMap<>();
-                       ObjectMapper mapper = new ObjectMapper();
-                       mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
-                       addPAPToTable();
-                       model.put("papTableDatas", mapper.writeValueAsString(papStatusData));
-                       JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
-                       JSONObject j = new JSONObject(msg);
-                       response.getWriter().write(j.toString());
-               }
-               catch (Exception e){
-                       policyLogger.error("Exception Occured"+e);
-               }
-       }
-
-       @RequestMapping(value={"/get_DashboardPDPStatusData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
-       public void getPDPStatusData(HttpServletRequest request, HttpServletResponse response){
-               try{
-                       Map<String, Object> model = new HashMap<>();
-                       ObjectMapper mapper = new ObjectMapper();
-                       mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
-                       PolicyController controller = getPolicyControllerInstance();
-                       this.pdpConatiner = new PDPGroupContainer(controller.getPapEngine());
-                       addPDPToTable();
-                       model.put("pdpTableDatas", mapper.writeValueAsString(pdpStatusData));
-                       JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
-                       JSONObject j = new JSONObject(msg);
-                       response.getWriter().write(j.toString());
-               }
-               catch (Exception e){
-                       policyLogger.error("Exception Occured"+e);
-               }
-       }
-
-       @RequestMapping(value={"/get_DashboardPolicyActivityData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
-       public void getPolicyActivityData(HttpServletRequest request, HttpServletResponse response){
-               try{
-                       Map<String, Object> model = new HashMap<>();
-                       ObjectMapper mapper = new ObjectMapper();
-                       mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
-                       PolicyController controller = getPolicyControllerInstance();
-                       this.pdpConatiner = new PDPGroupContainer(controller.getPapEngine());
-                       addPolicyToTable();
-                       model.put("policyActivityTableDatas", mapper.writeValueAsString(policyActivityData));
-                       JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
-                       JSONObject j = new JSONObject(msg);
-                       response.getWriter().write(j.toString());
-               }
-               catch (Exception e){
-                       policyLogger.error("Exception Occured"+e);
-               }
-       }
-
-       /*
-        * Add the PAP information to the PAP Table
-        */
-       public void addPAPToTable(){
-               papStatusData = new ArrayList<>();
-               String papStatus = null;
-               try {
-                       PolicyController controller = getPolicyControllerInstance();
-                       Set<OnapPDPGroup> groups = controller.getPapEngine().getOnapPDPGroups();
-                       if (groups == null) {
-                               throw new PAPException("PAP not running");
-                       }else {
-                               papStatus = "IS_OK";
-                       }
-               } catch (PAPException | NullPointerException e1) {
-                       papStatus = "CANNOT_CONNECT";
-                       policyLogger.error("Error getting PAP status, PAP not responding to requests", e1);
-               }
-               String papURL = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL);
-               JSONObject object = new JSONObject();
-               object.put("system", papURL);
-               object.put("status", papStatus);
-               List<Object> data = commonClassDao.getDataByQuery("from PolicyEntity", new SimpleBindings());
-               object.put("noOfPolicy", data.size());
-               object.put("noOfConnectedTrap", pdpCount);
-               papStatusData.add(0, object);
-       }
-
-       /**
-        * Add PDP Information to the PDP Table
-        *
-        */
-       public void addPDPToTable(){
-               pdpCount = 0;
-               pdpStatusData = new ArrayList<>();
-               long naCount;
-               long denyCount = 0;
-               long permitCount = 0;
-               for (PDPGroup group : this.pdpConatiner.getGroups()){
-                       for (PDP pdp : group.getPdps()){
-                               naCount = -1;
-                               if ("UP_TO_DATE".equals(pdp.getStatus().getStatus().toString())  && ((OnapPDP) pdp).getJmxPort() != 0){
-                                       String pdpIpAddress = parseIPSystem(pdp.getId());
-                                       int port = ((OnapPDP) pdp).getJmxPort();
-                                       if (port != 0){
-                                               policyLogger.debug("Getting JMX Response Counts from " + pdpIpAddress + " at JMX port " + port);
-                                               naCount = getRequestCounts(pdpIpAddress, port, "pdpEvaluationNA");
-                                               permitCount = getRequestCounts(pdpIpAddress, port, "PdpEvaluationPermit");
-                                               denyCount = getRequestCounts(pdpIpAddress, port, "PdpEvaluationDeny");
-                                       }
-                               }
-                               if (naCount == -1){
-                                       JSONObject object = new JSONObject();
-                                       object.put("id", pdp.getId());
-                                       object.put("name", pdp.getName());
-                                       object.put("groupname", group.getName());
-                                       object.put("status", pdp.getStatus().getStatus().toString());
-                                       object.put("description", pdp.getDescription());
-                                       object.put("permitCount", "NA");
-                                       object.put("denyCount", "NA");
-                                       object.put("naCount", "NA");
-                                       pdpStatusData.add(object);
-                               }else{
-                                       JSONObject object = new JSONObject();
-                                       object.put("id", pdp.getId());
-                                       object.put("name", pdp.getName());
-                                       object.put("groupname", group.getName());
-                                       object.put("status", pdp.getStatus().getStatus().toString());
-                                       object.put("description", pdp.getDescription());
-                                       object.put("permitCount", permitCount);
-                                       object.put("denyCount", denyCount);
-                                       object.put("naCount", naCount);
-                                       pdpStatusData.add(object);
-                               }
-                               pdpCount++;
-                       }
-               }
-       }
-
-       private static String parseIPSystem(String line) {
-               Pattern pattern = Pattern.compile("://(.+?):");
-               Matcher ip = pattern.matcher(line);
-               if (ip.find())
-               {
-                       return ip.group(1);
-               }
-               return null;
-       }
-
-       /*
-        * Contact JMX Connector Sever and return the value of the given jmxAttribute
-        */
-       @SuppressWarnings({ "rawtypes", "unchecked" })
-       private long getRequestCounts(String host, int port, String jmxAttribute) {
-
-               policyLogger.debug("Create an RMI connector client and connect it to the JMX connector server");
-               HashMap map = null;
-               try (JMXConnector jmxConnection = JMXConnectorFactory.newJMXConnector(createConnectionURL(host, port), map)){
-                       jmxConnection.connect();
-                       Object o = jmxConnection.getMBeanServerConnection().getAttribute(new ObjectName("PdpRest:type=PdpRestMonitor"), jmxAttribute);
-                       policyLogger.debug("pdpEvaluationNA value retreived: " + o);
-                       return (long) o;
-               } catch (MalformedURLException e) {
-                       policyLogger.error("MalformedURLException for JMX connection" , e);
-               } catch (IOException e) {
-                       policyLogger.error("Error in reteriving" + jmxAttribute + " from JMX connection", e);
-               } catch (AttributeNotFoundException e) {
-                       policyLogger.error("AttributeNotFoundException  " + jmxAttribute +  " for JMX connection", e);
-               } catch (InstanceNotFoundException e) {
-                       policyLogger.error("InstanceNotFoundException " + host + " for JMX connection", e);
-               } catch (MalformedObjectNameException e) {
-                       policyLogger.error("MalformedObjectNameException for JMX connection", e);
-               } catch (MBeanException e) {
-                       policyLogger.error("MBeanException for JMX connection");
-                       policyLogger.error("Exception Occured"+e);
-               } catch (ReflectionException e) {
-                       policyLogger.error("ReflectionException for JMX connection", e);
-               }
-
-               return -1;
-       }
-
-       private static JMXServiceURL createConnectionURL(String host, int port) throws MalformedURLException{
-           return new JMXServiceURL("rmi", "", 0, "/jndi/rmi://" + host + ":" + port + "/jmxrmi");
-       }
-
-
-       /*
-        * Add the information to the Policy Table
-        */
-       private void addPolicyToTable() {
-               policyActivityData = new ArrayList<>();
-               String policyID;
-               int policyFireCount;
-               Map<String, String> policyMap = new HashMap<>();
-               Object policyList;
-               //get list of policy
-
-               for (PDPGroup group : this.pdpConatiner.getGroups()){
-                       for (PDPPolicy policy : group.getPolicies()){
-                               try{
-                                       policyMap.put(policy.getPolicyId().replace(" ", ""), policy.getId());
-                               }catch(Exception e){
-                                       policyLogger.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID+policy.getName() +e);
-                               }
-                       }
-
-                       for (PDP pdp : group.getPdps()){
-                               // Add rows to the Policy Table
-                               policyList = null;
-                               if ("UP_TO_DATE".equals(pdp.getStatus().getStatus().toString()) && ((OnapPDP) pdp).getJmxPort() != 0){
-                                       String pdpIpAddress = parseIPSystem(pdp.getId());
-                                       policyList = getPolicy(pdpIpAddress, ((OnapPDP) pdp).getJmxPort(), "policyCount");
-                               }
-                               if (policyList != null && policyList.toString().length() > 3){
-                                       String[]  splitPolicy = policyList.toString().split(",");
-                                       for (String policyKeyValue : splitPolicy){
-                                               policyID = urnPolicyID(policyKeyValue);
-                                               policyFireCount = countPolicyID(policyKeyValue);
-                                               if (policyID != null && policyMap.containsKey(policyID)){
-                                                       JSONObject object = new JSONObject();
-                                                       object.put("policyId", policyMap.get(policyID));
-                                                       object.put("fireCount", policyFireCount);
-                                                       object.put("system", pdp.getId());
-                                                       policyActivityData.add(object);
-                                               }
-                                       }
-                               }else {
-                                       if (policyList != null){
-                                               JSONObject object = new JSONObject();
-                                               object.put("policyId", "Unable to retrieve policy information");
-                                               object.put("fireCount", "NA");
-                                               object.put("system", pdp.getId());
-                                               policyActivityData.add(object);
-                                       }else{
-                                               JSONObject object = new JSONObject();
-                                               object.put("policyId", "Unable to access PDP JMX Server");
-                                               object.put("fireCount", "NA");
-                                               object.put("system", pdp.getId());
-                                               policyActivityData.add(object);
-                                       }
-                               }
-                       }
-               }
-       }
-
-       /*
-        * Contact JMX Connector Sever and return the list of {policy id , count}
-        */
-       @SuppressWarnings({ "rawtypes", "unchecked" })
-       private Object getPolicy(String host, int port, String jmxAttribute){
-               policyLogger.debug("Create an RMI connector client and connect it to the JMX connector server for Policy: " + host);
-               HashMap map = null;
-               try (JMXConnector jmxConnection = JMXConnectorFactory.newJMXConnector(createConnectionURL(host, port), map)) {
-                       jmxConnection.connect();
-                       Object o = jmxConnection.getMBeanServerConnection().getAttribute(new ObjectName("PdpRest:type=PdpRestMonitor"), "policyMap");
-                       policyLogger.debug("policyMap value retreived: " + o);
-                       return  o;
-               } catch (MalformedURLException e) {
-                       policyLogger.error("MalformedURLException for JMX connection" , e);
-               } catch (IOException e) {
-                       policyLogger.error("AttributeNotFoundException for policyMap" , e);
-               } catch (AttributeNotFoundException e) {
-                       policyLogger.error("AttributeNotFoundException for JMX connection", e);
-               } catch (InstanceNotFoundException e) {
-                       policyLogger.error("InstanceNotFoundException " + host + " for JMX connection", e);
-               } catch (MalformedObjectNameException e) {
-                       policyLogger.error("MalformedObjectNameException for JMX connection", e);
-               } catch (MBeanException e) {
-                       policyLogger.error("MBeanException for JMX connection", e);
-                       policyLogger.error("Exception Occured"+e);
-               } catch (ReflectionException e) {
-                       policyLogger.error("ReflectionException for JMX connection", e);
-               }
-
-               return null;
-
-       }
-
-       private static String urnPolicyID(String line){
-               String[]  splitLine = line.split("=");
-               String removeSpaces = splitLine[0].replaceAll("\\s+", "");
-               return removeSpaces.replace("{", "");
-       }
-
-       private static Integer countPolicyID(String line){
-               String[]  splitLine = line.split("=");
-               String sCount = splitLine[1].replace("}", "");
-               return Integer.parseInt(sCount);
-       }
+public class DashboardController extends RestrictedBaseController {
+    private static final Logger policyLogger = FlexLogger.getLogger(DashboardController.class);
+    @Autowired
+    CommonClassDao commonClassDao;
+
+    @Autowired
+    SystemLogDbDao systemDAO;
+
+    public void setCommonClassDao(CommonClassDao commonClassDao) {
+        this.commonClassDao = commonClassDao;
+    }
+
+    public void setSystemLogDbDao(SystemLogDbDao systemDAO) {
+        this.systemDAO = systemDAO;
+    }
+
+    private int pdpCount;
+    private PDPGroupContainer pdpConatiner;
+    private ArrayList<Object> pdpStatusData;
+    private ArrayList<Object> papStatusData;
+    private ArrayList<Object> policyStatusCrudData;
+    private ArrayList<Object> pdpStatusCrudData;
+    private ArrayList<Object> policyActivityData;
+    private PolicyController policyController;
+    private static String defaultTime = "0000-00-00";
+    private static String createDate = "createdDate";
+    private static String modifiedDate = "modifiedDate";
+    private static String scope = "scope";
+    private static String stage = "stage";
+    private static String exceptionOccured = "Exception Occured";
+
+    public PolicyController getPolicyController() {
+        return policyController;
+    }
+
+    public void setPolicyController(PolicyController policyController) {
+        this.policyController = policyController;
+    }
+
+    private PolicyController getPolicyControllerInstance() {
+        return policyController != null ? getPolicyController() : new PolicyController();
+    }
+
+
+
+    /**
+     * This method is to retrieve all the data of last 30 days from PolicyEntity table as default.
+     * 
+     * @param request object
+     * @param response object contains retrieved data
+     */
+    @RequestMapping(value = {"/get_DashboardPolicyCRUDData"},
+            method = {org.springframework.web.bind.annotation.RequestMethod.GET},
+            produces = MediaType.APPLICATION_JSON_VALUE)
+    public void get_DashboardPolicyCrudData(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            Map<String, Object> model = new HashMap<>();
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+            addPolicyCrudInfoToTable();
+            model.put("papStatusCRUDData", mapper.writeValueAsString(policyStatusCrudData));
+            JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+            JSONObject j = new JSONObject(msg);
+            response.getWriter().write(j.toString());
+        } catch (Exception e) {
+            policyLogger.error(exceptionOccured, e);
+        }
+    }
+
+    /**
+     * This method retrieves data based on input criteria.
+     * 
+     * @param request object
+     * @param response object contains retrieved data
+     */
+    @RequestMapping(value = {"/dashboardController/dashboardAdvancedSearch.htm"},
+            method = {org.springframework.web.bind.annotation.RequestMethod.POST})
+    public void dashboardAdvancedSearch(HttpServletRequest request, HttpServletResponse response) throws IOException {
+        String lscope = null;
+        String lstage = "both";
+        String isDelected = "both";
+        String ttlDateAfter = null;
+        String ttlDateBefore = null;
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+            JsonNode root = mapper.readTree(request.getReader());
+            JsonNode inputData = root.get("policyData");
+            JsonNode jscope = inputData.path(scope);
+            if (jscope != null) {
+                lscope = jscope.textValue();
+            }
+            JsonNode jstage = inputData.path(stage);
+            if (jstage != null) {
+                lstage = jstage.textValue();
+            }
+            JsonNode jisDelected = inputData.path("isDelected");
+            if (jisDelected != null) {
+                isDelected = jisDelected.textValue();
+            }
+            JsonNode jttlDateAfter = inputData.path("ttlDate_after");
+            if (jttlDateAfter != null) {
+                ttlDateAfter = jttlDateAfter.textValue();
+            }
+            JsonNode jttlDateBefore = inputData.path("ttlDate_before");
+            if (jttlDateBefore != null) {
+                ttlDateBefore = jttlDateBefore.textValue();
+            }
+            getPolicyData(lscope, lstage, isDelected, ttlDateAfter, ttlDateBefore);
+            Map<String, Object> model = new HashMap<>();
+            model.put("policyStatusCRUDData", mapper.writeValueAsString(policyStatusCrudData));
+            JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+            JSONObject j = new JSONObject(msg);
+            response.getWriter().write(j.toString());
+        } catch (Exception e) {
+            response.setCharacterEncoding("UTF-8");
+            PrintWriter out = response.getWriter();
+            out.write(PolicyUtils.CATCH_EXCEPTION);
+        }
+
+    }
+
+    /**
+     * This method is to retrieve data from PolicyEntity table.
+     * 
+     * @param request object
+     * @param response object contains retrieved data
+     */
+    @RequestMapping(value = {"/get_DashboardPdpPolicyCRUDData"},
+            method = {org.springframework.web.bind.annotation.RequestMethod.GET},
+            produces = MediaType.APPLICATION_JSON_VALUE)
+    public void get_DashboardPdpPolicyCrudData(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            Map<String, Object> model = new HashMap<>();
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+            model.put("pdpStatusCRUDData", mapper.writeValueAsString(pdpStatusCrudData));
+            JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+            JSONObject j = new JSONObject(msg);
+            response.getWriter().write(j.toString());
+        } catch (Exception e) {
+            policyLogger.error(exceptionOccured, e);
+        }
+    }
+
+    @RequestMapping(value = {"/get_DashboardLoggingData"},
+            method = {org.springframework.web.bind.annotation.RequestMethod.GET},
+            produces = MediaType.APPLICATION_JSON_VALUE)
+    public void getData(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            Map<String, Object> model = new HashMap<>();
+            ObjectMapper mapper = new ObjectMapper();
+            model.put("availableLoggingDatas", mapper.writeValueAsString(systemDAO.getLoggingData()));
+            JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+            JSONObject j = new JSONObject(msg);
+            response.getWriter().write(j.toString());
+        } catch (Exception e) {
+            policyLogger.error(exceptionOccured + e);
+        }
+    }
+
+    @RequestMapping(value = {"/get_DashboardSystemAlertData"},
+            method = {org.springframework.web.bind.annotation.RequestMethod.GET},
+            produces = MediaType.APPLICATION_JSON_VALUE)
+    public void getSystemAlertData(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            Map<String, Object> model = new HashMap<>();
+            ObjectMapper mapper = new ObjectMapper();
+            model.put("systemAlertsTableDatas", mapper.writeValueAsString(systemDAO.getSystemAlertData()));
+            JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+            JSONObject j = new JSONObject(msg);
+            response.getWriter().write(j.toString());
+        } catch (Exception e) {
+            policyLogger.error(exceptionOccured + e);
+        }
+    }
+
+    @RequestMapping(value = {"/get_DashboardPAPStatusData"},
+            method = {org.springframework.web.bind.annotation.RequestMethod.GET},
+            produces = MediaType.APPLICATION_JSON_VALUE)
+    public void getPAPStatusData(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            Map<String, Object> model = new HashMap<>();
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+            addPAPToTable();
+            model.put("papTableDatas", mapper.writeValueAsString(papStatusData));
+            JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+            JSONObject j = new JSONObject(msg);
+            response.getWriter().write(j.toString());
+        } catch (Exception e) {
+            policyLogger.error(exceptionOccured + e);
+        }
+    }
+
+    @RequestMapping(value = {"/get_DashboardPDPStatusData"},
+            method = {org.springframework.web.bind.annotation.RequestMethod.GET},
+            produces = MediaType.APPLICATION_JSON_VALUE)
+    public void getPDPStatusData(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            Map<String, Object> model = new HashMap<>();
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+            PolicyController controller = getPolicyControllerInstance();
+            this.pdpConatiner = new PDPGroupContainer(controller.getPapEngine());
+            addPDPToTable();
+            model.put("pdpTableDatas", mapper.writeValueAsString(pdpStatusData));
+            JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+            JSONObject j = new JSONObject(msg);
+            response.getWriter().write(j.toString());
+        } catch (Exception e) {
+            policyLogger.error(exceptionOccured + e);
+        }
+    }
+
+    @RequestMapping(value = {"/get_DashboardPolicyActivityData"},
+            method = {org.springframework.web.bind.annotation.RequestMethod.GET},
+            produces = MediaType.APPLICATION_JSON_VALUE)
+    public void getPolicyActivityData(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            Map<String, Object> model = new HashMap<>();
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
+            PolicyController controller = getPolicyControllerInstance();
+            this.pdpConatiner = new PDPGroupContainer(controller.getPapEngine());
+            addPolicyToTable();
+            model.put("policyActivityTableDatas", mapper.writeValueAsString(policyActivityData));
+            JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
+            JSONObject j = new JSONObject(msg);
+            response.getWriter().write(j.toString());
+        } catch (Exception e) {
+            policyLogger.error(exceptionOccured + e);
+        }
+    }
+
+    /*
+     * Add the PAP information to the PAP Table
+     */
+    public void addPAPToTable() {
+        papStatusData = new ArrayList<>();
+        String papStatus = null;
+        try {
+            PolicyController controller = getPolicyControllerInstance();
+            Set<OnapPDPGroup> groups = controller.getPapEngine().getOnapPDPGroups();
+            if (groups == null) {
+                throw new PAPException("PAP not running");
+            } else {
+                papStatus = "IS_OK";
+            }
+        } catch (PAPException | NullPointerException e1) {
+            papStatus = "CANNOT_CONNECT";
+            policyLogger.error("Error getting PAP status, PAP not responding to requests", e1);
+        }
+        String papURL = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL);
+        JSONObject object = new JSONObject();
+        object.put("system", papURL);
+        object.put("status", papStatus);
+        List<Object> data = commonClassDao.getDataByQuery("from PolicyEntity", new SimpleBindings());
+        object.put("noOfPolicy", data.size());
+        object.put("noOfConnectedTrap", pdpCount);
+        papStatusData.add(0, object);
+    }
+
+
+    /*
+     * Add the PAP Policy information to the PAP Table
+     */
+    public void addPolicyCrudInfoToTable() {
+        policyStatusCrudData = new ArrayList<>();
+        LocalDate now = LocalDate.now();
+        LocalDate lastThirtyDate = now.minusDays(30);
+        policyLogger.info("now: " + now);
+        policyLogger.info("thirty: " + lastThirtyDate);
+        String entityquery = "from PolicyEntity where created_date >= :createdDate";
+        SimpleBindings geParams = new SimpleBindings();
+        geParams.put(createDate, lastThirtyDate.toString());
+        List<Object> datas = commonClassDao.getDataByQuery(entityquery, geParams);
+
+        if (datas == null) {
+            return;
+        }
+
+        datas.stream().forEach((data) -> {
+            JSONObject object = new JSONObject();
+            object.put("id", ((PolicyEntity) data).getPolicyId());
+            object.put(scope, ((PolicyEntity) data).getScope());
+            object.put("policyName", ((PolicyEntity) data).getPolicyName());
+            object.put("version", ((PolicyEntity) data).getVersion());
+            if (isPushedToPDP(((PolicyEntity) data).getPolicyId())) {
+                object.put(stage, "PDP");
+            } else {
+                object.put(stage, "PAP");
+            }
+            object.put("createdBy", ((PolicyEntity) data).getCreatedBy());
+            object.put("deleted", ((PolicyEntity) data).isDeleted());
+            object.put("deleteReasonCode", ((PolicyEntity) data).getDeleteReasonCode());
+            object.put("deletedBy", ((PolicyEntity) data).getDeletedBy());
+            object.put("modifiedBy", ((PolicyEntity) data).getModifiedBy());
+            if (((PolicyEntity) data).getModifiedDate() != null) {
+                Timestamp ts = new Timestamp(((PolicyEntity) data).getModifiedDate().getTime());
+                Timestamp cts = new Timestamp(((PolicyEntity) data).getCreatedDate().getTime());
+                object.put(modifiedDate, ts.toString());
+                object.put(createDate, cts.toString());
+            } else {
+                object.put(modifiedDate, defaultTime);
+                object.put(createDate, defaultTime);
+            }
+            policyStatusCrudData.add(object);
+        });
+    }
+
+    /*
+     * Add the PDP Policy information to the PDP Table
+     */
+    private boolean isPushedToPDP(long policyId) {
+        try {
+            String groupEntityquery = "from PolicyGroupEntity where policyid = :policyEntityId";
+            SimpleBindings geParams = new SimpleBindings();
+            geParams.put("policyEntityId", policyId);
+            List<Object> groupobject = commonClassDao.getDataByQuery(groupEntityquery, geParams);
+            if (groupobject != null && groupobject.size() > 0) {
+                return true;
+            }
+        } catch (Exception e) {
+            policyLogger.error(exceptionOccured + e);
+        }
+
+        return false;
+    }
+
+    /*
+     * Add the Policy information to the policyStatusCRUDDataTable
+     */
+    private void getPolicyData(String inputScope, String inputStage, String isDeleted, String createdAfter, String createdBefore) {
+        policyStatusCrudData = new ArrayList<>();
+        List<Object> policyData = null;
+        SimpleBindings geParams = new SimpleBindings();
+        try {
+            StringBuilder entityquery = buildSqlQuery(inputScope, isDeleted, createdAfter, createdBefore);
+            if (entityquery == null) {
+                return;
+            }
+            policyLogger.info("entityquery: " + entityquery.toString());
+            policyLogger.info("geParams: " + geParams.toString());
+
+            policyData = commonClassDao.getDataByQuery(entityquery.toString(), geParams);
+            if (policyData == null) {
+                return;
+            }
+            policyData.stream().forEach((data) -> {
+                JSONObject object = populatePolicyData((PolicyEntity) data);
+
+                if (object.get(stage).equals("PDP") && "PDP".equalsIgnoreCase(inputStage)) {
+                    policyStatusCrudData.add(object);
+                }
+                if (object.get(stage).equals("PAP") && "PAP".equalsIgnoreCase(inputStage)) {
+                    policyStatusCrudData.add(object);
+                }
+                if ("both".equalsIgnoreCase(inputStage)) {
+                    policyStatusCrudData.add(object);
+                }
+            });
+        } catch (Exception e) {
+            policyLogger.error(exceptionOccured, e);
+        }
+    }
+
+    /*
+     * Build SQL query
+     */
+    private StringBuilder buildSqlQuery(String scope, String isDeleted, String createdAfter, String createdBefore) {
+        SimpleBindings geParams = new SimpleBindings();
+
+        // since scope is required
+        if (scope == null || scope.isEmpty()) {
+            return null;
+        } else {
+            geParams.put(scope, "%" + scope + "%");
+        }
+        StringBuilder entityquery = new StringBuilder("from PolicyEntity where scope like :scope ");
+        if (!"both".equalsIgnoreCase(isDeleted)) {
+            entityquery.append(" and deleted = :isDeleted");
+            if ("Yes".equalsIgnoreCase(isDeleted)) {
+                geParams.put("isDeleted", true);
+            } else {
+                geParams.put("isDeleted", false);
+            }
+        }
+        if (createdAfter != null && !createdAfter.isEmpty()) {
+            entityquery.append(" and created_date >= :createdAfter");
+            geParams.put("createdAfter", createdAfter);
+        }
+        if (createdBefore != null && !createdBefore.isEmpty()) {
+            entityquery.append(" and created_date <= :createdBefore");
+            geParams.put("createdBefore", createdBefore);
+        }
+        return entityquery;
+    }
+
+    private JSONObject populatePolicyData(PolicyEntity data) {
+        JSONObject object = new JSONObject();
+        object.put("id", data.getPolicyId());
+        object.put(scope, data.getScope());
+        object.put("policyName", data.getPolicyName());
+        object.put("version", data.getVersion());
+        if (isPushedToPDP(data.getPolicyId())) {
+            object.put(stage, "PDP");
+        } else {
+            object.put(stage, "PAP");
+        }
+        object.put("createdBy", data.getCreatedBy());
+        object.put("deleted", data.isDeleted());
+        object.put("deleteReasonCode", data.getDeleteReasonCode());
+        object.put("deletedBy", data.getDeletedBy());
+        object.put("modifiedBy", data.getModifiedBy());
+        if (data.getModifiedDate() != null) {
+            Timestamp ts = new Timestamp(data.getModifiedDate().getTime());
+            Timestamp cts = new Timestamp(data.getCreatedDate().getTime());
+            object.put(modifiedDate, ts.toString());
+            object.put(createDate, cts.toString());
+        } else {
+            object.put(modifiedDate, defaultTime);
+            object.put(createDate, defaultTime);
+        }
+
+        return object;
+    }
+
+    /**
+     * Add PDP Information to the PDP Table
+     *
+     */
+    public void addPDPToTable() {
+        pdpCount = 0;
+        pdpStatusData = new ArrayList<>();
+        long naCount;
+        long denyCount = 0;
+        long permitCount = 0;
+        for (PDPGroup group : this.pdpConatiner.getGroups()) {
+            for (PDP pdp : group.getPdps()) {
+                naCount = -1;
+                if ("UP_TO_DATE".equals(pdp.getStatus().getStatus().toString()) && ((OnapPDP) pdp).getJmxPort() != 0) {
+                    String pdpIpAddress = parseIPSystem(pdp.getId());
+                    int port = ((OnapPDP) pdp).getJmxPort();
+                    if (port != 0) {
+                        policyLogger.debug("Getting JMX Response Counts from " + pdpIpAddress + " at JMX port " + port);
+                        naCount = getRequestCounts(pdpIpAddress, port, "pdpEvaluationNA");
+                        permitCount = getRequestCounts(pdpIpAddress, port, "PdpEvaluationPermit");
+                        denyCount = getRequestCounts(pdpIpAddress, port, "PdpEvaluationDeny");
+                    }
+                }
+                if (naCount == -1) {
+                    JSONObject object = new JSONObject();
+                    object.put("id", pdp.getId());
+                    object.put("name", pdp.getName());
+                    object.put("groupname", group.getName());
+                    object.put("status", pdp.getStatus().getStatus().toString());
+                    object.put("description", pdp.getDescription());
+                    object.put("permitCount", "NA");
+                    object.put("denyCount", "NA");
+                    object.put("naCount", "NA");
+                    pdpStatusData.add(object);
+                } else {
+                    JSONObject object = new JSONObject();
+                    object.put("id", pdp.getId());
+                    object.put("name", pdp.getName());
+                    object.put("groupname", group.getName());
+                    object.put("status", pdp.getStatus().getStatus().toString());
+                    object.put("description", pdp.getDescription());
+                    object.put("permitCount", permitCount);
+                    object.put("denyCount", denyCount);
+                    object.put("naCount", naCount);
+                    pdpStatusData.add(object);
+                }
+                pdpCount++;
+            }
+        }
+    }
+
+    private static String parseIPSystem(String line) {
+        Pattern pattern = Pattern.compile("://(.+?):");
+        Matcher ip = pattern.matcher(line);
+        if (ip.find()) {
+            return ip.group(1);
+        }
+        return null;
+    }
+
+    /*
+     * Contact JMX Connector Sever and return the value of the given jmxAttribute
+     */
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    private long getRequestCounts(String host, int port, String jmxAttribute) {
+
+        policyLogger.debug("Create an RMI connector client and connect it to the JMX connector server");
+        HashMap map = null;
+        try (JMXConnector jmxConnection = JMXConnectorFactory.newJMXConnector(createConnectionURL(host, port), map)) {
+            jmxConnection.connect();
+            Object o =
+                    jmxConnection.getMBeanServerConnection().getAttribute(
+                            new ObjectName("PdpRest:type=PdpRestMonitor"), jmxAttribute);
+            policyLogger.debug("pdpEvaluationNA value retreived: " + o);
+            return (long) o;
+        } catch (MalformedURLException e) {
+            policyLogger.error("MalformedURLException for JMX connection", e);
+        } catch (IOException e) {
+            policyLogger.error("Error in reteriving" + jmxAttribute + " from JMX connection", e);
+        } catch (AttributeNotFoundException e) {
+            policyLogger.error("AttributeNotFoundException  " + jmxAttribute + " for JMX connection", e);
+        } catch (InstanceNotFoundException e) {
+            policyLogger.error("InstanceNotFoundException " + host + " for JMX connection", e);
+        } catch (MalformedObjectNameException e) {
+            policyLogger.error("MalformedObjectNameException for JMX connection", e);
+        } catch (MBeanException e) {
+            policyLogger.error("MBeanException for JMX connection");
+            policyLogger.error(exceptionOccured + e);
+        } catch (ReflectionException e) {
+            policyLogger.error("ReflectionException for JMX connection", e);
+        }
+
+        return -1;
+    }
+
+    private static JMXServiceURL createConnectionURL(String host, int port) throws MalformedURLException {
+        return new JMXServiceURL("rmi", "", 0, "/jndi/rmi://" + host + ":" + port + "/jmxrmi");
+    }
+
+
+    /*
+     * Add the information to the Policy Table
+     */
+    private void addPolicyToTable() {
+        policyActivityData = new ArrayList<>();
+        String policyID;
+        int policyFireCount;
+        Map<String, String> policyMap = new HashMap<>();
+        Object policyList;
+        // get list of policy
+
+        for (PDPGroup group : this.pdpConatiner.getGroups()) {
+            for (PDPPolicy policy : group.getPolicies()) {
+                try {
+                    policyMap.put(policy.getPolicyId().replace(" ", ""), policy.getId());
+                } catch (Exception e) {
+                    policyLogger.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID + policy.getName() + e);
+                }
+            }
+
+            for (PDP pdp : group.getPdps()) {
+                // Add rows to the Policy Table
+                policyList = null;
+                if ("UP_TO_DATE".equals(pdp.getStatus().getStatus().toString()) && ((OnapPDP) pdp).getJmxPort() != 0) {
+                    String pdpIpAddress = parseIPSystem(pdp.getId());
+                    policyList = getPolicy(pdpIpAddress, ((OnapPDP) pdp).getJmxPort(), "policyCount");
+                }
+                if (policyList != null && policyList.toString().length() > 3) {
+                    String[] splitPolicy = policyList.toString().split(",");
+                    for (String policyKeyValue : splitPolicy) {
+                        policyID = urnPolicyID(policyKeyValue);
+                        policyFireCount = countPolicyID(policyKeyValue);
+                        if (policyID != null && policyMap.containsKey(policyID)) {
+                            JSONObject object = new JSONObject();
+                            object.put("policyId", policyMap.get(policyID));
+                            object.put("fireCount", policyFireCount);
+                            object.put("system", pdp.getId());
+                            policyActivityData.add(object);
+                        }
+                    }
+                } else {
+                    if (policyList != null) {
+                        JSONObject object = new JSONObject();
+                        object.put("policyId", "Unable to retrieve policy information");
+                        object.put("fireCount", "NA");
+                        object.put("system", pdp.getId());
+                        policyActivityData.add(object);
+                    } else {
+                        JSONObject object = new JSONObject();
+                        object.put("policyId", "Unable to access PDP JMX Server");
+                        object.put("fireCount", "NA");
+                        object.put("system", pdp.getId());
+                        policyActivityData.add(object);
+                    }
+                }
+            }
+        }
+    }
+
+    /*
+     * Contact JMX Connector Sever and return the list of {policy id , count}
+     */
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    private Object getPolicy(String host, int port, String jmxAttribute) {
+        policyLogger.debug("Create an RMI connector client and connect it to the JMX connector server for Policy: "
+                + host);
+        HashMap map = null;
+        try (JMXConnector jmxConnection = JMXConnectorFactory.newJMXConnector(createConnectionURL(host, port), map)) {
+            jmxConnection.connect();
+            Object o =
+                    jmxConnection.getMBeanServerConnection().getAttribute(
+                            new ObjectName("PdpRest:type=PdpRestMonitor"), "policyMap");
+            policyLogger.debug("policyMap value retreived: " + o);
+            return o;
+        } catch (MalformedURLException e) {
+            policyLogger.error("MalformedURLException for JMX connection", e);
+        } catch (IOException e) {
+            policyLogger.error("AttributeNotFoundException for policyMap", e);
+        } catch (AttributeNotFoundException e) {
+            policyLogger.error("AttributeNotFoundException for JMX connection", e);
+        } catch (InstanceNotFoundException e) {
+            policyLogger.error("InstanceNotFoundException " + host + " for JMX connection", e);
+        } catch (MalformedObjectNameException e) {
+            policyLogger.error("MalformedObjectNameException for JMX connection", e);
+        } catch (MBeanException e) {
+            policyLogger.error("MBeanException for JMX connection", e);
+            policyLogger.error(exceptionOccured + e);
+        } catch (ReflectionException e) {
+            policyLogger.error("ReflectionException for JMX connection", e);
+        }
+
+        return null;
+
+    }
+
+    private static String urnPolicyID(String line) {
+        String[] splitLine = line.split("=");
+        String removeSpaces = splitLine[0].replaceAll("\\s+", "");
+        return removeSpaces.replace("{", "");
+    }
+
+    private static Integer countPolicyID(String line) {
+        String[] splitLine = line.split("=");
+        String sCount = splitLine[1].replace("}", "");
+        return Integer.parseInt(sCount);
+    }
 
 }
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dashboardCRUDController.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dashboardCRUDController.js
new file mode 100644 (file)
index 0000000..ce1af6b
--- /dev/null
@@ -0,0 +1,156 @@
+/*-
+ * ============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=========================================================
+ */
+
+app.controller('policyDashboardCRUDDataController', function ($scope, PolicyAppService, modalService, $modal){
+       console.log("policyDashboardCRUDDataController called");
+       
+       $('#dashBoardAdvanceSearch').hide();
+       
+    $scope.papCRUDTableDatasTemp = [];
+    
+    $scope.dashboardAdsearch = { isDelected: 'both', stage: 'both',  scope: "", ttlDate_after: "", ttlDate_before: ""};
+
+    PolicyAppService.getData('get_DashboardPolicyCRUDData').then(function(data){
+
+               var j = data;
+               $scope.data = JSON.parse(j.data);
+               console.log($scope.data);
+               $scope.papStatusCRUDDatas =JSON.parse($scope.data.papStatusCRUDData);
+        if($scope.papStatusCRUDDatas != null){
+            for(i = 0; i < $scope.papStatusCRUDDatas.length; i++){
+                $scope.papCRUDTableDatasTemp.push($scope.papStatusCRUDDatas[i].map);
+            }
+            
+            $scope.papCRUDTableDatas = $scope.papCRUDTableDatasTemp;
+        } 
+               
+       },function(error){
+               console.log("failed");
+       });
+
+       $scope.papCRUDStatusDatas = {
+               data : 'papCRUDTableDatas',
+               enableFiltering: true,
+               columnDefs: [{ field: 'id', displayName :'id'},
+                                       {field: 'scope', displayName :'Scope'},
+                                       {field: 'policyName', displayName :'Policy Name'},
+                                       {field: 'version', displayName :'Version'},
+                                       {field: 'stage', displayName :'Stage'},
+                                       {field: 'createdBy', displayName :'Created By'},
+                                       {field: 'deleted', displayName :'Deleted'},
+                                       {field: 'deleteReasonCode', displayName :'Deleted Reason'},
+                                       {field: 'deletedBy' , displayName :'Deleted By'},
+                                       {field: 'modifiedBy' , displayName :'Modified By'},
+                                       {field: 'createdDate',  displayName :'Created Date'},
+                                       {field: 'modifiedDate',  displayName :'Modified Date'}
+               ],
+        onRegisterApi: function(gridApi){
+               $scope.gridApi = gridApi;
+        }
+       };
+       
+    $('#ttlDate_after').datepicker({
+       dateFormat: 'yy-mm-dd',
+       changeMonth: true,
+       changeYear: true,
+       onSelect: function(date) {
+               angular.element($('#ttlDate_after')).triggerHandler('input');
+       }
+    });
+    
+    $('#ttlDate_before').datepicker({
+       dateFormat: 'yy-mm-dd',
+       changeMonth: true,
+       changeYear: true,
+       onSelect: function(date) {
+               angular.element($('#ttlDate_before')).triggerHandler('input');
+       }
+    });
+    
+    $scope.refresh = function(){
+       $scope.modal('advancedSearch', true);
+       $scope.temp.policy = "";
+    };
+    
+    
+       $scope.advancedSearch = function(){
+
+                $('#dashBoardAdvanceSearch').toggle();
+                if($('#advancedSearchArrow').hasClass('arrowdown')){
+                        $('#advancedSearchArrow').removeClass("arrowdown");
+                        $('#advancedSearchArrow').addClass("arrowup"); 
+                        
+                }else{
+                        $('#advancedSearchArrow').removeClass("arrowup");
+                        $('#advancedSearchArrow').addClass("arrowdown"); 
+                }
+       }
+       
+   
+    $scope.startAdvancedSearch = function(data){
+       
+                console.log("startAdvancedSearch called");
+                console.log(data.isDelected);
+                console.log(data.stage);
+                console.log(data.scope);
+                console.log(data.ttlDate_after);
+                console.log(data.ttlDate_before);
+                
+                if(data.scope == null){
+                        return;
+                }
+                
+       var uuu = "dashboardController/dashboardAdvancedSearch.htm";
+        
+        var postData={policyData: data};
+               $.ajax({
+                       type : 'POST',
+                       url : uuu,
+                       dataType: 'json',
+                       contentType: 'application/json',
+                       data: JSON.stringify(postData),
+                       success : function(data){
+                                console.log("dashboardAdvancedSearch data returned: " + data);
+                               
+                 $scope.$apply(function(){  
+                       
+                               var j = data;
+                               $scope.data = JSON.parse(j.data);
+                               console.log($scope.data);
+                               $scope.papStatusCRUDDatas =JSON.parse($scope.data.policyStatusCRUDData);
+                               
+                               $scope.papCRUDTableDatasTemp = [];
+                      
+                   for(i = 0; i < $scope.papStatusCRUDDatas.length; i++){
+                       $scope.papCRUDTableDatasTemp.push($scope.papStatusCRUDDatas[i].map);
+                   }
+                   
+                   $scope.papCRUDTableDatas = $scope.papCRUDTableDatasTemp;
+                   
+                  $scope.gridApi.grid.refresh();
+               });
+                       },
+                       error : function(data){
+                               console.log("dashboardAdvancedSearch Failed: data returned as " + data);
+                       }
+               });
+    };
+
+});
\ No newline at end of file
index a340c67..702a543 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Engine
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -53,6 +53,10 @@ app.config(function($routeProvider) {
                templateUrl: 'app/policyApp/policy-models/policy_DashboardHealth.html',
                controller : "policyDashboardHealthController"
        })
+       .when('/Dashboard_crud', {
+               templateUrl: 'app/policyApp/policy-models/policy_DashboardCRUD.html',
+               controller : "policyDashboardCRUDDataController"
+       })
        .when('/policy_SearchFilter', {
                templateUrl: 'app/policyApp/policy-models/policy_SearchFilter.html',
                controller : "PolicySearchController"
index 9be8d01..430907a 100644 (file)
        <script src= "app/policyApp/controller/policyAdminTabController.js"></script>
        <script src= "app/policyApp/controller/dashboard_Logging_Controller.js"></script>
        <script src= "app/policyApp/controller/dashboardController.js"></script>
+        <script src= "app/policyApp/controller/dashboardCRUDController.js"></script>
        <script src= "app/policyApp/controller/pdpController.js"></script>
        <script src= "app/policyApp/controller/pdpGroupPopUpController.js"></script>
        <script src= "app/policyApp/controller/DictionaryController.js"></script>
index 850adb3..d7c98b9 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Engine
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -469,4 +469,85 @@ table th > a:focus {
 
 .mstooltip:hover .tooltiptext {
     visibility: visible;
+}
+
+
+.msloader {
+    border: 6px solid #a94442; 
+    border-top: 6px solid #3498db; /* Blue */
+    border-radius: 50%;
+    width: 60px;
+    height: 60px;
+    animation: spin 2s linear infinite;
+}
+
+
+@-webkit-keyframes spin {
+  0% { -webkit-transform: rotate(0deg); }
+  100% { -webkit-transform: rotate(360deg); }
+}
+
+@keyframes spin {
+  0% { transform: rotate(0deg); }
+  100% { transform: rotate(360deg); }
+}
+
+#msPolicyloader {
+   display:block;
+   background-color:#c0c0c0;
+   width:20px;
+   height: 20px;
+   margin-left: 5px;
+}
+
+#msVersion {
+    width: 195px;
+    height: 20px;
+    border: 0px;
+    display: -webkit-flex; /* Safari */
+    -webkit-flex-flow: row-reverse wrap; /* Safari 6.1+ */
+    display: flex;
+    flex-flow: row-reverse wrap;
+}
+
+#advancedSearch i {
+  border: solid black;
+  border-width: 0 1px 1px 0;
+  display: inline-block;
+  padding: 3px;
+  margin-left:20px;
+}
+.arrowright {
+    transform: rotate(-45deg);
+    -webkit-transform: rotate(-45deg);
+}
+
+.arrowleft {
+    transform: rotate(135deg);
+    -webkit-transform: rotate(135deg);
+}
+
+.arrowup {
+    transform: rotate(-135deg);
+    -webkit-transform: rotate(-135deg);
+}
+
+.arrowdown {
+    transform: rotate(45deg);
+    -webkit-transform: rotate(45deg);
+}
+
+#dashBoardAdvanceSearch .well {
+    padding-bottom: 5px;
+}
+
+#dashBoardAdvanceSearch button {
+    float: left;
+    padding-bottom: 10px;
+    background: #f5f5f5;
+    color: black;
+    font-size: 22px;
+    border: 0px solid grey;
+    border-left: none;
+    cursor: pointer;
 }
\ No newline at end of file
diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardCRUD.html b/POLICY-SDK-APP/src/main/webapp/app/policyApp/policy-models/policy_DashboardCRUD.html
new file mode 100644 (file)
index 0000000..cb02a1c
--- /dev/null
@@ -0,0 +1,99 @@
+<!--/*-
+ * ============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=========================================================
+ */-->
+<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"/> 
+<div id="page-content" style="margin-bottom: 20px; width: 100%" ng-app ng-controller = "policyDashboardCRUDDataController">
+       <div>
+               <h1 style="text-align: left;font-size: 25px;color: #066090;padding-top: 15px;">Policy Status Info</h1>
+               <div ng-show="showLoader" class="span loader-container">
+                       <i class="icon-spinner" role="img"
+                               aria-label="Please wait while we load your content"></i>
+               </div>
+       </div>
+       <div ng-hide="showLoader">
+               <div class="btn-group" role="group">
+                               <button class="btn btn-secondary" type="button"
+                                       onClick="window.location='policy#/Dashboard';">Logging</button>
+                               <button class="btn btn-secondary" type="button"
+                                       onClick="window.location='policy#/Dashboard_Health';">Health</button>
+                               <button class="btn btn-primary" type="button"
+                                       onClick="window.location='policy#/Dashboard_crud';">CRUD Info</button>  
+               </div>
+       </div>
+       <br>
+       <a id='advancedSearch' href="" ng-click="advancedSearch()" title="" class="ng-binding">Advanced Search<i id='advancedSearchArrow' class="arrowdown"></i></a>
+    <br>
+       <br>
+       <div id="dashBoardAdvanceSearch">
+               <form>
+                       <div class="well">
+       
+                               <div class="row">
+                                       <div class="form-group col-sm-2">
+                                               <input type="text"
+                                                       class="form-control" 
+                                                       ng-model="dashboardAdsearch.scope" required pattern="\S+"
+                                                       title="Enter scope name without any spaces" placeholder="Scope like *" />
+                                       </div>
+                                       <div class="form-group col-sm-2">
+                                               <select 
+                                                       class="form-control" 
+                                                       ng-model="dashboardAdsearch.stage"
+                                                       required pattern="\S+" title="Select the dropdown PAP or PDP.">
+                                                       <option value="both" selected>Select Stage...</option>
+                                                       <option>PAP</option>
+                                                       <option>PDP</option>
+                              </select>
+                                       </div>
+                                       <div class="form-group col-sm-2">
+                                               <select 
+                                                       class="form-control" 
+                                                       ng-model="dashboardAdsearch.isDelected"
+                                                       required pattern="\S+" title="Select the dropdown Yes or No">
+                                                       <option value="both" selected>Is Deleted ?</option>
+                                                       <option>Yes</option>
+                                                       <option>No</option>
+                              </select>
+                                       </div>
+                                       <div class="form-group col-sm-2">
+                                               <input type="text" id="ttlDate_after"
+                                                       class="form-control" name="ttlDate_after" 
+                                                       ng-model="dashboardAdsearch.ttlDate_after" title="Select the date from calender onclick on the field." placeholder="Creation Date After..." />
+                                       </div>
+                                       <div class="form-group col-sm-2">
+                                               <input type="text" id="ttlDate_before"
+                                                       class="form-control" name="ttlDate_before" 
+                                                       ng-model="dashboardAdsearch.ttlDate_before" title="Select the date from calender onclick on the field." placeholder="Creation Date Before..."/>
+                                       </div>
+                                       <div class="form-group col-sm-2">
+                           <button class="" herf="javascript:void(0)" ng-click="startAdvancedSearch(dashboardAdsearch);" title="Search the data entered in the Policy fields."><i class="fa fa-search"></i></button>
+                                       </div>
+       
+                               </div>
+                       </div>
+       
+               </form>
+       </div>
+     <p id=recordsMessage>Policies were retrieved for last 30 days...</p>
+       <h4 style="text-align: left; color: #157bb2"></h4>
+       <div ui-grid="papCRUDStatusDatas" ui-grid-pagination ui-grid-selection
+               ui-grid-resize-columns ui-grid-exporter class="grid" ></div>
+</div>
+       
\ No newline at end of file
index 5fbdf52..046643e 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Engine
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
  */-->
 <div id="page-content" style="margin-bottom: 20px; width: 100%">
        <div>
-               <h1 style="text-align: left; color: #157bb2">Policy Engine Health</h1>
+        <h1 style="text-align: left;font-size: 25px;color: #066090;padding-top: 15px;">Policy Engine Health</h1>
                <div ng-show="showLoader" class="span loader-container">
                        <i class="icon-spinner" role="img"
                                aria-label="Please wait while we load your content"></i>
@@ -31,6 +31,8 @@
                                        onClick="window.location='policy#/Dashboard';">Logging</button>
                                <button class="btn btn-primary" type="button"
                                        onClick="window.location='policy#/Dashboard_Health';">Health</button>
+                <button class="btn btn-secondary" type="button"
+                    onClick="window.location='policy#/Dashboard_crud';">CRUD Info</button>  
                </div>
        </div>
        <br>
index a42427f..8ec80dc 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Engine
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +19,7 @@
  */-->
 <div id="page-content" style="margin-bottom: 20px; width: 100%">
        <div>
-               <h1 style="text-align: left; color: #157bb2">Dashboard Logging</h1>
+        <h1 style="text-align: left;font-size: 25px;color: #066090;padding-top: 15px;">Dashboard Logging</h1>
                <div ng-show="showLoader" class="span loader-container">
                        <i class="icon-spinner" role="img"
                                aria-label="Please wait while we load your content"></i>
@@ -31,6 +31,8 @@
                                        onClick="window.location='policy#/Dashboard';">Logging</button>
                                <button class="btn btn-secondary" type="button"
                                        onClick="window.location='policy#/Dashboard_Health';">Health</button>
+                <button class="btn btn-secondary" type="button"
+                    onClick="window.location='policy#/Dashboard_crud';">CRUD Info</button>  
                </div>
        </div>
        <br>
diff --git a/packages/base/src/files/install/mysql/data/181000_upgrade_script.sql b/packages/base/src/files/install/mysql/data/181000_upgrade_script.sql
new file mode 100644 (file)
index 0000000..170b359
--- /dev/null
@@ -0,0 +1,24 @@
+/*-
+* ============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=========================================================
+*/
+use onap_sdk;
+
+ALTER TABLE `onap_sdk`.`policyentity` 
+ADD COLUMN `delete_reason_code` VARCHAR(100) DEFAULT NULL AFTER `deleted`,
+ADD COLUMN `deleted_by` VARCHAR(45) DEFAULT NULL;