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

    
14
@Component({
15
    selector: 'search-journals',
16
    template: `
17

    
18
    <search-page    pageTitle="OpenAIRE Journals"
19
                    formPlaceholderText = "Search for OpenAIRE Journals"
20
                    type="content providers" entityType="dataprovider" [(filters)] = "filters"
21
                    [(results)] = "results"  [(searchUtils)] = "searchUtils"
22
                    [baseUrl] = "baseUrl" [showResultCount]=false
23
                    (queryChange)="queryChanged($event)"
24
                    [csvParams]="csvParams" csvPath="resources"
25
                    [disableForms]="disableForms"
26
                    searchFormClass="journalsSearchForm">
27
    </search-page>
28
    <!--[tableViewLink]="'/search/journals-table'"-->
29
    `
30

    
31
})
32
export class SearchJournalsComponent {
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.JOURNAL_FIELDS;
43
  public fieldIdsMap= this.searchFields.DATASOURCE_FIELDS;
44
  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"]}];
45
  // ["entityregistry","entityregistry::projects","entityregistry::repositories"]}];
46
  public _prefixQuery: string = "";
47

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

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

    
72
  public ngOnInit() {
73
    this.route.data
74
      .subscribe((data: { envSpecific: EnvProperties }) => {
75
        this.properties = data.envSpecific;
76
        this.baseUrl = data.envSpecific.searchLinkToJournals;
77

    
78

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

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

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

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

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

    
141
              //this.searchPage.closeLoading();
142
              this.disableForms = false;
143

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

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

    
155
    this._getResults(parameters, false, this.searchUtils.page, this.searchUtils.size);
156
  }
157
  private createFilters():Filter[] {
158
    var filter_names=["Type","Compatibility Level"];
159
    var filter_ids=["datasourcetypeuiid","datasourcecompatibilityname"];
160
    var searchFields = new SearchFields();
161
    var filter_original_ids = searchFields.JOURNAL_FIELDS;
162
    var value_names=[
163
      /*[
164
      "Institutional Publication Repository","Thematic Publication Repository", "Other Publication Repository",
165
     "Institutional Repositories Aggregators",
166
     "Thematic Repositories Aggregators", "Other Repositories Aggregators",
167
      "Data Repositories", "Data Repositories Aggregators", "Journals", "Journals Aggregators", "CRIS Systems", "Publication Catalogues"],
168
      */
169
      ["Journal", "Journal Aggregator\/Publisher"],
170
      ["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)",
171
       "collected from a compatible aggregator", "proprietary", "under validation"]];
172

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