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 { ParsingFunctions } from '../landingPages/landing-utils/parsingFunctions.class'; import{EnvProperties} from '../utils/properties/env-properties'; @Injectable() export class SearchPublicationsService { private sizeOfDescription: number = 270; public parsingFunctions: ParsingFunctions = new ParsingFunctions(); constructor(private http: Http ) {} searchPublications (params: string, refineParams:string, page: number, size: number, refineFields:string[] , properties:EnvProperties):any { let link = properties.searchAPIURLLAst+"publications"; 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 => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "publication")]); } searchPublicationById (id: string, properties:EnvProperties ):any { let url = properties.searchAPIURLLAst+"publications/"+id+"?format=json"; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) .map(res => res.json()) .map(res => this.parseResults(res)); } searchAggregators (id: string, params: string, refineParams:string, page: number, size: number, properties:EnvProperties ):any { let link = properties.searchAPIURLLAst+"publications"; let url = link+"?"+"&format=json"; if(params!= null && params != '' ) { url += params; } if(refineParams!= null && refineParams != '' ) { url += refineParams; } url += "&page="+(page-1)+"&size="+size; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) .map(res => res.json()) .map(res => this.parseRefineResults(id, res['refineResults'])); } searchPublicationsByDois (DOIs: string[], refineParams:string, page: number, size: number, refineFields:string[], properties:EnvProperties ):any { let link = properties.searchAPIURLLAst+"publications"; let url = link+"?"+"&format=json&"; var doisParams = ""; for(var i =0 ;i < DOIs.length; i++){ doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"'; } if(doisParams.length > 0){ url +="&"+doisParams; } if(refineParams!= null && refineParams != '' ) { url += refineParams; } url += "&page="+(page-1)+"&size="+size; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) .map(res => res.json()) //.do(res => console.info(res)) .map(res => [res['meta'].total, this.parseResults(res['results']),RefineResultsUtils.parse(res['refineResults'],refineFields, "publication")]); } advancedSearchPublications (params: string, page: number, size: number, properties:EnvProperties ):any { let url = properties.searchResourcesAPIURL; var basicQuery = "(oaftype exact result) and (resulttypeid exact publication) "; 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()) //.do(res => console.info(res)) .map(res => [res['meta'].total, this.parseResults(res['results'])]); } searchPublicationsForEntity (params: string, page: number, size: number, properties:EnvProperties):any { let link = properties.searchAPIURLLAst; let url = link+params+"/publications"+ "?format=json"; url += "&page="+(page-1)+"&size="+size; return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url) .map(res => res.json()) .map(res => [res['meta'].total, this.parseResults(res['results'])]); } searchPublicationsForDataproviders(params: string, page: number, size: number, properties:EnvProperties):any { let link = properties.searchAPIURLLAst; let url = link+params+ "&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'])]); } /* searchPublicationsCSV (params: string, refineParams:string, page: number, size: number):any { let link = properties.searchAPIURLLAst+"publications"; 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'])); } */ parseResults(data: any): SearchResult[] { let results: SearchResult[] = []; let length = Array.isArray(data) ? data.length : 1; for(let i=0; i(); result.types = new Array(); let types = new Set(); let counter = 0; let instance; let length = Array.isArray(resData['children']['instance']) ? resData['children']['instance'].length : 1; for(let i=0; i(); } result['authors'].push({"name": relation.fullname, "id": relation['to'].content}); } else */if(relation['to'].class == "isProducedBy") { result['projects'] = this.parseProjects(result['projects'], relation); } } } } if(resData.hasOwnProperty("creator") && resData['creator'] != null) { if(result['authors'] == undefined) { result['authors'] = new Array(); } let authors = resData['creator']; let length = Array.isArray(authors) ? authors.length : 1; for(let i=0; i this.sizeOfDescription) { result.description = result.description.substring(0, this.sizeOfDescription) + "..."; } result.embargoEndDate = resData.embargoenddate; results.push(result); } return results; } parseProjects(projects: { "id": string, "acronym": string, "title": string, "funderShortname": string, "funderName": string, "code": string }[], relation: any ) : { "id": string, "acronym": string, "title": string, "funderShortname": string, "funderName": string, "code": string }[] { if(projects == undefined) { projects = new Array< { "id": string, "acronym": string, "title": string, "funderShortname": string, "funderName": string, "code": string }>(); } let countProjects = projects.length; projects[countProjects] = { "id": "", "acronym": "", "title": "", "funderShortname": "", "funderName": "", "code": "" } if(relation.title != 'unidentified') { projects[countProjects]['id'] = /*OpenaireProperties.getsearchLinkToProject() + */relation['to'].content; projects[countProjects]['acronym'] = relation.acronym; projects[countProjects]['title'] = relation.title; projects[countProjects]['code'] = relation.code; } else { projects[countProjects]['id'] = ""; projects[countProjects]['acronym'] = ""; projects[countProjects]['title'] = ""; projects[countProjects]['code'] = ""; } if(relation.hasOwnProperty("funding")) { let fundingLength = Array.isArray(relation['funding']) ? relation['funding'].length : 1; for(let z=0; z res.json()) .map(res => res.total); } numOfEntityPublications(id: string, entity: string, properties:EnvProperties):any { var parameters: string = ""; if(entity == "project") { parameters = "projects/"+id+"/publications/count"; } let url = properties.searchAPIURLLAst+parameters+"?format=json"; return this.numOfPublications(url, properties); } numOfSearchPublications(params: string, properties:EnvProperties):any { let url = properties.searchAPIURLLAst+"publications/count?format=json"; if(params != "") { url += "&q=" + params; } return this.numOfPublications(url, properties); } /* private quote(word: any): string { return '"'+word+'"'; } */ }