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 {OpenaireProperties} from '../../utils/properties/openaireProperties';
6
import 'rxjs/add/observable/of';
7
import 'rxjs/add/operator/do';
8
import 'rxjs/add/operator/share';
9
import { CacheService  } from '../../shared/cache.service';
10
@Injectable()
11
export class OrganizationService {
12

    
13
    constructor(private http: Http, public _cache: CacheService) {}
14

    
15
    organizationInfo: OrganizationInfo;
16

    
17
    getOrganizationInfo (id: string):any {
18
        console.info("getOrganizationInfo in service");
19

    
20
        let url = OpenaireProperties. getSearchAPIURLLast()+'organizations/'+id+"?format=json";
21
        let key = url;
22
        if (this._cache.has(key)) {
23
          return Observable.of(this._cache.get(key)).map(res => this.parseOrganizationInfo(res));
24
        }
25

    
26
        return this.http.get(url)
27
                    .map(res => <any> res.json())
28
                    .map(res => res['result']['metadata']['oaf:entity']['oaf:organization'])
29
                    .map(res => [res, res['rels']['rel']])
30
                    .do(res => {
31
                      this._cache.set(key, res);
32
                    })
33
                    .map(res => this.parseOrganizationInfo(res));
34

    
35

    
36
    }
37
/*
38
    getMetrics (id: string):any {
39
        console.info("getOrganizationMetrics in service");
40
        //let url = OpenaireProperties. getSearchAPIURLLast() + 'publications/' +id+"?format=json";
41
        let url = OpenaireProperties.getMetricsAPIURL()+"organizations/"+id+"/clicks";
42
        let key = url;
43
        if (this._cache.has(key)) {
44
          return Observable.of(this._cache.get(key));
45
        }
46
        return this.http.get(url)
47
                    .map(res => <any> res.json())
48
                    .map(res => res['views'])
49
                    .do(res => {
50
                      this._cache.set(key, res);
51
                    });
52
    }
53
*/
54
    private handleError (error: Response) {
55
    // in a real world app, we may send the error to some remote logging infrastructure
56
    // instead of just logging it to the console
57
        console.log(error);
58
        return Observable.throw(error  || 'Server error');
59
    }
60

    
61
    parseOrganizationInfo (data: any):any {
62
        console.info("parseOrganizationInfo");
63
        this.organizationInfo = new OrganizationInfo();
64

    
65
        let mydata;
66

    
67
        if(data[0] != null) {
68
            mydata = data[0];
69

    
70
            if(mydata.hasOwnProperty("websiteurl")) {
71
                this.organizationInfo.title = {"name": mydata.legalshortname, "url": mydata.websiteurl};
72
            } else {
73
                this.organizationInfo.title = {"name": mydata.legalshortname, "url": ''};
74
            }
75

    
76
            this.organizationInfo.name = mydata.legalname;
77

    
78
            if(this.organizationInfo.title.name == '') {
79
                this.organizationInfo.title.name = this.organizationInfo.name;
80
            }
81

    
82
            if(mydata.hasOwnProperty("country")) {
83
                this.organizationInfo.country = mydata['country'].classname;
84
            }
85
        }
86

    
87
        if(data[1] != null) {
88
            let counter;
89
            let length = data[1].length!=undefined ? data[1].length : 1;
90

    
91
            for(let i=0; i<length; i++) {
92
                mydata = data[1].length!=undefined ? data[1][i] : data[1];
93
                if(mydata.hasOwnProperty("to")) {
94
                    if(mydata['to'].class == "isParticipant") {
95
                        if(mydata.hasOwnProperty("funding")) {
96
                            if(mydata['funding'].hasOwnProperty("funder")) {
97
                                if(this.organizationInfo.projects == undefined) {
98
                                    this.organizationInfo.projects = new Map<string,
99
                                        { "name": string, "id": string, "url": string, "code": string,
100
                                          "acronym": string, "funder": string, "funderId": string,
101
                                          "fundingStream": string, "fundingLevel1": string, "fundingLevel2": string,
102
                                          "sc39": string, "startDate": string, "endDate": string }[]>();
103
                                }
104

    
105
                                if(!this.organizationInfo.projects.has(mydata['funding']['funder'].name)) {
106
                                    this.organizationInfo.projects.set(mydata['funding']['funder'].name,
107
                                        new Array<{ "name": string, "id": string, "url": string, "code": string,
108
                                                    "acronym": string, "funder": string, "funderId": string,
109
                                                    "fundingStream": string, "fundingLevel1": string, "fundingLevel2": string,
110
                                                    "sc39": string, "startDate": string, "endDate": string }>());
111
                                }
112

    
113
                                counter = this.organizationInfo.projects.get(mydata['funding']['funder'].name).length;
114
                                this.organizationInfo.projects.get(mydata['funding']['funder'].name)[counter] =
115
                                    { "name": "", "id": "", "url": "", "code": "",
116
                                      "acronym": "", "funder": "", "funderId": "",
117
                                      "fundingStream": "", "fundingLevel1": "", "fundingLevel2": "",
118
                                      "sc39": "", "startDate": "", "endDate": "" };
119

    
120
                                let url = "";
121
                                if(mydata['to'].content != null && mydata['to'].content != "") {
122
                                    this.organizationInfo.projects.get(mydata['funding']['funder'].name)[counter]['id'] = mydata['to'].content;
123
                                    url = OpenaireProperties.getsearchLinkToProject()+mydata['to'].content;
124
                                }
125
                                this.organizationInfo.projects.get(mydata['funding']['funder'].name)[counter]['name'] = mydata.title;
126
                                this.organizationInfo.projects.get(mydata['funding']['funder'].name)[counter]['url'] = url;
127
                                this.organizationInfo.projects.get(mydata['funding']['funder'].name)[counter]['code'] = mydata.code;
128
                                this.organizationInfo.projects.get(mydata['funding']['funder'].name)[counter]['acronym'] = mydata.acronym;
129

    
130
                                this.organizationInfo.projects.get(mydata['funding']['funder'].name)[counter]['funder'] = mydata['funding']['funder'].shortname;
131
                                this.organizationInfo.projects.get(mydata['funding']['funder'].name)[counter]['funderId'] = mydata['funding']['funder'].id;
132
                                if(mydata['funding'].hasOwnProperty("funding_level_0")) {
133
                                    this.organizationInfo.projects.get(mydata['funding']['funder'].name)[counter]['fundingStream'] = mydata['funding']['funding_level_0'].name;
134
                                }
135
                                if(mydata['funding'].hasOwnProperty("funding_level_1")) {
136
                                    this.organizationInfo.projects.get(mydata['funding']['funder'].name)[counter]['fundingLevel1'] = mydata['funding']['funding_level_1'].name;
137
                                }
138
                                if(mydata['funding'].hasOwnProperty("funding_level_2")) {
139
                                    this.organizationInfo.projects.get(mydata['funding']['funder'].name)[counter]['fundingLevel2'] = mydata['funding']['funding_level_2'].name;
140
                                }
141
                                //this.organizationInfo.projects.get(mydata['funding']['funder'].name)[counter]['sc39'] =
142
                                //this.organizationInfo.projects.get(mydata['funding']['funder'].name)[counter]['startDate'] =
143
                                //this.organizationInfo.projects.get(mydata['funding']['funder'].name)[counter]['endDate'] =
144
                            }
145
                        }
146
                    } /*else if(mydata['to'].class == "isProvidedBy") {
147
                        if(this.organizationInfo.dataProviders == undefined) {
148
                            this.organizationInfo.dataProviders = new Array<{ "name": string, "url": string, "type": string, "websiteUrl": string , "organizations": {"name": string, "url": string}[]}>();
149
                        }
150

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

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

    
169
        return this.organizationInfo;
170

    
171
    }
172

    
173
}
(5-5/5)