diff --git a/web/app/controllers/api/v1/Dataset.java b/web/app/controllers/api/v1/Dataset.java index b9b31592a8..68fc0427e6 100644 --- a/web/app/controllers/api/v1/Dataset.java +++ b/web/app/controllers/api/v1/Dataset.java @@ -761,6 +761,16 @@ public class Dataset extends Controller return ok(result); } + public static Result getReferenceViews(Long datasetId) + { + ObjectNode result = Json.newObject(); + List references = new ArrayList(); + DatasetsDAO.getDatasetReferences(datasetId, 1, 0, references); + result.put("status", "ok"); + result.put("references", Json.toJson(references)); + return ok(result); + } + public static Result getDatasetListNodes() { ObjectNode result = Json.newObject(); diff --git a/web/app/dao/DatasetsDAO.java b/web/app/dao/DatasetsDAO.java index 320cb1b331..294baf545c 100644 --- a/web/app/dao/DatasetsDAO.java +++ b/web/app/dao/DatasetsDAO.java @@ -322,6 +322,11 @@ public class DatasetsDAO extends AbstractMySQLOpenSourceDAO "mapped_object_type, mapped_object_sub_type, mapped_object_name " + "FROM cfg_object_name_map WHERE object_dataset_id = ?"; + private final static String GET_DATASET_REFERENCES = "SELECT object_type, object_sub_type, " + + "object_name, object_dataset_id, map_phrase, is_identical_map, mapped_object_dataset_id, " + + "mapped_object_type, mapped_object_sub_type, mapped_object_name " + + "FROM cfg_object_name_map WHERE mapped_object_dataset_id = ?"; + private final static String GET_DATASET_LISTVIEW_TOP_LEVEL_NODES = "SELECT DISTINCT " + "SUBSTRING_INDEX(urn, ':///', 1) as name, 0 as id, " + "concat(SUBSTRING_INDEX(urn, ':///', 1), ':///') as urn FROM dict_dataset order by 1"; @@ -1792,6 +1797,52 @@ public class DatasetsDAO extends AbstractMySQLOpenSourceDAO } } + public static void getDatasetReferences( + Long datasetId, + int level, + int parent, + List references) + { + if (references == null) + { + references = new ArrayList(); + } + + List> rows = null; + rows = getJdbcTemplate().queryForList( + GET_DATASET_REFERENCES, + datasetId); + + if (rows != null) + { + for (Map row : rows) { + DatasetDependency dd = new DatasetDependency(); + dd.datasetId = (Long) row.get("object_dataset_id"); + dd.objectName = (String) row.get("object_name"); + dd.objectType = (String) row.get("object_type"); + dd.objectSubType = (String) row.get("object_sub_type"); + if (dd.datasetId != null && dd.datasetId > 0) + { + dd.isValidDataset = true; + dd.datasetLink = "#/datasets/" + Long.toString(dd.datasetId); + } + else + { + dd.isValidDataset = false; + } + dd.level = level; + dd.sortId = references.size() + 1; + dd.treeGridClass = "treegrid-" + Integer.toString(dd.sortId); + if (parent != 0) + { + dd.treeGridClass += " treegrid-parent-" + Integer.toString(parent); + } + references.add(dd); + getDatasetReferences(dd.datasetId, level + 1, dd.sortId, references); + } + } + } + public static List getDatasetListViewNodes(String urn) { List nodes = new ArrayList(); diff --git a/web/app/views/index.scala.html b/web/app/views/index.scala.html index 32d037f6e2..ab23228640 100644 --- a/web/app/views/index.scala.html +++ b/web/app/views/index.scala.html @@ -458,7 +458,7 @@ - + @@ -483,8 +483,36 @@ {{/each}}
DatasetDepends on Object Type Object Sub Type Level
- {{else}} -

Depends view is not available

+ {{/if}} + {{#if hasReferences}} + + + + + + + + + + + {{#each reference in references}} + + + + + + + {{/each}} + +
Referred ByObject TypeObject Sub TypeLevel
+ {{#if reference.isValidDataset}} + + {{reference.objectName}} + + {{else}} + {{reference.objectName}} + {{/if}} + {{reference.objectType}}{{reference.objectSubType}}{{reference.level}}
{{/if}} @@ -844,9 +872,9 @@
  • - Depend On + Relations
  • @@ -982,7 +1010,7 @@

    diff --git a/web/conf/routes b/web/conf/routes index a853435060..66b5f82142 100644 --- a/web/conf/routes +++ b/web/conf/routes @@ -65,6 +65,8 @@ GET /api/v1/datasets/:id/columns controllers.api.v1.Dataset.getDatase GET /api/v1/datasets/:id/depends controllers.api.v1.Dataset.getDependViews(id:Long) +GET /api/v1/datasets/:id/references controllers.api.v1.Dataset.getReferenceViews(id:Long) + GET /api/v1/datasets/:id/properties controllers.api.v1.Dataset.getDatasetPropertiesByID(id:Int) GET /api/v1/datasets/:id/sample controllers.api.v1.Dataset.getDatasetSampleDataByID(id:Int) diff --git a/web/public/javascripts/routers/datasets.js b/web/public/javascripts/routers/datasets.js index e3f850bd04..30ab2eaff3 100644 --- a/web/public/javascripts/routers/datasets.js +++ b/web/public/javascripts/routers/datasets.js @@ -8,6 +8,11 @@ function initializeDependsTreeGrid() $('#depends-table').treegrid(); } +function initializeReferencesTreeGrid() +{ + $('#references-table').treegrid(); +} + function formatValue(key, value){ switch(key) { case 'modification_time': @@ -456,6 +461,23 @@ App.DatasetRoute = Ember.Route.extend({ } }); + var datasetReferencesUrl = 'api/v1/datasets/' + id + "/references"; + $.get(datasetReferencesUrl, function(data) { + if (data && data.status == "ok") + { + if (data.references && (data.references.length > 0)) + { + controller.set("hasReferences", true); + controller.set("references", data.references); + setTimeout(initializeReferencesTreeGrid, 500); + } + else + { + controller.set("hasReferences", false); + } + } + }); + var ownershipUrl = 'api/v1/datasets/' + id + "/owners"; $.get(ownershipUrl, function(data) { if (data && data.status == "ok") diff --git a/web/test/ControllersTest.java b/web/test/ControllersTest.java index 96738e25d3..97399b2598 100644 --- a/web/test/ControllersTest.java +++ b/web/test/ControllersTest.java @@ -117,6 +117,12 @@ public class ControllersTest { JsonNode versionNode = Json.parse(contentAsString(result)); assertThat(versionNode.isContainerNode()); assertThat(versionNode.get("status").asText()).isEqualTo("ok"); + + result = controllers.api.v1.Dataset.getReferenceViews(datasetId); + assertThat(status(result)).isEqualTo(OK); + JsonNode versionNode = Json.parse(contentAsString(result)); + assertThat(versionNode.isContainerNode()); + assertThat(versionNode.get("status").asText()).isEqualTo("ok"); } /*