Project

General

Profile

1
/*
2
* Created by myrto on 12/05/2017
3
*/
4

    
5
/*
6
*  !!! USING TEMPORARY API ADDRESS AND USER
7
*/
8

    
9
import { Injectable } from '@angular/core';
10
import { Observable } from 'rxjs/Observable';
11
import 'rxjs/add/operator/map';
12
import { Http, Response, Headers, RequestOptions } from '@angular/http';
13

    
14
import {
15
  AdvQueryObject, BrowseEntry, EventsPage, OpenaireSubscription, Repository, SimpleSubscriptionDesc, Subscription,
16
  Term
17
} from '../domain/typeScriptClasses';
18
import { apiUrl } from '../domain/tempAPI';
19

    
20
let headers = new Headers({ 'Content-Type': 'application/json' });
21
let httpOptions = new RequestOptions({ headers: headers });
22

    
23
@Injectable ()
24
export class BrokerService {
25
  private apiUrl = apiUrl + '/broker/';
26

    
27
  constructor(private http: Http) { }
28

    
29
  advancedShowEvents(page: number,searchParams: AdvQueryObject): Observable<EventsPage>{
30
    let url = `${this.apiUrl}advancedShowEvents/${page}/10`;
31
    console.log(`knocking on: ${url}`);
32
    let body = searchParams;
33
    console.log(`sending ${JSON.stringify(body)}`);
34
    httpOptions.withCredentials = true;
35
    return this.http.post(url,body,httpOptions)
36
      .map( res => <EventsPage>res.json())
37
      .catch(this.handleError).share();
38
  }
39

    
40
  getDatasourcesOfUser(userEmail: string): Observable<Repository[]> {
41
    let url = `${this.apiUrl}getDatasourcesOfUser?user=${userEmail}&includeShared=true&includeByOthers=true`;
42
    console.log(`knocking on: ${url}`);
43

    
44
    httpOptions.withCredentials = true;
45
    return this.http.post(url,httpOptions)
46
      .map( res => <Repository[]>res.json())
47
      .catch(this.handleError).share();
48
  }
49

    
50
  getDnetTopics(): Observable<Map<string,Term>> {
51
    let url = `${this.apiUrl}getDnetTopics`;
52
    console.log(`knocking on: ${url}`);
53
    return this.http.get(url)
54
      .map( res => <Map<string,Term>>res.json())
55
      .catch(this.handleError);
56
  }
57

    
58
  getNotificationsBySubscriptionId(subId: string, page: number): Observable<EventsPage> {
59
    let url = `${this.apiUrl}getNotificationsBySubscriptionId/${subId}/${page}/100`;
60
    console.log(`knocking on: ${url}`);
61
    return this.http.get(url)
62
      .map( res => <EventsPage>res.json())
63
      .catch(this.handleError);
64
  }
65

    
66
  getSimpleSubscriptionsOfUser(userEmail: string): Observable<Map<string,SimpleSubscriptionDesc>> {
67
    let url = `${this.apiUrl}getSimpleSubscriptionsOfUser/${userEmail}`;
68
    console.log(`knocking on: ${url}`);
69
    return this.http.get(url)
70
      .map( res => <Map<string,SimpleSubscriptionDesc>>res.json())
71
      .catch(this.handleError);
72
  }
73

    
74
  getSubscription(subId: string): Observable<Subscription> {
75
    let url = `${this.apiUrl}getSubscription/${subId}`;
76
    console.log(`knocking on: ${url}`);
77
    return this.http.get(url)
78
      .map( res => <Subscription>res.json())
79
      .catch(this.handleError);
80
  }
81

    
82
/*
83
  NOT WORKING AND PROBABLY NOT NEEDED
84
  getSubscriptionsOfUser(userEmail): Observable<Subscription[]> {}
85
*/
86

    
87
  getTopicsForDataSource(name: string): Observable<BrowseEntry[]> {
88
    let url = `${this.apiUrl}getTopicsForDatasource/${name}`;
89
    console.log(`knocking on: ${url}`);
90
    return this.http.get(url)
91
      .map( res => <BrowseEntry[]>res.json())
92
      .catch(this.handleError);
93
  }
94

    
95
/* NOT WORKING AND PROBABLY NOT NEEDED
96
  showEvents(repoName: string, topic: string, page: number): Observable<EventsPage> {
97
    let url = `${this.apiUrl}showEvents/{datasourceName}/{topic}/{page}?datasourceName=${repoName}&topic=${topic}&page=${page}`;
98
    console.log(`knocking on: ${url}`);
99
    return this.http.get(url)
100
      .map( res => <EventsPage>res.json())
101
      .catch(this.handleError);
102
  }
103
*/
104

    
105
  /*CHECK IF sub is sent as body*/
106
  subscribeToEvent(sub: OpenaireSubscription): Observable<string>{
107
    let url = `${this.apiUrl}subscribe`;
108
    console.log(`knocking on: ${url}`);
109
    let body = JSON.stringify(sub);
110
    httpOptions.withCredentials = true;
111
    return this.http.post(url,body,httpOptions)
112
      .map( res => res.json())
113
      .catch(this.handleError);
114
  }
115

    
116
  unsubscribe(subscriptionId: string): Observable<string> {
117
    let url = `${this.apiUrl}unsubscribe/${subscriptionId}`;
118
    console.log(`knocking on: ${url}`);
119
    httpOptions.withCredentials = true;
120
    return this.http.post(url,httpOptions)
121
      .map( res => res.status.toString())
122
      .catch(this.handleError);
123
}
124

    
125

    
126
private handleError(error: Response | any) {
127
    // In a real world app, we might use a remote logging infrastructure
128
    // We'd also dig deeper into the error to get a better message
129
    let errMsg = "";
130
    console.log('E R R O R !!!');
131
    console.log(error);
132
    if (error instanceof Response) {
133
      const body = error.text() || '';
134
      //const err = body.error || JSON.stringify(body);
135
      errMsg = `${error.status} - ${error.statusText || ''} ${body}`;
136
      console.log(errMsg);
137
    } else {
138
      errMsg = (error.message) ? error.message :
139
        error.status ? `${error.status} - ${error.statusText}` : 'Server error';
140
      console.error(errMsg); // log to console instead
141
    }
142
    return Observable.throw(errMsg);
143
  }
144

    
145
}
(3-3/8)