Project

General

Profile

1
import {Injectable} from '@angular/core';
2
import {Http, Response} from '@angular/http';
3
import {Observable}     from 'rxjs/Observable';
4
import {OrganizationInfo} from '../utils/entities/organizationInfo';
5
import 'rxjs/add/observable/of';
6
import 'rxjs/add/operator/do';
7
import 'rxjs/add/operator/share';
8
import{EnvProperties} from '../utils/properties/env-properties';
9

    
10
@Injectable()
11
export class OrganizationService {
12

    
13
    constructor(private http: Http ) {}
14

    
15
    organizationInfo: OrganizationInfo;
16

    
17
    getOrganizationInfo (id: string, properties:EnvProperties):any {
18
         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+')';
19

    
20
        return this.http.get((properties.useCache)? (properties.cacheUrl +encodeURIComponent(url)): url)
21
                    .map(res => <any> res.json())
22
                    .map(res => res['results'][0])
23
                    //.map(res => res[0]['result']['metadata']['oaf:entity']['oaf:organization'])
24
                    //.map(res => [res, res['rels']['rel']])
25
                    .map(res => this.parseOrganizationInfo(res));
26

    
27

    
28
    }
29

    
30
    getOrganizationNameAndUrlById(id: string, properties: EnvProperties): any {
31
      let url = properties.searchAPIURLLAst+"organizations/"+id+"?format=json";
32

    
33
      return this.http.get((properties.useCache) ? (properties.cacheUrl+encodeURIComponent(url)): url)
34
                  .map(res => <any> res.json())
35
                  .map(res => res['result']['metadata']['oaf:entity']['oaf:organization'])
36
                  .map(res => this.parseOrganizationNameAndUrl(res));
37
    }
38

    
39
    private handleError (error: Response) {
40
    // in a real world app, we may send the error to some remote logging infrastructure
41
    // instead of just logging it to the console
42
        console.log(error);
43
        return Observable.throw(error  || 'Server error');
44
    }
45

    
46
    parseOrganizationInfo (data: any):any {
47
        this.organizationInfo = new OrganizationInfo();
48

    
49
        let organization;
50
        let relations;
51

    
52
        if(data != null) {
53
            organization = data['result']['metadata']['oaf:entity']['oaf:organization'];
54
            relations = data['result']['metadata']['oaf:entity']['oaf:organization']['rels']['rel'];
55
        } else {
56
            return null;
57
        }
58

    
59
        if(organization != null) {
60

    
61
            if(organization.hasOwnProperty("websiteurl")) {
62
                this.organizationInfo.title = {"name": organization.legalshortname, "url": organization.websiteurl};
63
            } else {
64
                this.organizationInfo.title = {"name": organization.legalshortname, "url": ''};
65
            }
66

    
67
            this.organizationInfo.name = organization.legalname;
68

    
69
            if(this.organizationInfo.title.name == '') {
70
                this.organizationInfo.title.name = this.organizationInfo.name;
71
            }
72

    
73
            if(organization.hasOwnProperty("country")) {
74
                this.organizationInfo.country = organization['country'].classname;
75
            }
76
        }
77

    
78
//Comment Parsing Projects info
79
/*
80
        if(data[1] != null) {
81

    
82
            let counter;
83
            let length = relations.length!=undefined ? relations.length : 1;
84

    
85
            for(let i=0; i<length; i++) {
86
                let relation = relations.length!=undefined ? relations[i] : relations;
87
                if(relation.hasOwnProperty("to")) {
88
                    if(relation['to'].class == "isParticipant") {
89
                        if(relation.hasOwnProperty("funding")) {
90
                            if(relation['funding'].hasOwnProperty("funder")) {
91
                                if(this.organizationInfo.projects == undefined) {
92
                                    this.organizationInfo.projects = new Map<string,
93
                                        { "name": string, "id": string, "code": string,
94
                                          "acronym": string, "funder": string, "funderId": string,
95
                                          "fundingStream": string, "fundingLevel1": string, "fundingLevel2": string,
96
                                          "sc39": string, "startDate": string, "endDate": string }[]>();
97
                                }
98

    
99
                                if(!this.organizationInfo.projects.has(relation['funding']['funder'].name)) {
100
                                    this.organizationInfo.projects.set(relation['funding']['funder'].name,
101
                                        new Array<{ "name": string, "id": string, "code": string,
102
                                                    "acronym": string, "funder": string, "funderId": string,
103
                                                    "fundingStream": string, "fundingLevel1": string, "fundingLevel2": string,
104
                                                    "sc39": string, "startDate": string, "endDate": string }>());
105
                                }
106

    
107
                                counter = this.organizationInfo.projects.get(relation['funding']['funder'].name).length;
108
                                this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter] =
109
                                    { "name": "", "id": "", "code": "",
110
                                      "acronym": "", "funder": "", "funderId": "",
111
                                      "fundingStream": "", "fundingLevel1": "", "fundingLevel2": "",
112
                                      "sc39": "", "startDate": "", "endDate": "" };
113

    
114
                                //let url = "";
115
                                if(relation['to'].content != null && relation['to'].content != "") {
116
                                    this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['id'] = relation['to'].content;
117
                                    //url = OpenaireProperties.getsearchLinkToProject()+relation['to'].content;
118
                                }
119
                                this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['name'] = relation.title;
120
                                //this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['url'] = url;
121
                                this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['code'] = relation.code;
122
                                this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['acronym'] = relation.acronym;
123

    
124
                                this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['funder'] = relation['funding']['funder'].shortname;
125
                                this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['funderId'] = relation['funding']['funder'].id;
126
                                if(relation['funding'].hasOwnProperty("funding_level_0")) {
127
                                    this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['fundingStream'] = relation['funding']['funding_level_0'].name;
128
                                }
129
                                if(relation['funding'].hasOwnProperty("funding_level_1")) {
130
                                    this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['fundingLevel1'] = relation['funding']['funding_level_1'].name;
131
                                }
132
                                if(relation['funding'].hasOwnProperty("funding_level_2")) {
133
                                    this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['fundingLevel2'] = relation['funding']['funding_level_2'].name;
134
                                }
135
                                //this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['sc39'] =
136
                                //this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['startDate'] =
137
                                //this.organizationInfo.projects.get(relation['funding']['funder'].name)[counter]['endDate'] =
138
                            }
139
                        }
140

    
141
                    }
142

    
143

    
144
                    } /*else if(relation['to'].class == "isProvidedBy") {
145

    
146
                        if(this.organizationInfo.dataProviders == undefined) {
147
                            this.organizationInfo.dataProviders = new Array<{ "name": string, "url": string, "type": string, "websiteUrl": string , "organizations": {"name": string, "url": string}[]}>();
148
                        }
149

    
150
                        counter = this.organizationInfo.dataProviders.length;
151
                        this.organizationInfo.dataProviders[counter] = { "name": "", "url": "", "type": "", "websiteUrl": "", "organizations": [] }
152

    
153
                        let url="";
154
                        if(relation['to'].content != null && relation['to'].content != "") {
155
                            url = OpenaireProperties.getsearchLinkToDataProvider()+relation['to'].content;
156
                        }
157
                        this.organizationInfo.dataProviders[counter]['name'] = relation.officialname;
158
                        this.organizationInfo.dataProviders[counter]['url'] = url;
159
                        if(relation.hasOwnProperty("datasourcetype")) {
160
                            this.organizationInfo.dataProviders[counter]['type'] = relation['datasourcetype'].classname;
161
                        }
162
                        this.organizationInfo.dataProviders[counter]['websiteUrl'] = relation.websiteurl;
163
                    }*/
164
/* ----->
165
                }
166
            }
167
        }
168
*/
169
        return this.organizationInfo;
170

    
171
    }
172

    
173
    parseOrganizationNameAndUrl(organization: any): any {
174
      let title: {"name": string, "url": string} = {"name": "", "url": ""};
175

    
176
      if(organization != null) {
177
        if(organization.hasOwnProperty("websiteurl")) {
178
            title = {"name": organization.legalshortname, "url": organization.websiteurl};
179
        } else {
180
            title = {"name": organization.legalshortname, "url": ''};
181
        }
182

    
183
        if(title.name == '') {
184
            title.name = organization.legalname;
185
        }
186
      }
187

    
188
      return title;
189
    }
190

    
191
}
(4-4/21)