Project

General

Profile

1
import {Component, Input, ViewChild} from '@angular/core';
2
import {Location} from '@angular/common';
3
import { ActivatedRoute} from '@angular/router';
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, FieldDetails} from '../../utils/properties/searchFields';
9
import {SearchPageTableViewComponent } from '../searchUtils/searchPageTableView.component';
10
import {SearchUtilsClass } from '../searchUtils/searchUtils.class';
11

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

    
16
    <search-page-table    pageTitle="OpenAIRE Content Providers Table"
17
                          type="content providers" entityType="dataprovider" [(filters)] = "filters"
18
                          [(results)] = "results"  [(searchUtils)] = "searchUtils"
19
                          [showResultCount]=false
20
                          [disableForms]="disableForms"
21
                          [searchViewLink]="'/search/content-providers'"
22
                          searchFormClass="compatibleDatasourcesTableSearchForm"
23
                          formPlaceholderText="Search for OpenAIRE Content Providers">
24
    </search-page-table>
25
    `
26

    
27
})
28
export class SearchCompatibleDataprovidersTableComponent {
29
  private errorCodes: ErrorCodes;
30

    
31
  public results =[];
32
  public filters =[];
33
  public baseUrl:string;
34
  public searchUtils:SearchUtilsClass = new SearchUtilsClass();
35
  public sub: any; public subResults: any;
36
  public _location:Location;
37
  public searchFields:SearchFields = new SearchFields();
38
  public refineFields: string[] =  this.searchFields.COMPATIBLE_DATAPROVIDER_FIELDS;
39

    
40
  /*public CSV: any = {  "columnNames":  [ "Title", "Type", "Coutries", "Compatibility" ],
41
                        "export":[]
42
                     };
43
  public CSVDownloaded = false;
44
  public csvParams: string;
45
  public resourcesQuery = "&query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other))";*/
46

    
47
  public disableForms: boolean = false;
48

    
49
  @ViewChild (SearchPageTableViewComponent) searchPage : SearchPageTableViewComponent ;
50

    
51
  constructor (private route: ActivatedRoute, private _searchDataprovidersService: SearchDataprovidersService ) {
52
    this.errorCodes = new ErrorCodes();
53
    this.searchUtils.status = this.errorCodes.LOADING;
54
    this.baseUrl = OpenaireProperties.getLinkToSearchCompatibleDataProvidersTable();
55
  }
56

    
57
  public ngOnInit() {
58
    this.searchPage.refineFields = this.refineFields;
59
    this.sub =  this.route.queryParams.subscribe(params => {
60
      this.searchUtils.keyword = (params['keyword']?params['keyword']:'');
61
      //this.searchUtils.page = (params['page']=== undefined)?1:+params['page'];
62
      this.filters = this.createFilters();
63
      this.searchPage.getParametersFromUrl(params);
64
      this._getResults();
65
    });
66
  }
67

    
68
  public ngOnDestroy() {
69
    if(this.sub){
70
      this.sub.unsubscribe();
71
    }
72
    if(this.subResults){
73
      this.subResults.unsubscribe();
74
    }  }
75
    private _getResults(){
76
        //this.csvParams = this.resourcesQuery+"&type=datasources";
77

    
78
      //var errorCodes:ErrorCodes = new ErrorCodes();
79
      this.searchUtils.status = this.errorCodes.LOADING;
80
      this.disableForms = true;
81
      this.results = [];
82
      this.searchUtils.totalResults = 0;
83

    
84
      let size: number = 0;
85
      this.subResults = this._searchDataprovidersService.searchCompatibleDataprovidersTable().subscribe(
86
          data => {
87
              size = data;
88
              if(size > 0) {
89
                this.subResults = this._searchDataprovidersService.searchCompatibleDataproviders("", null, 1, size, []).subscribe(
90
                    data => {
91
                        this.searchUtils.totalResults = data[0];
92
                        console.info("search Content Providers [total results:"+this.searchUtils.totalResults+"]");
93
                        this.results = data[1];
94

    
95
                        this.searchPage.checkSelectedFilters(this.filters);
96

    
97
                        //var errorCodes:ErrorCodes = new ErrorCodes();
98
                        this.searchUtils.status = this.errorCodes.DONE;
99
                        if(this.searchUtils.totalResults == 0 ){
100
                          this.searchUtils.status = this.errorCodes.NONE;
101
                        }
102
                        this.disableForms = false;
103
                    },
104
                    err => {
105
                        console.log(err);
106
                         //TODO check erros (service not available, bad request)
107
                        // if( ){
108
                        //   this.searchUtils.status = ErrorCodes.ERROR;
109
                        // }
110
                        //var errorCodes:ErrorCodes = new ErrorCodes();
111
                        //this.searchUtils.status = errorCodes.ERROR;
112
                        if(err.status == '404') {
113
                          this.searchUtils.status = this.errorCodes.NOT_FOUND;
114
                        } else if(err.status == '500') {
115
                          this.searchUtils.status = this.errorCodes.ERROR;
116
                        } else {
117
                          this.searchUtils.status = this.errorCodes.NOT_AVAILABLE;
118
                        }
119

    
120
                        this.disableForms = false;
121

    
122
                    }
123
                );
124
              } else {
125
                this.searchPage.checkSelectedFilters(this.filters);
126

    
127
                //var errorCodes:ErrorCodes = new ErrorCodes();
128
                this.searchUtils.status = this.errorCodes.NONE;
129
                this.disableForms = false;
130
              }
131
          },
132
          err => {
133
              console.log(err);
134
               //TODO check erros (service not available, bad request)
135
              // if( ){
136
              //   this.searchUtils.status = ErrorCodes.ERROR;
137
              // }
138
              //var errorCodes:ErrorCodes = new ErrorCodes();
139
              //this.searchUtils.status = errorCodes.ERROR;
140
              if(err.status == '404') {
141
                this.searchUtils.status = this.errorCodes.NOT_FOUND;
142
              } else if(err.status == '500') {
143
                this.searchUtils.status = this.errorCodes.ERROR;
144
              } else {
145
                this.searchUtils.status = this.errorCodes.NOT_AVAILABLE;
146
              }
147
          }
148
      );
149

    
150
    }
151
  private setFilters(){
152
    //TODO set filters from
153
  }
154

    
155
  private createFilters():Filter[] {
156
    var filter_names=["Type","Compatibility Level"];
157
    var filter_ids=["datasourcetypeuiid","datasourcecompatibilityname"];
158
    var searchFields = new SearchFields();
159
    var filter_original_ids = searchFields.COMPATIBLE_DATAPROVIDER_FIELDS;
160
    var value_names=[
161
      /*[
162
      "Institutional Publication Repository","Thematic Publication Repository", "Other Publication Repository",
163
     "Institutional Repositories Aggregators",
164
     "Thematic Repositories Aggregators", "Other Repositories Aggregators",
165
      "Data Repositories", "Data Repositories Aggregators", "Journals", "Journals Aggregators", "CRIS Systems", "Publication Catalogues"],
166
      */
167
      [
168
      "Institutional Repository", "Thematic Repository", "Publication Repository",
169
      "Institutional Repository Aggregator",
170
      "Thematic Repositories Aggregators", "Publication Repository Aggregator",
171
      "Data Repository", "Data Repository Aggregator", "CRIS Systems", "Publication Catalogue"],
172

    
173

    
174

    
175

    
176
      ["OpenAIRE Basic (DRIVER OA)","OpenAIRE 2.0 (EC funding)", "OpenAIRE 2.0+ (DRIVER OA, EC funding)", "OpenAIRE 3.0 (OA, funding)","OpenAIRE Data (funded, referenced datasets)"]];
177

    
178
    var value_original_ids=[
179
      ["pubsrepository::institutional","pubsrepository::thematic", "pubsrepository::unknown", "aggregator::pubsrepository::institutional","aggregator::pubsrepository::thematic","aggregator::pubsrepository::unknown",
180
      "datarepository::unknown", "aggregator::datarepository", "cris", "pubscatalogue::unknown"],
181
      //["driver","openaire2.0", "driver-openaire2.0", "openaire3.0","openaire2.0_data"]
182
    ["OpenAIRE Basic (DRIVER OA)","OpenAIRE 2.0 (EC funding)", "OpenAIRE 2.0+ (DRIVER OA, EC funding)", "OpenAIRE 3.0 (OA, funding)","OpenAIRE Data (funded, referenced datasets)"]];
183
    var filters: Filter[] =[];
184
    for(var i =0 ; i < filter_names.length;i++){
185
      var values:Value[] = [];
186
      for(var j =0 ; j < value_names[i].length;j++){
187
        var value:Value = {name: value_names[i][j], id: value_original_ids[i][j], number:j, selected:false}
188
        values.push(value);
189
      }
190
       var filter:Filter = {title: filter_names[i], filterId: filter_ids[i], originalFilterId:  filter_original_ids[i], values : values, countSelectedValues:0, "filterOperator": 'or' };
191
       filters.push(filter);
192
    }
193
    return filters;
194
    }
195
}
(3-3/12)