Project

General

Profile

1 58825 stefania.m
import { Injectable } from '@angular/core';
2
import { RawData, Row } from '../domain/raw-data';
3 58853 stefania.m
import {
4
  CountryOverviewData,
5
  CountryMapData,
6
  EuropeData,
7
  OverviewMapData,
8
  CountryTableData,
9
  CountryPageOverviewData
10
} from '../domain/overview-map-data';
11 58825 stefania.m
import {Indicator} from '../domain/overview-data';
12
13
@Injectable ()
14
export class DataHandlerService {
15
16
  public convertRawMapDataToMapData(rawData: RawData) {
17
18
    const overviewMapData: OverviewMapData = new OverviewMapData();
19
20
    for (const series of rawData.datasets) {
21
22
      if (series.series.query.name === 'new.oso.publications.affiliated') {
23
        overviewMapData.publications = this.rawResultToCountryMapData(series.series.result);
24
      } else if (series.series.query.name === 'new.oso.datasets.affiliated') {
25
        overviewMapData.datasets = this.rawResultToCountryMapData(series.series.result);
26 58853 stefania.m
      } else if (series.series.query.name === 'new.oso.repositories.doar_re3data') {
27 58825 stefania.m
        overviewMapData.repositories = this.rawResultToCountryMapData(series.series.result);
28 58853 stefania.m
      } else if (series.series.query.name === 'new.oso.journals.doaj') {
29 58825 stefania.m
        overviewMapData.journals = this.rawResultToCountryMapData(series.series.result);
30
      } else if (series.series.query.name === 'new.oso.oa_policies') {
31
        overviewMapData.policies = this.rawResultToCountryMapData(series.series.result);
32
      }
33
    }
34
35
    // console.log('Overview map data (data-handler)', overviewMapData);
36
37
    return overviewMapData;
38
  }
39
40
  public createJoinedPublicationsCountryMap(rawData: RawData) {
41
42
    const joinedPublicationsMap = new Map();
43
44
    for (const series of rawData.datasets) {
45
      if (series.series.query.name === 'new.oso.publications.affiliated') {
46
47
        for (const rowResult of series.series.result) {
48
          if (joinedPublicationsMap.has(rowResult.row[1])) {
49
            const deposited = joinedPublicationsMap.get(rowResult.row[1]).deposited;
50
            joinedPublicationsMap.delete(rowResult.row[1]);
51
            joinedPublicationsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
52
              affiliated: Number(rowResult.row[0]), deposited: deposited});
53
          } else {
54
            joinedPublicationsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
55
              affiliated: Number(rowResult.row[0]), deposited: 0});
56
          }
57
        }
58
59
      } else if (series.series.query.name === 'new.oso.publications.deposited') {
60
61
        for (const rowResult of series.series.result) {
62
          if (joinedPublicationsMap.has(rowResult.row[1])) {
63
            const affiliated = joinedPublicationsMap.get(rowResult.row[1]).affiliated;
64
            joinedPublicationsMap.delete(rowResult.row[1]);
65
            joinedPublicationsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
66
              affiliated: affiliated, deposited: Number(rowResult.row[0])});
67
          }
68
          joinedPublicationsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
69
            affiliated: 0, deposited: Number(rowResult.row[0])});
70
        }
71
      }
72
    }
73
74
    return joinedPublicationsMap;
75
  }
76
77
  public createJoinedDatasetsCountryMap(rawData: RawData) {
78
79
    const joinedDatasetsMap = new Map();
80
81
    for (const series of rawData.datasets) {
82
      if (series.series.query.name === 'new.oso.datasets.affiliated') {
83
84
        for (const rowResult of series.series.result) {
85
          if (joinedDatasetsMap.has(rowResult.row[1])) {
86
            const deposited = joinedDatasetsMap.get(rowResult.row[1]).deposited;
87
            joinedDatasetsMap.delete(rowResult.row[1]);
88
            joinedDatasetsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
89
              affiliated: Number(rowResult.row[0]), deposited: deposited});
90
          } else {
91
            joinedDatasetsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
92
              affiliated: Number(rowResult.row[0]), deposited: 0});
93
          }
94
        }
95
96
      } else if (series.series.query.name === 'new.oso.datasets.deposited') {
97
98
        for (const rowResult of series.series.result) {
99
          if (joinedDatasetsMap.has(rowResult.row[1])) {
100
            const affiliated = joinedDatasetsMap.get(rowResult.row[1]).affiliated;
101
            joinedDatasetsMap.delete(rowResult.row[1]);
102
            joinedDatasetsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
103
              affiliated: affiliated, deposited: Number(rowResult.row[0])});
104
          }
105
          joinedDatasetsMap.set(rowResult.row[1], { countryName: rowResult.row[1], countryCode: rowResult.row[2],
106
            affiliated: 0, deposited: Number(rowResult.row[0])});
107
        }
108
      }
109
    }
110
111
    return joinedDatasetsMap;
112
113
  }
114
115 58853 stefania.m
  public createJoinedRepositoriesCountryMap(rawData: RawData) {
116
117
    const joinedRepositoriesMap = new Map();
118
119
    for (const series of rawData.datasets) {
120
      if (series.series.query.name === 'new.oso.repositories.doar_re3data') {
121
122
        for (const rowResult of series.series.result) {
123
          if (joinedRepositoriesMap.has(rowResult.row[1])) {
124
            const simple = joinedRepositoriesMap.get(rowResult.row[1]).simple;
125
            joinedRepositoriesMap.delete(rowResult.row[1]);
126
            joinedRepositoriesMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
127
              doar_re3data: Number(rowResult.row[0]), simple: simple});
128
          } else {
129
            joinedRepositoriesMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
130
              doar_re3data: Number(rowResult.row[0]), simple: 0});
131
          }
132
        }
133
134
      } else if (series.series.query.name === 'new.oso.repositories') {
135
136
        for (const rowResult of series.series.result) {
137
          if (joinedRepositoriesMap.has(rowResult.row[1])) {
138
            const doar_re3data = joinedRepositoriesMap.get(rowResult.row[1]).doar_re3data;
139
            joinedRepositoriesMap.delete(rowResult.row[1]);
140
            joinedRepositoriesMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
141
              doar_re3data: doar_re3data, simple: Number(rowResult.row[0])});
142
          }
143
          joinedRepositoriesMap.set(rowResult.row[1], { countryName: rowResult.row[1], countryCode: rowResult.row[2],
144
            doar_re3data: 0, simple: Number(rowResult.row[0])});
145
        }
146
      }
147
    }
148
149
    return joinedRepositoriesMap;
150
151
  }
152
153
  public createJoinedJournalsCountryMap(rawData: RawData) {
154
155
    const joinedJournalsMap = new Map();
156
157
    for (const series of rawData.datasets) {
158
      if (series.series.query.name === 'new.oso.journals.doaj') {
159
160
        for (const rowResult of series.series.result) {
161
          if (joinedJournalsMap.has(rowResult.row[1])) {
162
            const simple = joinedJournalsMap.get(rowResult.row[1]).simple;
163
            joinedJournalsMap.delete(rowResult.row[1]);
164
            joinedJournalsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
165
              doaj: Number(rowResult.row[0]), simple: simple});
166
          } else {
167
            joinedJournalsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
168
              doaj: Number(rowResult.row[0]), simple: 0});
169
          }
170
        }
171
172
      } else if (series.series.query.name === 'new.oso.journals') {
173
174
        for (const rowResult of series.series.result) {
175
          if (joinedJournalsMap.has(rowResult.row[1])) {
176
            const doaj = joinedJournalsMap.get(rowResult.row[1]).doaj;
177
            joinedJournalsMap.delete(rowResult.row[1]);
178
            joinedJournalsMap.set(rowResult.row[1], {countryName: rowResult.row[1], countryCode: rowResult.row[2],
179
              doaj: doaj, simple: Number(rowResult.row[0])});
180
          }
181
          joinedJournalsMap.set(rowResult.row[1], { countryName: rowResult.row[1], countryCode: rowResult.row[2],
182
            doaj: 0, simple: Number(rowResult.row[0])});
183
        }
184
      }
185
    }
186
187
    return joinedJournalsMap;
188
189
  }
190
191 58825 stefania.m
  public convertRawDataToCountryOverviewData(rawData: RawData) {
192
193
    const countryData: CountryOverviewData = new CountryOverviewData();
194
195
    for (const series of rawData.datasets) {
196
197
      if (series.series.query.name === 'new.oso.publications.affiliated.country') {
198
        countryData.publicationsAffiliated = Number(series.series.result[0].row[0]);
199
      } else if (series.series.query.name === 'new.oso.publications.deposited.country') {
200
        countryData.publicationsDeposited = Number(series.series.result[0].row[0]);
201
      } else if (series.series.query.name === 'new.oso.datasets.affiliated.country') {
202
        countryData.datasetsAffiliated = Number(series.series.result[0].row[0]);
203
      } else if (series.series.query.name === 'new.oso.datasets.deposited.country') {
204
        countryData.datasetsDeposited = Number(series.series.result[0].row[0]);
205
      } else if (series.series.query.name === 'new.oso.repositories.doar_re3data.country') {
206
        countryData.repositories = Number(series.series.result[0].row[0]);
207
      } else if (series.series.query.name === 'new.oso.journals.doaj.country') {
208
        countryData.journals = Number(series.series.result[0].row[0]);
209
      } else if (series.series.query.name === 'new.oso.oa_policies.country') {
210
        countryData.policies = Number(series.series.result[0].row[0]);
211
      }
212
    }
213
214
    return countryData;
215
  }
216
217
  public convertRawDataToEuropeOverviewData(rawData: RawData) {
218
219
    const europeData: EuropeData = new EuropeData();
220
221
    for (const series of rawData.datasets) {
222
223
      if (series.series.query.name === 'new.oso.publications.oa_percentage') {
224
225
        const publicationsIndicator: Indicator = new Indicator();
226
        publicationsIndicator.percentage = Number(series.series.result[0].row[0]);
227
        publicationsIndicator.oa = Number(series.series.result[0].row[1]);
228
        publicationsIndicator.total = Number(series.series.result[0].row[2]);
229
        europeData.publications = publicationsIndicator;
230
231
      } else if (series.series.query.name === 'new.oso.datasets.oa_percentage') {
232
233
        const datasetsIndicator: Indicator = new Indicator();
234
        datasetsIndicator.percentage = Number(series.series.result[0].row[0]);
235
        datasetsIndicator.oa = Number(series.series.result[0].row[1]);
236
        datasetsIndicator.total = Number(series.series.result[0].row[2]);
237
        europeData.datasets = datasetsIndicator;
238
239 58853 stefania.m
      } else if (series.series.query.name === 'new.oso.software.oa_percentage') {
240
241
        const softwareIndicator: Indicator = new Indicator();
242
        softwareIndicator.percentage = Number(series.series.result[0].row[0]);
243
        softwareIndicator.oa = Number(series.series.result[0].row[1]);
244
        softwareIndicator.total = Number(series.series.result[0].row[2]);
245
        europeData.software = softwareIndicator;
246
247
      } else if (series.series.query.name === 'new.oso.other.oa_percentage') {
248
249
        const otherIndicator: Indicator = new Indicator();
250
        otherIndicator.percentage = Number(series.series.result[0].row[0]);
251
        otherIndicator.oa = Number(series.series.result[0].row[1]);
252
        otherIndicator.total = Number(series.series.result[0].row[2]);
253
        europeData.other = otherIndicator;
254
255 58825 stefania.m
      } else if (series.series.query.name === 'new.oso.repositories.doar_re3data.validated') {
256
257
        const repositoriesIndicator: Indicator = new Indicator();
258
        repositoriesIndicator.percentage = Number(series.series.result[0].row[0]);
259
        repositoriesIndicator.oa = Number(series.series.result[0].row[1]);
260
        repositoriesIndicator.total = Number(series.series.result[0].row[2]);
261
        europeData.repositories = repositoriesIndicator;
262
263
      } else if (series.series.query.name === 'new.oso.journals.doaj.validated') {
264
265
        const journalsIndicator: Indicator = new Indicator();
266
        journalsIndicator.percentage = Number(series.series.result[0].row[0]);
267
        journalsIndicator.oa = Number(series.series.result[0].row[1]);
268
        journalsIndicator.total = Number(series.series.result[0].row[2]);
269
        europeData.journals = journalsIndicator;
270
271
      } else if (series.series.query.name === 'new.oso.oa_policies.europe') {
272
273
        const policiesIndicator: Indicator = new Indicator();
274
        policiesIndicator.percentage = Number(series.series.result[0].row[0]);
275
        policiesIndicator.oa = Number(series.series.result[0].row[1]);
276
        policiesIndicator.total = Number(series.series.result[0].row[2]);
277
        europeData.policies = policiesIndicator;
278
279
      }
280
    }
281
282
    return europeData;
283
  }
284
285
  public convertRawDataToAbsoluteTableData(rawData: RawData) {
286
287
    const mapTableData: Map<string, CountryTableData> = new Map();
288
289
    for (const series of rawData.datasets) {
290
291
      if (series.series.query.name.includes('new.oso.publications')) {
292
        for (const rowResult of series.series.result) {
293
294
          // remove unwanted countries
295
          if (this.isCountryToBeRemoved(rowResult.row[2])) {
296
            continue;
297
          }
298
299
          if (mapTableData.has(rowResult.row[2])) {
300
            const countryTableData = mapTableData.get(rowResult.row[2]);
301
            countryTableData.publications = Number(rowResult.row[0]);
302
          } else {
303
            const countryTableData: CountryTableData = new CountryTableData();
304
            countryTableData.publications = Number(rowResult.row[0]);
305
            countryTableData.name = rowResult.row[1];
306
            countryTableData.code = rowResult.row[2];
307
            mapTableData.set(rowResult.row[2], countryTableData);
308
          }
309
        }
310
311
      } else if (series.series.query.name.includes('new.oso.datasets')) {
312
313
        for (const rowResult of series.series.result) {
314
315
          // remove unwanted countries
316
          if (this.isCountryToBeRemoved(rowResult.row[2])) {
317
            continue;
318
          }
319
320
          if (mapTableData.has(rowResult.row[2])) {
321
            const countryTableData = mapTableData.get(rowResult.row[2]);
322
            countryTableData.datasets = Number(rowResult.row[0]);
323
          } else {
324
            const countryTableData: CountryTableData = new CountryTableData();
325
            countryTableData.datasets = Number(rowResult.row[0]);
326
            countryTableData.name = rowResult.row[1];
327
            countryTableData.code = rowResult.row[2];
328
            mapTableData.set(rowResult.row[2], countryTableData);
329
          }
330
        }
331
      } else if (series.series.query.name.includes('new.oso.software')) {
332
333
        for (const rowResult of series.series.result) {
334
335
          // remove unwanted countries
336
          if (this.isCountryToBeRemoved(rowResult.row[2])) {
337
            continue;
338
          }
339
340
          if (mapTableData.has(rowResult.row[2])) {
341
            const countryTableData = mapTableData.get(rowResult.row[2]);
342
            countryTableData.software = Number(rowResult.row[0]);
343
          } else {
344
            const countryTableData: CountryTableData = new CountryTableData();
345
            countryTableData.software = Number(rowResult.row[0]);
346
            countryTableData.name = rowResult.row[1];
347
            countryTableData.code = rowResult.row[2];
348
            mapTableData.set(rowResult.row[2], countryTableData);
349
          }
350
        }
351
      } else if (series.series.query.name.includes('new.oso.other')) {
352
353
        for (const rowResult of series.series.result) {
354
355
          // remove unwanted countries
356
          if (this.isCountryToBeRemoved(rowResult.row[2])) {
357
            continue;
358
          }
359
360
          if (mapTableData.has(rowResult.row[2])) {
361
            const countryTableData = mapTableData.get(rowResult.row[2]);
362
            countryTableData.other = Number(rowResult.row[0]);
363
          } else {
364
            const countryTableData: CountryTableData = new CountryTableData();
365
            countryTableData.other = Number(rowResult.row[0]);
366
            countryTableData.name = rowResult.row[1];
367
            countryTableData.code = rowResult.row[2];
368
            mapTableData.set(rowResult.row[2], countryTableData);
369
          }
370
        }
371
      } else if (series.series.query.name.includes('new.oso.repositories')) {
372
373
        for (const rowResult of series.series.result) {
374
375
          // remove unwanted countries
376
          if (this.isCountryToBeRemoved(rowResult.row[2])) {
377
            continue;
378
          }
379
380
          if (mapTableData.has(rowResult.row[2])) {
381
            const countryTableData = mapTableData.get(rowResult.row[2]);
382
            countryTableData.repositories = Number(rowResult.row[0]);
383
          } else {
384
            const countryTableData: CountryTableData = new CountryTableData();
385
            countryTableData.repositories = Number(rowResult.row[0]);
386
            countryTableData.name = rowResult.row[1];
387
            countryTableData.code = rowResult.row[2];
388
            mapTableData.set(rowResult.row[2], countryTableData);
389
          }
390
        }
391
      } else if (series.series.query.name.includes('new.oso.journals')) {
392
393
        for (const rowResult of series.series.result) {
394
395
          // remove unwanted countries
396
          if (this.isCountryToBeRemoved(rowResult.row[2])) {
397
            continue;
398
          }
399
400
          if (mapTableData.has(rowResult.row[2])) {
401
            const countryTableData = mapTableData.get(rowResult.row[2]);
402
            countryTableData.journals = Number(rowResult.row[0]);
403
          } else {
404
            const countryTableData: CountryTableData = new CountryTableData();
405
            countryTableData.journals = Number(rowResult.row[0]);
406
            countryTableData.name = rowResult.row[1];
407
            countryTableData.code = rowResult.row[2];
408
            mapTableData.set(rowResult.row[2], countryTableData);
409
          }
410
        }
411
      }
412
    }
413
414
    const tableData: CountryTableData[] = [];
415
416
    mapTableData.forEach((value: CountryTableData, key: string) => {
417
      // console.log(key, value);
418
      tableData.push(value);
419
    });
420
421
    return tableData;
422
  }
423
424 58853 stefania.m
  public convertRawDataToPercentageTableData(rawData: RawData) {
425
426
    const mapTableData: Map<string, CountryTableData> = new Map();
427
428
    for (const series of rawData.datasets) {
429
430
      if (series.series.query.name.includes('new.oso.results')
431
        && series.series.query.parameters && series.series.query.parameters[0] === 'publication') {
432
        for (const rowResult of series.series.result) {
433
434
          // remove unwanted countries
435
          if (this.isCountryToBeRemoved(rowResult.row[4])) {
436
            continue;
437
          }
438
439
          if (mapTableData.has(rowResult.row[4])) {
440
            const countryTableData = mapTableData.get(rowResult.row[4]);
441
            if (rowResult.row[0] !== 'NaN') {
442
              countryTableData.publications = Number(rowResult.row[0]);
443
            }
444
          } else {
445
            const countryTableData: CountryTableData = new CountryTableData();
446
            if (rowResult.row[0] !== 'NaN') {
447
              countryTableData.publications = Number(rowResult.row[0]);
448
            }
449
            countryTableData.name = rowResult.row[3];
450
            countryTableData.code = rowResult.row[4];
451
            mapTableData.set(rowResult.row[4], countryTableData);
452
          }
453
        }
454
455
      } else if (series.series.query.name.includes('new.oso.results')
456
        && series.series.query.parameters && series.series.query.parameters[0] === 'dataset') {
457
458
        for (const rowResult of series.series.result) {
459
460
          // remove unwanted countries
461
          if (this.isCountryToBeRemoved(rowResult.row[4])) {
462
            continue;
463
          }
464
465
          if (mapTableData.has(rowResult.row[4])) {
466
            const countryTableData = mapTableData.get(rowResult.row[4]);
467
            if (rowResult.row[0] !== 'NaN') {
468
              countryTableData.datasets = Number(rowResult.row[0]);
469
            }
470
          } else {
471
            const countryTableData: CountryTableData = new CountryTableData();
472
            if (rowResult.row[0] !== 'NaN') {
473
              countryTableData.datasets = Number(rowResult.row[0]);
474
            }
475
            countryTableData.name = rowResult.row[3];
476
            countryTableData.code = rowResult.row[4];
477
            mapTableData.set(rowResult.row[4], countryTableData);
478
          }
479
        }
480
      } else if (series.series.query.name.includes('new.oso.results')
481
        && series.series.query.parameters && series.series.query.parameters[0] === 'software') {
482
483
        for (const rowResult of series.series.result) {
484
485
          // remove unwanted countries
486
          if (this.isCountryToBeRemoved(rowResult.row[4])) {
487
            continue;
488
          }
489
490
          if (mapTableData.has(rowResult.row[4])) {
491
            const countryTableData = mapTableData.get(rowResult.row[4]);
492
            if (rowResult.row[0] !== 'NaN') {
493
              countryTableData.software = Number(rowResult.row[0]);
494
            }
495
          } else {
496
            const countryTableData: CountryTableData = new CountryTableData();
497
            if (rowResult.row[0] !== 'NaN') {
498
              countryTableData.software = Number(rowResult.row[0]);
499
            }
500
            countryTableData.name = rowResult.row[3];
501
            countryTableData.code = rowResult.row[4];
502
            mapTableData.set(rowResult.row[4], countryTableData);
503
          }
504
        }
505
      } else if (series.series.query.name.includes('new.oso.results')
506
        && series.series.query.parameters && series.series.query.parameters[0] === 'other') {
507
508
        for (const rowResult of series.series.result) {
509
510
          // remove unwanted countries
511
          if (this.isCountryToBeRemoved(rowResult.row[4])) {
512
            continue;
513
          }
514
515
          if (mapTableData.has(rowResult.row[4])) {
516
            const countryTableData = mapTableData.get(rowResult.row[4]);
517
            if (rowResult.row[0] !== 'NaN') {
518
              countryTableData.other = Number(rowResult.row[0]);
519
            }
520
          } else {
521
            const countryTableData: CountryTableData = new CountryTableData();
522
            if (rowResult.row[0] !== 'NaN') {
523
              countryTableData.other = Number(rowResult.row[0]);
524
            }
525
            countryTableData.name = rowResult.row[3];
526
            countryTableData.code = rowResult.row[4];
527
            mapTableData.set(rowResult.row[4], countryTableData);
528
          }
529
        }
530
      } else if (series.series.query.name.includes('new.oso.repositories')) {
531
532
        for (const rowResult of series.series.result) {
533
534
          // remove unwanted countries
535
          if (this.isCountryToBeRemoved(rowResult.row[4])) {
536
            continue;
537
          }
538
539
          if (mapTableData.has(rowResult.row[4])) {
540
            const countryTableData = mapTableData.get(rowResult.row[4]);
541
            countryTableData.repositories = Number(rowResult.row[0]);
542
          } else {
543
            const countryTableData: CountryTableData = new CountryTableData();
544
            countryTableData.repositories = Number(rowResult.row[0]);
545
            countryTableData.name = rowResult.row[3];
546
            countryTableData.code = rowResult.row[4];
547
            mapTableData.set(rowResult.row[4], countryTableData);
548
          }
549
        }
550
      } else if (series.series.query.name.includes('new.oso.journals')) {
551
552
        for (const rowResult of series.series.result) {
553
554
          // remove unwanted countries
555
          if (this.isCountryToBeRemoved(rowResult.row[4])) {
556
            continue;
557
          }
558
559
          if (mapTableData.has(rowResult.row[4])) {
560
            const countryTableData = mapTableData.get(rowResult.row[4]);
561
            countryTableData.journals = Number(rowResult.row[0]);
562
          } else {
563
            const countryTableData: CountryTableData = new CountryTableData();
564
            countryTableData.journals = Number(rowResult.row[0]);
565
            countryTableData.name = rowResult.row[3];
566
            countryTableData.code = rowResult.row[4];
567
            mapTableData.set(rowResult.row[4], countryTableData);
568
          }
569
        }
570
      }
571
    }
572
573
    const tableData: CountryTableData[] = [];
574
575
    mapTableData.forEach((value: CountryTableData, key: string) => {
576
      // console.log(key, value);
577
      tableData.push(value);
578
    });
579
580
    return tableData;
581
  }
582
583
  public convertRawDataToCountryPageOverviewData(rawData: RawData) {
584
585
    const countryPageOverviewData: CountryPageOverviewData = new CountryPageOverviewData();
586
587
    for (const series of rawData.datasets) {
588
589
      if ((series.series.query.name === 'new.oso.results.oa_percentage.country')
590
        && series.series.query.parameters && series.series.query.parameters[0] === 'publication') {
591
592
        countryPageOverviewData.name = series.series.result[0].row[3];
593
        countryPageOverviewData.code = series.series.result[0].row[4];
594
595
        const publicationsAffiliatedIndicator: Indicator = new Indicator();
596
        publicationsAffiliatedIndicator.percentage = Number(series.series.result[0].row[0]);
597
        publicationsAffiliatedIndicator.oa = Number(series.series.result[0].row[1]);
598
        publicationsAffiliatedIndicator.total = Number(series.series.result[0].row[2]);
599
        countryPageOverviewData.publicationsAffiliated = publicationsAffiliatedIndicator;
600
601
      } else if ((series.series.query.name === 'new.oso.results.oa_percentage.deposited.country')
602
        && series.series.query.parameters && series.series.query.parameters[0] === 'publication') {
603
604
        countryPageOverviewData.name = series.series.result[0].row[3];
605
        countryPageOverviewData.code = series.series.result[0].row[4];
606
607
        const publicationsDepositedIndicator: Indicator = new Indicator();
608
        publicationsDepositedIndicator.percentage = Number(series.series.result[0].row[0]);
609
        publicationsDepositedIndicator.oa = Number(series.series.result[0].row[1]);
610
        publicationsDepositedIndicator.total = Number(series.series.result[0].row[2]);
611
        countryPageOverviewData.publicationsDeposited = publicationsDepositedIndicator;
612
613
      } if ((series.series.query.name === 'new.oso.results.oa_percentage.country')
614
        && series.series.query.parameters && series.series.query.parameters[0] === 'dataset') {
615
616
        countryPageOverviewData.name = series.series.result[0].row[3];
617
        countryPageOverviewData.code = series.series.result[0].row[4];
618
619
        const datasetsAffiliatedIndicator: Indicator = new Indicator();
620
        datasetsAffiliatedIndicator.percentage = Number(series.series.result[0].row[0]);
621
        datasetsAffiliatedIndicator.oa = Number(series.series.result[0].row[1]);
622
        datasetsAffiliatedIndicator.total = Number(series.series.result[0].row[2]);
623
        countryPageOverviewData.datasetsAffiliated = datasetsAffiliatedIndicator;
624
625
      } else if ((series.series.query.name === 'new.oso.results.oa_percentage.deposited.country')
626
        && series.series.query.parameters && series.series.query.parameters[0] === 'dataset') {
627
628
        countryPageOverviewData.name = series.series.result[0].row[3];
629
        countryPageOverviewData.code = series.series.result[0].row[4];
630
631
        const datasetsDepositedIndicator: Indicator = new Indicator();
632
        datasetsDepositedIndicator.percentage = Number(series.series.result[0].row[0]);
633
        datasetsDepositedIndicator.oa = Number(series.series.result[0].row[1]);
634
        datasetsDepositedIndicator.total = Number(series.series.result[0].row[2]);
635
        countryPageOverviewData.datasetsDeposited = datasetsDepositedIndicator;
636
637
      } else if (series.series.query.name === 'new.oso.repositories.doar_re3data.validated.country') {
638
639
        countryPageOverviewData.name = series.series.result[0].row[3];
640
        countryPageOverviewData.code = series.series.result[0].row[4];
641
642
        const repositoriesIndicator: Indicator = new Indicator();
643
        repositoriesIndicator.percentage = Number(series.series.result[0].row[0]);
644
        repositoriesIndicator.oa = Number(series.series.result[0].row[1]);
645
        repositoriesIndicator.total = Number(series.series.result[0].row[2]);
646
        countryPageOverviewData.repositories = repositoriesIndicator;
647
648
      } else if (series.series.query.name === 'new.oso.journals.doaj.validated.country') {
649
650
        countryPageOverviewData.name = series.series.result[0].row[3];
651
        countryPageOverviewData.code = series.series.result[0].row[4];
652
653
        const journalsIndicator: Indicator = new Indicator();
654
        journalsIndicator.percentage = Number(series.series.result[0].row[0]);
655
        journalsIndicator.oa = Number(series.series.result[0].row[1]);
656
        journalsIndicator.total = Number(series.series.result[0].row[2]);
657
        countryPageOverviewData.journals = journalsIndicator;
658
659
      } else if (series.series.query.name === 'new.oso.oa_policies.country') {
660
661
        countryPageOverviewData.policies = Number(series.series.result[0].row[0]);
662
663
      } else if (series.series.query.name === 'new.oso.funder.country') {
664
665
        countryPageOverviewData.funders = Number(series.series.result[0].row[0]);
666
667
      } else if (series.series.query.name === 'new.oso.funding_organizations.country') {
668
669
        countryPageOverviewData.fundingOrganizations = Number(series.series.result[0].row[0]);
670
671
      } else if (series.series.query.name === 'new.oso.ec_funded_organizations.country') {
672
673
        countryPageOverviewData.ec_fundedOrganizations = Number(series.series.result[0].row[0]);
674
      }
675
    }
676
677
    return countryPageOverviewData;
678
  }
679
680 58825 stefania.m
  private rawResultToCountryMapData(result: Row[]) {
681
682
    const entityMapData: CountryMapData[] = [];
683
    for (const rowResult of result) {
684
685
      // remove unwanted countries
686
      if (this.isCountryToBeRemoved(rowResult.row[2])) {
687
        continue;
688
      }
689
690
      const countryMapData: CountryMapData = new CountryMapData();
691
      countryMapData.value = Number(rowResult.row[0]);
692
      countryMapData.name = rowResult.row[1];
693
      countryMapData.code = rowResult.row[2];
694
695
      entityMapData.push(countryMapData);
696
    }
697
698
    return entityMapData;
699
  }
700
701
  private isCountryToBeRemoved(countryCode: string) {
702
    return (countryCode === 'GG' || countryCode === 'FO' || countryCode === 'GI' || countryCode === 'VA' || countryCode === 'IM'
703
      || countryCode === 'JE' || countryCode === 'LI' || countryCode === 'MC' || countryCode === 'SM' || countryCode === 'SJ'
704
      || countryCode === 'AX');
705
  }
706
}