implemented the dataset-owner component

This commit is contained in:
jbai 2016-02-04 04:59:58 -08:00 committed by SunZhaonan
parent b1c18be831
commit 746add7ff0
6 changed files with 216 additions and 6 deletions

View File

@ -248,6 +248,38 @@ public class Dataset extends Controller
return ok(result);
}
public static Result ownDataset(int id)
{
ObjectNode result = Json.newObject();
String username = session("user");
if (StringUtils.isNotBlank(username))
{
result = DatasetsDAO.ownDataset(id, username);
}
else
{
result.put("status", "failed");
}
return ok(result);
}
public static Result unownDataset(int id)
{
ObjectNode result = Json.newObject();
String username = session("user");
if (StringUtils.isNotBlank(username))
{
result = DatasetsDAO.unownDataset(id, username);
}
else
{
result.put("status", "failed");
}
return ok(result);
}
public static Result getFavorites()
{
ObjectNode result = Json.newObject();

View File

@ -175,8 +175,25 @@ public class DatasetsDAO extends AbstractMySQLOpenSourceDAO
private final static String UNFAVORITE_A_DATASET =
"DELETE FROM favorites WHERE user_id = ? and dataset_id = ?";
private final static String GET_DATASET_OWNERS = "SELECT o.owner_id, o.namespace, " +
"o.owner_type, o.owner_sub_type, " +
"o.dataset_urn, u.display_name FROM dataset_owner o " +
"LEFT JOIN dir_external_user_info u on (o.owner_id = u.user_id and u.app_id = 300) " +
"WHERE dataset_id = ? ORDER BY sort_id";
private final static String UPDATE_DATASET_OWNER_SORT_ID = "UPDATE dataset_owner " +
"set sort_id = ? WHERE dataset_id = ? AND owner_id = ? AND namespace = ?";
private final static String OWN_A_DATASET = "INSERT INTO dataset_owner (" +
"dataset_id, owner_id, app_id, namespace, " +
"owner_type, is_group, is_active, sort_id, created_time, modified_time, wh_etl_exec_id, dataset_urn) " +
"VALUES(?, ?, 300, 'urn:li:corpuser', 'Producer', 'N', 'Y', 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), 0, ?)";
private final static String UNOWN_A_DATASET = "DELETE FROM dataset_owner " +
"WHERE dataset_id = ? AND owner_id = ? AND namespace = 'urn:li:corpuser'";
private final static String GET_FAVORITES = "SELECT DISTINCT d.id, d.name, d.urn, d.source " +
"FROM dict_dataset d JOIN favorites f ON d.id = f.dataset_id " +
"FROM dict_dataset d JOIN favorites f ON d.id = f.dataset_id " +
"JOIN users u ON f.dataset_id = d.id and f.user_id = u.id WHERE u.username = ? ORDER BY d.urn";
private final static String GET_COMMENTS_BY_DATASET_ID = "SELECT SQL_CALC_FOUND_ROWS " +
@ -377,17 +394,21 @@ public class DatasetsDAO extends AbstractMySQLOpenSourceDAO
{
for (int i = 0; i < owners.length; i++)
{
User user = new User();
user.userName = owners[i];
User datasetOwner = new User();
datasetOwner.userName = owners[i];
if (datasetOwner.userName.equalsIgnoreCase(user))
{
ds.isOwned = true;
}
if (StringUtils.isBlank(ownerNames[i]) || ownerNames[i].equalsIgnoreCase("*"))
{
user.name = owners[i];
datasetOwner.name = owners[i];
}
else
{
user.name = ownerNames[i];
datasetOwner.name = ownerNames[i];
}
ds.owners.add(user);
ds.owners.add(datasetOwner);
}
}
else
@ -460,6 +481,116 @@ public class DatasetsDAO extends AbstractMySQLOpenSourceDAO
return result;
}
public static ObjectNode ownDataset(int id, String user)
{
ObjectNode resultNode = Json.newObject();
boolean result = false;
List<Map<String, Object>> rows = null;
rows = getJdbcTemplate().queryForList(GET_DATASET_OWNERS, id);
int sortId = 0;
for (Map row : rows)
{
String ownerId = (String)row.get(DatasetWithUserRowMapper.DATASET_OWNER_ID_COLUMN);
String namespace = (String)row.get("namespace");
int ret = getJdbcTemplate().update(UPDATE_DATASET_OWNER_SORT_ID, ++sortId, id, ownerId, namespace);
if (ret <= 0)
{
Logger.warn("ownDataset update sort_id failed. Dataset id is : " +
Long.toString(id) + " owner_id is : " + ownerId + " namespace is : " + namespace);
}
}
String urn = null;
try
{
urn = (String)getJdbcTemplate().queryForObject(
GET_DATASET_URN_BY_ID,
String.class,
id);
}
catch(EmptyResultDataAccessException e)
{
Logger.error("Dataset ownDataset get urn failed, id = " + id);
Logger.error("Exception = " + e.getMessage());
}
int status = getJdbcTemplate().update(OWN_A_DATASET, id, user, urn);
if (status > 0)
{
result = true;
}
rows = getJdbcTemplate().queryForList(GET_DATASET_OWNERS, id);
List<User> owners = new ArrayList<User>();
for (Map row : rows)
{
String ownerId = (String)row.get(DatasetWithUserRowMapper.DATASET_OWNER_ID_COLUMN);
String dislayName = (String)row.get("display_name");
if (StringUtils.isBlank(dislayName))
{
dislayName = ownerId;
}
User owner = new User();
owner.userName = ownerId;
owner.name = dislayName;
owners.add(owner);
}
if (result)
{
resultNode.put("status", "success");
}
else
{
resultNode.put("status", "failed");
}
resultNode.set("owners", Json.toJson(owners));
return resultNode;
}
public static ObjectNode unownDataset(int id, String user)
{
ObjectNode resultNode = Json.newObject();
boolean result = false;
int ret = getJdbcTemplate().update(UNOWN_A_DATASET, id, user);
if (ret > 0)
{
result = true;
}
List<Map<String, Object>> rows = null;
rows = getJdbcTemplate().queryForList(GET_DATASET_OWNERS, id);
List<User> owners = new ArrayList<User>();
int sortId = 0;
for (Map row : rows)
{
String ownerId = (String)row.get(DatasetWithUserRowMapper.DATASET_OWNER_ID_COLUMN);
String dislayName = (String)row.get("display_name");
String namespace = (String)row.get("namespace");
if (StringUtils.isBlank(dislayName))
{
dislayName = ownerId;
}
User owner = new User();
owner.userName = ownerId;
owner.name = dislayName;
owners.add(owner);
int updatedRows = getJdbcTemplate().update(UPDATE_DATASET_OWNER_SORT_ID, sortId++, id, ownerId, namespace);
if (ret <= 0)
{
Logger.warn("ownDataset update sort_id failed. Dataset id is : " +
Long.toString(id) + " owner_id is : " + ownerId + " namespace is : " + namespace);
}
}
if (result)
{
resultNode.put("status", "success");
}
else
{
resultNode.put("status", "failed");
}
resultNode.set("owners", Json.toJson(owners));
return resultNode;
}
public static Dataset getDatasetByID(int id, String user)
{
Dataset dataset = null;

View File

@ -30,6 +30,7 @@ public class Dataset {
public String schema;
public String nertzLink;
public boolean isFavorite;
public boolean isOwned;
public long watchId;
public boolean isWatched;
public boolean hasSchemaHistory;

View File

@ -33,6 +33,14 @@
</i>
</script>
<script type="text/x-handlebars" id="components/dataset-owner">
<i
{{bind-attr class=":fa dataset.isOwned:fa-bookmark:fa-bookmark-o"}}
{{action "owned" dataset}}
>
</i>
</script>
<script type="text/x-handlebars" id="components/dataset-watch">
<i
{{bind-attr class=":fa dataset.watchId:fa-eye-slash:fa-eye"}}
@ -347,6 +355,10 @@
{{ dataset.source }}
</span>
</li>
<li class="text-center">
{{#dataset-owner dataset=dataset action="owned"}}
{{/dataset-owner}}
</li>
<li
class="text-center"
>

View File

@ -83,6 +83,10 @@ POST /api/v1/datasets/:id/favorite controllers.api.v1.Dataset.f
DELETE /api/v1/datasets/:id/favorite controllers.api.v1.Dataset.unfavoriteDataset(id:Int)
POST /api/v1/datasets/:id/own controllers.api.v1.Dataset.ownDataset(id:Int)
DELETE /api/v1/datasets/:id/own controllers.api.v1.Dataset.unownDataset(id:Int)
GET /api/v1/search/:keyword controllers.api.v1.Search.searchByKeyword(keyword:String)
GET /api/v1/metrics controllers.api.v1.Metric.getPagedMetrics()

View File

@ -24,6 +24,36 @@ App.DatasetFavoriteComponent = Ember.Component.extend({
}
})
App.DatasetOwnerComponent = Ember.Component.extend({
actions: {
owned: function(dataset) {
var url = '/api/v1/datasets/' + dataset.id + '/own';
var method = !dataset.isOwned ? 'POST' : 'DELETE';
var token = $("#csrfToken").val().replace('/', '');
var _this = this;
$.ajax({
url: url,
method: method,
headers: {
'Csrf-Token': token
},
dataType: 'json',
data: {
csrfToken: token
}
}).done(function(data, txt, xhr){
if (data.status == 'success')
{
_this.set('dataset.isOwned', !dataset.isOwned);
_this.set('dataset.owners', data.owners);
}
}).fail(function(xhr, txt, err){
console.log('Error: Could not update dataset owner.')
})
}
}
})
var datasetCommentsComponent = null;
App.DatasetCommentsComponent = Ember.Component.extend({
totalPages: null,