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

    
11
@Injectable()
12
export class OrganizationService {
13

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

    
16
    organizationInfo: OrganizationInfo;
17

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

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

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

    
36

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

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

    
66
        let mydata;
67

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

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

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

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

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

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

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

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

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

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

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

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

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

    
170
        return this.organizationInfo;
171

    
172
    }
173

    
174
}
(7-7/24)