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

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

    
18
    <search-page-table    pageTitle="OpenAIRE Journals Table"
19
                          type="content providers" entityType="dataprovider" [(filters)] = "filters"
20
                          [(results)] = "results"  [(searchUtils)] = "searchUtils"
21
                          [columnNames]="columnNames"
22
                          [showResultCount]=false
23
                          [disableForms]="disableForms"
24
                          [enableSearchView]="enableSearchView"
25
                          [searchViewLink]="'/search/journals'"
26
                          searchFormClass="journalsTableSearchForm"
27
                          formPlaceholderText="Search for Journals">
28
    </search-page-table>
29
    `
30

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

    
35
  public results =[];
36
  public filters =[];
37
  public columnNames = ["Name", "Type", "Country", "Institution", "Compatibility"];
38
  public baseUrl:string;
39
  public searchUtils:SearchUtilsClass = new SearchUtilsClass();
40
  public sub: any; public subResults: any;
41
  public _location:Location;
42
  public searchFields:SearchFields = new SearchFields();
43
  public refineFields: string[] =  this.searchFields.JOURNAL_FIELDS;
44
properties:EnvProperties;
45
  /*public CSV: any = {  "columnNames":  [ "Title", "Type", "Coutries", "Compatibility" ],
46
                        "export":[]
47
                     };
48
  public CSVDownloaded = false;
49
  public csvParams: string;
50
  public resourcesQuery = "&query=((oaftype exact datasource) not(datasourcecompatibilityid = UNKNOWN) not(datasourcecompatibilityid = notCompatible) not(datasourcetypeuiid = other))";*/
51

    
52
  public disableForms: boolean = false;
53
  public enableSearchView: boolean = true;
54

    
55
  @ViewChild (SearchPageTableViewComponent) searchPage : SearchPageTableViewComponent ;
56

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

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

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

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

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

    
97
      let size: number = 0;
98
      this.subResults = this._searchDataprovidersService.searchJournalsTable(this.properties).subscribe(
99
          data => {
100
              size = data;
101
              if(size > 0) {
102
                this.subResults = this._searchDataprovidersService.searchJournals("", null, 1, size, [],this.properties).subscribe(
103
                    data => {
104
                        this.searchUtils.totalResults = data[0];
105
                        console.info("search Journals [total results:"+this.searchUtils.totalResults+"]");
106
                        this.results = data[1];
107

    
108
                        this.searchPage.checkSelectedFilters(this.filters);
109

    
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
                        } else {
115
                          this.searchPage.triggerInitialLoad();
116
                          this.searchPage.transform(this.results);
117
                          this.disableForms = false;
118
                        }
119
                        this.enableSearchView = true;
120
                    },
121
                    err => {
122
                        console.log(err);
123
                         //TODO check erros (service not available, bad request)
124
                        // if( ){
125
                        //   this.searchUtils.status = ErrorCodes.ERROR;
126
                        // }
127
                        //var errorCodes:ErrorCodes = new ErrorCodes();
128
                        //this.searchUtils.status = errorCodes.ERROR;
129
                        if(err.status == '404') {
130
                          this.searchUtils.status = this.errorCodes.NOT_FOUND;
131
                        } else if(err.status == '500') {
132
                          this.searchUtils.status = this.errorCodes.ERROR;
133
                        } else {
134
                          this.searchUtils.status = this.errorCodes.NOT_AVAILABLE;
135
                        }
136

    
137
                        this.enableSearchView = true;
138
                    }
139
                );
140
              } else {
141
                this.searchPage.checkSelectedFilters(this.filters);
142

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

    
167
    }
168
  private setFilters(){
169
    //TODO set filters from
170
  }
171

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

    
186

    
187

    
188

    
189
      ["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)",
190
       "collected from a compatible aggregator", "proprietary", "under validation"]];
191

    
192
    var value_original_ids=[
193
      ["pubsrepository::journal", "aggregator::pubsrepository::journals"],
194
      //["driver","openaire2.0", "driver-openaire2.0", "openaire3.0","openaire2.0_data"]
195
    ["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)",
196
     "collected from a compatible aggregator", "proprietary", "under validation"]];
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
}
(11-11/12)