import {Injectable} from '@angular/core'; import {Http, Response} from '@angular/http'; import {Observable} from 'rxjs/Observable'; import 'rxjs/add/observable/of'; import 'rxjs/add/operator/do'; import 'rxjs/add/operator/share'; import {SearchResult} from '../utils/entities/searchResult'; import {RefineResultsUtils} from './servicesUtils/refineResults.class'; import{EnvProperties} from '../utils/properties/env-properties'; import {StringUtils} from '../utils/string-utils.class'; @Injectable() export class SearchProjectsService { private sizeOfDescription: number = 270; constructor(private http: Http ) {} searchProjects (params: string, refineParams:string, page: number, size: number, refineFields:string[] , properties:EnvProperties ):any { let link = properties.searchAPIURLLAst+"projects"; 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()) .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "project")]); } getProjectsforDataProvider (datasourceId: string, page: number, size: number, properties:EnvProperties ):any { let url = properties.searchResourcesAPIURL; var basicQuery = "(oaftype exact project) " url += "?query="; if(datasourceId!= null && datasourceId != '' ) { url +=" ( "+basicQuery+ " ) " +" and (collectedfromdatasourceid exact \"" + datasourceId + "\")"; }else{ url +=" ( "+basicQuery+ " ) "; } url += "&page="+(page-1)+"&size="+size; url += "&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) .map(res => res.json()) .map(res => [res['meta'].total, this.parseResults(res['results'])]); } advancedSearchProjects (params: string, page: number, size: number, properties:EnvProperties ):any { let url = properties.searchResourcesAPIURL; var basicQuery = "(oaftype exact project) " url += "?query="; if(params!= null && params != '' ) { url +=" ( "+basicQuery+ " ) " +" and (" + params + ")"; }else{ url +=" ( "+basicQuery+ " ) "; } url += "&page="+(page-1)+"&size="+size; url += "&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) .map(res => res.json()) .map(res => [res['meta'].total, this.parseResults(res['results'])]); } getProjectsForOrganizations (organizationId: string, filterquery: string, page: number, size: number, refineFields:string[] , properties:EnvProperties ):any { let url = properties.searchResourcesAPIURL; var basicQuery = "(oaftype exact project) " url += "?query="; if(filterquery!= null && filterquery != '' ) { url +="( ( "+basicQuery+ " ) and (relorganizationid exact \"" + organizationId + "\")"+" " + filterquery + ")"; }else{ url +=" (( "+basicQuery+ " ) " +" and (relorganizationid exact \"" + organizationId + "\"))"; } if(refineFields!= null && refineFields.length > 0 ) { url +="&refine=true"; for(let i=0; i< refineFields.length ; i++ ){ url +="&fields="+refineFields[i]; } } url += "&page="+(page-1)+"&size="+size; url += "&format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) .map(res => res.json()) .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "project")]); } getFunders(properties:EnvProperties ):any { let url = properties.searchAPIURLLAst+"projects?refine=true&fields=funder&size=0"+ "&format=json";; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) .map(res => res.json()) .map(res => [res['meta'].total, res['refineResults']['funder']]); } searchForProjectsObs(keyword:string, funderId:string, properties:EnvProperties ):any { let url = 'search?action=search&sTransformer=projects_openaire&query='+ '%28oaftype+exact+project%29+and+%28%28projecttitle+%3D+%22'+keyword+'%22%29+or+%28projectacronym+%3D+%22'+keyword+'%22%29+or+%28projectcode+%3D+%22'+keyword+'%22%29%29+and+%28funder+exact+'+funderId+'%29&size=10&locale=en_GB&format=json'; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url).toPromise() .then(request =>{ return (request.json().response.results)?request.json().response.results.result:request.json().response.result; }) ; } parseResults(data: any): SearchResult[] { let results: SearchResult[] = []; let length = Array.isArray(data) ? data.length : 1; for(let i=0; i(); } let countOrganizations = result['organizations'].length; result['organizations'][countOrganizations] = { "name": "", "id": "" } result['organizations'][countOrganizations]['id'] = /*OpenaireProperties.getsearchLinkToOrganization() + */relation['to'].content; if(relation.legalshortname) { result['organizations'][countOrganizations]['name'] = relation.legalshortname; } else { result['organizations'][countOrganizations]['name'] = relation.legalname; } } } } } if(resData.hasOwnProperty("fundingtree")) { /*let funderSet: Set; if(result['funders'] == undefined) { result['funders'] = new Array< {"funderShortname": string, "funderName": string}>(); funderSet = new Set(); } let fundingLength = Array.isArray(resData['fundingtree']) ? resData['fundingtree'].length : 1; for(let z=0; z res.json()) .map(res => res.total); } numOfEntityProjects(id: string, entity: string, properties:EnvProperties ):any { //let url = properties.searchAPIURLLAst+params+(params.indexOf("?") == -1 ?"?":"&")+"format=json"; var parameters: string = ""; if(entity == "organization") { parameters = "organizations/"+id+"/projects/count"; } let url = properties.searchAPIURLLAst+parameters+ "?format=json"; return this.numOfProjects(url, properties); } numOfSearchProjects(params: string, properties:EnvProperties ):any { let url = properties.searchAPIURLLAst+"projects/count?format=json"; if(params != "") { url += "&q=" + StringUtils.URIEncode(params); } return this.numOfProjects(url, properties); } }