Project

General

Profile

1
import {Injectable} from "@angular/core";
2
import {HttpClient} from "@angular/common/http";
3
import {BehaviorSubject, Observable} from "rxjs";
4
import {Indicator, Stakeholder} from "../utils/entities/stakeholder";
5
import {HelperFunctions} from "../openaireLibrary/utils/HelperFunctions.class";
6
import {map} from "rxjs/operators";
7

    
8
@Injectable({
9
  providedIn: "root"
10
})
11
export class StakeholderService {
12

    
13
  private stakeholderSubject: BehaviorSubject<Stakeholder> = null;
14

    
15
  constructor(private http: HttpClient) {
16
    this.stakeholderSubject = new BehaviorSubject<Stakeholder>(null);
17
  }
18

    
19
  getStakeholder(url: string, alias:string): Observable<Stakeholder> {
20
    return new BehaviorSubject<Stakeholder>(Stakeholder.createECStakeholder()).asObservable();
21
    // return this.http.get<Stakeholder>(url + '/stakeholder/' + encodeURIComponent(alias)).pipe(map(stakeholder => {
22
    //   return this.formalizeStakeholder([stakeholder])[0];
23
    // }));
24
  }
25

    
26
  getAllStakeholders(url: string, type: string = null): Observable<Stakeholder[]> {
27
    return this.http.get<Stakeholder[]>(url + '/stakeholder/all' + (type)?('?type=' + type):'').pipe(map(stakeholders => {
28
      return this.formalizeStakeholder(stakeholders);
29
    }));
30
  }
31

    
32
  getStakeholders(url: string, type: string = null): Observable<Stakeholder[]> {
33
    return this.http.get<Stakeholder[]>(url + '/stakeholder' + (type)?('?type=' + type):'').pipe(map(stakeholders => {
34
      return this.formalizeStakeholder(stakeholders);
35
    }));
36
  }
37

    
38
  getDefaultStakeholders(url: string, type: string = null): Observable<Stakeholder[]> {
39
    return this.http.get<Stakeholder[]>(url + '/stakeholder/default' + (type)?('?type=' + type):'').pipe(map(stakeholders => {
40
      return this.formalizeStakeholder(stakeholders);
41
    }));
42
  }
43

    
44
  saveStakeholder(url: string, stakeholder: Stakeholder): Observable<Stakeholder> {
45
    return this.http.post<Stakeholder>(url + '/stakeholder/save', stakeholder).pipe(map(stakeholder => {
46
      return this.formalizeStakeholder([stakeholder])[0];
47
    }));
48
  }
49

    
50
  saveIndicator(url: string, path: string[], indicator: Indicator): Observable<Indicator> {
51
    path = HelperFunctions.encodeArray(path);
52
    return this.http.post<Indicator>(url + '/' + path.join('/') +
53
      '/indicator/save', indicator);
54
  }
55

    
56
  deleteElement(url: string, path: string[]): Observable<any> {
57
    path = HelperFunctions.encodeArray(path);
58
    return this.http.delete<any>(url + '/' + path.join('/'))
59
  }
60

    
61
  getStakeholderAsObservable(): Observable<Stakeholder> {
62
    return this.stakeholderSubject.asObservable();
63
  }
64

    
65
  get stakeholder(): Stakeholder {
66
    return this.stakeholderSubject.getValue();
67
  }
68

    
69
  setStakeholder(stakeholder: Stakeholder) {
70
    this.stakeholderSubject.next(stakeholder);
71
  }
72

    
73
  private formalizeStakeholder(stakeholders: Stakeholder[]): Stakeholder[] {
74
    stakeholders.forEach( stakeholder => {
75
      stakeholder.topics.forEach( topic => {
76
        topic.categories.forEach( category => {
77
          category.subCategories.forEach(subcategory => {
78
            subcategory.charts.forEach(indicator => {
79
              indicator.indicatorPaths.forEach(indicatorPath => {
80
                if(indicatorPath.parameters) {
81
                  indicatorPath.parameters = new Map<string, string>(Object.entries(indicatorPath.parameters));
82
                }
83
                if(indicatorPath.filters) {
84
                  let filters = new Map<string, Map<string, string>>();
85
                  Object.entries(indicatorPath.filters).forEach(([key, value]) => {
86
                    filters.set(key, new Map<string, string>(Object.entries(value)));
87
                  });
88
                  indicatorPath.filters = filters;
89
                }
90
              });
91
            });
92
          });
93
        });
94
      });
95
    });
96
    return stakeholders;
97
  }
98
}
    (1-1/1)