Merge pull request #180 from jerrybai2009/master

show dataset instance when it is availalbe
This commit is contained in:
jerrybai2009 2016-07-26 10:37:40 -07:00 committed by GitHub
commit 27e3962a6f
8 changed files with 160 additions and 30 deletions

View File

@ -780,11 +780,11 @@ public class Dataset extends Controller
return ok(result);
}
public static Result getDatasetVersions(Long datasetId)
public static Result getDatasetVersions(Long datasetId, Integer dbId)
{
ObjectNode result = Json.newObject();
result.put("status", "ok");
result.put("versions", Json.toJson(DatasetsDAO.getDatasetVersions(datasetId)));
result.put("versions", Json.toJson(DatasetsDAO.getDatasetVersions(datasetId, dbId)));
return ok(result);
}
@ -796,4 +796,12 @@ public class Dataset extends Controller
return ok(result);
}
public static Result getDatasetInstances(Long datasetId)
{
ObjectNode result = Json.newObject();
result.put("status", "ok");
result.put("instances", Json.toJson(DatasetsDAO.getDatasetInstances(datasetId)));
return ok(result);
}
}

View File

@ -347,6 +347,10 @@ public class DatasetsDAO extends AbstractMySQLOpenSourceDAO
private final static String GET_DATASET_SCHEMA_TEXT_BY_VERSION = "SELECT schema_text " +
"FROM dict_dataset_instance WHERE dataset_id = ? and version = ? ORDER BY db_id DESC limit 1";
private final static String GET_DATASET_INSTANCES = "SELECT DISTINCT i.db_id, c.db_code FROM " +
"dict_dataset_instance i JOIN cfg_database c ON i.db_id = c.db_id " +
"WHERE i.dataset_id = ?";
public static List<String> getDatasetOwnerTypes()
{
return getJdbcTemplate().queryForList(GET_DATASET_OWNER_TYPES, String.class);
@ -1937,7 +1941,7 @@ public class DatasetsDAO extends AbstractMySQLOpenSourceDAO
return nodes;
}
public static List<String> getDatasetVersions(Long datasetId)
public static List<String> getDatasetVersions(Long datasetId, Integer dbId)
{
return getJdbcTemplate().queryForList(GET_DATASET_VERSIONS, String.class, datasetId);
}
@ -1959,4 +1963,26 @@ public class DatasetsDAO extends AbstractMySQLOpenSourceDAO
}
return schemaText;
}
public static List<DatasetInstance> getDatasetInstances(Long id)
{
List<DatasetInstance> datasetInstances = new ArrayList<DatasetInstance>();
List<Map<String, Object>> rows = null;
rows = getJdbcTemplate().queryForList(
GET_DATASET_INSTANCES,
id);
if (rows != null)
{
for (Map row : rows) {
DatasetInstance datasetInstance = new DatasetInstance();
datasetInstance.datasetId = id;
datasetInstance.dbId = (Integer) row.get("db_id");
datasetInstance.dbCode = (String) row.get("db_code");
datasetInstances.add(datasetInstance);
}
}
return datasetInstances;
}
}

View File

@ -0,0 +1,21 @@
/**
* Copyright 2015 LinkedIn Corp. 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.
*/
package models;
public class DatasetInstance {
public Long datasetId;
public String dbCode;
public Integer dbId;
}

View File

@ -777,24 +777,6 @@
<div class="row">
<div class="col-xs-5">
<h3>{{ model.name }}</h3>
{{#if hasversions}}
<span class="prop-label">Versions:</span>
<div class="btn-toolbar col-xs-12" role="toolbar">
{{#each versions as |version index|}}
<div class="btn-group" role="group">
{{#if index}}
<button type="button" class="btn btn-secondary version-btn" {{action "updateVersion" version}}>
{{ version }}
</button>
{{else}}
<button type="button" class="btn btn-secondary version-btn active" {{action "updateVersion" version}}>
{{ version }}
</button>
{{/if}}
</div>
{{/each}}
</div>
{{/if}}
</div>
<div class="col-xs-7 text-right">
<ul class="datasetDetailsLinks">
@ -854,6 +836,46 @@
</ul>
</div>
</div>
{{#if hasinstances}}
<div class="row">
<span class="prop-label col-xs-1">Instance:</span>
<div class="btn-toolbar col-xs-11" role="toolbar">
{{#each instances as |instance index|}}
<div class="btn-group" role="group">
{{#if index}}
<button type="button" class="btn btn-secondary instance-btn" {{action "updateInstance" instance}}>
{{ instance.dbCode }}
</button>
{{else}}
<button type="button" class="btn btn-secondary instance-btn active" {{action "updateInstance" instance}}>
{{ instance.dbCode }}
</button>
{{/if}}
</div>
{{/each}}
</div>
</div>
{{/if}}
{{#if hasversions}}
<div class="row">
<span class="prop-label col-xs-1">Versions:</span>
<div class="btn-toolbar col-xs-11" role="toolbar">
{{#each versions as |version index|}}
<div class="btn-group" role="group">
{{#if index}}
<button type="button" class="btn btn-secondary version-btn" {{action "updateVersion" version}}>
{{ version }}
</button>
{{else}}
<button type="button" class="btn btn-secondary version-btn active" {{action "updateVersion" version}}>
{{ version }}
</button>
{{/if}}
</div>
{{/each}}
</div>
</div>
{{/if}}
</div>
{{#if tabview}}

View File

@ -59,7 +59,9 @@ GET /api/v1/datasets/:id/owners controllers.api.v1.Dataset.getDatase
POST /api/v1/datasets/:id/owners controllers.api.v1.Dataset.updateDatasetOwners(id:Int)
GET /api/v1/datasets/:id/versions controllers.api.v1.Dataset.getDatasetVersions(id:Long)
GET /api/v1/datasets/:id/versions/db/:dbId controllers.api.v1.Dataset.getDatasetVersions(id:Long, dbId:Int)
GET /api/v1/datasets/:id/instances controllers.api.v1.Dataset.getDatasetInstances(id:Long)
GET /api/v1/datasets/:id/schema/:version controllers.api.v1.Dataset.getDatasetSchemaTextByVersion(id:Long, version:String)

View File

@ -379,6 +379,32 @@ App.DatasetController = Ember.Controller.extend({
}
_this.set('currentVersion', version);
},
updateInstance: function(instance) {
_this = this;;
var currentInstance = _this.get('currentInstance');
var latestInstance = _this.get('latestInstance');
if (currentInstance == instance.dbId)
{
return;
}
var objs = $('.instance-btn');
if (objs && objs.length > 0)
{
for(var i = 0; i < objs.length; i++)
{
if ($(objs[i]).hasClass('active'))
{
$(objs[i]).removeClass('active');
}
if (instance.dbCode == objs[i].outerText)
{
$(objs[i]).addClass('active');
}
}
}
_this.set('currentInstance', instance.dbId);
}
}
});

View File

@ -210,16 +210,34 @@ App.DatasetRoute = Ember.Route.extend({
}
}
var versionUrl = 'api/v1/datasets/' + id + "/versions";
$.get(versionUrl, function(data) {
if (data && data.status == "ok" && data.versions && data.versions.length > 0) {
controller.set("hasversions", true);
controller.set("versions", data.versions);
controller.set("currentVersion", data.versions[0]);
controller.set("latestVersion", data.versions[0]);
var instanceUrl = 'api/v1/datasets/' + id + "/instances";
$.get(instanceUrl, function(data) {
if (data && data.status == "ok" && data.instances && data.instances.length > 0) {
controller.set("hasinstances", true);
controller.set("instances", data.instances);
controller.set("currentInstance", data.instances[0]);
controller.set("latestInstance", data.instances[0]);
var versionUrl = 'api/v1/datasets/' + id + "/versions/db/" + data.instances[0].dbId;
$.get(versionUrl, function(data) {
if (data && data.status == "ok" && data.versions && data.versions.length > 0) {
controller.set("hasversions", true);
controller.set("versions", data.versions);
controller.set("currentVersion", data.versions[0]);
controller.set("latestVersion", data.versions[0]);
}
else
{
controller.set("hasversions", false);
controller.set("currentVersion", '0');
controller.set("latestVersion", '0');
}
});
}
else
{
controller.set("hasinstances", false);
controller.set("currentInstance", '0');
controller.set("latestInstance", '0');
controller.set("hasversions", false);
controller.set("currentVersion", '0');
controller.set("latestVersion", '0');

View File

@ -36,6 +36,7 @@ public class ControllersTest {
public static String DATABASE_WHEREHOWS_OPENSOURCE_USER_NAME = "wherehows";
public static String DATABASE_WHEREHOWS_OPENSOURCE_USER_PASSWORD = "wherehows";
public static String DATABASE_WHEREHOWS_OPENSOURCE_URL = "jdbc:mysql://localhost/wherehows";
public static Integer DB_ID = 65;
@BeforeClass
public static void startApp() {
@ -112,7 +113,13 @@ public class ControllersTest {
assertThat(sampleNode.isContainerNode());
//assertThat(sampleNode.get("status").asText()).isEqualTo("ok");
result = controllers.api.v1.Dataset.getDatasetVersions(datasetId)
result = controllers.api.v1.Dataset.getDatasetInstances(datasetId);
assertThat(status(result)).isEqualTo(OK);
JsonNode instanceNode = Json.parse(contentAsString(result));
assertThat(instanceNode.isContainerNode());
assertThat(instanceNode.get("status").asText()).isEqualTo("ok");
result = controllers.api.v1.Dataset.getDatasetVersions(datasetId, DB_ID);
assertThat(status(result)).isEqualTo(OK);
JsonNode versionNode = Json.parse(contentAsString(result));
assertThat(versionNode.isContainerNode());