[Monitor Dashboard|Trunk]
Indicators form: add input fields for data titles of the chart indicator-utils: generateIndicatorByChartUrl: -more checks for library (Google/highcharts) and table/chart -parsing for Google charts (a little different schema than highcharts) -parsing for google tables (parse stakeholder filter) -make sure connect new charts work (the stakeholder should be ri) -prepare new parameterized queries (should be checked when available) -- if the format is monitor.funder/ri/organization parse only if the stakeholder is type funder/ri/organization -any other case just keep the url (won't work for default profile) -Simple Stats tool queries add check for stakeholder type -- if stakeholder is funder/ri/organization parse funder/ri/organization filter git-svn-id: https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-monitor-portal/trunk/monitor_dashboard@58796 d315682c-612b-4755-9ff5-7f18f6832af3
This commit is contained in:
parent
7737ecaa42
commit
7c72562336
|
@ -365,6 +365,14 @@
|
|||
<div dashboard-input [formInput]="getParameter(i, 'yAxisTitle').get('value')"
|
||||
label="Y-Axis Title"></div>
|
||||
</div>
|
||||
<div *ngIf="getParameter(i, 'data_title_0')" class="uk-width-1-3@s">
|
||||
<div dashboard-input [formInput]="getParameter(i, 'data_title_0').get('value')"
|
||||
label="Data title"></div>
|
||||
</div>
|
||||
<div *ngIf="getParameter(i, 'data_title_1')" class="uk-width-1-3@s">
|
||||
<div dashboard-input [formInput]="getParameter(i, 'data_title_1').get('value')"
|
||||
label="Data title"></div>
|
||||
</div>
|
||||
<div *ngIf="getParameter(i, 'start_year')" class="uk-width-1-3@s">
|
||||
<div dashboard-input [formInput]="getParameter(i, 'start_year').get('value')"
|
||||
label="Year (From)"></div>
|
||||
|
|
|
@ -244,38 +244,65 @@ export class IndicatorUtils {
|
|||
|
||||
generateIndicatorByChartUrl(source: SourceType, url: string, type: IndicatorPathType = null, stakeholder:Stakeholder): IndicatorPath {
|
||||
let indicatorPath = new IndicatorPath('other', source, "", "", []);
|
||||
if (source === 'stats-tool') {
|
||||
indicatorPath.url = url.split("json=")[0] + "json=";
|
||||
indicatorPath.url = indicatorPath.url.split("/")[indicatorPath.url.split("/").length - 1];
|
||||
indicatorPath.chartObject = decodeURIComponent(url.split("json=")[1]);
|
||||
let chart = JSON.parse(indicatorPath.chartObject);
|
||||
indicatorPath.type = this.extractType(chart, indicatorPath);
|
||||
this.parameterizeDefaultQuery(chart, indicatorPath, stakeholder);
|
||||
this.extractTitle(chart, indicatorPath);
|
||||
this.extractSubTitle(chart, indicatorPath);
|
||||
this.extractXTitle(chart, indicatorPath);
|
||||
this.extractYTitle(chart, indicatorPath);
|
||||
this.extractFunder(chart, indicatorPath, stakeholder);
|
||||
this.extractStartYear(chart, indicatorPath);
|
||||
this.extractEndYear(chart, indicatorPath);
|
||||
indicatorPath.chartObject = JSON.stringify(chart);
|
||||
this.addResultFilters(chart, indicatorPath);
|
||||
} else if (source === 'old') {
|
||||
indicatorPath.url = url.split("data=")[0].split("/stats/")[1] + "data=";
|
||||
indicatorPath.chartObject = decodeURIComponent(url.split("data=")[1].split("&")[0]);
|
||||
indicatorPath.type = type;
|
||||
let chart = JSON.parse(indicatorPath.chartObject);
|
||||
this.extractOldToolTitle(chart, indicatorPath);
|
||||
this.extractOldToolXTitle(chart, indicatorPath);
|
||||
this.extractOldToolYTitle(chart, indicatorPath);
|
||||
indicatorPath.chartObject = JSON.stringify(chart);
|
||||
} else {
|
||||
try {
|
||||
if (source === 'stats-tool') {
|
||||
indicatorPath.url = url.split("json=")[0] + "json=";
|
||||
indicatorPath.url = indicatorPath.url.split("/")[indicatorPath.url.split("/").length - 1];
|
||||
indicatorPath.chartObject = decodeURIComponent(url.split("json=")[1]);
|
||||
let chart = JSON.parse(indicatorPath.chartObject);
|
||||
// console.debug(indicatorPath);
|
||||
//HighCharts
|
||||
if (indicatorPath.url == "chart?json=") {
|
||||
if (chart["library"] && chart["library"] == "HighCharts") {
|
||||
indicatorPath.type = this.extractType(chart, indicatorPath);
|
||||
} else {
|
||||
indicatorPath.type = "column"
|
||||
}
|
||||
|
||||
this.extractTitle(chart, indicatorPath);
|
||||
this.extractSubTitle(chart, indicatorPath);
|
||||
this.extractXTitle(chart, indicatorPath);
|
||||
this.extractYTitle(chart, indicatorPath);
|
||||
}
|
||||
if (indicatorPath.url == "chart?json=" || indicatorPath.url == "table?json=") {
|
||||
// common for tables and other chart types
|
||||
this.extractDataTitle(chart, indicatorPath);
|
||||
this.parameterizeDefaultQuery(chart, indicatorPath, stakeholder);
|
||||
this.extractStakeHolders(chart, indicatorPath, stakeholder);
|
||||
this.extractStartYear(chart, indicatorPath);
|
||||
this.extractEndYear(chart, indicatorPath);
|
||||
indicatorPath.chartObject = JSON.stringify(chart);
|
||||
this.addResultFilters(chart, indicatorPath);
|
||||
}
|
||||
} else if (source === 'old') {
|
||||
indicatorPath.url = url.split("data=")[0].split("/stats/")[1] + "data=";
|
||||
indicatorPath.chartObject = decodeURIComponent(url.split("data=")[1].split("&")[0]);
|
||||
indicatorPath.type = type;
|
||||
let chart = JSON.parse(indicatorPath.chartObject);
|
||||
this.extractOldToolTitle(chart, indicatorPath);
|
||||
this.extractOldToolXTitle(chart, indicatorPath);
|
||||
this.extractOldToolYTitle(chart, indicatorPath);
|
||||
indicatorPath.chartObject = JSON.stringify(chart);
|
||||
} else {
|
||||
indicatorPath.url = url;
|
||||
indicatorPath.type = type;
|
||||
}
|
||||
}catch(e){
|
||||
console.error(e);
|
||||
indicatorPath.url = url;
|
||||
indicatorPath.type = type;
|
||||
}
|
||||
// console.debug(indicatorPath.parameters);
|
||||
// console.debug(indicatorPath.chartObject);
|
||||
return indicatorPath;
|
||||
}
|
||||
|
||||
private getQueryObjectName(obj){
|
||||
if(obj["library"] && obj["library"] == "GoogleCharts"){
|
||||
return "queriesInfo";
|
||||
}else if(obj["library"] && obj["library"] == "HighCharts") {
|
||||
return "queries";
|
||||
}
|
||||
}
|
||||
private extractType(obj, indicatorPath: IndicatorPath): IndicatorPathType {
|
||||
let defaultTypes = ["column", "bar", "pie"];
|
||||
let type = obj["chartDescription"]["queries"][0]["type"];
|
||||
|
@ -287,26 +314,73 @@ export class IndicatorUtils {
|
|||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
private extractStakeHolders(obj, indicatorPath: IndicatorPath, stakeholder:Stakeholder) {
|
||||
this.extractFunder(obj, indicatorPath, stakeholder);
|
||||
this.extractRI(obj, indicatorPath, stakeholder);
|
||||
this.extractOrganization(obj, indicatorPath, stakeholder);
|
||||
}
|
||||
private extractFunder(obj, indicatorPath: IndicatorPath, stakeholder:Stakeholder) {
|
||||
let funderName;
|
||||
for (let query of obj["chartDescription"]["queries"]) {
|
||||
if(stakeholder.type != "funder"){
|
||||
return;
|
||||
}
|
||||
for (let query of obj[(obj["chartDescription"]?"chartDescription":"tableDescription")][this.getQueryObjectName(obj)]) {
|
||||
if (!query["query"]["filters"]) {
|
||||
return;
|
||||
}
|
||||
for (let filter of query["query"]["filters"]) {
|
||||
if (filter["groupFilters"][0]["field"].indexOf(".funder") != -1) {
|
||||
funderName = filter["groupFilters"][0]["values"][0];
|
||||
filter["groupFilters"][0]["values"][0] = ChartHelper.prefix + "index_name" + ChartHelper.suffix;
|
||||
indicatorPath.parameters["index_name"] = stakeholder.index_name;
|
||||
}else if (filter["groupFilters"][0]["field"].indexOf(".funder.id") != -1) {
|
||||
filter["groupFilters"][0]["values"][0] = ChartHelper.prefix + "index_shortName" + ChartHelper.suffix;
|
||||
indicatorPath.parameters["index_shortName"] = stakeholder.index_shortName;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private extractRI(obj, indicatorPath: IndicatorPath, stakeholder:Stakeholder) {
|
||||
if(stakeholder.type != "ri"){
|
||||
return;
|
||||
}
|
||||
for (let query of obj[(obj["chartDescription"]?"chartDescription":"tableDescription")][this.getQueryObjectName(obj)]) {
|
||||
if (!query["query"]["filters"]) {
|
||||
return;
|
||||
}
|
||||
for (let filter of query["query"]["filters"]) {
|
||||
if (filter["groupFilters"][0]["field"].indexOf(".context.name") != -1) {
|
||||
filter["groupFilters"][0]["values"][0] = ChartHelper.prefix + "index_name" + ChartHelper.suffix;
|
||||
indicatorPath.parameters["index_name"] = stakeholder.index_name;
|
||||
}else if (filter["groupFilters"][0]["field"].indexOf(".context.id") != -1) {
|
||||
filter["groupFilters"][0]["values"][0] = ChartHelper.prefix + "index_shortName" + ChartHelper.suffix;
|
||||
indicatorPath.parameters["index_shortName"] = stakeholder.index_shortName;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private extractOrganization(obj, indicatorPath: IndicatorPath, stakeholder:Stakeholder) {
|
||||
if(stakeholder.type != "organization"){
|
||||
return;
|
||||
}
|
||||
for (let query of obj[(obj["chartDescription"]?"chartDescription":"tableDescription")][this.getQueryObjectName(obj)]) {
|
||||
if (!query["query"]["filters"]) {
|
||||
return;
|
||||
}
|
||||
for (let filter of query["query"]["filters"]) {
|
||||
if (filter["groupFilters"][0]["field"].indexOf(".organization.name") != -1) {
|
||||
filter["groupFilters"][0]["values"][0] = ChartHelper.prefix + "index_name" + ChartHelper.suffix;
|
||||
indicatorPath.parameters["index_name"] = stakeholder.index_name;
|
||||
}else if (filter["groupFilters"][0]["field"].indexOf(".organization.id") != -1) {
|
||||
filter["groupFilters"][0]["values"][0] = ChartHelper.prefix + "index_shortName" + ChartHelper.suffix;
|
||||
indicatorPath.parameters["index_shortName"] = stakeholder.index_shortName;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private extractStartYear(obj, indicatorPath: IndicatorPath) {
|
||||
let start_year;
|
||||
for (let query of obj["chartDescription"]["queries"]) {
|
||||
for (let query of obj[(obj["chartDescription"]?"chartDescription":"tableDescription")][this.getQueryObjectName(obj)]) {
|
||||
if (!query["query"]["filters"]) {
|
||||
return;
|
||||
}
|
||||
|
@ -324,7 +398,7 @@ export class IndicatorUtils {
|
|||
|
||||
private extractEndYear(obj, indicatorPath: IndicatorPath) {
|
||||
let end_year;
|
||||
for (let query of obj["chartDescription"]["queries"]) {
|
||||
for (let query of obj[(obj["chartDescription"]?"chartDescription":"tableDescription")][this.getQueryObjectName(obj)]) {
|
||||
if (!query["query"]["filters"]) {
|
||||
return;
|
||||
}
|
||||
|
@ -342,24 +416,61 @@ export class IndicatorUtils {
|
|||
|
||||
private parameterizeDefaultQuery(obj, indicatorPath: IndicatorPath, stakeholder:Stakeholder) {
|
||||
let name = "";
|
||||
for (let query of obj["chartDescription"]["queries"]) {
|
||||
|
||||
for (let query of obj[(obj["chartDescription"]?"chartDescription":"tableDescription")][this.getQueryObjectName(obj)]) {
|
||||
//monitor.{{stakeholderType}}.{{queryname}}
|
||||
//parameters: stakeholderId*, type
|
||||
if (query["query"]["name"]) {
|
||||
name = query["query"]["name"];
|
||||
let stakeholderSN = name.split('.')[1];
|
||||
query["query"]["name"] = name.split('.' + stakeholderSN + ".")[0] + "." + ChartHelper.prefix + "index_shortName" + ChartHelper.suffix +"." + name.split('.' + stakeholderSN + ".")[1];
|
||||
indicatorPath.parameters["index_shortName"] = stakeholder.index_shortName.toLowerCase();
|
||||
let parameters = (query["query"]["parameters"])?query["query"]["parameters"]:[];
|
||||
if(name.split('.')[0] == "rcd" && parameters.length > 0 && stakeholder.type=="ri") {
|
||||
//rcd.{{queryname}}
|
||||
parameters[0] = ChartHelper.prefix + "index_shortName" + ChartHelper.suffix;
|
||||
indicatorPath.parameters["index_shortName"] = stakeholder.index_shortName.toLowerCase();
|
||||
}else if(name.split('.')[0] == "monitor" && parameters.length == 0 && stakeholder.type=="funder"){
|
||||
// old saved queries without params
|
||||
//monitor.{{funder_shortName}}.{{type}}.{{queryname}}
|
||||
let stakeholderSN = name.split('.')[1];
|
||||
query["query"]["name"] = name.split('.' + stakeholderSN + ".")[0] + "." + ChartHelper.prefix + "index_shortName" + ChartHelper.suffix +"." + name.split('.' + stakeholderSN + ".")[1];
|
||||
indicatorPath.parameters["index_shortName"] = stakeholder.index_shortName.toLowerCase();
|
||||
}else if(name.split('.')[0] == "monitor" && parameters.length > 0 && name.split('.')[1] == stakeholder.type) {
|
||||
// new parameterized queries
|
||||
//monitor.{{type}}.{{queryname}}.{{param1 - id }}.{{param2 result-type}}.{{fl0}}
|
||||
if( name.split('.').length > 3 && name.split('.')[3] == "id") {
|
||||
parameters[0] = ChartHelper.prefix + "index_id" + ChartHelper.suffix;
|
||||
indicatorPath.parameters["index_id"] = stakeholder.index_id;
|
||||
}else if( name.split('.').length > 3 && name.split('.')[3] == "shortname") {
|
||||
parameters[0] = ChartHelper.prefix + "index_shortName" + ChartHelper.suffix;
|
||||
indicatorPath.parameters["index_shortName"] = stakeholder.index_shortName;
|
||||
}else if( name.split('.').length > 3 && name.split('.')[3] == "name") {
|
||||
parameters[0] = ChartHelper.prefix + "index_name" + ChartHelper.suffix;
|
||||
indicatorPath.parameters["index_name"] = stakeholder.index_name;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private extractDataTitle(obj, indicatorPath: IndicatorPath) {
|
||||
let index = 0;
|
||||
for (let query of obj[(obj["chartDescription"]?"chartDescription":"tableDescription")][this.getQueryObjectName(obj)]) {
|
||||
if (query["name"]) {
|
||||
let name = query["name"];
|
||||
query["name"] = ChartHelper.prefix + "data_title_"+index + ChartHelper.suffix;
|
||||
indicatorPath.parameters["data_title_"+index] = name;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
}
|
||||
private extractTitle(obj, indicatorPath: IndicatorPath) {
|
||||
let title = "";
|
||||
if (obj["chartDescription"]["title"]) {
|
||||
if (obj["library"] && obj["library"] == "HighCharts" &&obj["chartDescription"]["title"]) {
|
||||
title = obj["chartDescription"]["title"]["text"];
|
||||
obj["chartDescription"]["title"]["text"] = ChartHelper.prefix + "title" + ChartHelper.suffix;
|
||||
indicatorPath.parameters["title"] = title ? title : "";
|
||||
|
||||
}else if (obj["library"] && obj["library"] == "GoogleCharts" && obj["chartDescription"]["options"]["title"]) {
|
||||
title = obj["chartDescription"]["options"]["title"];
|
||||
obj["chartDescription"]["options"]["title"] = ChartHelper.prefix + "title" + ChartHelper.suffix;
|
||||
}
|
||||
indicatorPath.parameters["title"] = title ? title : "";
|
||||
}
|
||||
|
||||
private extractSubTitle(obj, indicatorPath: IndicatorPath) {
|
||||
|
@ -373,26 +484,32 @@ export class IndicatorUtils {
|
|||
|
||||
private extractXTitle(obj, indicatorPath: IndicatorPath) {
|
||||
let title = "";
|
||||
if (obj["chartDescription"]["xAxis"]["title"]) {
|
||||
if (obj["library"] && obj["library"] == "HighCharts" && obj["chartDescription"]["xAxis"]["title"]) {
|
||||
title = obj["chartDescription"]["xAxis"]["title"]["text"];
|
||||
obj["chartDescription"]["xAxis"]["title"]["text"] = ChartHelper.prefix + "xAxisTitle" + ChartHelper.suffix;
|
||||
indicatorPath.parameters["xAxisTitle"] = title ? title : ""
|
||||
}else if (obj["library"] && obj["library"] == "GoogleCharts" && obj["chartDescription"]["options"]["hAxis"]["title"]) {
|
||||
title = obj["chartDescription"]["options"]["hAxis"]["title"];
|
||||
obj["chartDescription"]["options"]["hAxis"]["title"] = ChartHelper.prefix + "xAxisTitle" + ChartHelper.suffix;
|
||||
}
|
||||
indicatorPath.parameters["xAxisTitle"] = title ? title : "";
|
||||
}
|
||||
|
||||
private extractYTitle(obj, indicatorPath: IndicatorPath) {
|
||||
let title = "";
|
||||
if (obj["chartDescription"]["yAxis"]["title"]) {
|
||||
if (obj["library"] && obj["library"] == "HighCharts" && obj["chartDescription"]["yAxis"]["title"]) {
|
||||
title = obj["chartDescription"]["yAxis"]["title"]["text"];
|
||||
obj["chartDescription"]["yAxis"]["title"]["text"] = ChartHelper.prefix + "yAxisTitle" + ChartHelper.suffix;
|
||||
indicatorPath.parameters["yAxisTitle"] = title ? title : ""
|
||||
}else if (obj["library"] && obj["library"] == "GoogleCharts" && obj["chartDescription"]["options"]["vAxis"]["title"]) {
|
||||
title = obj["chartDescription"]["options"]["vAxis"]["title"];
|
||||
obj["chartDescription"]["options"]["vAxis"]["title"] = ChartHelper.prefix + "yAxisTitle" + ChartHelper.suffix;
|
||||
}
|
||||
indicatorPath.parameters["yAxisTitle"] = title ? title : "";
|
||||
}
|
||||
|
||||
private addResultFilters(obj, indicatorPath: IndicatorPath) {
|
||||
let resultTypes = ["publication", "software", "dataset", "other"];
|
||||
let index = -1;
|
||||
for (let query of obj["chartDescription"]["queries"]) {
|
||||
for (let query of obj[(obj["chartDescription"]?"chartDescription":"tableDescription")][this.getQueryObjectName(obj)]) {
|
||||
if (!query["query"]["select"]) {
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue