[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:
Argiro Kokogiannaki 2020-05-28 09:35:57 +00:00
parent 7737ecaa42
commit 7c72562336
2 changed files with 171 additions and 46 deletions

View File

@ -365,6 +365,14 @@
<div dashboard-input [formInput]="getParameter(i, 'yAxisTitle').get('value')" <div dashboard-input [formInput]="getParameter(i, 'yAxisTitle').get('value')"
label="Y-Axis Title"></div> label="Y-Axis Title"></div>
</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 *ngIf="getParameter(i, 'start_year')" class="uk-width-1-3@s">
<div dashboard-input [formInput]="getParameter(i, 'start_year').get('value')" <div dashboard-input [formInput]="getParameter(i, 'start_year').get('value')"
label="Year (From)"></div> label="Year (From)"></div>

View File

@ -244,38 +244,65 @@ export class IndicatorUtils {
generateIndicatorByChartUrl(source: SourceType, url: string, type: IndicatorPathType = null, stakeholder:Stakeholder): IndicatorPath { generateIndicatorByChartUrl(source: SourceType, url: string, type: IndicatorPathType = null, stakeholder:Stakeholder): IndicatorPath {
let indicatorPath = new IndicatorPath('other', source, "", "", []); let indicatorPath = new IndicatorPath('other', source, "", "", []);
if (source === 'stats-tool') { try {
indicatorPath.url = url.split("json=")[0] + "json="; if (source === 'stats-tool') {
indicatorPath.url = indicatorPath.url.split("/")[indicatorPath.url.split("/").length - 1]; indicatorPath.url = url.split("json=")[0] + "json=";
indicatorPath.chartObject = decodeURIComponent(url.split("json=")[1]); indicatorPath.url = indicatorPath.url.split("/")[indicatorPath.url.split("/").length - 1];
let chart = JSON.parse(indicatorPath.chartObject); indicatorPath.chartObject = decodeURIComponent(url.split("json=")[1]);
indicatorPath.type = this.extractType(chart, indicatorPath); let chart = JSON.parse(indicatorPath.chartObject);
this.parameterizeDefaultQuery(chart, indicatorPath, stakeholder); // console.debug(indicatorPath);
this.extractTitle(chart, indicatorPath); //HighCharts
this.extractSubTitle(chart, indicatorPath); if (indicatorPath.url == "chart?json=") {
this.extractXTitle(chart, indicatorPath); if (chart["library"] && chart["library"] == "HighCharts") {
this.extractYTitle(chart, indicatorPath); indicatorPath.type = this.extractType(chart, indicatorPath);
this.extractFunder(chart, indicatorPath, stakeholder); } else {
this.extractStartYear(chart, indicatorPath); indicatorPath.type = "column"
this.extractEndYear(chart, indicatorPath); }
indicatorPath.chartObject = JSON.stringify(chart);
this.addResultFilters(chart, indicatorPath); this.extractTitle(chart, indicatorPath);
} else if (source === 'old') { this.extractSubTitle(chart, indicatorPath);
indicatorPath.url = url.split("data=")[0].split("/stats/")[1] + "data="; this.extractXTitle(chart, indicatorPath);
indicatorPath.chartObject = decodeURIComponent(url.split("data=")[1].split("&")[0]); this.extractYTitle(chart, indicatorPath);
indicatorPath.type = type; }
let chart = JSON.parse(indicatorPath.chartObject); if (indicatorPath.url == "chart?json=" || indicatorPath.url == "table?json=") {
this.extractOldToolTitle(chart, indicatorPath); // common for tables and other chart types
this.extractOldToolXTitle(chart, indicatorPath); this.extractDataTitle(chart, indicatorPath);
this.extractOldToolYTitle(chart, indicatorPath); this.parameterizeDefaultQuery(chart, indicatorPath, stakeholder);
indicatorPath.chartObject = JSON.stringify(chart); this.extractStakeHolders(chart, indicatorPath, stakeholder);
} else { 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.url = url;
indicatorPath.type = type; indicatorPath.type = type;
} }
// console.debug(indicatorPath.parameters);
// console.debug(indicatorPath.chartObject);
return indicatorPath; 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 { private extractType(obj, indicatorPath: IndicatorPath): IndicatorPathType {
let defaultTypes = ["column", "bar", "pie"]; let defaultTypes = ["column", "bar", "pie"];
let type = obj["chartDescription"]["queries"][0]["type"]; let type = obj["chartDescription"]["queries"][0]["type"];
@ -287,26 +314,73 @@ export class IndicatorUtils {
} }
return type; 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) { private extractFunder(obj, indicatorPath: IndicatorPath, stakeholder:Stakeholder) {
let funderName; if(stakeholder.type != "funder"){
for (let query of obj["chartDescription"]["queries"]) { return;
}
for (let query of obj[(obj["chartDescription"]?"chartDescription":"tableDescription")][this.getQueryObjectName(obj)]) {
if (!query["query"]["filters"]) { if (!query["query"]["filters"]) {
return; return;
} }
for (let filter of query["query"]["filters"]) { for (let filter of query["query"]["filters"]) {
if (filter["groupFilters"][0]["field"].indexOf(".funder") != -1) { 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; filter["groupFilters"][0]["values"][0] = ChartHelper.prefix + "index_name" + ChartHelper.suffix;
indicatorPath.parameters["index_name"] = stakeholder.index_name; 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) { private extractStartYear(obj, indicatorPath: IndicatorPath) {
let start_year; 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"]) { if (!query["query"]["filters"]) {
return; return;
} }
@ -324,7 +398,7 @@ export class IndicatorUtils {
private extractEndYear(obj, indicatorPath: IndicatorPath) { private extractEndYear(obj, indicatorPath: IndicatorPath) {
let end_year; 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"]) { if (!query["query"]["filters"]) {
return; return;
} }
@ -342,24 +416,61 @@ export class IndicatorUtils {
private parameterizeDefaultQuery(obj, indicatorPath: IndicatorPath, stakeholder:Stakeholder) { private parameterizeDefaultQuery(obj, indicatorPath: IndicatorPath, stakeholder:Stakeholder) {
let name = ""; 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"]) { if (query["query"]["name"]) {
name = query["query"]["name"]; name = query["query"]["name"];
let stakeholderSN = name.split('.')[1]; let parameters = (query["query"]["parameters"])?query["query"]["parameters"]:[];
query["query"]["name"] = name.split('.' + stakeholderSN + ".")[0] + "." + ChartHelper.prefix + "index_shortName" + ChartHelper.suffix +"." + name.split('.' + stakeholderSN + ".")[1]; if(name.split('.')[0] == "rcd" && parameters.length > 0 && stakeholder.type=="ri") {
indicatorPath.parameters["index_shortName"] = stakeholder.index_shortName.toLowerCase(); //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) { private extractTitle(obj, indicatorPath: IndicatorPath) {
let title = ""; let title = "";
if (obj["chartDescription"]["title"]) { if (obj["library"] && obj["library"] == "HighCharts" &&obj["chartDescription"]["title"]) {
title = obj["chartDescription"]["title"]["text"]; title = obj["chartDescription"]["title"]["text"];
obj["chartDescription"]["title"]["text"] = ChartHelper.prefix + "title" + ChartHelper.suffix; 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) { private extractSubTitle(obj, indicatorPath: IndicatorPath) {
@ -373,26 +484,32 @@ export class IndicatorUtils {
private extractXTitle(obj, indicatorPath: IndicatorPath) { private extractXTitle(obj, indicatorPath: IndicatorPath) {
let title = ""; let title = "";
if (obj["chartDescription"]["xAxis"]["title"]) { if (obj["library"] && obj["library"] == "HighCharts" && obj["chartDescription"]["xAxis"]["title"]) {
title = obj["chartDescription"]["xAxis"]["title"]["text"]; title = obj["chartDescription"]["xAxis"]["title"]["text"];
obj["chartDescription"]["xAxis"]["title"]["text"] = ChartHelper.prefix + "xAxisTitle" + ChartHelper.suffix; 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) { private extractYTitle(obj, indicatorPath: IndicatorPath) {
let title = ""; let title = "";
if (obj["chartDescription"]["yAxis"]["title"]) { if (obj["library"] && obj["library"] == "HighCharts" && obj["chartDescription"]["yAxis"]["title"]) {
title = obj["chartDescription"]["yAxis"]["title"]["text"]; title = obj["chartDescription"]["yAxis"]["title"]["text"];
obj["chartDescription"]["yAxis"]["title"]["text"] = ChartHelper.prefix + "yAxisTitle" + ChartHelper.suffix; 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) { private addResultFilters(obj, indicatorPath: IndicatorPath) {
let resultTypes = ["publication", "software", "dataset", "other"]; let resultTypes = ["publication", "software", "dataset", "other"];
let index = -1; 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"]) { if (!query["query"]["select"]) {
return; return;
} }