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 {SearchPageComponent } from '../searchUtils/searchPage.component';
10
import {SearchUtilsClass } from '../searchUtils/searchUtils.class';
11
import{EnvProperties} from '../../utils/properties/env-properties';
12

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

    
17
    <search-page    pageTitle="OpenAIRE Content Providers"
18
                    formPlaceholderText = "Search for OpenAIRE Content Providers"
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/content-providers-table'"
26
                    searchFormClass="compatibleDatasourcesSearchForm">
27
    </search-page>
28

    
29
    `
30

    
31
})
32
export class SearchCompatibleDataprovidersComponent {
33
  private errorCodes: ErrorCodes;
34
  public results =[];
35
  public filters =[];
36
  public baseUrl:string;
37
  public searchUtils:SearchUtilsClass = new SearchUtilsClass();
38
  public sub: any; public subResults: any;
39
  public _location:Location;
40
  public searchFields:SearchFields = new SearchFields();
41
  public refineFields: string[] =  this.searchFields.COMPATIBLE_DATAPROVIDER_FIELDS;
42
  public fieldIdsMap= this.searchFields.DATASOURCE_FIELDS;
43
  public _prefixQueryFields: {field:string,opName:string,opValue:string,values:string[]}[] =[{field:"compatibility",opName:"cm",opValue:"not", values:["UNKNOWN","hostedBy","notCompatible"]},{field:"type",opName:"tp",opValue:"not",values: ["other"]}];
44
  // ["entityregistry","entityregistry::projects","entityregistry::repositories"]}];
45
  public _prefixQuery: string = "";
46

    
47
  public CSV: any = {  "columnNames":  [ "Title", "Type", "Coutries", "Compatibility" ],
48
                        "export":[]
49
                     };
50
  public CSVDownloaded = false;
51
  public resourcesQuery = '&query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other) not(datasourcetypeuiid exact "pubsrepository::journal") not(datasourcetypeuiid exact "aggregator::pubsrepository::journals"))';
52
  public csvParams: string;
53
  public disableForms: boolean = false;
54
properties:EnvProperties;
55
  @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ;
56

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

    
70
  public ngOnInit() {
71
    this.route.data
72
      .subscribe((data: { envSpecific: EnvProperties }) => {
73
        this.properties = data.envSpecific;
74
        this.baseUrl = data.envSpecific.searchLinkToCompatibleDataProviders
75

    
76

    
77
      });
78
    this.searchPage.refineFields = this.refineFields;
79
    this.searchPage.fieldIdsMap = this.fieldIdsMap;
80
    this.sub =  this.route.queryParams.subscribe(params => {
81
      this.searchUtils.keyword = (params['keyword']?params['keyword']:'');
82
      this.searchUtils.page = (params['page']=== undefined)?1:+params['page'];
83
      this.filters = this.createFilters();
84
      var queryParameters = this.searchPage.getIndexQueryParametersFromUrl(params);
85
      console.info("|"+queryParameters+"|");
86
      this._getResults(queryParameters, false, this.searchUtils.page, this.searchUtils.size);
87
    });
88
  }
89

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

    
100
      //var errorCodes:ErrorCodes = new ErrorCodes();
101
      this.searchUtils.status = this.errorCodes.LOADING;
102
      //this.searchPage.openLoading();
103
      this.disableForms = true;
104
      this.results = [];
105
      this.searchUtils.totalResults = 0;
106

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

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

    
139
              //this.searchPage.closeLoading();
140
              this.disableForms = false;
141

    
142
          }
143
      );
144
    }
145
  private setFilters(){
146
    //TODO set filters from
147
  }
148

    
149
  public queryChanged($event) {
150
    var parameters = $event.index;
151
    console.info("queryChanged: Execute search query "+parameters);
152

    
153
    this._getResults(parameters, false, this.searchUtils.page, this.searchUtils.size);
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 Repository Aggregator", "Publication Repository Aggregator",
171
      "Data Repository", "Data Repository Aggregator", "CRIS Systems", "Publication Catalogue",
172
      "Software Repository", "Software Repository Aggregator"],
173
      ["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)",
174
       "collected from a compatible aggregator", "proprietary", "under validation"]];
175

    
176
    var value_original_ids=[
177
      ["pubsrepository::institutional","pubsrepository::thematic", "pubsrepository::unknown", "aggregator::pubsrepository::institutional","aggregator::pubsrepository::thematic","aggregator::pubsrepository::unknown",
178
      "datarepository::unknown", "aggregator::datarepository", "cris", "pubscatalogue::unknown", "softwarerepository", "aggregator::softwarerepository"],
179
      //["driver","openaire2.0", "driver-openaire2.0", "openaire3.0","openaire2.0_data"]
180
    ["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)",
181
     "collected from a compatible aggregator", "proprietary", "under validation"]];
182
    var filters: Filter[] =[];
183
    for(var i =0 ; i < filter_names.length;i++){
184
      var values:Value[] = [];
185
      for(var j =0 ; j < value_names[i].length;j++){
186
        var value:Value = {name: value_names[i][j], id: value_original_ids[i][j], number:j, selected:false}
187
        values.push(value);
188
      }
189
       var filter:Filter = {title: filter_names[i], filterId: filter_ids[i], originalFilterId:  filter_original_ids[i], values : values, countSelectedValues:0, "filterOperator": 'or' };
190
       filters.push(filter);
191
    }
192
    return filters;
193
    }
194
}
(1-1/12)