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

    
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
      } else if (series.series.query.name === 'new.oso.repositories.doar_re3data') {
27
        overviewMapData.repositories = this.rawResultToCountryMapData(series.series.result);
28
      } else if (series.series.query.name === 'new.oso.journals.doaj') {
29
        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
  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
  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
      } 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
      } 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
  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
  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
}
(1-1/3)