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
                          [columnNames]="columnNames"
21
                          [showResultCount]=false
22
                          [disableForms]="disableForms"
23
                          [enableSearchView]="enableSearchView"
24
                          [searchViewLink]="'/search/content-providers'"
25
                          searchFormClass="compatibleDatasourcesTableSearchForm"
26
                          formPlaceholderText="Search for OpenAIRE Content Providers">
27
    </search-page-table>
28
    `
29

    
30
})
31
export class SearchCompatibleDataprovidersTableComponent {
32
  private errorCodes: ErrorCodes;
33

    
34
  public results =[];
35
  public filters =[];
36
  public columnNames = ["Name", "Type", "Country", "Institution", "Compatibility"];
37
  public baseUrl:string;
38
  public searchUtils:SearchUtilsClass = new SearchUtilsClass();
39
  public sub: any; public subResults: any;
40
  public _location:Location;
41
  public searchFields:SearchFields = new SearchFields();
42
  public refineFields: string[] =  this.searchFields.COMPATIBLE_DATAPROVIDER_FIELDS;
43

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

    
51
  public disableForms: boolean = false;
52
  public enableSearchView: boolean = true;
53
properties:EnvProperties;
54
  @ViewChild (SearchPageTableViewComponent) searchPage : SearchPageTableViewComponent ;
55

    
56
  constructor (private route: ActivatedRoute, private _searchDataprovidersService: SearchDataprovidersService ) {
57
    this.errorCodes = new ErrorCodes();
58
    this.searchUtils.status = this.errorCodes.LOADING;
59
   }
60

    
61
  public ngOnInit() {
62
    this.route.data
63
      .subscribe((data: { envSpecific: EnvProperties }) => {
64
        this.properties = data.envSpecific;
65
        this.baseUrl = data.envSpecific.searchLinkToEntityRegistriesDataProvidersTable;
66

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

    
78
  public ngOnDestroy() {
79
    if(this.sub){
80
      this.sub.unsubscribe();
81
    }
82
    if(this.subResults){
83
      this.subResults.unsubscribe();
84
    }  }
85
    private _getResults(){
86
        //this.csvParams = this.resourcesQuery+"&type=datasources";
87

    
88
      //var errorCodes:ErrorCodes = new ErrorCodes();
89
      this.searchUtils.status = this.errorCodes.LOADING;
90
      this.disableForms = true;
91
      this.enableSearchView = false;
92
      this.results = [];
93
      this.searchUtils.totalResults = 0;
94

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

    
106
                        this.searchPage.checkSelectedFilters(this.filters);
107

    
108
                        //var errorCodes:ErrorCodes = new ErrorCodes();
109
                        this.searchUtils.status = this.errorCodes.DONE;
110
                        if(this.searchUtils.totalResults == 0 ){
111
                          this.searchUtils.status = this.errorCodes.NONE;
112
                        } else {
113
                          this.searchPage.triggerInitialLoad();
114
                          this.searchPage.transform(this.results);
115
                          this.disableForms = false;
116
                        }
117
                        this.enableSearchView = true;
118
                    },
119
                    err => {
120
                        console.log(err);
121
                         //TODO check erros (service not available, bad request)
122
                        // if( ){
123
                        //   this.searchUtils.status = ErrorCodes.ERROR;
124
                        // }
125
                        //var errorCodes:ErrorCodes = new ErrorCodes();
126
                        //this.searchUtils.status = errorCodes.ERROR;
127
                        if(err.status == '404') {
128
                          this.searchUtils.status = this.errorCodes.NOT_FOUND;
129
                        } else if(err.status == '500') {
130
                          this.searchUtils.status = this.errorCodes.ERROR;
131
                        } else {
132
                          this.searchUtils.status = this.errorCodes.NOT_AVAILABLE;
133
                        }
134
                        this.enableSearchView = true;
135
                    }
136
                );
137
              } else {
138
                this.searchPage.checkSelectedFilters(this.filters);
139

    
140
                //var errorCodes:ErrorCodes = new ErrorCodes();
141
                this.searchUtils.status = this.errorCodes.NONE;
142
                this.enableSearchView = true;
143
              }
144
          },
145
          err => {
146
              console.log(err);
147
               //TODO check erros (service not available, bad request)
148
              // if( ){
149
              //   this.searchUtils.status = ErrorCodes.ERROR;
150
              // }
151
              //var errorCodes:ErrorCodes = new ErrorCodes();
152
              //this.searchUtils.status = errorCodes.ERROR;
153
              if(err.status == '404') {
154
                this.searchUtils.status = this.errorCodes.NOT_FOUND;
155
              } else if(err.status == '500') {
156
                this.searchUtils.status = this.errorCodes.ERROR;
157
              } else {
158
                this.searchUtils.status = this.errorCodes.NOT_AVAILABLE;
159
              }
160
              this.enableSearchView = true;
161
          }
162
      );
163

    
164
    }
165
  private setFilters(){
166
    //TODO set filters from
167
  }
168

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

    
187

    
188

    
189

    
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

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