Project

General

Profile

1
import {Component, Input, ViewChild} from '@angular/core';
2
import { ActivatedRoute} from '@angular/router';
3
import {Location} from '@angular/common';
4
import { Filter, Value} from '../searchUtils/searchHelperClasses.class';
5
import {SearchDataprovidersService} from '../../services/searchDataproviders.service';
6
import {SearchResult}     from '../../utils/entities/searchResult';
7
import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties';
8
import {SearchFields} from '../../utils/properties/searchFields';
9
import {SearchPageComponent } from '../searchUtils/searchPage.component';
10
import {SearchUtilsClass } from '../searchUtils/searchUtils.class';
11

    
12
@Component({
13
    selector: 'search-dataproviders',
14
    template: `
15

    
16
    <search-page pageTitle="Search Content Providers"
17
                  formPlaceholderText = "Search for Content Providers"
18
                 type="content providers" entityType="dataprovider" [(filters)] = "filters"
19
                 [(results)] = "results"   [(searchUtils)] = "searchUtils" [baseUrl] = "baseUrl"
20
				         (queryChange)="queryChanged($event)"
21
                 [csvParams]="csvParams" csvPath="datasources" advancedSearchLink="/search/advanced/dataproviders"
22
                 [disableForms]="disableForms"
23
                 searchFormClass="datasourcesSearchForm">
24
    </search-page>
25

    
26
    `
27
})
28
export class SearchDataprovidersComponent {
29
  public results =[];
30
  public filters =[];
31
  public totalResults:number  = 0 ;
32
  public baseUrl:string;
33
  public searchUtils:SearchUtilsClass = new SearchUtilsClass();
34
  public sub: any; public subResults: any;
35
  public _location:Location;
36
  public searchFields:SearchFields = new SearchFields();
37
  public refineFields: string[] =  this.searchFields.DATASOURCE_REFINE_FIELDS;
38
   public fieldIdsMap= this.searchFields.DATASOURCE_FIELDS;
39
  public CSV: any = {  "columnNames":  [ "Title", "Type", "Coutries", "Compatibility" ],
40
                        "export":[]
41
                     };
42
  public CSVDownloaded = false;
43
  public csvParams: string;
44

    
45
  public disableForms: boolean = false;
46

    
47
  @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ;
48

    
49
  constructor (private route: ActivatedRoute, private _searchDataprovidersService: SearchDataprovidersService ) {
50
    var errorCodes:ErrorCodes = new ErrorCodes();
51
    this.searchUtils.status =errorCodes.LOADING;
52
    this.searchUtils.page =1;
53
    this.baseUrl = OpenaireProperties.getLinkToSearchDataProviders();
54
  }
55

    
56
  public ngOnInit() {
57
    this.searchPage.refineFields = this.refineFields;
58
     this.searchPage.fieldIdsMap = this.fieldIdsMap;
59
     var firstLoad =true;
60

    
61
    this.sub =  this.route.queryParams.subscribe(params => {
62
        this.searchUtils.keyword = (params['keyword']?params['keyword']:'');
63
        var refine = true;
64
        if(this.searchUtils.page != ((params['page']=== undefined)?1:+params['page']) && this.filters && !firstLoad){
65
          refine = false;
66

    
67
        }
68
        firstLoad = false;
69
        this.searchUtils.page = (params['page']=== undefined)?1:+params['page'];
70

    
71
         var queryParameters = this.searchPage.getQueryParametersFromUrl(params);
72
        this._getResults(queryParameters, refine, this.searchUtils.page, this.searchUtils.size);
73
    });
74
  }
75

    
76
  public ngOnDestroy() {
77
    if(this.sub){
78
      this.sub.unsubscribe();
79
    }
80
    if(this.subResults){
81
      this.subResults.unsubscribe();
82
    }
83
  }
84

    
85
  public getNumForEntity(entity: string, id:string) {
86
      var errorCodes:ErrorCodes = new ErrorCodes();
87
      this.searchUtils.status = errorCodes.LOADING;
88

    
89
      if(id != "" && entity != "") {
90

    
91
          this._searchDataprovidersService.numOfEntityDataproviders(id, entity).subscribe(
92
              data => {
93
                  this.searchUtils.totalResults = data;
94

    
95
                  var errorCodes:ErrorCodes = new ErrorCodes();
96
                  this.searchUtils.status = errorCodes.DONE;
97
                  if(this.searchUtils.totalResults == 0 ){
98
                    this.searchUtils.status = errorCodes.NONE;
99
                  }
100
              },
101
              err => {
102
                  console.log(err);
103
                   //TODO check erros (service not available, bad request)
104
                  // if( ){
105
                  //   this.searchUtils.status = ErrorCodes.ERROR;
106
                  // }
107
                  var errorCodes:ErrorCodes = new ErrorCodes();
108
                  this.searchUtils.status = errorCodes.ERROR;
109
              }
110
          );
111
      }
112
  }
113

    
114
  public getNumForSearch(keyword: string) {
115
      var errorCodes:ErrorCodes = new ErrorCodes();
116
      this.searchUtils.status = errorCodes.LOADING;
117

    
118
      this._searchDataprovidersService.numOfDataproviders(keyword).subscribe(
119
          data => {
120
              this.searchUtils.totalResults = data;
121

    
122
              var errorCodes:ErrorCodes = new ErrorCodes();
123
              this.searchUtils.status = errorCodes.DONE;
124
              if(this.searchUtils.totalResults == 0 ){
125
                this.searchUtils.status = errorCodes.NONE;
126
              }
127
          },
128
          err => {
129
              console.log(err);
130
               //TODO check erros (service not available, bad request)
131
              // if( ){
132
              //   this.searchUtils.status = ErrorCodes.ERROR;
133
              // }
134
              var errorCodes:ErrorCodes = new ErrorCodes();
135
              this.searchUtils.status = errorCodes.ERROR;
136
          }
137
      );
138
  }
139

    
140
public getResultsForDeposit(id:string, type:string, page: number,  size: number){
141
    //var errorCodes:ErrorCodes = new ErrorCodes();
142
    //this.status = errorCodes.LOADING;
143
  if(id != "") {
144

    
145
      this._searchDataprovidersService.searchDataprovidersForDeposit(id,type, page, size).subscribe(
146
          data => {
147
              this.searchUtils.totalResults = data[0];
148
              console.info("search Dataproviders forDeposit: [id:"+id+", type:"+type+" ]  [total results:"+this.totalResults+"]");
149
              this.results = data[1];
150

    
151
              var errorCodes:ErrorCodes = new ErrorCodes();
152
              this.searchUtils.status = errorCodes.DONE;
153
              if(this.searchUtils.totalResults == 0 ){
154
                this.searchUtils.status = errorCodes.NONE;
155
              }
156
          },
157
          err => {
158
              console.log(err);
159
               //TODO check erros (service not available, bad request)
160
              // if( ){
161
              //   this.searchUtils.status = ErrorCodes.ERROR;
162
              // }
163
              var errorCodes:ErrorCodes = new ErrorCodes();
164
              this.searchUtils.status = errorCodes.ERROR;
165
          }
166
      );
167
  }
168
}
169
  public getResultsForEntity(entity:string, id:string, page: number, size: number){
170
    var parameters = "";
171

    
172
    if(entity == "organization") {
173
      parameters = "organizations/"+id;
174
    }
175

    
176
    if(parameters != "") {
177

    
178
        this._searchDataprovidersService.searchDataprovidersForEntity(parameters, page, size).subscribe(
179
            data => {
180
                this.searchUtils.totalResults = data[0];
181
                console.info("search Dataproviders for "+entity+": [Parameters:"+parameters+" ]  [total results:"+this.searchUtils.totalResults+"]");
182
                this.results = data[1];
183

    
184
                var errorCodes:ErrorCodes = new ErrorCodes();
185
                this.searchUtils.status = errorCodes.DONE;
186
                if(this.searchUtils.totalResults == 0 ){
187
                  this.searchUtils.status = errorCodes.NONE;
188
                }
189
            },
190
            err => {
191
                console.log(err);
192
                 //TODO check erros (service not available, bad request)
193
                // if( ){
194
                //   this.searchUtils.status = ErrorCodes.ERROR;
195
                // }
196
                var errorCodes:ErrorCodes = new ErrorCodes();
197
                this.searchUtils.status = errorCodes.ERROR;
198
            }
199
        );
200
    }
201
  }
202

    
203
  public getResultsForDataproviders(id:string, page: number, size: number){
204

    
205
    this._searchDataprovidersService.getDataProvidersforEntityRegistry(id, page, size).subscribe(
206
        data => {
207
            this.searchUtils.totalResults = data[0];
208
            console.info("search Dataproviders for Entity Registry: [Id:"+id+" ]  [total results:"+this.searchUtils.totalResults+"]");
209
            this.results = data[1];
210

    
211
            var errorCodes:ErrorCodes = new ErrorCodes();
212
            this.searchUtils.status = errorCodes.DONE;
213
            if(this.searchUtils.totalResults == 0 ){
214
              this.searchUtils.status = errorCodes.NONE;
215
            }
216
        },
217
        err => {
218
            console.log(err);
219
             //TODO check erros (service not available, bad request)
220
            // if( ){
221
            //   this.searchUtils.status = ErrorCodes.ERROR;
222
            // }
223
            var errorCodes:ErrorCodes = new ErrorCodes();
224
            this.searchUtils.status = errorCodes.ERROR;
225
        }
226
    );
227
  }
228

    
229
  public getResults(keyword:string,refine:boolean, page: number, size: number){
230
    var parameters = "";
231
    if(keyword.length > 0){
232
      parameters = "q="+ keyword;
233
    }
234
    this._getResults(parameters,refine,page,this.searchUtils.size);
235
  }
236
  private _getResults(parameters:string,refine:boolean, page: number, size: number){
237
      this.csvParams = parameters;
238

    
239
    // if(!refine && !this.searchPage){
240
    //     this.searchPage = new SearchPageComponent(this._location);
241
    // }
242
    var errorCodes:ErrorCodes = new ErrorCodes();
243
    this.searchUtils.status = errorCodes.LOADING;
244

    
245
    //this.searchPage.openLoading();
246
    this.disableForms = true;
247
    this.results = [];
248
    this.searchUtils.totalResults = 0;
249

    
250
    this.subResults = this._searchDataprovidersService.searchDataproviders(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, this.searchPage.getFields()).subscribe(
251
        data => {
252
            this.searchUtils.totalResults = data[0];
253
            console.info("search Content Providers: [Parameters:"+parameters+" ]  [total results:"+this.searchUtils.totalResults+"]");
254
            this.results = data[1];
255
            if(refine){
256
              this.filters = data[2];
257
            }
258
            this.searchPage.checkSelectedFilters(this.filters);
259
            // this.filters = this.searchPage.checkSelectedFilters(data[2]);
260
            this.searchPage.updateBaseUrlWithParameters(this.filters);
261
            var errorCodes:ErrorCodes = new ErrorCodes();
262
            this.searchUtils.status = errorCodes.DONE;
263
            if(this.searchUtils.totalResults == 0 ){
264
              this.searchUtils.status = errorCodes.NONE;
265
            }
266
            //this.searchPage.closeLoading();
267
            this.disableForms = false;
268

    
269
            if(this.searchUtils.status == errorCodes.DONE) {
270
              // Page out of limit!!!
271
              let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size);
272
              if(!(Number.isInteger(totalPages))) {
273
                  totalPages = (parseInt(totalPages, 10) + 1);
274
              }
275
              if(totalPages < page) {
276
                this.searchUtils.totalResults = 0;
277
                this.searchUtils.status = errorCodes.OUT_OF_BOUND;
278
              }
279
            }
280
        },
281
        err => {
282
            console.log(err);
283
             //TODO check erros (service not available, bad request)
284
            // if( ){
285
            //   this.searchUtils.status = ErrorCodes.ERROR;
286
            // }
287
            var errorCodes:ErrorCodes = new ErrorCodes();
288
            this.searchUtils.status = errorCodes.ERROR;
289
            //this.searchPage.closeLoading();
290
            this.disableForms = false;
291
        }
292
    );
293
  }
294

    
295
  private setFilters(){
296
    //TODO set filters from
297
  }
298

    
299
  public queryChanged($event) {
300
    var parameters = $event.value;
301
    this._getResults(parameters, true, this.searchUtils.page, this.searchUtils.size);
302
  }
303
}
(3-3/15)