Project

General

Profile

1
import {Component, Input, ViewChild} from '@angular/core';
2
import { ActivatedRoute} from '@angular/router';
3

    
4
import { Filter, Value} from '../searchUtils/searchHelperClasses.class';
5

    
6
import {SearchDataprovidersService} from '../../services/searchDataproviders.service';
7
import {SearchResult}     from '../../utils/entities/searchResult';
8
import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties';
9
import {SearchFields} from '../../utils/properties/searchFields';
10
import {SearchPageComponent } from '../searchUtils/searchPage.component';
11
import {SearchUtilsClass } from '../searchUtils/searchUtils.class';
12

    
13
@Component({
14
    selector: 'search-entity-registries',
15
    template: `
16

    
17
    <search-page pageTitle="Registries/ Databases"
18
                formPlaceholderText = "Search for Registries/ Databases"
19
                 type="content providers" entityType="dataprovider" [(filters)] = "filters"
20
                 [(results)] = "results" [(searchUtils)] = "searchUtils"
21
                 [baseUrl] = "baseUrl" [showResultCount]=false
22
                 (queryChange)="queryChanged($event)"
23
                 [csvParams]="csvParams" csvPath="resources"
24
                 [disableForms]="disableForms"
25
                 [tableViewLink]="'/search/entity-registries-table'"
26
                 searchFormClass="entityRegistriesSearchForm">
27
    </search-page>
28

    
29
    `
30

    
31
})
32
export class SearchEntityRegistriesComponent {
33
  private errorCodes: ErrorCodes;
34

    
35
  public results =[];
36
  public filters =[];
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.ENTITY_REGISTRIES_FIELDS;
43
  public fieldIdsMap= this.searchFields.DATASOURCE_FIELDS;
44
  public _prefixQueryFields: {field:string,opName:string,opValue:string,values:string[]}[] =[
45
    {field:"type",opName:"tp",opValue:"and",values: ["other"]}];
46
    // ["entityregistry","entityregistry::projects","entityregistry::repositories"]}];
47
  public _prefixQuery: string = "";
48

    
49
  public CSV: any = {  "columnNames":  [ "Title", "Type", "Coutries", "Compatibility" ],
50
                        "export":[]
51
                     };
52
  public CSVDownloaded = false;
53
  public disableForms: boolean = false;
54

    
55
  @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ;
56
  public resourcesQuery = "&query=((oaftype exact datasource) and(datasourcetypeuiid = other))";
57
  public csvParams: string;
58

    
59
  constructor (private route: ActivatedRoute, private _searchDataprovidersService: SearchDataprovidersService ) {
60
    this.errorCodes = new ErrorCodes();
61
    this.searchUtils.status = this.errorCodes.LOADING;
62
    this.baseUrl = OpenaireProperties.getLinkToSearchEntityRegistries();
63
    for(var i = 0; i < this._prefixQueryFields.length; i++ ){
64
      for(var j =0; j < this._prefixQueryFields[i].values.length; j++){
65
        this._prefixQuery+="&" + this._prefixQueryFields[i].field + "="
66
        + this._prefixQueryFields[i].values[j] + "&" +
67
        this._prefixQueryFields[i].opName + "=" + this._prefixQueryFields[i].opValue;
68
      }
69
    }
70
    this._prefixQuery+="&";
71
  }
72

    
73
  public ngOnInit() {
74
    this.searchPage.refineFields = this.refineFields;
75
    this.searchPage.fieldIdsMap = this.fieldIdsMap;
76
    this.sub =  this.route.queryParams.subscribe(params => {
77
      this.searchUtils.keyword = (params['keyword']?params['keyword']:'');
78
      this.searchUtils.page = (params['page']=== undefined)?1:+params['page'];
79
      this.filters = this.createFilters();
80

    
81
      var queryParameters = this.searchPage.getIndexQueryParametersFromUrl(params);
82
      this._getResults(queryParameters, false, this.searchUtils.page, this.searchUtils.size);
83
    });
84
  }
85

    
86
  public ngOnDestroy() {
87
    if(this.sub){
88
      this.sub.unsubscribe();
89
    }
90
    if(this.subResults){
91
      this.subResults.unsubscribe();
92
    }  }
93
    private _getResults(parameters:string,refine:boolean, page: number, size: number){
94
        this.csvParams = parameters+this.resourcesQuery+"&type=datasources";
95

    
96
      //var errorCodes:ErrorCodes = new ErrorCodes();
97
      this.searchUtils.status = this.errorCodes.LOADING;
98
      //this.searchPage.openLoading();
99
      this.disableForms = true;
100
      this.results = [];
101
      this.searchUtils.totalResults = 0;
102

    
103
       this.subResults = this._searchDataprovidersService.searchEntityRegistries(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, []).subscribe(
104
          data => {
105
              this.searchUtils.totalResults = data[0];
106
              console.info("search Entity Registries: [Parameters:"+parameters+" ]  [total results:"+this.searchUtils.totalResults+"]");
107
              this.results = data[1];
108
              this.searchPage.checkSelectedFilters(this.filters);
109
              this.searchPage.updateBaseUrlWithParameters(this.filters);
110
              //var errorCodes:ErrorCodes = new ErrorCodes();
111
              this.searchUtils.status = this.errorCodes.DONE;
112
              if(this.searchUtils.totalResults == 0 ){
113
                this.searchUtils.status = this.errorCodes.NONE;
114
              }
115
              //this.searchPage.closeLoading();
116
              this.disableForms = false;
117

    
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

    
135
              //this.searchPage.closeLoading();
136
              this.disableForms = false;
137

    
138
          }
139
      );
140
    }
141
  private setFilters(){
142
    //TODO set filters from
143
  }
144

    
145
  public queryChanged($event) {
146
    var parameters = $event.index;
147
    console.info("queryChanged: Execute search query "+parameters);
148
    this._getResults(parameters, false, this.searchUtils.page, this.searchUtils.size);
149
  }
150
  private createFilters():Filter[] {
151
    var filter_names=["Type","Compatibility Level"];
152
    var filter_ids=["datasourcetypename","datasourcecompatibilityname"];
153
    var searchFields = new SearchFields();
154
    var filter_original_ids = searchFields.ENTITY_REGISTRIES_FIELDS;
155
    var value_names=[
156
      ["Funder","Registry of repositories","Scholarly Comm. Infrastructure","Registry","Information Space","Web Source"],
157

    
158
      ["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)"]];
159

    
160
    var value_original_ids=[
161
      ["Funder database","Registry of repositories","Scholarly Comm. Infrastructure","Registry","Information Space","Web Source"],
162
      //["entityregistry::projects","entityregistry::repositories","scholarcomminfra","entityregistry","infospace","websource"],
163
      //["driver","openaire2.0", "driver-openaire2.0", "openaire3.0","openaire2.0_data"]
164
    ["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)"]];
165

    
166
    var filters: Filter[] =[];
167
    for(var i =0 ; i < filter_names.length;i++){
168
      var values:Value[] = [];
169
      for(var j =0 ; j < value_names[i].length;j++){
170
        var value:Value = {name: value_names[i][j], id: value_original_ids[i][j], number:j, selected:false}
171
        values.push(value);
172
      }
173
       var filter:Filter = {title: filter_names[i], filterId: filter_ids[i], originalFilterId:  filter_original_ids[i], values : values, countSelectedValues:0, "filterOperator": 'or' };
174
       filters.push(filter);
175
    }
176
    return filters;
177
    }
178
}
(8-8/18)