Project

General

Profile

1
import { Injectable } from '@angular/core';
2
import { RawData, Row } from '../domain/raw-data';
3
import {
4
  CountryOverviewData,
5
  CountryMapData,
6
  EuropeData,
7
  OverviewMapData,
8
  CountryTableData,
9
  CountryPageOverviewData
10
} from '../domain/overview-map-data';
11
import {Indicator} from '../domain/overview-data';
12
import {TreemapHighchartsData} from '../domain/treemap-highcharts-data';
13

    
14
@Injectable ()
15
export class DataHandlerService {
16

    
17
  public convertRawMapDataToMapData(rawData: RawData) {
18

    
19
    const overviewMapData: OverviewMapData = new OverviewMapData();
20

    
21
    for (const series of rawData.datasets) {
22

    
23
      if (series.series.query.name === 'new.oso.publications.affiliated') {
24
        overviewMapData.publications = this.rawResultToCountryMapData(series.series.result);
25
      } else if (series.series.query.name === 'new.oso.datasets.affiliated') {
26
        overviewMapData.datasets = this.rawResultToCountryMapData(series.series.result);
27
      } else if (series.series.query.name === 'new.oso.repositories.doar_re3data') {
28
        overviewMapData.repositories = this.rawResultToCountryMapData(series.series.result);
29
      } else if (series.series.query.name === 'new.oso.journals.doaj') {
30
        overviewMapData.journals = this.rawResultToCountryMapData(series.series.result);
31
      } else if (series.series.query.name === 'new.oso.oa_policies') {
32
        overviewMapData.policies = this.rawResultToCountryMapData(series.series.result);
33
      }
34
    }
35

    
36
    // console.log('Overview map data (data-handler)', overviewMapData);
37

    
38
    return overviewMapData;
39
  }
40

    
41
  public createJoinedPublicationsCountryMap(rawData: RawData) {
42

    
43
    const joinedPublicationsMap = new Map();
44

    
45
    for (const series of rawData.datasets) {
46
      if (series.series.query.name === 'new.oso.publications.affiliated') {
47

    
48
        for (const rowResult of series.series.result) {
49
          if (joinedPublicationsMap.has(rowResult.row[1])) {
50
            const deposited = joinedPublicationsMap.get(rowResult.row[1]).deposited;
51
            joinedPublicationsMap.delete(rowResult.row[1]);
52
            joinedPublicationsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
53
              affiliated: Number(rowResult.row[0]), deposited: deposited});
54
          } else {
55
            joinedPublicationsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
56
              affiliated: Number(rowResult.row[0]), deposited: 0});
57
          }
58
        }
59

    
60
      } else if (series.series.query.name === 'new.oso.publications.deposited') {
61

    
62
        for (const rowResult of series.series.result) {
63
          if (joinedPublicationsMap.has(rowResult.row[1])) {
64
            const affiliated = joinedPublicationsMap.get(rowResult.row[1]).affiliated;
65
            joinedPublicationsMap.delete(rowResult.row[1]);
66
            joinedPublicationsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
67
              affiliated: affiliated, deposited: Number(rowResult.row[0])});
68
          }
69
          joinedPublicationsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
70
            affiliated: 0, deposited: Number(rowResult.row[0])});
71
        }
72
      }
73
    }
74

    
75
    return joinedPublicationsMap;
76
  }
77

    
78
  public createJoinedDatasetsCountryMap(rawData: RawData) {
79

    
80
    const joinedDatasetsMap = new Map();
81

    
82
    for (const series of rawData.datasets) {
83
      if (series.series.query.name === 'new.oso.datasets.affiliated') {
84

    
85
        for (const rowResult of series.series.result) {
86
          if (joinedDatasetsMap.has(rowResult.row[1])) {
87
            const deposited = joinedDatasetsMap.get(rowResult.row[1]).deposited;
88
            joinedDatasetsMap.delete(rowResult.row[1]);
89
            joinedDatasetsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
90
              affiliated: Number(rowResult.row[0]), deposited: deposited});
91
          } else {
92
            joinedDatasetsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
93
              affiliated: Number(rowResult.row[0]), deposited: 0});
94
          }
95
        }
96

    
97
      } else if (series.series.query.name === 'new.oso.datasets.deposited') {
98

    
99
        for (const rowResult of series.series.result) {
100
          if (joinedDatasetsMap.has(rowResult.row[1])) {
101
            const affiliated = joinedDatasetsMap.get(rowResult.row[1]).affiliated;
102
            joinedDatasetsMap.delete(rowResult.row[1]);
103
            joinedDatasetsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
104
              affiliated: affiliated, deposited: Number(rowResult.row[0])});
105
          }
106
          joinedDatasetsMap.set(rowResult.row[1], { countryName: rowResult.row[1], countryCode: rowResult.row[2],
107
            affiliated: 0, deposited: Number(rowResult.row[0])});
108
        }
109
      }
110
    }
111

    
112
    return joinedDatasetsMap;
113

    
114
  }
115

    
116
  public createJoinedRepositoriesCountryMap(rawData: RawData) {
117

    
118
    const joinedRepositoriesMap = new Map();
119

    
120
    for (const series of rawData.datasets) {
121
      if (series.series.query.name === 'new.oso.repositories.doar_re3data') {
122

    
123
        for (const rowResult of series.series.result) {
124
          if (joinedRepositoriesMap.has(rowResult.row[1])) {
125
            const simple = joinedRepositoriesMap.get(rowResult.row[1]).simple;
126
            joinedRepositoriesMap.delete(rowResult.row[1]);
127
            joinedRepositoriesMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
128
              doar_re3data: Number(rowResult.row[0]), simple: simple});
129
          } else {
130
            joinedRepositoriesMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
131
              doar_re3data: Number(rowResult.row[0]), simple: 0});
132
          }
133
        }
134

    
135
      } else if (series.series.query.name === 'new.oso.repositories') {
136

    
137
        for (const rowResult of series.series.result) {
138
          if (joinedRepositoriesMap.has(rowResult.row[1])) {
139
            const doar_re3data = joinedRepositoriesMap.get(rowResult.row[1]).doar_re3data;
140
            joinedRepositoriesMap.delete(rowResult.row[1]);
141
            joinedRepositoriesMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
142
              doar_re3data: doar_re3data, simple: Number(rowResult.row[0])});
143
          }
144
          joinedRepositoriesMap.set(rowResult.row[1], { countryName: rowResult.row[1], countryCode: rowResult.row[2],
145
            doar_re3data: 0, simple: Number(rowResult.row[0])});
146
        }
147
      }
148
    }
149

    
150
    return joinedRepositoriesMap;
151

    
152
  }
153

    
154
  public createJoinedJournalsCountryMap(rawData: RawData) {
155

    
156
    const joinedJournalsMap = new Map();
157

    
158
    for (const series of rawData.datasets) {
159
      if (series.series.query.name === 'new.oso.journals.doaj') {
160

    
161
        for (const rowResult of series.series.result) {
162
          if (joinedJournalsMap.has(rowResult.row[1])) {
163
            const simple = joinedJournalsMap.get(rowResult.row[1]).simple;
164
            joinedJournalsMap.delete(rowResult.row[1]);
165
            joinedJournalsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
166
              doaj: Number(rowResult.row[0]), simple: simple});
167
          } else {
168
            joinedJournalsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
169
              doaj: Number(rowResult.row[0]), simple: 0});
170
          }
171
        }
172

    
173
      } else if (series.series.query.name === 'new.oso.journals') {
174

    
175
        for (const rowResult of series.series.result) {
176
          if (joinedJournalsMap.has(rowResult.row[1])) {
177
            const doaj = joinedJournalsMap.get(rowResult.row[1]).doaj;
178
            joinedJournalsMap.delete(rowResult.row[1]);
179
            joinedJournalsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
180
              doaj: doaj, simple: Number(rowResult.row[0])});
181
          }
182
          joinedJournalsMap.set(rowResult.row[1], { countryName: rowResult.row[1], countryCode: rowResult.row[2],
183
            doaj: 0, simple: Number(rowResult.row[0])});
184
        }
185
      }
186
    }
187

    
188
    return joinedJournalsMap;
189

    
190
  }
191

    
192
  public convertRawDataToCountryOverviewData(rawData: RawData) {
193

    
194
    const countryData: CountryOverviewData = new CountryOverviewData();
195

    
196
    for (const series of rawData.datasets) {
197

    
198
      if (series.series.query.name === 'new.oso.publications.affiliated.country') {
199
        countryData.publicationsAffiliated = Number(series.series.result[0].row[0]);
200
      } else if (series.series.query.name === 'new.oso.publications.deposited.country') {
201
        countryData.publicationsDeposited = Number(series.series.result[0].row[0]);
202
      } else if (series.series.query.name === 'new.oso.datasets.affiliated.country') {
203
        countryData.datasetsAffiliated = Number(series.series.result[0].row[0]);
204
      } else if (series.series.query.name === 'new.oso.datasets.deposited.country') {
205
        countryData.datasetsDeposited = Number(series.series.result[0].row[0]);
206
      } else if (series.series.query.name === 'new.oso.repositories.doar_re3data.country') {
207
        countryData.repositories = Number(series.series.result[0].row[0]);
208
      } else if (series.series.query.name === 'new.oso.journals.doaj.country') {
209
        countryData.journals = Number(series.series.result[0].row[0]);
210
      } else if (series.series.query.name === 'new.oso.oa_policies.country') {
211
        countryData.policies = Number(series.series.result[0].row[0]);
212
      }
213
    }
214

    
215
    return countryData;
216
  }
217

    
218
  public convertRawDataToEuropeOverviewData(rawData: RawData) {
219

    
220
    const europeData: EuropeData = new EuropeData();
221

    
222
    for (const series of rawData.datasets) {
223

    
224
      if (series.series.query.name === 'new.oso.publications.oa_percentage') {
225

    
226
        const publicationsIndicator: Indicator = new Indicator();
227
        publicationsIndicator.percentage = Number(series.series.result[0].row[0]);
228
        publicationsIndicator.oa = Number(series.series.result[0].row[1]);
229
        publicationsIndicator.total = Number(series.series.result[0].row[2]);
230
        europeData.publications = publicationsIndicator;
231

    
232
      } else if (series.series.query.name === 'new.oso.datasets.oa_percentage') {
233

    
234
        const datasetsIndicator: Indicator = new Indicator();
235
        datasetsIndicator.percentage = Number(series.series.result[0].row[0]);
236
        datasetsIndicator.oa = Number(series.series.result[0].row[1]);
237
        datasetsIndicator.total = Number(series.series.result[0].row[2]);
238
        europeData.datasets = datasetsIndicator;
239

    
240
      } else if (series.series.query.name === 'new.oso.software.oa_percentage') {
241

    
242
        const softwareIndicator: Indicator = new Indicator();
243
        softwareIndicator.percentage = Number(series.series.result[0].row[0]);
244
        softwareIndicator.oa = Number(series.series.result[0].row[1]);
245
        softwareIndicator.total = Number(series.series.result[0].row[2]);
246
        europeData.software = softwareIndicator;
247

    
248
      } else if (series.series.query.name === 'new.oso.other.oa_percentage') {
249

    
250
        const otherIndicator: Indicator = new Indicator();
251
        otherIndicator.percentage = Number(series.series.result[0].row[0]);
252
        otherIndicator.oa = Number(series.series.result[0].row[1]);
253
        otherIndicator.total = Number(series.series.result[0].row[2]);
254
        europeData.other = otherIndicator;
255

    
256
      } else if (series.series.query.name === 'new.oso.repositories.doar_re3data.validated') {
257

    
258
        const repositoriesIndicator: Indicator = new Indicator();
259
        repositoriesIndicator.percentage = Number(series.series.result[0].row[0]);
260
        repositoriesIndicator.oa = Number(series.series.result[0].row[1]);
261
        repositoriesIndicator.total = Number(series.series.result[0].row[2]);
262
        europeData.repositories = repositoriesIndicator;
263

    
264
      } else if (series.series.query.name === 'new.oso.journals.doaj.validated') {
265

    
266
        const journalsIndicator: Indicator = new Indicator();
267
        journalsIndicator.percentage = Number(series.series.result[0].row[0]);
268
        journalsIndicator.oa = Number(series.series.result[0].row[1]);
269
        journalsIndicator.total = Number(series.series.result[0].row[2]);
270
        europeData.journals = journalsIndicator;
271

    
272
      } else if (series.series.query.name === 'new.oso.oa_policies.europe') {
273

    
274
        const policiesIndicator: Indicator = new Indicator();
275
        policiesIndicator.percentage = Number(series.series.result[0].row[0]);
276
        policiesIndicator.oa = Number(series.series.result[0].row[1]);
277
        policiesIndicator.total = Number(series.series.result[0].row[2]);
278
        europeData.policies = policiesIndicator;
279

    
280
      }
281
    }
282

    
283
    return europeData;
284
  }
285

    
286
  public convertRawDataToAbsoluteTableData(rawData: RawData) {
287

    
288
    const mapTableData: Map<string, CountryTableData> = new Map();
289

    
290
    for (const series of rawData.datasets) {
291

    
292
      if (series.series.query.name.includes('new.oso.publications')) {
293
        for (const rowResult of series.series.result) {
294

    
295
          // remove unwanted countries
296
          if (this.isCountryToBeRemoved(rowResult.row[2])) {
297
            continue;
298
          }
299

    
300
          if (mapTableData.has(rowResult.row[2])) {
301
            const countryTableData = mapTableData.get(rowResult.row[2]);
302
            countryTableData.publications = Number(rowResult.row[0]);
303
          } else {
304
            const countryTableData: CountryTableData = new CountryTableData();
305
            countryTableData.publications = Number(rowResult.row[0]);
306
            countryTableData.name = rowResult.row[1];
307
            countryTableData.code = rowResult.row[2];
308
            mapTableData.set(rowResult.row[2], countryTableData);
309
          }
310
        }
311

    
312
      } else if (series.series.query.name.includes('new.oso.datasets')) {
313

    
314
        for (const rowResult of series.series.result) {
315

    
316
          // remove unwanted countries
317
          if (this.isCountryToBeRemoved(rowResult.row[2])) {
318
            continue;
319
          }
320

    
321
          if (mapTableData.has(rowResult.row[2])) {
322
            const countryTableData = mapTableData.get(rowResult.row[2]);
323
            countryTableData.datasets = Number(rowResult.row[0]);
324
          } else {
325
            const countryTableData: CountryTableData = new CountryTableData();
326
            countryTableData.datasets = Number(rowResult.row[0]);
327
            countryTableData.name = rowResult.row[1];
328
            countryTableData.code = rowResult.row[2];
329
            mapTableData.set(rowResult.row[2], countryTableData);
330
          }
331
        }
332
      } else if (series.series.query.name.includes('new.oso.software')) {
333

    
334
        for (const rowResult of series.series.result) {
335

    
336
          // remove unwanted countries
337
          if (this.isCountryToBeRemoved(rowResult.row[2])) {
338
            continue;
339
          }
340

    
341
          if (mapTableData.has(rowResult.row[2])) {
342
            const countryTableData = mapTableData.get(rowResult.row[2]);
343
            countryTableData.software = Number(rowResult.row[0]);
344
          } else {
345
            const countryTableData: CountryTableData = new CountryTableData();
346
            countryTableData.software = Number(rowResult.row[0]);
347
            countryTableData.name = rowResult.row[1];
348
            countryTableData.code = rowResult.row[2];
349
            mapTableData.set(rowResult.row[2], countryTableData);
350
          }
351
        }
352
      } else if (series.series.query.name.includes('new.oso.other')) {
353

    
354
        for (const rowResult of series.series.result) {
355

    
356
          // remove unwanted countries
357
          if (this.isCountryToBeRemoved(rowResult.row[2])) {
358
            continue;
359
          }
360

    
361
          if (mapTableData.has(rowResult.row[2])) {
362
            const countryTableData = mapTableData.get(rowResult.row[2]);
363
            countryTableData.other = Number(rowResult.row[0]);
364
          } else {
365
            const countryTableData: CountryTableData = new CountryTableData();
366
            countryTableData.other = Number(rowResult.row[0]);
367
            countryTableData.name = rowResult.row[1];
368
            countryTableData.code = rowResult.row[2];
369
            mapTableData.set(rowResult.row[2], countryTableData);
370
          }
371
        }
372
      } else if (series.series.query.name.includes('new.oso.repositories')) {
373

    
374
        for (const rowResult of series.series.result) {
375

    
376
          // remove unwanted countries
377
          if (this.isCountryToBeRemoved(rowResult.row[2])) {
378
            continue;
379
          }
380

    
381
          if (mapTableData.has(rowResult.row[2])) {
382
            const countryTableData = mapTableData.get(rowResult.row[2]);
383
            countryTableData.repositories = Number(rowResult.row[0]);
384
          } else {
385
            const countryTableData: CountryTableData = new CountryTableData();
386
            countryTableData.repositories = Number(rowResult.row[0]);
387
            countryTableData.name = rowResult.row[1];
388
            countryTableData.code = rowResult.row[2];
389
            mapTableData.set(rowResult.row[2], countryTableData);
390
          }
391
        }
392
      } else if (series.series.query.name.includes('new.oso.journals')) {
393

    
394
        for (const rowResult of series.series.result) {
395

    
396
          // remove unwanted countries
397
          if (this.isCountryToBeRemoved(rowResult.row[2])) {
398
            continue;
399
          }
400

    
401
          if (mapTableData.has(rowResult.row[2])) {
402
            const countryTableData = mapTableData.get(rowResult.row[2]);
403
            countryTableData.journals = Number(rowResult.row[0]);
404
          } else {
405
            const countryTableData: CountryTableData = new CountryTableData();
406
            countryTableData.journals = Number(rowResult.row[0]);
407
            countryTableData.name = rowResult.row[1];
408
            countryTableData.code = rowResult.row[2];
409
            mapTableData.set(rowResult.row[2], countryTableData);
410
          }
411
        }
412
      }
413
    }
414

    
415
    const tableData: CountryTableData[] = [];
416

    
417
    mapTableData.forEach((value: CountryTableData, key: string) => {
418
      // console.log(key, value);
419
      tableData.push(value);
420
    });
421

    
422
    return tableData;
423
  }
424

    
425
  public convertRawDataToPercentageTableData(rawData: RawData) {
426

    
427
    const mapTableData: Map<string, CountryTableData> = new Map();
428

    
429
    for (const series of rawData.datasets) {
430

    
431
      if (series.series.query.name.includes('new.oso.results')
432
        && series.series.query.parameters && series.series.query.parameters[0] === 'publication') {
433
        for (const rowResult of series.series.result) {
434

    
435
          // remove unwanted countries
436
          if (this.isCountryToBeRemoved(rowResult.row[4])) {
437
            continue;
438
          }
439

    
440
          if (mapTableData.has(rowResult.row[4])) {
441
            const countryTableData = mapTableData.get(rowResult.row[4]);
442
            if (rowResult.row[0] !== 'NaN') {
443
              countryTableData.publications = Number(rowResult.row[0]);
444
            }
445
          } else {
446
            const countryTableData: CountryTableData = new CountryTableData();
447
            if (rowResult.row[0] !== 'NaN') {
448
              countryTableData.publications = Number(rowResult.row[0]);
449
            }
450
            countryTableData.name = rowResult.row[3];
451
            countryTableData.code = rowResult.row[4];
452
            mapTableData.set(rowResult.row[4], countryTableData);
453
          }
454
        }
455

    
456
      } else if (series.series.query.name.includes('new.oso.results')
457
        && series.series.query.parameters && series.series.query.parameters[0] === 'dataset') {
458

    
459
        for (const rowResult of series.series.result) {
460

    
461
          // remove unwanted countries
462
          if (this.isCountryToBeRemoved(rowResult.row[4])) {
463
            continue;
464
          }
465

    
466
          if (mapTableData.has(rowResult.row[4])) {
467
            const countryTableData = mapTableData.get(rowResult.row[4]);
468
            if (rowResult.row[0] !== 'NaN') {
469
              countryTableData.datasets = Number(rowResult.row[0]);
470
            }
471
          } else {
472
            const countryTableData: CountryTableData = new CountryTableData();
473
            if (rowResult.row[0] !== 'NaN') {
474
              countryTableData.datasets = Number(rowResult.row[0]);
475
            }
476
            countryTableData.name = rowResult.row[3];
477
            countryTableData.code = rowResult.row[4];
478
            mapTableData.set(rowResult.row[4], countryTableData);
479
          }
480
        }
481
      } else if (series.series.query.name.includes('new.oso.results')
482
        && series.series.query.parameters && series.series.query.parameters[0] === 'software') {
483

    
484
        for (const rowResult of series.series.result) {
485

    
486
          // remove unwanted countries
487
          if (this.isCountryToBeRemoved(rowResult.row[4])) {
488
            continue;
489
          }
490

    
491
          if (mapTableData.has(rowResult.row[4])) {
492
            const countryTableData = mapTableData.get(rowResult.row[4]);
493
            if (rowResult.row[0] !== 'NaN') {
494
              countryTableData.software = Number(rowResult.row[0]);
495
            }
496
          } else {
497
            const countryTableData: CountryTableData = new CountryTableData();
498
            if (rowResult.row[0] !== 'NaN') {
499
              countryTableData.software = Number(rowResult.row[0]);
500
            }
501
            countryTableData.name = rowResult.row[3];
502
            countryTableData.code = rowResult.row[4];
503
            mapTableData.set(rowResult.row[4], countryTableData);
504
          }
505
        }
506
      } else if (series.series.query.name.includes('new.oso.results')
507
        && series.series.query.parameters && series.series.query.parameters[0] === 'other') {
508

    
509
        for (const rowResult of series.series.result) {
510

    
511
          // remove unwanted countries
512
          if (this.isCountryToBeRemoved(rowResult.row[4])) {
513
            continue;
514
          }
515

    
516
          if (mapTableData.has(rowResult.row[4])) {
517
            const countryTableData = mapTableData.get(rowResult.row[4]);
518
            if (rowResult.row[0] !== 'NaN') {
519
              countryTableData.other = Number(rowResult.row[0]);
520
            }
521
          } else {
522
            const countryTableData: CountryTableData = new CountryTableData();
523
            if (rowResult.row[0] !== 'NaN') {
524
              countryTableData.other = Number(rowResult.row[0]);
525
            }
526
            countryTableData.name = rowResult.row[3];
527
            countryTableData.code = rowResult.row[4];
528
            mapTableData.set(rowResult.row[4], countryTableData);
529
          }
530
        }
531
      } else if (series.series.query.name.includes('new.oso.repositories')) {
532

    
533
        for (const rowResult of series.series.result) {
534

    
535
          // remove unwanted countries
536
          if (this.isCountryToBeRemoved(rowResult.row[4])) {
537
            continue;
538
          }
539

    
540
          if (mapTableData.has(rowResult.row[4])) {
541
            const countryTableData = mapTableData.get(rowResult.row[4]);
542
            countryTableData.repositories = Number(rowResult.row[0]);
543
          } else {
544
            const countryTableData: CountryTableData = new CountryTableData();
545
            countryTableData.repositories = Number(rowResult.row[0]);
546
            countryTableData.name = rowResult.row[3];
547
            countryTableData.code = rowResult.row[4];
548
            mapTableData.set(rowResult.row[4], countryTableData);
549
          }
550
        }
551
      } else if (series.series.query.name.includes('new.oso.journals')) {
552

    
553
        for (const rowResult of series.series.result) {
554

    
555
          // remove unwanted countries
556
          if (this.isCountryToBeRemoved(rowResult.row[4])) {
557
            continue;
558
          }
559

    
560
          if (mapTableData.has(rowResult.row[4])) {
561
            const countryTableData = mapTableData.get(rowResult.row[4]);
562
            countryTableData.journals = Number(rowResult.row[0]);
563
          } else {
564
            const countryTableData: CountryTableData = new CountryTableData();
565
            countryTableData.journals = Number(rowResult.row[0]);
566
            countryTableData.name = rowResult.row[3];
567
            countryTableData.code = rowResult.row[4];
568
            mapTableData.set(rowResult.row[4], countryTableData);
569
          }
570
        }
571
      }
572
    }
573

    
574
    const tableData: CountryTableData[] = [];
575

    
576
    mapTableData.forEach((value: CountryTableData, key: string) => {
577
      // console.log(key, value);
578
      tableData.push(value);
579
    });
580

    
581
    return tableData;
582
  }
583

    
584
  public convertRawDataToLeadingOpenScienceData(rawData: RawData) {
585

    
586
    const leadingOpenScienceData: CountryOverviewData[] = [];
587

    
588
    for (const series of rawData.datasets) {
589
      if (series.series.query.name === 'new.oso.mobile.overview') {
590
        for (const rowResult of series.series.result) {
591

    
592
          const countryOverviewData: CountryOverviewData = new CountryOverviewData();
593
          countryOverviewData.name = rowResult.row[1];
594
          countryOverviewData.code = rowResult.row[0];
595
          countryOverviewData.publicationsAffiliated = Number(rowResult.row[2]);
596
          countryOverviewData.publicationsDeposited = Number(rowResult.row[3]);
597

    
598
          leadingOpenScienceData.push(countryOverviewData);
599
        }
600
      }
601
    }
602

    
603
    return leadingOpenScienceData;
604
  }
605

    
606
  public convertRawDataToCountryPageOverviewData(rawData: RawData) {
607

    
608
    const countryPageOverviewData: CountryPageOverviewData = new CountryPageOverviewData();
609

    
610
    for (const series of rawData.datasets) {
611

    
612
      if ((series.series.query.name === 'new.oso.results.oa_percentage.country')
613
        && series.series.query.parameters && series.series.query.parameters[0] === 'publication') {
614

    
615
        countryPageOverviewData.name = series.series.result[0].row[3];
616
        countryPageOverviewData.code = series.series.result[0].row[4];
617

    
618
        const publicationsAffiliatedIndicator: Indicator = new Indicator();
619
        publicationsAffiliatedIndicator.percentage = Number(series.series.result[0].row[0]);
620
        publicationsAffiliatedIndicator.oa = Number(series.series.result[0].row[1]);
621
        publicationsAffiliatedIndicator.total = Number(series.series.result[0].row[2]);
622
        countryPageOverviewData.publicationsAffiliated = publicationsAffiliatedIndicator;
623

    
624
      } else if ((series.series.query.name === 'new.oso.results.oa_percentage.deposited.country')
625
        && series.series.query.parameters && series.series.query.parameters[0] === 'publication') {
626

    
627
        countryPageOverviewData.name = series.series.result[0].row[3];
628
        countryPageOverviewData.code = series.series.result[0].row[4];
629

    
630
        const publicationsDepositedIndicator: Indicator = new Indicator();
631
        publicationsDepositedIndicator.percentage = Number(series.series.result[0].row[0]);
632
        publicationsDepositedIndicator.oa = Number(series.series.result[0].row[1]);
633
        publicationsDepositedIndicator.total = Number(series.series.result[0].row[2]);
634
        countryPageOverviewData.publicationsDeposited = publicationsDepositedIndicator;
635

    
636
      } if ((series.series.query.name === 'new.oso.results.oa_percentage.country')
637
        && series.series.query.parameters && series.series.query.parameters[0] === 'dataset') {
638

    
639
        countryPageOverviewData.name = series.series.result[0].row[3];
640
        countryPageOverviewData.code = series.series.result[0].row[4];
641

    
642
        const datasetsAffiliatedIndicator: Indicator = new Indicator();
643
        datasetsAffiliatedIndicator.percentage = Number(series.series.result[0].row[0]);
644
        datasetsAffiliatedIndicator.oa = Number(series.series.result[0].row[1]);
645
        datasetsAffiliatedIndicator.total = Number(series.series.result[0].row[2]);
646
        countryPageOverviewData.datasetsAffiliated = datasetsAffiliatedIndicator;
647

    
648
      } else if ((series.series.query.name === 'new.oso.results.oa_percentage.deposited.country')
649
        && series.series.query.parameters && series.series.query.parameters[0] === 'dataset') {
650

    
651
        countryPageOverviewData.name = series.series.result[0].row[3];
652
        countryPageOverviewData.code = series.series.result[0].row[4];
653

    
654
        const datasetsDepositedIndicator: Indicator = new Indicator();
655
        datasetsDepositedIndicator.percentage = Number(series.series.result[0].row[0]);
656
        datasetsDepositedIndicator.oa = Number(series.series.result[0].row[1]);
657
        datasetsDepositedIndicator.total = Number(series.series.result[0].row[2]);
658
        countryPageOverviewData.datasetsDeposited = datasetsDepositedIndicator;
659

    
660
      } else if (series.series.query.name === 'new.oso.repositories.doar_re3data.validated.country') {
661

    
662
        countryPageOverviewData.name = series.series.result[0].row[3];
663
        countryPageOverviewData.code = series.series.result[0].row[4];
664

    
665
        const repositoriesIndicator: Indicator = new Indicator();
666
        repositoriesIndicator.percentage = Number(series.series.result[0].row[0]);
667
        repositoriesIndicator.oa = Number(series.series.result[0].row[1]);
668
        repositoriesIndicator.total = Number(series.series.result[0].row[2]);
669
        countryPageOverviewData.repositories = repositoriesIndicator;
670

    
671
      } else if (series.series.query.name === 'new.oso.journals.doaj.validated.country') {
672

    
673
        countryPageOverviewData.name = series.series.result[0].row[3];
674
        countryPageOverviewData.code = series.series.result[0].row[4];
675

    
676
        const journalsIndicator: Indicator = new Indicator();
677
        journalsIndicator.percentage = Number(series.series.result[0].row[0]);
678
        journalsIndicator.oa = Number(series.series.result[0].row[1]);
679
        journalsIndicator.total = Number(series.series.result[0].row[2]);
680
        countryPageOverviewData.journals = journalsIndicator;
681

    
682
      } else if (series.series.query.name === 'new.oso.oa_policies.country') {
683

    
684
        countryPageOverviewData.policies = Number(series.series.result[0].row[0]);
685

    
686
      } else if (series.series.query.name === 'new.oso.funder.country') {
687

    
688
        countryPageOverviewData.funders = Number(series.series.result[0].row[0]);
689

    
690
      } else if (series.series.query.name === 'new.oso.funding_organizations.country') {
691

    
692
        countryPageOverviewData.fundingOrganizations = Number(series.series.result[0].row[0]);
693

    
694
      } else if (series.series.query.name === 'new.oso.ec_funded_organizations.country') {
695

    
696
        countryPageOverviewData.ec_fundedOrganizations = Number(series.series.result[0].row[0]);
697
      }
698
    }
699

    
700
    return countryPageOverviewData;
701
  }
702

    
703
  public convertRawDataToTreemapHighchartsData(rawData: RawData) {
704

    
705
    const treeMapData: TreemapHighchartsData[] = [];
706

    
707
    for (const series of rawData.datasets) {
708
      // let index = 1;
709
      for (const rowResult of series.series.result) {
710

    
711
        const treeMapItemData: TreemapHighchartsData = new TreemapHighchartsData();
712
        treeMapItemData.name = rowResult.row[1];
713
        treeMapItemData.value = Number(rowResult.row[0]);
714
        treeMapItemData.colorValue = Number(rowResult.row[0]);
715
        // treeMapItemData.colorValue = index;
716

    
717
        treeMapData.push(treeMapItemData);
718

    
719
        // index = index + 1;
720
      }
721
    }
722

    
723
    return treeMapData;
724
  }
725

    
726
  private rawResultToCountryMapData(result: Row[]) {
727

    
728
    const entityMapData: CountryMapData[] = [];
729
    for (const rowResult of result) {
730

    
731
      // remove unwanted countries
732
      if (this.isCountryToBeRemoved(rowResult.row[2])) {
733
        continue;
734
      }
735

    
736
      const countryMapData: CountryMapData = new CountryMapData();
737
      countryMapData.value = Number(rowResult.row[0]);
738
      countryMapData.name = rowResult.row[1];
739
      countryMapData.code = rowResult.row[2];
740

    
741
      entityMapData.push(countryMapData);
742
    }
743

    
744
    return entityMapData;
745
  }
746

    
747
  private isCountryToBeRemoved(countryCode: string) {
748
    return (countryCode === 'GG' || countryCode === 'FO' || countryCode === 'GI' || countryCode === 'VA' || countryCode === 'IM'
749
      || countryCode === 'JE' || countryCode === 'LI' || countryCode === 'MC' || countryCode === 'SM' || countryCode === 'SJ'
750
      || countryCode === 'AX');
751
  }
752
}
(1-1/3)