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 {ErrorCodes} from '../../utils/properties/errorCodes';
8
import {SearchFields, FieldDetails} from '../../utils/properties/searchFields';
9
import {SearchPageTableViewComponent } from '../searchUtils/searchPageTableView.component';
10
import {SearchUtilsClass } from '../searchUtils/searchUtils.class';
11
import{EnvProperties} from '../../utils/properties/env-properties';
12

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

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

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

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

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

    
48
  public disableForms: boolean = false;
49
properties:EnvProperties;
50
  @ViewChild (SearchPageTableViewComponent) searchPage : SearchPageTableViewComponent ;
51

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

    
57
  public ngOnInit() {
58
    this.route.data
59
      .subscribe((data: { envSpecific: EnvProperties }) => {
60
        this.properties = data.envSpecific;
61
        this.baseUrl = data.envSpecific.searchLinkToEntityRegistriesDataProvidersTable;
62

    
63
      });
64
    this.searchPage.refineFields = this.refineFields;
65
    this.sub =  this.route.queryParams.subscribe(params => {
66
      this.searchUtils.keyword = (params['keyword']?params['keyword']:'');
67
      //this.searchUtils.page = (params['page']=== undefined)?1:+params['page'];
68
      this.filters = this.createFilters();
69
      this.searchPage.getParametersFromUrl(params);
70
      this._getResults();
71
    });
72
  }
73

    
74
  public ngOnDestroy() {
75
    if(this.sub){
76
      this.sub.unsubscribe();
77
    }
78
    if(this.subResults){
79
      this.subResults.unsubscribe();
80
    }  }
81
    private _getResults(){
82
        //this.csvParams = this.resourcesQuery+"&type=datasources";
83

    
84
      //var errorCodes:ErrorCodes = new ErrorCodes();
85
      this.searchUtils.status = this.errorCodes.LOADING;
86
      this.disableForms = true;
87
      this.results = [];
88
      this.searchUtils.totalResults = 0;
89

    
90
      let size: number = 0;
91
      this.subResults = this._searchDataprovidersService.searchCompatibleDataprovidersTable(this.properties).subscribe(
92
          data => {
93
              size = data;
94
              if(size > 0) {
95
                this.subResults = this._searchDataprovidersService.searchCompatibleDataproviders("", null, 1, size, [],this.properties).subscribe(
96
                    data => {
97
                        this.searchUtils.totalResults = data[0];
98
                        console.info("search Content Providers [total results:"+this.searchUtils.totalResults+"]");
99
                        this.results = data[1];
100

    
101
                        this.searchPage.checkSelectedFilters(this.filters);
102

    
103
                        //var errorCodes:ErrorCodes = new ErrorCodes();
104
                        this.searchUtils.status = this.errorCodes.DONE;
105
                        if(this.searchUtils.totalResults == 0 ){
106
                          this.searchUtils.status = this.errorCodes.NONE;
107
                        }
108
                        this.disableForms = false;
109
                        this.searchPage.triggerInitialLoad();
110
                        this.searchPage.transform(this.results);
111
                    },
112
                    err => {
113
                        console.log(err);
114
                         //TODO check erros (service not available, bad request)
115
                        // if( ){
116
                        //   this.searchUtils.status = ErrorCodes.ERROR;
117
                        // }
118
                        //var errorCodes:ErrorCodes = new ErrorCodes();
119
                        //this.searchUtils.status = errorCodes.ERROR;
120
                        if(err.status == '404') {
121
                          this.searchUtils.status = this.errorCodes.NOT_FOUND;
122
                        } else if(err.status == '500') {
123
                          this.searchUtils.status = this.errorCodes.ERROR;
124
                        } else {
125
                          this.searchUtils.status = this.errorCodes.NOT_AVAILABLE;
126
                        }
127

    
128
                        this.disableForms = false;
129

    
130
                    }
131
                );
132
              } else {
133
                this.searchPage.checkSelectedFilters(this.filters);
134

    
135
                //var errorCodes:ErrorCodes = new ErrorCodes();
136
                this.searchUtils.status = this.errorCodes.NONE;
137
                this.disableForms = false;
138
              }
139
          },
140
          err => {
141
              console.log(err);
142
               //TODO check erros (service not available, bad request)
143
              // if( ){
144
              //   this.searchUtils.status = ErrorCodes.ERROR;
145
              // }
146
              //var errorCodes:ErrorCodes = new ErrorCodes();
147
              //this.searchUtils.status = errorCodes.ERROR;
148
              if(err.status == '404') {
149
                this.searchUtils.status = this.errorCodes.NOT_FOUND;
150
              } else if(err.status == '500') {
151
                this.searchUtils.status = this.errorCodes.ERROR;
152
              } else {
153
                this.searchUtils.status = this.errorCodes.NOT_AVAILABLE;
154
              }
155
          }
156
      );
157

    
158
    }
159
  private setFilters(){
160
    //TODO set filters from
161
  }
162

    
163
  private createFilters():Filter[] {
164
    var filter_names=["Type","Compatibility Level"];
165
    var filter_ids=["datasourcetypeuiid","datasourcecompatibilityname"];
166
    var searchFields = new SearchFields();
167
    var filter_original_ids = searchFields.COMPATIBLE_DATAPROVIDER_FIELDS;
168
    var value_names=[
169
      /*[
170
      "Institutional Publication Repository","Thematic Publication Repository", "Other Publication Repository",
171
     "Institutional Repositories Aggregators",
172
     "Thematic Repositories Aggregators", "Other Repositories Aggregators",
173
      "Data Repositories", "Data Repositories Aggregators", "Journals", "Journals Aggregators", "CRIS Systems", "Publication Catalogues"],
174
      */
175
      [
176
      "Institutional Repository", "Thematic Repository", "Publication Repository",
177
      "Institutional Repository Aggregator",
178
      "Thematic Repositories Aggregators", "Publication Repository Aggregator",
179
      "Data Repository", "Data Repository Aggregator", "CRIS Systems", "Publication Catalogue"],
180

    
181

    
182

    
183

    
184
      ["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)"]];
185

    
186
    var value_original_ids=[
187
      ["pubsrepository::institutional","pubsrepository::thematic", "pubsrepository::unknown", "aggregator::pubsrepository::institutional","aggregator::pubsrepository::thematic","aggregator::pubsrepository::unknown",
188
      "datarepository::unknown", "aggregator::datarepository", "cris", "pubscatalogue::unknown"],
189
      //["driver","openaire2.0", "driver-openaire2.0", "openaire3.0","openaire2.0_data"]
190
    ["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)"]];
191
    var filters: Filter[] =[];
192
    for(var i =0 ; i < filter_names.length;i++){
193
      var values:Value[] = [];
194
      for(var j =0 ; j < value_names[i].length;j++){
195
        var value:Value = {name: value_names[i][j], id: value_original_ids[i][j], number:j, selected:false}
196
        values.push(value);
197
      }
198
       var filter:Filter = {title: filter_names[i], filterId: filter_ids[i], originalFilterId:  filter_original_ids[i], values : values, countSelectedValues:0, "filterOperator": 'or' };
199
       filters.push(filter);
200
    }
201
    return filters;
202
    }
203
}
(3-3/12)