diff --git a/src/app/topic/indicators.component.html b/src/app/topic/indicators.component.html
index 54bf05f..317ea62 100644
--- a/src/app/topic/indicators.component.html
+++ b/src/app/topic/indicators.component.html
@@ -365,6 +365,14 @@
diff --git a/src/app/utils/indicator-utils.ts b/src/app/utils/indicator-utils.ts
index a757dae..5afff2b 100644
--- a/src/app/utils/indicator-utils.ts
+++ b/src/app/utils/indicator-utils.ts
@@ -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;
}