2017-12-19 13:53:46 +01:00
import { Injectable } from '@angular/core' ;
import { Http , Response } from '@angular/http' ;
2019-06-03 15:20:36 +02:00
import { HttpClient , HttpErrorResponse } from "@angular/common/http" ;
import { Observable , throwError } from 'rxjs' ;
2017-12-19 13:53:46 +01:00
import { OrganizationInfo } from '../utils/entities/organizationInfo' ;
2019-06-03 15:20:36 +02:00
2018-02-05 14:14:59 +01:00
import { EnvProperties } from '../utils/properties/env-properties' ;
2019-06-03 15:20:36 +02:00
import { map } from "rxjs/operators" ;
2017-12-19 13:53:46 +01:00
@Injectable ( )
export class OrganizationService {
2019-06-03 15:20:36 +02:00
constructor ( private http : HttpClient ) { }
2017-12-19 13:53:46 +01:00
organizationInfo : OrganizationInfo ;
2018-02-05 14:14:59 +01:00
getOrganizationInfo ( id : string , properties :EnvProperties ) : any {
2018-05-14 13:42:38 +02:00
let url = properties . searchAPIURLLAst + 'resources?format=json&query=( (oaftype exact organization) and (reldatasourcecompatibilityid=driver or reldatasourcecompatibilityid=driver-openaire2.0 or reldatasourcecompatibilityid=openaire2.0 or reldatasourcecompatibilityid=openaire3.0 or reldatasourcecompatibilityid=openaire2.0_data or reldatasourcecompatibilityid=hostedBy or relprojectid=* or reldatasourcecompatibilityid = native)) and ( objIdentifier =' + id + ')' ;
2017-12-19 13:53:46 +01:00
2018-02-05 14:14:59 +01:00
return this . http . get ( ( properties . useCache ) ? ( properties . cacheUrl + encodeURIComponent ( url ) ) : url )
2019-06-03 15:20:36 +02:00
//.map(res => <any> res.json())
. pipe ( map ( res = > res [ 'results' ] [ 0 ] ) )
2017-12-19 13:53:46 +01:00
//.map(res => res[0]['result']['metadata']['oaf:entity']['oaf:organization'])
//.map(res => [res, res['rels']['rel']])
2019-06-03 15:20:36 +02:00
. pipe ( map ( res = > this . parseOrganizationInfo ( res ) ) ) ;
2017-12-19 13:53:46 +01:00
}
2018-02-05 14:14:59 +01:00
2019-02-12 12:15:21 +01:00
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 )
2019-06-03 15:20:36 +02:00
//.map(res => <any> res.json())
. pipe ( map ( res = > res [ 'result' ] [ 'metadata' ] [ 'oaf:entity' ] [ 'oaf:organization' ] ) )
. pipe ( map ( res = > this . parseOrganizationNameAndUrl ( res ) ) ) ;
2019-02-12 12:15:21 +01:00
}
2019-06-03 15:20:36 +02:00
private handleError ( error : HttpErrorResponse ) {
2017-12-19 13:53:46 +01:00
// 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 ) ;
2019-06-03 15:20:36 +02:00
return throwError ( error || 'Server error' ) ;
2017-12-19 13:53:46 +01:00
}
parseOrganizationInfo ( data : any ) : any {
this . organizationInfo = new OrganizationInfo ( ) ;
let organization ;
let relations ;
2019-06-06 11:15:54 +02:00
this . organizationInfo . objIdentifier = data [ "result" ] [ "header" ] [ "dri:objIdentifier" ] ;
2017-12-19 13:53:46 +01:00
if ( data != null ) {
organization = data [ 'result' ] [ 'metadata' ] [ 'oaf:entity' ] [ 'oaf:organization' ] ;
relations = data [ 'result' ] [ 'metadata' ] [ 'oaf:entity' ] [ 'oaf:organization' ] [ 'rels' ] [ 'rel' ] ;
} else {
return null ;
}
if ( organization != null ) {
if ( organization . hasOwnProperty ( "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 . name ;
}
if ( organization . hasOwnProperty ( "country" ) ) {
this . organizationInfo . country = organization [ 'country' ] . classname ;
}
}
//Comment Parsing Projects info
/ *
if ( data [ 1 ] != null ) {
let counter ;
let length = relations . length != undefined ? relations.length : 1 ;
for ( let i = 0 ; i < length ; i + + ) {
let relation = relations . length != undefined ? relations [ i ] : relations ;
if ( relation . hasOwnProperty ( "to" ) ) {
if ( relation [ 'to' ] . class == "isParticipant" ) {
if ( relation . hasOwnProperty ( "funding" ) ) {
if ( relation [ 'funding' ] . hasOwnProperty ( "funder" ) ) {
if ( this . organizationInfo . projects == undefined ) {
this . organizationInfo . projects = new Map < string ,
{ "name" : string , "id" : string , "code" : string ,
"acronym" : string , "funder" : string , "funderId" : string ,
"fundingStream" : string , "fundingLevel1" : string , "fundingLevel2" : string ,
"sc39" : string , "startDate" : string , "endDate" : string } [ ] > ( ) ;
}
if ( ! this . organizationInfo . projects . has ( relation [ 'funding' ] [ 'funder' ] . name ) ) {
2019-06-12 16:13:56 +02:00
this . organizationInfo . projects . setValues ( relation [ 'funding' ] [ 'funder' ] . name ,
2017-12-19 13:53:46 +01:00
new Array < { "name" : string , "id" : string , "code" : string ,
"acronym" : string , "funder" : string , "funderId" : string ,
"fundingStream" : string , "fundingLevel1" : string , "fundingLevel2" : string ,
"sc39" : string , "startDate" : string , "endDate" : string } > ( ) ) ;
}
counter = this . organizationInfo . projects . get ( relation [ 'funding' ] [ 'funder' ] . name ) . length ;
this . organizationInfo . projects . get ( relation [ 'funding' ] [ 'funder' ] . name ) [ counter ] =
{ "name" : "" , "id" : "" , "code" : "" ,
"acronym" : "" , "funder" : "" , "funderId" : "" ,
"fundingStream" : "" , "fundingLevel1" : "" , "fundingLevel2" : "" ,
"sc39" : "" , "startDate" : "" , "endDate" : "" } ;
//let url = "";
if ( relation [ 'to' ] . content != null && relation [ 'to' ] . content != "" ) {
this . organizationInfo . projects . get ( relation [ 'funding' ] [ 'funder' ] . name ) [ counter ] [ 'id' ] = relation [ 'to' ] . content ;
//url = OpenaireProperties.getsearchLinkToProject()+relation['to'].content;
}
this . organizationInfo . projects . get ( relation [ 'funding' ] [ 'funder' ] . name ) [ counter ] [ 'name' ] = relation . title ;
//this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['url'] = url;
this . organizationInfo . projects . get ( relation [ 'funding' ] [ 'funder' ] . name ) [ counter ] [ 'code' ] = relation . code ;
this . organizationInfo . projects . get ( relation [ 'funding' ] [ 'funder' ] . name ) [ counter ] [ 'acronym' ] = relation . acronym ;
this . organizationInfo . projects . get ( relation [ 'funding' ] [ 'funder' ] . name ) [ counter ] [ 'funder' ] = relation [ 'funding' ] [ 'funder' ] . shortname ;
this . organizationInfo . projects . get ( relation [ 'funding' ] [ 'funder' ] . name ) [ counter ] [ 'funderId' ] = relation [ 'funding' ] [ 'funder' ] . id ;
if ( relation [ 'funding' ] . hasOwnProperty ( "funding_level_0" ) ) {
this . organizationInfo . projects . get ( relation [ 'funding' ] [ 'funder' ] . name ) [ counter ] [ 'fundingStream' ] = relation [ 'funding' ] [ 'funding_level_0' ] . name ;
}
if ( relation [ 'funding' ] . hasOwnProperty ( "funding_level_1" ) ) {
this . organizationInfo . projects . get ( relation [ 'funding' ] [ 'funder' ] . name ) [ counter ] [ 'fundingLevel1' ] = relation [ 'funding' ] [ 'funding_level_1' ] . name ;
}
if ( relation [ 'funding' ] . hasOwnProperty ( "funding_level_2" ) ) {
this . organizationInfo . projects . get ( relation [ 'funding' ] [ 'funder' ] . name ) [ counter ] [ 'fundingLevel2' ] = relation [ 'funding' ] [ 'funding_level_2' ] . name ;
}
//this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['sc39'] =
//this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['startDate'] =
//this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['endDate'] =
}
}
}
} / * else if ( relation [ 'to' ] . class == "isProvidedBy" ) {
if ( this . organizationInfo . dataProviders == undefined ) {
this . organizationInfo . dataProviders = new Array < { "name" : string , "url" : string , "type" : string , "websiteUrl" : string , "organizations" : { "name" : string , "url" : string } [ ] } > ( ) ;
}
counter = this . organizationInfo . dataProviders . length ;
this . organizationInfo . dataProviders [ counter ] = { "name" : "" , "url" : "" , "type" : "" , "websiteUrl" : "" , "organizations" : [ ] }
let url = "" ;
if ( relation [ 'to' ] . content != null && relation [ 'to' ] . content != "" ) {
url = OpenaireProperties . getsearchLinkToDataProvider ( ) + relation [ 'to' ] . content ;
}
this . organizationInfo . dataProviders [ counter ] [ 'name' ] = relation . officialname ;
this . organizationInfo . dataProviders [ counter ] [ 'url' ] = url ;
if ( relation . hasOwnProperty ( "datasourcetype" ) ) {
this . organizationInfo . dataProviders [ counter ] [ 'type' ] = relation [ 'datasourcetype' ] . classname ;
}
this . organizationInfo . dataProviders [ counter ] [ 'websiteUrl' ] = relation . websiteurl ;
} * /
/ * - - - - - >
}
}
}
* /
return this . organizationInfo ;
}
2019-02-12 12:15:21 +01:00
parseOrganizationNameAndUrl ( organization : any ) : any {
let title : { "name" : string , "url" : string } = { "name" : "" , "url" : "" } ;
if ( organization != null ) {
if ( organization . hasOwnProperty ( "websiteurl" ) ) {
title = { "name" : organization . legalshortname , "url" : organization . websiteurl } ;
} else {
title = { "name" : organization . legalshortname , "url" : '' } ;
}
if ( title . name == '' ) {
title . name = organization . legalname ;
}
}
return title ;
}
2017-12-19 13:53:46 +01:00
}