From f44f5d339cf8aa672bd1228782a0f944ca2e2ff9 Mon Sep 17 00:00:00 2001 From: jbai Date: Thu, 29 Sep 2016 14:24:32 -0700 Subject: [PATCH] implemented the idpc compliance section --- .../resources/jython/ConfidentialFieldLoad.py | 2 +- web/app/controllers/api/v1/Dashboard.java | 50 +++ web/app/dao/DashboardDAO.java | 320 +++++++++++++++++- web/app/views/dashboard.scala.html | 172 +++++++++- web/app/views/index.scala.html | 4 +- web/conf/routes | 4 + web/public/javascripts/dashboard.js | 176 +++++++++- 7 files changed, 698 insertions(+), 30 deletions(-) diff --git a/metadata-etl/src/main/resources/jython/ConfidentialFieldLoad.py b/metadata-etl/src/main/resources/jython/ConfidentialFieldLoad.py index 91ccefb4b1..e11ca1a51a 100644 --- a/metadata-etl/src/main/resources/jython/ConfidentialFieldLoad.py +++ b/metadata-etl/src/main/resources/jython/ConfidentialFieldLoad.py @@ -20,7 +20,7 @@ from wherehows.common import Constant class ConfidentialFieldLoad: - confidential_field_names = ["member_id", "memberid", "firstname", "first_name", "lastname", "last_name", + confidential_field_names = ["firstname", "first_name", "lastname", "last_name", "email", "email_address", "emailaddress", "address", "birthday", "birth_day", "birthdate", "birth_date", "birth_month", "birthmonth", "birthyear", "birth_year", "ssn"] def __init__(self): diff --git a/web/app/controllers/api/v1/Dashboard.java b/web/app/controllers/api/v1/Dashboard.java index 2eb9f5a724..d0d8bc8119 100644 --- a/web/app/controllers/api/v1/Dashboard.java +++ b/web/app/controllers/api/v1/Dashboard.java @@ -46,6 +46,11 @@ public class Dashboard extends Controller return ok(DashboardDAO.getDescriptionPercentageByManagerId(managerId)); } + public static Result getIdpcComplianceDatasetsPercentage(String managerId) + { + return ok(DashboardDAO.getIdpcCompliancePercentageByManagerId(managerId)); + } + public static Result getPagedOwnershipDatasets(String managerId) { int page = 1; @@ -213,6 +218,51 @@ public class Dashboard extends Controller return ok(DashboardDAO.getPagedDescriptionDatasetsByManagerId(managerId, option, page, size)); } + public static Result getPagedComplianceDatasets(String managerId) + { + int page = 1; + String pageStr = request().getQueryString("page"); + if (StringUtils.isBlank(pageStr)) + { + page = 1; + } + else + { + try + { + page = Integer.parseInt(pageStr); + } + catch(NumberFormatException e) + { + Logger.error("Dashboard Controller getPagedComplianceDatasets wrong page parameter. Error message: " + e.getMessage()); + page = 1; + } + } + + String option = request().getQueryString("option"); + + int size = 10; + String sizeStr = request().getQueryString("size"); + if (StringUtils.isBlank(sizeStr)) + { + size = 10; + } + else + { + try + { + size = Integer.parseInt(sizeStr); + } + catch(NumberFormatException e) + { + Logger.error("Dashboard Controller getPagedComplianceDatasets wrong size parameter. Error message: " + e.getMessage()); + size = 10; + } + } + + return ok(DashboardDAO.getPagedComplianceDatasetsByManagerId(managerId, option, page, size)); + } + public static Result getOwnershipBarData(String managerId) { return ok(DashboardDAO.getOwnershipBarChartData(managerId)); diff --git a/web/app/dao/DashboardDAO.java b/web/app/dao/DashboardDAO.java index 2a8fc38810..f98cdccb15 100644 --- a/web/app/dao/DashboardDAO.java +++ b/web/app/dao/DashboardDAO.java @@ -44,12 +44,15 @@ public class DashboardDAO extends AbstractMySQLOpenSourceDAO private final static String GET_OWNERSHIP_CONFIRMED_DATASETS = "SELECT SQL_CALC_FOUND_ROWS o.dataset_id, " + "GROUP_CONCAT(o.owner_id ORDER BY o.owner_id ASC SEPARATOR ',') as owner_id, " + - "GROUP_CONCAT(CASE WHEN o.confirmed_by is not null THEN o.confirmed_by ELSE null END " + + "GROUP_CONCAT(CASE WHEN o.confirmed_by is not null and o.confirmed_by != '' THEN o.confirmed_by " + + "ELSE null END " + "ORDER BY o.confirmed_by ASC SEPARATOR ',') as confirmed_owner_id, d.name " + "FROM dataset_owner o " + "JOIN dict_dataset d ON o.dataset_id = d.id " + "WHERE o.dataset_id in " + - "(SELECT DISTINCT dataset_id FROM dataset_owner WHERE confirmed_by is not null) and o.owner_id in ( " + + "(SELECT DISTINCT dataset_id FROM dataset_owner " + + "WHERE confirmed_by is not null and confirmed_by != '' and ( is_deleted != 'Y' or is_deleted is null )) " + + "and o.owner_id in ( " + "SELECT user_id FROM dir_external_user_info WHERE org_hierarchy = ? or org_hierarchy like ?) " + "GROUP BY o.dataset_id, d.name ORDER BY d.name LIMIT ?, ?"; @@ -70,7 +73,8 @@ public class DashboardDAO extends AbstractMySQLOpenSourceDAO "ORDER BY o.confirmed_by ASC SEPARATOR ',') as confirmed_owner_id, d.name " + "FROM dataset_owner o " + "JOIN dict_dataset d ON o.dataset_id = d.id and ( o.is_deleted != 'Y' or o.is_deleted is null ) " + - "WHERE o.dataset_id not in (SELECT DISTINCT dataset_id FROM dataset_owner WHERE confirmed_by is not null)" + + "WHERE o.dataset_id not in (SELECT DISTINCT dataset_id FROM dataset_owner " + + "WHERE confirmed_by is not null and confirmed_by != '' and ( is_deleted != 'Y' or is_deleted is null ))" + " and o.owner_id in ( " + "SELECT user_id FROM dir_external_user_info WHERE org_hierarchy = ? or org_hierarchy like ?) " + "GROUP BY o.dataset_id, d.name ORDER BY d.name LIMIT ?, ?"; @@ -91,6 +95,23 @@ public class DashboardDAO extends AbstractMySQLOpenSourceDAO "SELECT user_id FROM dir_external_user_info WHERE org_hierarchy = ? or org_hierarchy like ?) " + "GROUP BY o.dataset_id, d.name ORDER BY d.name LIMIT ?, ?"; + private final static String GET_DATASETS_NO_DESCRIPTION_BY_ID = "SELECT SQL_CALC_FOUND_ROWS o.dataset_id, " + + "GROUP_CONCAT(o.owner_id ORDER BY o.owner_id ASC SEPARATOR ',') as owner_id, d.name FROM " + + "dataset_owner o JOIN dict_dataset d ON o.dataset_id = d.id and " + + "( o.is_deleted != 'Y' or o.is_deleted is null ) " + + "WHERE o.dataset_id not in ( SELECT DISTINCT dataset_id FROM comments ) and owner_id in ( " + + "SELECT user_id FROM dir_external_user_info WHERE org_hierarchy = ? or org_hierarchy like ?) " + + "GROUP BY o.dataset_id, d.name ORDER BY d.name LIMIT ?, ?"; + + private final static String GET_DATASETS_WITH_IDPC_COMPLIANCE_BY_ID = "SELECT SQL_CALC_FOUND_ROWS o.dataset_id, " + + "GROUP_CONCAT(o.owner_id ORDER BY o.owner_id ASC SEPARATOR ',') as owner_id, d.name FROM " + + "dataset_owner o JOIN dict_dataset d ON o.dataset_id = d.id and " + + "( o.is_deleted != 'Y' or o.is_deleted is null ) " + + "WHERE o.dataset_id in ( SELECT DISTINCT dataset_id FROM dataset_security WHERE compliance_type = ? ) " + + "and owner_id in ( " + + "SELECT user_id FROM dir_external_user_info WHERE org_hierarchy = ? or org_hierarchy like ?) " + + "GROUP BY o.dataset_id, d.name ORDER BY d.name LIMIT ?, ?"; + private final static String GET_DATASETS_WITH_FULL_FIELD_DESCRIPTION_BY_ID = "SELECT SQL_CALC_FOUND_ROWS " + "o.dataset_id, GROUP_CONCAT(o.owner_id ORDER BY o.owner_id ASC SEPARATOR ',') as owner_id, d.name FROM " + "dataset_owner o JOIN dict_dataset d ON o.dataset_id = d.id and " + @@ -140,16 +161,28 @@ public class DashboardDAO extends AbstractMySQLOpenSourceDAO "WHERE o.dataset_id in ( SELECT DISTINCT dataset_id from comments ) and owner_id in ( " + "SELECT user_id FROM dir_external_user_info WHERE org_hierarchy = ? or org_hierarchy like ?)"; - private final static String GET_COUNT_OF_DATASET_WITH_CONFIRMED_OWNER = "SELECT count(DISTINCT o.dataset_id) " + + private final static String GET_COUNT_OF_DATASET_WITH_IDPC_PURGE = "SELECT count(DISTINCT o.dataset_id) " + "as count FROM dataset_owner o JOIN dict_dataset d ON o.dataset_id = d.id and " + "( o.is_deleted != 'Y' or o.is_deleted is null ) " + - "WHERE o.confirmed_by is not null and owner_id in ( " + + "WHERE o.dataset_id in ( SELECT DISTINCT dataset_id from dataset_security ) and owner_id in ( " + + "SELECT user_id FROM dir_external_user_info WHERE org_hierarchy = ? or org_hierarchy like ?)"; + + private final static String GET_COUNT_OF_DATASET_WITH_CONFIRMED_OWNER = "SELECT count(DISTINCT o.dataset_id) " + + "as count FROM dataset_owner o JOIN dict_dataset d ON o.dataset_id = d.id " + + "WHERE o.dataset_id in (SELECT DISTINCT dataset_id FROM dataset_owner " + + "WHERE confirmed_by is not null and confirmed_by != '' and ( is_deleted != 'Y' or is_deleted is null )) " + + "and owner_id in ( " + "SELECT user_id FROM dir_external_user_info WHERE org_hierarchy = ? or org_hierarchy like ?)"; private final static String GET_FIELDS_WITH_DESCRIPTION = "SELECT field_name FROM " + "dict_field_detail dd JOIN dict_dataset_field_comment fc ON " + "dd.field_id = fc.field_id and dd.dataset_id = fc.dataset_id WHERE dd.dataset_id = ?"; + private final static String GET_DATASET_LEVEL_COMMENTS = "SELECT text FROM comments WHERE dataset_id = ? LIMIT 1"; + + private final static String GET_COMPLIANCE_TYPE_BY_DATASET_ID = "SELECT compliance_type FROM " + + "dataset_security WHERE dataset_id = ?"; + private final static String GET_CONFIDENTIAL_FIELDS = "SELECT field_name " + "FROM dict_pii_field WHERE dataset_id = ?"; @@ -193,6 +226,13 @@ public class DashboardDAO extends AbstractMySQLOpenSourceDAO "WHERE o.owner_id in (SELECT user_id FROM dir_external_user_info " + "WHERE org_hierarchy = ? or org_hierarchy like ?)) co"; + private final static String IDPC_AUTO_PURGE = "AUTO_PURGE"; + private final static String IDPC_CUSTOMER_PURGE = "CUSTOMER_PURGE"; + private final static String IDPC_RETENTION = "RETENTION"; + private final static String IDPC_PURGE_NA = "Not purge applicable"; + private final static String IDPC_PURGE_UNKNOWN = "Unknown"; + private final static String ALL_DATASETS = "All Datasets"; + public static ObjectNode getOwnershipPercentageByManagerId(String managerId) { ObjectNode resultNode = Json.newObject(); @@ -405,6 +445,112 @@ public class DashboardDAO extends AbstractMySQLOpenSourceDAO return resultNode; } + public static ObjectNode getIdpcCompliancePercentageByManagerId(String managerId) { + + ObjectNode resultNode = Json.newObject(); + ConfidentialFieldsOwner currentUser = null; + List memberList = new ArrayList(); + if (StringUtils.isNotBlank(managerId)) + { + List ldapInfoList = JiraDAO.getCurrentUserLdapInfo(managerId); + if (ldapInfoList != null && ldapInfoList.size() > 0) + { + LdapInfo ldapInfo = ldapInfoList.get(0); + if (ldapInfo != null) + { + currentUser = new ConfidentialFieldsOwner(); + currentUser.displayName = ldapInfo.displayName; + currentUser.iconUrl = ldapInfo.iconUrl; + currentUser.managerUserId = ldapInfo.managerUserId; + currentUser.orgHierarchy = ldapInfo.orgHierarchy; + currentUser.userName = ldapInfo.userName; + if (StringUtils.isNotBlank(ldapInfo.orgHierarchy)) { + currentUser.potentialDatasets = getJdbcTemplate().queryForObject( + GET_COUNT_OF_DATASET, + Long.class, + currentUser.orgHierarchy, + currentUser.orgHierarchy + "/%"); + } + else if (managerId.equalsIgnoreCase("jweiner")) + { + currentUser.potentialDatasets = getJdbcTemplate().queryForObject( + GET_COUNT_OF_DATASET, + Long.class, + "/" + currentUser.userName, + "/" + currentUser.userName + "/%"); + } + if (StringUtils.isNotBlank(ldapInfo.orgHierarchy)) { + currentUser.confirmed = getJdbcTemplate().queryForObject( + GET_COUNT_OF_DATASET_WITH_IDPC_PURGE, + Long.class, + currentUser.orgHierarchy, + currentUser.orgHierarchy + "/%"); + } + else if (managerId.equalsIgnoreCase("jweiner")) + { + currentUser.confirmed = getJdbcTemplate().queryForObject( + GET_COUNT_OF_DATASET_WITH_IDPC_PURGE, + Long.class, + "/" + currentUser.userName, + "/" + currentUser.userName + "/%"); + } + + if (currentUser.potentialDatasets != 0) + { + currentUser.completed = + df2.format(100.0 * currentUser.confirmed / currentUser.potentialDatasets); + } + else + { + currentUser.completed = df2.format(0.0); + } + + } + } + List members = JiraDAO.getFirstLevelLdapInfo(managerId); + if (members != null) + { + for(LdapInfo member : members) + { + if (member != null && StringUtils.isNotBlank(member.orgHierarchy)) + { + ConfidentialFieldsOwner owner = new ConfidentialFieldsOwner(); + owner.displayName = member.displayName; + owner.fullName = member.fullName; + owner.userName = member.userName; + owner.iconUrl = member.iconUrl; + owner.managerUserId = member.managerUserId; + owner.orgHierarchy = member.orgHierarchy; + owner.potentialDatasets = getJdbcTemplate().queryForObject( + GET_COUNT_OF_DATASET, + Long.class, + owner.orgHierarchy, + owner.orgHierarchy + "/%"); + + owner.confirmed = getJdbcTemplate().queryForObject( + GET_COUNT_OF_DATASET_WITH_IDPC_PURGE, + Long.class, + owner.orgHierarchy, + owner.orgHierarchy + "/%"); + if (owner.potentialDatasets != 0) + { + owner.completed = df2.format(100.0 * owner.confirmed / owner.potentialDatasets); + } + else + { + owner.completed = df2.format(0.0); + } + memberList.add(owner); + } + } + } + } + resultNode.put("status", "ok"); + resultNode.set("currentUser", Json.toJson(currentUser)); + resultNode.set("members", Json.toJson(memberList)); + return resultNode; + } + public static ObjectNode getConfidentialPercentageByManagerId(String managerId) { ObjectNode resultNode = Json.newObject(); @@ -564,7 +710,12 @@ public class DashboardDAO extends AbstractMySQLOpenSourceDAO datasetConfidential.datasetId = (Long) row.get("dataset_id"); datasetConfidential.datasetName = (String) row.get("name"); datasetConfidential.ownerId = (String) row.get("owner_id"); - datasetConfidential.confirmedOwnerId = (String) row.get("confirmed_owner_id"); + String confirmedOwnerId = (String) row.get("confirmed_owner_id"); + if (StringUtils.isBlank(confirmedOwnerId) && option == 1) + { + confirmedOwnerId = ""; + } + datasetConfidential.confirmedOwnerId = confirmedOwnerId; confidentialList.add(datasetConfidential); } } @@ -677,6 +828,8 @@ public class DashboardDAO extends AbstractMySQLOpenSourceDAO ObjectNode resultNode = Json.newObject(); Long count = 0L; List confidentialList = new ArrayList(); + Boolean isDatasetLevel = true; + String description = ""; if (StringUtils.isNotBlank(managerId)) { @@ -691,21 +844,34 @@ public class DashboardDAO extends AbstractMySQLOpenSourceDAO { case 1: datasetQuery = GET_DATASETS_WITH_DESCRIPTION_BY_ID; + description = "has dataset level description"; break; case 2: - datasetQuery = GET_DATASETS_WITH_FULL_FIELD_DESCRIPTION_BY_ID; + datasetQuery = GET_DATASETS_NO_DESCRIPTION_BY_ID; + description = "no dataset level description"; break; case 3: - datasetQuery = GET_DATASETS_WITH_ANY_FIELD_DESCRIPTION_BY_ID; + datasetQuery = GET_DATASETS_WITH_FULL_FIELD_DESCRIPTION_BY_ID; + description = "all fields have description"; + isDatasetLevel = false; break; case 4: - datasetQuery = GET_DATASETS_WITH_NO_FIELD_DESCRIPTION_BY_ID; + datasetQuery = GET_DATASETS_WITH_ANY_FIELD_DESCRIPTION_BY_ID; + description = "has field description"; + isDatasetLevel = false; break; case 5: + datasetQuery = GET_DATASETS_WITH_NO_FIELD_DESCRIPTION_BY_ID; + description = "no field description"; + isDatasetLevel = false; + break; + case 6: datasetQuery = GET_ALL_DATASETS_BY_ID; + description = ""; break; default: datasetQuery = GET_ALL_DATASETS_BY_ID; + description = ""; } List> rows = null; if (StringUtils.isNotBlank(ldapInfo.orgHierarchy)) { @@ -736,6 +902,131 @@ public class DashboardDAO extends AbstractMySQLOpenSourceDAO Logger.error("Exception = " + e.getMessage()); } + for (Map row : rows) { + DatasetConfidential datasetConfidential = new DatasetConfidential(); + datasetConfidential.datasetId = (Long) row.get("dataset_id"); + datasetConfidential.datasetName = (String) row.get("name"); + datasetConfidential.ownerId = (String) row.get("owner_id"); + if (datasetConfidential.datasetId != null && datasetConfidential.datasetId > 0) { + if (isDatasetLevel) + { + datasetConfidential.confidentialFieldList = + getJdbcTemplate().queryForList( + GET_DATASET_LEVEL_COMMENTS, + String.class, + datasetConfidential.datasetId); + } + else { + datasetConfidential.confidentialFieldList = + getJdbcTemplate().queryForList( + GET_FIELDS_WITH_DESCRIPTION, + String.class, + datasetConfidential.datasetId); + } + } + confidentialList.add(datasetConfidential); + } + } + } + } + resultNode.put("status", "ok"); + resultNode.put("count", count); + resultNode.put("page", page); + resultNode.put("description", description); + resultNode.put("itemsPerPage", size); + resultNode.put("isDatasetLevel", isDatasetLevel); + resultNode.put("totalPages", (int) Math.ceil(count / ((double) size))); + resultNode.set("datasets", Json.toJson(confidentialList)); + return resultNode; + } + }); + return result; + } + + public static ObjectNode getPagedComplianceDatasetsByManagerId( + String managerId, + String option, + Integer page, + Integer size) { + + ObjectNode result = Json.newObject(); + + javax.sql.DataSource ds = getJdbcTemplate().getDataSource(); + DataSourceTransactionManager tm = new DataSourceTransactionManager(ds); + TransactionTemplate txTemplate = new TransactionTemplate(tm); + result = txTemplate.execute(new TransactionCallback() + { + public ObjectNode doInTransaction(TransactionStatus status) + { + ObjectNode resultNode = Json.newObject(); + Long count = 0L; + List confidentialList = new ArrayList(); + + if (StringUtils.isNotBlank(managerId)) + { + List ldapInfoList = JiraDAO.getCurrentUserLdapInfo(managerId); + if (ldapInfoList != null && ldapInfoList.size() > 0) + { + LdapInfo ldapInfo = ldapInfoList.get(0); + if (ldapInfo != null) + { + List> rows = null; + if (StringUtils.isNotBlank(ldapInfo.orgHierarchy)) { + + if (StringUtils.isNotBlank(option) && !(option.equalsIgnoreCase(ALL_DATASETS))) + { + rows = getJdbcTemplate().queryForList( + GET_DATASETS_WITH_IDPC_COMPLIANCE_BY_ID, + option, + ldapInfo.orgHierarchy, + ldapInfo.orgHierarchy + "/%", + (page - 1) * size, + size); + } + else + { + rows = getJdbcTemplate().queryForList( + GET_ALL_DATASETS_BY_ID, + ldapInfo.orgHierarchy, + ldapInfo.orgHierarchy + "/%", + (page - 1) * size, + size); + } + + } + else if (managerId.equalsIgnoreCase("jweiner")) + { + if (StringUtils.isNotBlank(option) && !(option.equalsIgnoreCase(ALL_DATASETS))) + { + rows = getJdbcTemplate().queryForList( + GET_DATASETS_WITH_IDPC_COMPLIANCE_BY_ID, + option, + "/" + ldapInfo.userName, + "/" + ldapInfo.userName + "/%", + (page - 1) * size, + size); + } + else + { + rows = getJdbcTemplate().queryForList( + GET_ALL_DATASETS_BY_ID, + "/" + ldapInfo.userName, + "/" + ldapInfo.userName + "/%", + (page - 1) * size, + size); + } + } + + try { + count = getJdbcTemplate().queryForObject( + "SELECT FOUND_ROWS()", + Long.class); + } + catch(EmptyResultDataAccessException e) + { + Logger.error("Exception = " + e.getMessage()); + } + for (Map row : rows) { DatasetConfidential datasetConfidential = new DatasetConfidential(); datasetConfidential.datasetId = (Long) row.get("dataset_id"); @@ -744,7 +1035,7 @@ public class DashboardDAO extends AbstractMySQLOpenSourceDAO if (datasetConfidential.datasetId != null && datasetConfidential.datasetId > 0) { datasetConfidential.confidentialFieldList = getJdbcTemplate().queryForList( - GET_FIELDS_WITH_DESCRIPTION, + GET_COMPLIANCE_TYPE_BY_DATASET_ID, String.class, datasetConfidential.datasetId); } @@ -900,7 +1191,14 @@ public class DashboardDAO extends AbstractMySQLOpenSourceDAO String label = Integer.toString(month) + "/" + Integer.toString(year); MetadataBarData metadataBarData = new MetadataBarData(); metadataBarData.label = label; - metadataBarData.value = value.longValue(); + if (value != null) + { + metadataBarData.value = value.longValue(); + } + else + { + metadataBarData.value = 0L; + } barDataList.add(metadataBarData); } } diff --git a/web/app/views/dashboard.scala.html b/web/app/views/dashboard.scala.html index bc5b6c707f..51a314715e 100644 --- a/web/app/views/dashboard.scala.html +++ b/web/app/views/dashboard.scala.html @@ -30,7 +30,7 @@ Description
  • - IDPC Privacy + IDPC Compliance
  • Confidential Fields @@ -307,7 +307,7 @@
  • {{/unless}}
  • - {{ descriptionDatasets.count }} datasets - page {{ descriptionDatasets.page }} of {{ descriptionDatasets.totalPages }} + {{ descriptionDatasets.count }} datasets {{ descriptionDatasets.description }} - page {{ descriptionDatasets.page }} of {{ descriptionDatasets.totalPages }}
  • {{#unless descLast}} @@ -864,7 +864,7 @@

    diff --git a/web/conf/routes b/web/conf/routes index 08b358ab38..bd2b65a9fb 100644 --- a/web/conf/routes +++ b/web/conf/routes @@ -221,12 +221,16 @@ GET /api/v1/metadata/dashboard/confidential/:managerId controllers.api. GET /api/v1/metadata/dashboard/description/:managerId controllers.api.v1.Dashboard.getDescriptionDatasetsPercentage(managerId :String) +GET /api/v1/metadata/dashboard/compliance/:managerId controllers.api.v1.Dashboard.getIdpcComplianceDatasetsPercentage(managerId :String) + GET /api/v1/metadata/dataset/ownership/:managerId controllers.api.v1.Dashboard.getPagedOwnershipDatasets(managerId :String) GET /api/v1/metadata/dataset/confidential/:managerId controllers.api.v1.Dashboard.getPagedConfidentialDatasets(managerId :String) GET /api/v1/metadata/dataset/description/:managerId controllers.api.v1.Dashboard.getPagedDescriptionDatasets(managerId :String) +GET /api/v1/metadata/dataset/compliance/:managerId controllers.api.v1.Dashboard.getPagedComplianceDatasets(managerId :String) + GET /api/v1/metadata/barchart/ownership/:managerId controllers.api.v1.Dashboard.getOwnershipBarData(managerId :String) GET /api/v1/metadata/barchart/description/:managerId controllers.api.v1.Dashboard.getDescriptionBarData(managerId :String) diff --git a/web/public/javascripts/dashboard.js b/web/public/javascripts/dashboard.js index 16c93a0673..fc624c6be5 100644 --- a/web/public/javascripts/dashboard.js +++ b/web/public/javascripts/dashboard.js @@ -355,6 +355,7 @@ } } }); + /* if (refresh) { var barDataUrl = '/api/v1/metadata/barchart/description/' + user + '?option=' + option; @@ -367,12 +368,80 @@ } }); } + */ + } + + function refreshIdpcDatasets(user, option, page, size, refresh) + { + if (!user) + return; + + if (!page) + page = 1; + if (!size) + size = 10; + + jiraController.set('idpcInProgress', true); + var datasetsUrl = '/api/v1/metadata/dataset/compliance/' + user + '?page=' + + page + '&size=' + size + '&option=' + option; + $.get(datasetsUrl, function(data) { + jiraController.set('idpcInProgress', false); + if (data && data.status == "ok") { + var currentPage = data.page; + var totalPage = data.totalPages; + if (currentPage == 1) + { + jiraController.set('idpcFirst', true); + } + else + { + jiraController.set('idpcFirst', false); + } + if (currentPage == totalPage) + { + jiraController.set('idpcLast', true); + } + else + { + jiraController.set('idpcLast', false); + } + jiraController.set('complianceDatasets', data); + jiraController.set('currentIdpcPage', data.page); + if (data.datasets && data.datasets.length > 0) + { + /* + if (refresh) + { + renderPie("pie", descriptionOptions[option-1].value, data.count); + } + */ + jiraController.set('userNoComplianceFields', false); + } + else + { + jiraController.set('userNoComplianceFields', true); + } + } + }); + /* + if (refresh) + { + var barDataUrl = '/api/v1/metadata/barchart/description/' + user + '?option=' + option; + $.get(barDataUrl, function(data) { + if (data && data.status == "ok") { + if (data.barData && data.barData.length > 0) + { + renderBarChart(('#barchart'), data.barData, option); + } + } + }); + } + */ } var jiraController = null; var hierarchy = '/jweiner'; var breadcrumbs; - var sortOptions = ['Assignee First', 'Jira Status First', 'Directory Path First']; var selectedUser = { 'userId': 'jweiner', 'displayName': 'jweiner', @@ -386,16 +455,25 @@ 'url': '/metadata#/dashboard/jweiner'}; var descriptionOptions = [ {'value':'Has Dataset Description', 'option': 1}, - {'value':'Full Fields Description', 'option': 2}, - {'value':'Has Fields Description', 'option': 3}, - {'value':'No Fields Description', 'option': 4}, - {'value':'All Datasets', 'option': 5}]; + {'value':'No Dataset Description', 'option': 2}, + {'value':'Full Fields Description', 'option': 3}, + {'value':'Has Fields Description', 'option': 4}, + {'value':'No Fields Description', 'option': 5}, + {'value':'All Datasets', 'option': 6}]; var ownershipOptions = [ {'value':'Confirmed Datasets', 'option': 1}, {'value':'Unconfirmed Datasets', 'option': 2}, {'value':'All Datasets', 'option': 3}]; + var idpcOptions = [ + {'value':'Auto Purge', 'option': "AUTO_PURGE"}, + {'value':'Custome Purge', 'option': "CUSTOM_PURGE"}, + {'value':'Limited Retention', 'option': "LIMITED_RETENTION"}, + {'value':'Not Applicable', 'option': "PURGE_NOT_APPLICABLE"}, + {'value':'Unknown', 'option': "UNKNOWN"}, + {'value':'All Datasets', 'option': "All Datasets"}]; + setTimeout(setActiveTab, 500); App.DashboardRoute = Ember.Route.extend({ @@ -406,6 +484,7 @@ jiraController.set('selectedUser', selectedUser); jiraController.set('descriptionOptions', descriptionOptions); jiraController.set('ownershipOptions', ownershipOptions); + jiraController.set('idpcOptions', idpcOptions); } }); @@ -440,14 +519,20 @@ } jiraController.set('breadcrumbs', breadcrumbs); - refreshOwnerDatasets(params.user, 1, 1, 10, true); + var obj = $('#ownerShowOption'); + if (obj) + { + refreshOwnerDatasets(params.user, obj.val(), 1, 10, true); + } + else + { + refreshOwnerDatasets(params.user, 1, 1, 10, true); + } } }); jiraController.set('cfInProgress', true); var confidentialUrl = 'api/v1/metadata/dashboard/confidential/' + params.user; - var headlessTickets; - var userTickets; $.get(confidentialUrl, function(data) { jiraController.set('cfInProgress', false); if (data && data.status == "ok") { @@ -478,10 +563,8 @@ }); jiraController.set('descInProgress', true); - var confidentialUrl = 'api/v1/metadata/dashboard/description/' + params.user; - var headlessTickets; - var userTickets; - $.get(confidentialUrl, function(data) { + var descriptionUrl = 'api/v1/metadata/dashboard/description/' + params.user; + $.get(descriptionUrl, function(data) { jiraController.set('descInProgress', false); if (data && data.status == "ok") { jiraController.set('descriptionOwners', data.members); @@ -515,7 +598,45 @@ { refreshDescDatasets(params.user, 1, 1, 10, true); } + } + }); + jiraController.set('idpcInProgress', true); + var complianceUrl = 'api/v1/metadata/dashboard/compliance/' + params.user; + $.get(complianceUrl, function(data) { + jiraController.set('idpcInProgress', false); + if (data && data.status == "ok") { + jiraController.set('complianceOwners', data.members); + if (data.members && data.members.length > 0) + { + jiraController.set('userNoIdpcMembers', false); + } + else + { + jiraController.set('userNoIdpcMembers', true); + } + jiraController.set('currentComplianceUser', data.currentUser); + var breadcrumbs; + if (data.currentUser.orgHierarchy) + { + breadcrumbs = genBreadcrumbs(data.currentUser.orgHierarchy); + } + else + { + var hierarchy = '/jweiner'; + breadcrumbs = genBreadcrumbs(hierarchy); + } + jiraController.set('breadcrumbs', breadcrumbs); + + var obj = $('#idpcShowOption'); + if (obj) + { + refreshIdpcDatasets(params.user, obj.val(), 1, 10, true); + } + else + { + refreshIdpcDatasets(params.user, idpcOptions[0].value, 1, 10, true); + } } }); } @@ -594,6 +715,28 @@ } }, + prevIdpcPage: function() { + var idpcInfo = this.get("complianceDatasets"); + var user = this.get("currentComplianceUser"); + if (idpcInfo && user) { + var currentPage = parseInt(idpcInfo.page) - 1; + if (currentPage > 0) { + refreshIdpcDatasets(user.userName, $('#idpcShowOption').val(), currentPage, 10, false); + } + } + }, + nextIdpcPage: function() { + var idpcInfo = this.get("complianceDatasets"); + var user = this.get("currentComplianceUser"); + if (idpcInfo && user) { + var currentPage = parseInt(idpcInfo.page) + 1; + var totalPages = idpcInfo.totalPages; + if (currentPage <= totalPages) { + refreshIdpcDatasets(user.userName, $('#idpcShowOption').val(), currentPage, 10, false); + } + + } + }, optionChanged: function() { var user = this.get("currentDescriptionUser"); if (user) @@ -605,7 +748,14 @@ var user = this.get("currentOwnershipUser"); if (user) { - refreshOwnerDatasets(user.userName, $('#ownerShowOption').val(), 1, 10, true); + refreshOwnerDatasets(user.userName, $('#ownerShowOption').val(), 1, 10, false); + } + }, + idpcOptionChanged: function() { + var user = this.get("currentComplianceUser"); + if (user) + { + refreshIdpcDatasets(user.userName, $('#idpcShowOption').val(), 1, 10, true); } } }