implemented the referred by feature for dataset detail

This commit is contained in:
jbai 2016-07-19 10:48:38 -07:00
parent ff599a88f5
commit 0264ad3e3d
6 changed files with 125 additions and 6 deletions

View File

@ -761,6 +761,16 @@ public class Dataset extends Controller
return ok(result);
}
public static Result getReferenceViews(Long datasetId)
{
ObjectNode result = Json.newObject();
List<DatasetDependency> references = new ArrayList<DatasetDependency>();
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();

View File

@ -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<DatasetDependency> references)
{
if (references == null)
{
references = new ArrayList<DatasetDependency>();
}
List<Map<String, Object>> 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<DatasetListViewNode> getDatasetListViewNodes(String urn) {
List<DatasetListViewNode> nodes = new ArrayList<DatasetListViewNode>();

View File

@ -458,7 +458,7 @@
<table id="depends-table" class="columntreegrid tree table table-bordered dataset-detail-table">
<thead>
<tr class="results-header">
<th class="span2">Dataset</th>
<th class="span2">Depends on</th>
<th class="span1">Object Type</th>
<th class="span1">Object Sub Type</th>
<th class="span2">Level</th>
@ -483,8 +483,36 @@
{{/each}}
</tbody>
</table>
{{else}}
<p>Depends view is not available</p>
{{/if}}
{{#if hasReferences}}
<table id="references-table" class="columntreegrid tree table table-bordered dataset-detail-table">
<thead>
<tr class="results-header">
<th class="span2">Referred By</th>
<th class="span1">Object Type</th>
<th class="span1">Object Sub Type</th>
<th class="span2">Level</th>
</tr>
</thead>
<tbody>
{{#each reference in references}}
<tr {{bind-attr class="reference.treeGridClass"}}>
<td>
{{#if reference.isValidDataset}}
<a {{bind-attr href=reference.datasetLink}}>
{{reference.objectName}}
</a>
{{else}}
{{reference.objectName}}
{{/if}}
</td>
<td>{{reference.objectType}}</td>
<td>{{reference.objectSubType}}</td>
<td>{{reference.level}}</td>
</tr>
{{/each}}
</tbody>
</table>
{{/if}}
</script>
@ -844,9 +872,9 @@
</li>
<li id="depends">
<a data-toggle="tab"
title="Depend On"
title="Relations"
href="#dependtab">
Depend On
Relations
</a>
</li>
</ul>
@ -982,7 +1010,7 @@
<h4 class="panel-title">
<a class="collapsed" data-toggle="collapse" data-parent="#accordion"
href="#dependsview" aria-expanded="false" aria-controls="sampleData">
Depends On
Relations
</a>
</h4>
</div>

View File

@ -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)

View File

@ -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")

View File

@ -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");
}
/*