Project

General

Profile

1 50169 argiro.kok
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 50586 argiro.kok
import{EnvProperties} from '../utils/properties/env-properties';
9 50169 argiro.kok
10
@Injectable()
11
export class OrganizationService {
12
13
    constructor(private http: Http ) {}
14
15
    organizationInfo: OrganizationInfo;
16
17 50586 argiro.kok
    getOrganizationInfo (id: string, properties:EnvProperties):any {
18 52016 argiro.kok
         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 50169 argiro.kok
20 50586 argiro.kok
        return this.http.get((properties.useCache)? (properties.cacheUrl +encodeURIComponent(url)): url)
21 50169 argiro.kok
                    .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 50586 argiro.kok
30 54755 konstantin
    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 50169 argiro.kok
    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 54755 konstantin
    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 50169 argiro.kok
}