implement the list view for dataset and flow

This commit is contained in:
jbai 2016-06-23 17:36:30 -07:00
parent 7f8705bad6
commit 806972755c
12 changed files with 489 additions and 142 deletions

View File

@ -18,6 +18,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import models.DatasetColumn;
import models.DatasetDependency;
import models.DatasetListViewNode;
import models.ImpactDataset;
import play.api.libs.json.JsValue;
import play.libs.Json;
@ -759,4 +760,14 @@ public class Dataset extends Controller
result.put("depends", Json.toJson(depends));
return ok(result);
}
public static Result getDatasetListNodes()
{
ObjectNode result = Json.newObject();
String urn = request().getQueryString("urn");
result.put("status", "ok");
result.put("nodes", Json.toJson(DatasetsDAO.getDatasetListViewNodes(urn)));
return ok(result);
}
}

View File

@ -214,4 +214,31 @@ public class Flow extends Controller
result.set("data", FlowsDAO.getPagedJobsByFlow(application, project, flowId, page, size));
return ok(result);
}
public static Result getFlowListViewClusters()
{
ObjectNode result = Json.newObject();
result.put("status", "ok");
result.set("nodes", Json.toJson(FlowsDAO.getFlowListViewClusters()));
return ok(result);
}
public static Result getFlowListViewProjects(String application)
{
ObjectNode result = Json.newObject();
result.put("status", "ok");
result.set("nodes", Json.toJson(FlowsDAO.getFlowListViewProjects(application)));
return ok(result);
}
public static Result getFlowListViewFlows(String application, String project)
{
ObjectNode result = Json.newObject();
result.put("status", "ok");
result.set("nodes", Json.toJson(FlowsDAO.getFlowListViewFlows(application, project)));
return ok(result);
}
}

View File

@ -319,6 +319,17 @@ 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_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";
private final static String GET_DATASET_LISTVIEW_NODES_BY_URN = "SELECT distinct " +
"SUBSTRING_INDEX(SUBSTRING_INDEX(d.urn, ?, -1), '/', 1) as name, " +
"concat(?, SUBSTRING_INDEX(SUBSTRING_INDEX(d.urn, ?, -1), '/', 1)) as urn, " +
"s.id FROM dict_dataset d LEFT JOIN dict_dataset s " +
"ON s.urn = concat(?, SUBSTRING_INDEX(SUBSTRING_INDEX(d.urn, ?, -1), '/', 1)) " +
"WHERE d.urn LIKE ? ORDER BY d.name";
public static List<String> getDatasetOwnerTypes()
{
return getJdbcTemplate().queryForList(GET_DATASET_OWNER_TYPES, String.class);
@ -1764,4 +1775,43 @@ public class DatasetsDAO extends AbstractMySQLOpenSourceDAO
}
}
}
public static List<DatasetListViewNode> getDatasetListViewNodes(String urn) {
List<DatasetListViewNode> nodes = new ArrayList<DatasetListViewNode>();
List<Map<String, Object>> rows = null;
if (StringUtils.isBlank(urn)) {
rows = getJdbcTemplate().queryForList(
GET_DATASET_LISTVIEW_TOP_LEVEL_NODES);
} else {
rows = getJdbcTemplate().queryForList(
GET_DATASET_LISTVIEW_NODES_BY_URN,
urn,
urn,
urn,
urn,
urn,
urn + "%");
}
for (Map row : rows) {
DatasetListViewNode node = new DatasetListViewNode();
node.datasetId = (Long) row.get(DatasetWithUserRowMapper.DATASET_ID_COLUMN);
node.nodeName = (String) row.get(DatasetWithUserRowMapper.DATASET_NAME_COLUMN);
String nodeUrn = (String) row.get(DatasetWithUserRowMapper.DATASET_URN_COLUMN);
if (node.datasetId !=null && node.datasetId > 0)
{
node.nodeUrl = "#/datasets/" + node.datasetId;
}
else
{
node.nodeUrl = "#/datasets/name/" + node.nodeName + "/page/1?urn=" + nodeUrn;
}
nodes.add(node);
}
return nodes;
}
}

View File

@ -88,6 +88,17 @@ public class FlowsDAO extends AbstractMySQLOpenSourceDAO
"WHERE (f.is_active is null or f.is_active = 'Y') and ca.app_code = ? " +
"and f.flow_group is null ORDER BY f.flow_name";
private final static String GET_FLOW_LIST_VIEW_CLUSTER_NODES = "SELECT DISTINCT f.app_id, a.app_code " +
"FROM flow f JOIN cfg_application a ON f.app_id = a.app_id ORDER BY a.app_code";
private final static String GET_FLOW_LIST_VIEW_PROJECT_NODES = "SELECT DISTINCT f.flow_group, " +
"a.app_id, a.app_code FROM flow f JOIN cfg_application a ON f.app_id = a.app_id " +
"WHERE a.app_code = ? ORDER BY f.flow_group";
private final static String GET_FLOW_LIST_VIEW_FLOW_NODES = "SELECT DISTINCT f.flow_name, f.flow_group, " +
"f.flow_id, a.app_id, a.app_code FROM flow f JOIN cfg_application a ON f.app_id = a.app_id " +
"WHERE a.app_code = ? and f.flow_group = ? order by f.flow_name";
public static Integer getApplicationIDByName(String applicationName)
{
Integer applicationId = 0;
@ -567,4 +578,66 @@ public class FlowsDAO extends AbstractMySQLOpenSourceDAO
result.set("jobs", Json.toJson(""));
return result;
}
public static List<FlowListViewNode> getFlowListViewClusters()
{
List<FlowListViewNode> nodes = new ArrayList<FlowListViewNode>();
List<Map<String, Object>> rows = null;
rows = getJdbcTemplate().queryForList(
GET_FLOW_LIST_VIEW_CLUSTER_NODES);
for (Map row : rows) {
FlowListViewNode node = new FlowListViewNode();
node.application = (String) row.get(FlowRowMapper.APP_CODE_COLUMN);
node.nodeName = node.application;
node.nodeUrl = "#/flows/" + node.nodeName + "/page/1";
nodes.add(node);
}
return nodes;
}
public static List<FlowListViewNode> getFlowListViewProjects(String application)
{
List<FlowListViewNode> nodes = new ArrayList<FlowListViewNode>();
List<Map<String, Object>> rows = null;
rows = getJdbcTemplate().queryForList(
GET_FLOW_LIST_VIEW_PROJECT_NODES,
application);
for (Map row : rows) {
FlowListViewNode node = new FlowListViewNode();
node.application = (String) row.get(FlowRowMapper.APP_CODE_COLUMN);
node.project = (String) row.get(FlowRowMapper.FLOW_GROUP_COLUMN);
node.nodeName = node.project;
node.nodeUrl = "#/flows/" + node.application + "/" + node.project + "/page/1";
nodes.add(node);
}
return nodes;
}
public static List<FlowListViewNode> getFlowListViewFlows(String application, String project)
{
List<FlowListViewNode> nodes = new ArrayList<FlowListViewNode>();
List<Map<String, Object>> rows = null;
rows = getJdbcTemplate().queryForList(
GET_FLOW_LIST_VIEW_FLOW_NODES,
application,
project);
for (Map row : rows) {
FlowListViewNode node = new FlowListViewNode();
node.application = (String) row.get(FlowRowMapper.APP_CODE_COLUMN);
node.project = (String) row.get(FlowRowMapper.FLOW_GROUP_COLUMN);
node.flow = (String) row.get(FlowRowMapper.FLOW_NAME_COLUMN);
node.nodeName = node.flow;
node.flowId = (Long)row.get(FlowRowMapper.FLOW_ID_COLUMN);
node.nodeUrl = "#/flows/" + node.application + "/"
+ node.project + "/" + Long.toString(node.flowId) + '/' + "/page/1";
nodes.add(node);
}
return nodes;
}
}

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 DatasetListViewNode {
public Long datasetId;
public String nodeName;
public String nodeUrl;
}

View File

@ -0,0 +1,24 @@
/**
* 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 FlowListViewNode {
public String application;
public String nodeName;
public String nodeUrl;
public String project;
public String flow;
public Long flowId;
}

View File

@ -3,20 +3,27 @@
<div>
<div id="mainSplitter">
<div id="tabSplitter">
<ul id="menutabs" class="nav nav-tabs category-header">
<div class="btn-group" role="group" aria-label="Toggle List/Tree View">
<button id="listviewbtn" type="button" class="btn btn-primary">List View</button>
<button id="treeviewbtn" type="button" class="btn btn-default">Tree View</button>
</div>
<ul id="menutabs" style="display:none" class="nav nav-tabs category-header">
<li>
<a data-toggle="tab" href="#filtertab">Datasets</a>
</li>
<li><a data-toggle="tab" href="#flowtab">Flows</a></li>
</ul>
<div class="tab-content">
<div>
<input placeholder="Filter By" style="width:100%;display: none;">
</div>
<div id="filtertab" class="tab-pane">
<div id="tree2" data-source="ajax" class="sampletree">
</div>
<div id="datasetlist" class="list-group"></div>
<div id="tree2" data-source="ajax" class="sampletree" style="display: none;"></div>
</div>
<div id="flowtab" class="tab-pane">
<div id="tree3" data-source="ajax" class="sampletree">
</div>
<div id="flowlist" class="list-group"></div>
<div id="tree3" data-source="ajax" class="sampletree" style="display: none;"></div>
</div>
</div>
</div>
@ -105,6 +112,24 @@
<div class="row">
<div class="col-xs-12">
{{#unless detailview}}
<div class="well well-sm">
<div class="row">
<div class="col-xs-6 pull-right">
<ul class="breadcrumbs">
{{#each breadcrumbs as |crumb|}}
<li>
<a
title="{{crumb.title}}"
href="#/datasets/{{crumb.urn}}"
>
{{crumb.title}}
</a>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
<div class="search-pagination">
<ul class="pager">
{{#unless first}}
@ -140,40 +165,6 @@
</div>
{{/unless}}
{{#unless detailview}}
<div class="well well-sm">
<div class="row">
<div class="col-xs-10">
<ul class="breadcrumbs">
{{#each breadcrumbs as |crumb|}}
<li>
<a
title="{{crumb.title}}"
href="#/datasets/{{crumb.urn}}"
>
{{crumb.title}}
</a>
</li>
{{/each}}
</ul>
</div>
<div class="col-xs-2 text-right">
<button
type="button"
class="btn btn-primary btn-sm pull-right"
{{action 'watchUrn' urn}}
>
<i
{{bind-attr class=":fa urnWatched:fa-eye-slash:fa-eye"}}
></i>
{{#if urnWatched}}
Unwatch
{{else}}
Watch
{{/if}}
</button>
</div>
</div>
</div>
<table
class="table table-bordered search-results"
style="word-break: break-all;">
@ -740,6 +731,21 @@
<script type="text/x-handlebars" id="dataset">
<div id="dataset" >
<div class="well well-sm">
<div class="row">
<div class="col-xs-6 pull-right">
<ul class="breadcrumbs">
{{#each breadcrumbs as |crumb|}}
<li>
<a title="{{crumb.title}}" href="#/datasets/{{crumb.urn}}">
{{crumb.title}}
</a>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-5">
<h3>{{ model.name }}</h3>
@ -802,21 +808,6 @@
</ul>
</div>
</div>
<div class="well well-sm">
<div class="row">
<div class="col-xs-12">
<ul class="breadcrumbs">
{{#each breadcrumbs as |crumb|}}
<li>
<a title="{{crumb.title}}" href="#/datasets/{{crumb.urn}}">
{{crumb.title}}
</a>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
</div>
{{#if tabview}}
@ -1051,7 +1042,7 @@
{{#unless detailview}}
<div class="well well-sm">
<div class="row">
<div class="col-xs-10">
<div class="col-xs-6 pull-right">
<ul class="breadcrumbs">
{{#each breadcrumbs as |crumb|}}
<li>
@ -1062,19 +1053,6 @@
{{/each}}
</ul>
</div>
<div class="col-xs-2 text-right">
<button
type="button"
class="btn btn-primary btn-sm pull-right"
{{action 'watchUrn' urn}}>
<i {{bind-attr class=":fa urnWatched:fa-eye-slash:fa-eye"}}></i>
{{#if urnWatched}}
Unwatch
{{else}}
Watch
{{/if}}
</button>
</div>
</div>
</div>
@ -1435,6 +1413,21 @@
<div id="pagedProjects" >
<div class="row">
<div class="col-xs-12">
<div class="well well-sm">
<div class="row">
<div class="col-xs-6 pull-right">
<ul class="breadcrumbs">
{{#each breadcrumbs as |crumb|}}
<li>
<a title="{{crumb.title}}" href="#/flows/{{crumb.urn}}">
{{crumb.title}}
</a>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
<div class="search-pagination">
<ul class="pager">
{{#unless first}}
@ -1456,34 +1449,6 @@
{{/unless}}
</ul>
</div>
<div class="well well-sm">
<div class="row">
<div class="col-xs-10">
<ul class="breadcrumbs">
{{#each breadcrumbs as |crumb|}}
<li>
<a title="{{crumb.title}}" href="#/flows/{{crumb.urn}}">
{{crumb.title}}
</a>
</li>
{{/each}}
</ul>
</div>
<div class="col-xs-2 text-right">
<button
type="button"
class="btn btn-primary btn-sm pull-right"
{{action 'watchUrn' urn}}>
<i {{bind-attr class=":fa urnWatched:fa-eye-slash:fa-eye"}}></i>
{{#if urnWatched}}
Unwatch
{{else}}
Watch
{{/if}}
</button>
</div>
</div>
</div>
<table class="table table-bordered search-results">
<thead>
<tr class="results-header">
@ -1515,6 +1480,21 @@
<div id="pagedFlows" >
<div class="row">
<div class="col-xs-12">
<div class="well well-sm">
<div class="row">
<div class="col-xs-6 pull-right">
<ul class="breadcrumbs">
{{#each breadcrumbs as |crumb|}}
<li>
<a title="{{crumb.title}}" href="#/flows/{{crumb.urn}}">
{{crumb.title}}
</a>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
<div class="search-pagination">
<ul class="pager">
{{#unless first}}
@ -1536,34 +1516,6 @@
{{/unless}}
</ul>
</div>
<div class="well well-sm">
<div class="row">
<div class="col-xs-10">
<ul class="breadcrumbs">
{{#each breadcrumbs as |crumb|}}
<li>
<a title="{{crumb.title}}" href="#/flows/{{crumb.urn}}">
{{crumb.title}}
</a>
</li>
{{/each}}
</ul>
</div>
<div class="col-xs-2 text-right">
<button
type="button"
class="btn btn-primary btn-sm pull-right"
{{action 'watchUrn' urn}}>
<i {{bind-attr class=":fa urnWatched:fa-eye-slash:fa-eye"}}></i>
{{#if urnWatched}}
Unwatch
{{else}}
Watch
{{/if}}
</button>
</div>
</div>
</div>
<table class="table table-bordered search-results">
<thead>
<tr class="results-header">
@ -1614,6 +1566,21 @@
<div id="pagedJobs" class="container-fluid">
<div class="row-fluid">
<div class="span9">
<div class="well well-sm">
<div class="row">
<div class="col-xs-6 pull-right">
<ul class="breadcrumbs">
{{#each breadcrumbs as |crumb|}}
<li>
<a title="{{crumb.title}}" href="#/flows/{{crumb.urn}}">
{{crumb.title}}
</a>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-7">
<h3> {{ model.data.flow }}</h3>
@ -1641,21 +1608,6 @@
</ul>
</div>
</div>
<div class="well well-sm">
<div class="row">
<div class="col-xs-12">
<ul class="breadcrumbs">
{{#each breadcrumbs as |crumb|}}
<li>
<a title="{{crumb.title}}" href="#/flows/{{crumb.urn}}">
{{crumb.title}}
</a>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
<div class="search-pagination">
<ul class="pager">
{{#unless first}}

View File

@ -43,6 +43,14 @@ GET /api/v1/party/groups controllers.api.v1.User.getAllGroups
GET /api/v1/autocomplete/search controllers.api.v1.Search.getSearchAutoComplete()
GET /api/v1/list/datasets controllers.api.v1.Dataset.getDatasetListNodes()
GET /api/v1/list/flows controllers.api.v1.Flow.getFlowListViewClusters()
GET /api/v1/list/flows/:application controllers.api.v1.Flow.getFlowListViewProjects(application:String)
GET /api/v1/list/flows/:application/:project controllers.api.v1.Flow.getFlowListViewFlows(application:String, project:String)
GET /api/v1/datasets controllers.api.v1.Dataset.getPagedDatasets()
GET /api/v1/datasets/:id controllers.api.v1.Dataset.getDatasetByID(id:Int)

View File

@ -65,6 +65,32 @@
var splitterResize = false;
var skipResize = false;
$('#listviewbtn').click(function(){
$('#listviewbtn').removeClass('btn-primary');
$('#listviewbtn').removeClass('btn-default');
$('#treeviewbtn').removeClass('btn-primary');
$('#treeviewbtn').removeClass('btn-default');
$('#listviewbtn').addClass('btn-primary');
$('#treeviewbtn').addClass('btn-default');
$('#tree2').hide();
$('#tree3').hide();
$('#datasetlist').show();
$('#flowlist').show();
});
$('#treeviewbtn').click(function(){
$('#listviewbtn').removeClass('btn-primary');
$('#listviewbtn').removeClass('btn-default');
$('#treeviewbtn').removeClass('btn-primary');
$('#treeviewbtn').removeClass('btn-default');
$('#listviewbtn').addClass('btn-default');
$('#treeviewbtn').addClass('btn-primary');
$('#datasetlist').hide();
$('#flowlist').hide();
$('#tree2').show();
$('#tree3').show();
});
$(window).resize(function() {
if (skipResize)
return;
@ -205,3 +231,59 @@ String.prototype.toProperCase = function(){
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()
})
}
function renderDatasetListView(nodes, name)
{
var template = '<a href="$URL" class="list-group-item">$NODE_NAME</a>';
var activeTemplate = '<a href="$URL" class="active list-group-item">$NODE_NAME</a>';
var obj = $('#datasetlist');
if (!obj)
return;
obj.empty();
var activeObj;
for(var i = 0; i < nodes.length; i++)
{
if (name && name == nodes[i].nodeName)
{
obj.append(activeTemplate.replace('$NODE_NAME', nodes[i].nodeName).replace("$URL", nodes[i].nodeUrl));
}
else
{
obj.append(template.replace('$NODE_NAME', nodes[i].nodeName).replace("$URL", nodes[i].nodeUrl));
}
}
if (activeObj)
{
var scrollToActiveNode = function() {
$("#tabSplitter").scrollTo(activeObj, 800)
}
}
}
function renderFlowListView(nodes, flowId)
{
var template = '<a href="$URL" class="list-group-item">$NODE_NAME</a>';
var activeTemplate = '<a href="$URL" class="active list-group-item">$NODE_NAME</a>';
var obj = $('#flowlist');
if (!obj)
return;
obj.empty();
var activeObj;
for(var i = 0; i < nodes.length; i++)
{
if (flowId && flowId == nodes[i].flowId)
{
activeObj = obj.append(activeTemplate.replace('$NODE_NAME', nodes[i].nodeName).replace("$URL", nodes[i].nodeUrl));
}
else
{
obj.append(template.replace('$NODE_NAME', nodes[i].nodeName).replace("$URL", nodes[i].nodeUrl));
}
}
if (activeObj)
{
var scrollToActiveNode = function() {
$("#tabSplitter").scrollTo(activeObj, 800)
}
}
}

View File

@ -148,6 +148,12 @@ App.DatasetsRoute = Ember.Route.extend({
},
actions: {
getDatasets: function(){
var listUrl = 'api/v1/list/datasets';
$.get(listUrl, function(data) {
if (data && data.status == "ok"){
renderDatasetListView(data.nodes);
}
});
var url = 'api/v1/datasets?size=10&page=' + datasetController.get('model.data.page');
currentTab = 'Datasets';
updateActiveTab();
@ -171,12 +177,14 @@ App.DatasetRoute = Ember.Route.extend({
var id = 0;
var source = '';
var urn = '';
var name = '';
controller.set("hasProperty", false);
if(params && params.id)
{
id = params.id;
source = params.source;
urn = params.urn;
name = params.name;
datasetController.set("detailview", true);
if (params.originalSchema)
{
@ -191,11 +199,27 @@ App.DatasetRoute = Ember.Route.extend({
id = params.dataset.id;
source = params.dataset.source;
urn = params.dataset.urn;
name = params.dataset.name;
controller.set('model', params.dataset);
datasetController.set("detailview", true);
}
}
if (urn)
{
var index = urn.lastIndexOf('/');
if (index != -1)
{
var listUrl = 'api/v1/list/datasets?urn=' + urn.substring(0, index+1);
$.get(listUrl, function(data) {
if (data && data.status == "ok"){
console.log(name);
renderDatasetListView(data.nodes, name);
}
});
}
}
if (datasetCommentsComponent)
{
datasetCommentsComponent.getComments();
@ -217,7 +241,7 @@ App.DatasetRoute = Ember.Route.extend({
if( i === 0) {
breadcrumbs.push({
title: b[i],
urn: "name/" + b[i] + "/page/1?urn=" + b[i]
urn: "name/" + b[i] + "/page/1?urn=" + b[i] + ':///'
})
}
else if (i === (b.length -1))
@ -532,6 +556,12 @@ App.NameRoute = Ember.Route.extend({
},
actions: {
getDatasets: function(){
var listUrl = 'api/v1/list/datasets';
$.get(listUrl, function(data) {
if (data && data.status == "ok"){
renderDatasetListView(data.nodes);
}
});
var url = 'api/v1/datasets?size=10&page=' + datasetController.get('model.data.page');
currentTab = 'Datasets';
updateActiveTab();
@ -548,6 +578,12 @@ App.NameRoute = Ember.Route.extend({
App.PageRoute = Ember.Route.extend({
setupController: function(controller, param) {
var listUrl = 'api/v1/list/datasets';
$.get(listUrl, function(data) {
if (data && data.status == "ok"){
renderDatasetListView(data.nodes);
}
});
var url = 'api/v1/datasets?size=10&page=' + param.page;
currentTab = 'Datasets';
var breadcrumbs = [{"title":"DATASETS_ROOT", "urn":"page/1"}];
@ -573,6 +609,12 @@ App.PageRoute = Ember.Route.extend({
},
actions: {
getDatasets: function(){
var listUrl = 'api/v1/list/datasets';
$.get(listUrl, function(data) {
if (data && data.status == "ok"){
renderDatasetListView(data.nodes);
}
});
var url = 'api/v1/datasets?size=10&page=' + datasetController.get('model.data.page');
currentTab = 'Datasets';
updateActiveTab();
@ -591,7 +633,27 @@ App.SubpageRoute = Ember.Route.extend({
setupController: function(controller, param) {
if(!datasetController)
return;
var listUrl = 'api/v1/list/datasets?urn=' + param.urn;
var addSlash = false;
if (param.urn && (param.urn[param.urn.length-1] != '/'))
{
addSlash = true;
}
if (addSlash)
{
listUrl += '/';
}
$.get(listUrl, function(data) {
if (data && data.status == "ok"){
renderDatasetListView(data.nodes);
}
});
var url = 'api/v1/datasets?size=10&page=' + param.page + '&urn=' + param.urn;
if (addSlash)
{
url += '/';
}
currentTab = 'Datasets';
updateActiveTab();
var breadcrumbs = [];
@ -601,7 +663,7 @@ App.SubpageRoute = Ember.Route.extend({
if( i === 0) {
breadcrumbs.push({
title: b[i],
urn: "name/" + b[i] + "/page/1?urn=" + b[i]
urn: "name/" + b[i] + "/page/1?urn=" + b[i] + ':///'
})
} else {
var urn = b.slice(0, (i+1)).join('/');
@ -612,6 +674,10 @@ App.SubpageRoute = Ember.Route.extend({
}
}
var watcherEndpoint = "/api/v1/urn/watch?urn=" + param.urn;
if (addSlash)
{
watcherEndpoint += '/';
}
$.get(watcherEndpoint, function(data){
if(data.id && data.id !== 0) {
datasetController.set('urnWatched', true)

View File

@ -8,6 +8,12 @@ App.FlowsRoute = Ember.Route.extend({
return;
}
currentTab = 'Flows';
var listUrl = 'api/v1/list/flows';
$.get(listUrl, function(data) {
if (data && data.status == "ok"){
renderFlowListView(data.nodes);
}
});
updateActiveTab();
var url = 'api/v1/flows?size=10&page=1';
var breadcrumbs = [{"title": 'FLOWS_ROOT', "urn": "page/1"}];
@ -55,6 +61,12 @@ App.PagedapplicationRoute = Ember.Route.extend({
{
flowsController.set('isAppworx', false);
}
var listUrl = 'api/v1/list/flows/' + application;
$.get(listUrl, function(data) {
if (data && data.status == "ok"){
renderFlowListView(data.nodes);
}
});
var url = 'api/v1/flows/' + application + '?size=10&page=' + params.page;
$.get(url, function(data) {
if (data && data.status == "ok"){
@ -108,6 +120,12 @@ App.PagedprojectRoute = Ember.Route.extend({
}
var project = transition.resolvedModels.project.project;
var url = 'api/v1/flows/' + application + '/' + project + '?size=10&page=' + params.page;
var listUrl = 'api/v1/list/flows/' + application + '/' + project;
$.get(listUrl, function(data) {
if (data && data.status == "ok"){
renderFlowListView(data.nodes);
}
});
var breadcrumbs = [{"title": application, "urn": application + "/page/1"},
{"title": project, "urn": application + "/" + project + "/page/1"}];
$.get(url, function(data) {
@ -155,6 +173,13 @@ App.PagedflowRoute = Ember.Route.extend({
var flow = transition.resolvedModels.flow.flow;
var lineageUrl = '/lineage/flow/' + application + '/' + project + '/' + flow;
controller.set('lineageUrl', lineageUrl);
var listUrl = 'api/v1/list/flows/' + application + '/' + project;
console.log(flow);
$.get(listUrl, function(data) {
if (data && data.status == "ok"){
renderFlowListView(data.nodes, flow);
}
});
var url = 'api/v1/flows/' + application + '/' + project + '/' + flow + '?size=10&page=' + params.page;
$.get(url, function(data) {
if (data && data.status == "ok"){

View File

@ -42,7 +42,15 @@
{
if (node.isFolder())
{
window.location = "#/datasets/name/" + node.title + "/page/1?urn=" + node.data.path;
if (node.data.level == 1)
{
window.location = "#/datasets/name/" + node.title + "/page/1?urn=" + node.data.path + ':///';
}
else
{
window.location = "#/datasets/name/" + node.title + "/page/1?urn=" + node.data.path + '/';
}
}
else{
if (node && node.data && node.data.id)