import {Injectable} from '@angular/core'; import {HttpClient, HttpErrorResponse} from "@angular/common/http"; import {throwError} from 'rxjs'; import {OrganizationInfo} from '../utils/entities/organizationInfo'; import{EnvProperties} from '../utils/properties/env-properties'; import {map} from "rxjs/operators"; import {ParsingFunctions} from "../landingPages/landing-utils/parsingFunctions.class"; import {properties} from "../../../environments/environment"; @Injectable() export class OrganizationService { public parsingFunctions: ParsingFunctions = new ParsingFunctions(); constructor(private http: HttpClient ) {} organizationInfo: OrganizationInfo; getOrganizationInfo (id: string, properties:EnvProperties):any { let url = properties.searchAPIURLLAst+'organizations/'+id+'?format=json'; //'&query=( (oaftype exact organization) and (reldatasourcecompatibilityid=driver or reldatasourcecompatibilityid=driver-openaire2.0 or reldatasourcecompatibilityid=openaire2.0 or reldatasourcecompatibilityid=openaire3.0 or reldatasourcecompatibilityid=openaire4.0 or reldatasourcecompatibilityid=openaire2.0_data or reldatasourcecompatibilityid=hostedBy or relprojectid=* or reldatasourcecompatibilityid = native)) and ( objIdentifier ='+id+')'; return this.http.get((properties.useCache)? (properties.cacheUrl +encodeURIComponent(url)): url) //.map(res => res.json()) //.pipe(map(res => res['results'])) //.pipe(map(res => res['result']['metadata']['oaf:entity']['oaf:organization'])) //.map(res => [res, res['rels']['rel']]) .pipe(map(res => this.parseOrganizationInfo(res))); } getOrganizationNameAndUrlById(id: string, properties: EnvProperties): any { let url = properties.searchAPIURLLAst+"organizations/"+id+"?format=json"; return this.http.get((properties.useCache) ? (properties.cacheUrl+encodeURIComponent(url)): url) //.map(res => res.json()) // .pipe(map(res => res['result']['metadata']['oaf:entity']['oaf:organization'])) .pipe(map(res => this.parseOrganizationNameAndUrl(res))); } private handleError (error: HttpErrorResponse) { // in a real world app, we may send the error to some remote logging infrastructure // instead of just logging it to the console console.log(error); return throwError(error || 'Server error'); } parseOrganizationInfo (data: any):any { if(data == null) { return null; } this.organizationInfo = new OrganizationInfo(); let organization; if(data["header"]) { this.organizationInfo.relcanId = ParsingFunctions.parseRelCanonicalId(data,"organization"); this.organizationInfo.objIdentifier = data["header"]["id"]; if(this.organizationInfo.objIdentifier.startsWith("openorgs____::")) { this.organizationInfo.relcanId = this.organizationInfo.objIdentifier; } } if(data["organization"]) { organization = data["organization"]; if (organization["websiteurl"]) { this.organizationInfo.title = {"name": organization.legalshortname, "url": organization.websiteurl}; } else { this.organizationInfo.title = {"name": organization.legalshortname, "url": ''}; } this.organizationInfo.name = organization.legalname; if (!this.organizationInfo.title.name || this.organizationInfo.title.name == '') { this.organizationInfo.title.name = this.organizationInfo.name; } if (organization["country"]) { this.organizationInfo.country = organization['country'].label; } } if(data["pid"]) { this.organizationInfo.identifiers = this.parsingFunctions.parseIdentifiers(data['pid']); } if(data["links"]) { let links = data['links']; let relLength = Array.isArray(links) ? links.length : 1; for(let i=0; i