import {Injectable} from '@angular/core'; import {Http, Response} from '@angular/http'; import {HttpClient} from "@angular/common/http"; import {Observable} from 'rxjs'; import {SearchResult} from '../utils/entities/searchResult'; import {RefineResultsUtils} from './servicesUtils/refineResults.class'; import {StringUtils} from '../utils/string-utils.class'; import{EnvProperties} from '../utils/properties/env-properties'; import {map} from "rxjs/operators"; @Injectable() export class SearchDataprovidersService { constructor(private http: HttpClient ) {} searchDataproviders (params: string, refineParams:string, page: number, size: number, refineFields:string[], properties:EnvProperties, usedBy: string="search" ):any { let link = properties.searchAPIURLLAst+"datasources"; let url = link+"?"; if(params!= null && params != '' ) { url += params; } if(refineParams!= null && refineParams != '' ) { url += refineParams; } url += "&page="+(page-1)+"&size="+size+"&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) //.map(res => res.json()) //.do(res => console.info(res)) .pipe(map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "datasource", usedBy)])); } //((oaftype exact datasource) and(collectedfromdatasourceid exact "openaire____::47ce9e9f4fad46e732cff06419ecaabb")) advancedSearchDataproviders (params: string, page: number, size: number, properties: EnvProperties ):any { let url = properties.searchResourcesAPIURL; var basicQuery = "(oaftype exact datasource) " + 'and (datasourcecompatibilityid <> "UNKNOWN")'; url += "?query="; if(params!= null && params != '' ) { url +=" ( "+basicQuery+ " ) " +" and (" + params + ")"; }else{ url +=" ( "+basicQuery+ " ) "; } url += "&page="+(page-1)+"&size="+size+"&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) //.map(res => res.json()) //.do(res => console.info(res)) .pipe(map(res => [res['meta'].total, this.parseResults(res['results'])])) } searchCompatibleDataprovidersTable ( properties:EnvProperties):any { let size: number = 0; let url: string= properties.searchResourcesAPIURL; url += '?query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other) not(datasourcetypeuiid exact "pubsrepository::journal") not(datasourcetypeuiid exact "aggregator::pubsrepository::journals"))'; url += "&page=0&size=0&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) //.map(res => res.json()) .pipe(map(res => res['meta'].total)); } searchCompatibleDataproviders (params: string,refineParams:string, page: number, size: number, refineFields:string[], properties:EnvProperties ):any { let url: string = properties.searchResourcesAPIURL; url += '?query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other) not(datasourcetypeuiid exact "pubsrepository::journal") not(datasourcetypeuiid exact "aggregator::pubsrepository::journals"))'; if(params!= null && params != '' ) { url += params; } if(refineParams!= null && refineParams != '' ) { url += refineParams; } url += "&page="+(page-1)+"&size="+size+"&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) //.map(res => res.json()) //.do(res => console.info(res)) .pipe(map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "datasource")])); } searchEntityRegistriesTable (properties:EnvProperties):any { let size: number = 0; let url: string= properties.searchResourcesAPIURL; url += "?query=((oaftype exact datasource) and(datasourcetypeuiid = other))"; url += "&page=0&size=0&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) //.map(res => res.json()) .pipe(map(res => res['meta'].total)); } searchEntityRegistries (params: string,refineParams:string, page: number, size: number, refineFields:string[], properties:EnvProperties ):any { let url = properties.searchResourcesAPIURL; url += "?query=((oaftype exact datasource) and(datasourcetypeuiid = other))"; if(params!= null && params != '' ) { url += params; } if(refineParams!= null && refineParams != '' ) { url += refineParams; } url += "&page="+(page-1)+"&size="+size+"&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) //.map(res => res.json()) //.do(res => console.info(res)) .pipe(map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "datasource")])); } searchJournalsTable ( properties:EnvProperties):any { let size: number = 0; let url: string= properties.searchResourcesAPIURL; url += '?query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) and (datasourcetypeuiid exact "pubsrepository::journal" or datasourcetypeuiid exact "aggregator::pubsrepository::journals" ))'; url += "&page=0&size=0&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url)//.map(res => res.json()) .pipe(map(res => res['meta'].total)); } searchJournals (params: string,refineParams:string, page: number, size: number, refineFields:string[] , properties:EnvProperties):any { let url: string = properties.searchResourcesAPIURL; //url += "?query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other))" url += '?query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) and (datasourcetypeuiid exact "pubsrepository::journal" or datasourcetypeuiid exact "aggregator::pubsrepository::journals" ))'; if(params!= null && params != '' ) { url += params; } if(refineParams!= null && refineParams != '' ) { url += refineParams; } url += "&page="+(page-1)+"&size="+size+"&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) //.map(res => res.json()) //.do(res => console.info(res)) .pipe(map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "datasource")])); } searchDataprovidersForDeposit (id: string,type:string, page: number, size: number, properties:EnvProperties):any { let link = properties.searchResourcesAPIURL; var compatibilities = ""; if(type == "Research Data"){ //compatibilities = " and (datasourcecompatibilityid <> UNKNOWN) and (datasourcecompatibilityid = openaire2.0_data)" compatibilities = " and (datasourcecompatibilityid = openaire2.0_data)"; }else if(type == "Publications"){ //compatibilities = " and (datasourcecompatibilityid <> UNKNOWN) and (datasourcecompatibilityid <> openaire2.0_data)" compatibilities = " and (datasourcecompatibilityid <> openaire2.0_data)"; } let url = link+"?query=(((deletedbyinference = false) AND (oaftype exact datasource)) "+((compatibilities && compatibilities.length > 0)?" "+compatibilities+" ":"")+") and (relorganizationid exact \""+id+"\")"; url += "&page="+(page-1)+"&size="+size+"&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) //.map(res => res.json()) .pipe(map(res => [res['meta'].total, this.parseResults(res['results'])])); } searchDataprovidersForDepositSearch(params: string, refineParams:string, page: number, size: number, refineFields:string[], properties:EnvProperties, usedBy: string="search" ):any { let link = properties.searchResourcesAPIURL; let url = link+"?query=((deletedbyinference = false) AND (oaftype exact datasource)) "+params; if(refineParams!= null && refineParams != '' ) { url += refineParams; } url += "&page="+(page-1)+"&size="+size+"&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) .pipe(map(res => [res['meta'].total, this.parseResults(res['results']), RefineResultsUtils.parse(res['refineResults'], refineFields, "datasource", usedBy)])); } searchDataProvidersBySubjects(keyword:string, type:string, page: number, size: number, properties:EnvProperties):any { let link = properties.searchResourcesAPIURL; var compatibilities = ""; if(type == "Research Data"){ compatibilities = " and (datasourcecompatibilityid <> UNKNOWN) and (datasourcecompatibilityid = openaire2.0_data)" }else if(type == "Publications"){ compatibilities = " and (datasourcecompatibilityid <> UNKNOWN) and (datasourcecompatibilityid <> openaire2.0_data)" } let url = link+"?query=(((deletedbyinference = false) AND (oaftype exact datasource)) "+((compatibilities && compatibilities.length > 0)?" "+ compatibilities+" ":"")+") "+ " and (datasourcesubject all "+'"'+keyword+'"'+") " ; url += "&page="+(page-1)+"&size="+size+"&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) //.map(res => res.json()) .pipe(map(res => [res['meta'].total, this.parseResults(res['results'])])); } getDataProvidersforEntityRegistry(datasourceId: string, page: number, size: number , properties:EnvProperties):any { let url = properties.searchResourcesAPIURL; var basicQuery = "(oaftype exact datasource) " url += "?query="; if(datasourceId!= null && datasourceId != '' ) { url +=" ( "+basicQuery+ " ) " +" and (collectedfromdatasourceid exact \"" + datasourceId + "\")"; }else{ url +=" ( "+basicQuery+ " ) "; } url += "&page="+(page-1)+"&size="+size+"&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) //.map(res => res.json()) .pipe(map(res => [res['meta'].total, this.parseResults(res['results'])])); } searchDataprovidersForEntity (params: string, page: number, size: number, properties:EnvProperties):any { let link = properties.searchAPIURLLAst; let url = link+params+"/datasources?format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) //.map(res => res.json()) .pipe(map(res => [res['meta'].total, this.parseResults(res['results'])])); } /* searchDataprovidersCSV (params: string, refineParams:string, page: number, size: number):any { let link = OpenaireProperties. getSearchAPIURLLast()+"datasources"; let url = link+"?"; if(params!= null && params != '' ) { url += params; } if(refineParams!= null && refineParams != '' ) { url += refineParams; } url += "&page="+(page-1)+"&size="+size+"&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) .map(res => res.json()) //.do(res => console.info(res)) .map(res => this.parseResultsCSV(res['results'])); } */ /* searchEntityRegistriesCSV (params: string,refineParams:string, page: number, size: number):any { let url = properties.searchAPIURLLAst; url += "?query=((oaftype exact datasource) and(datasourcetypeuiid = other))" if(params!= null && params != '' ) { url += params; } if(refineParams!= null && refineParams != '' ) { url += refineParams; } url += "&page="+(page - 1)+"&size="+size+"&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) .map(res => res.json()) //.do(res => console.info(res)) .map(res => this.parseResultsCSV(res['results'])); } */ /* searchCompatibleDataprovidersCSV (params: string,refineParams:string, page: number, size: number):any { let url = properties.searchAPIURLLAst; url += "?query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other))" if(params!= null && params != '' ) { url += params; } if(refineParams!= null && refineParams != '' ) { url += refineParams; } url += "&page="+(page - 1)+"&size="+size+"&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) .map(res => res.json()) //.do(res => console.info(res)) .map(res => this.parseResultsCSV(res['results'])); } */ parseResults(data: any): SearchResult[] { let results: SearchResult[] = []; let length = Array.isArray(data) ? data.length : 1; for(let i=0; i = new Set(); let relLength = Array.isArray(resData['rels']['rel']) ? resData['rels']['rel'].length : 1; for(let i=0; i res.json()) .pipe(map(res => res['total'])); } numOfEntityDataproviders(id: string, entity: string, properties:EnvProperties):any { var parameters = ""; if(entity == "organization") { parameters = "organizations/"+id+"/datasources/count"; } let url = properties.searchAPIURLLAst+parameters+"?format=json"; return this.numOfDataproviders(url, properties); } numOfSearchDataproviders(params: string, properties:EnvProperties, refineQuery:string=null):any { let url: string = properties.searchAPIURLLAst+"datasources/count?format=json"; if(params != "") { url += "&q=" + StringUtils.URIEncode(params); } if(refineQuery!= null && refineQuery != '' ) { url += refineQuery; } return this.numOfDataproviders(url, properties); } /* private quote(word: any): string { return '"'+word+'"'; } */ getDataprovidersTableResults (queryType:string, properties:EnvProperties):any { let size: number = 0; let url: string= properties.searchAPIURLLAst; if(queryType == "compatible"){ url += '?query=((oaftype exact datasource) not (datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other) not(datasourcetypeuiid exact "pubsrepository::journal") not(datasourcetypeuiid exact "aggregator::pubsrepository::journals"))'; }else if(queryType=="registries"){ url += "?query=((oaftype exact datasource) and(datasourcetypeuiid = other))"; }else if(queryType=="journals"){ url += '?query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) and (datasourcetypeuiid exact "pubsrepository::journal" or datasourcetypeuiid exact "aggregator::pubsrepository::journals" ))'; } url += "&page=0&size=0&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) //.map(res => res.json()) .pipe(map(res => res['meta'].total)); } }