Project

General

Profile

1
import {Component, Input, ViewChild} from '@angular/core';
2
import {Observable}       from 'rxjs/Observable';
3
import { Router, ActivatedRoute} from '@angular/router';
4
import {Filter, Value,AdvancedField} from '../searchUtils/searchHelperClasses.class';
5
import {SearchDatasetsService} from '../../services/searchDatasets.service';
6
import {SearchResult}     from '../../utils/entities/searchResult';
7
import {ErrorCodes} from '../../utils/properties/errorCodes';
8
import {AdvancedSearchPageComponent} from '../searchUtils/advancedSearchPage.component';
9
import {SearchFields, FieldDetails} from '../../utils/properties/searchFields';
10
import {SearchUtilsClass } from '../searchUtils/searchUtils.class';
11
import{EnvProperties} from '../../utils/properties/env-properties';
12

    
13

    
14
@Component({
15
    selector: 'advanced-search-datasets',
16
    template: `
17
    <advanced-search-page pageTitle="Advanced Search for Research Data" entityType="dataset"
18
                 type = "research data"
19
                 [(results)] = "results"
20
                 [(searchUtils)] = "searchUtils"
21
                 [(fieldIds)]="fieldIds" [(fieldIdsMap)]="fieldIdsMap"   [(selectedFields)]="selectedFields"
22
                 (queryChange)="queryChanged($event)"
23
                 [csvParams]="csvParams" csvPath="datasets" simpleSearchLink="/search/find/datasets"
24
                 [disableForms]="disableForms"
25
                 [loadPaging]="loadPaging"
26
                 [oldTotalResults]="oldTotalResults">
27
    </advanced-search-page>
28

    
29
    `
30
 })
31

    
32
export class AdvancedSearchDatasetsComponent {
33
  private errorCodes: ErrorCodes;
34
  properties:EnvProperties;
35

    
36
  public results =[];
37
  public filters =[];
38

    
39
  public searchUtils:SearchUtilsClass = new SearchUtilsClass();
40
  public searchFields:SearchFields = new SearchFields();
41

    
42
  public fieldIds:  string[] = this.searchFields.RESULT_ADVANCED_FIELDS;
43
  public fieldIdsMap= this.searchFields.RESULT_FIELDS;
44
  public selectedFields:AdvancedField[] =  [];
45

    
46
  @ViewChild (AdvancedSearchPageComponent) searchPage : AdvancedSearchPageComponent ;
47
  public resourcesQuery = "( (oaftype exact result) and (resulttypeid exact dataset)  )";
48
  public csvParams: string;
49
  public disableForms: boolean = false;
50
  public loadPaging: boolean = true;
51
  public oldTotalResults: number = 0;
52
  public pagingLimit: number = 0;
53
  public isPiwikEnabled;
54
  constructor (private route: ActivatedRoute, private _searchDatasetsService: SearchDatasetsService ) {
55
    this.results =[];
56
    this.errorCodes = new ErrorCodes();
57
    this.searchUtils.status = this.errorCodes.LOADING;
58

    
59

    
60

    
61
  }
62
  ngOnInit() {
63
    this.route.data
64
      .subscribe((data: { envSpecific: EnvProperties }) => {
65
        this.properties= data.envSpecific;
66
        this.searchUtils.baseUrl = data.envSpecific.searchLinkToAdvancedDatasets;
67
         this.pagingLimit = data.envSpecific.pagingLimit;
68
         this.isPiwikEnabled = data.envSpecific.enablePiwikTrack;
69

    
70
      });
71
    //var errorCodes:ErrorCodes = new ErrorCodes();
72
    this.searchUtils.status = this.errorCodes.LOADING;
73
    this.sub =  this.route.queryParams.subscribe(params => {
74
      if(params['page'] && this.searchUtils.page != params['page']) {
75
        this.loadPaging = false;
76
        this.oldTotalResults = this.searchUtils.totalResults;
77
      }
78

    
79
      let page = (params['page']=== undefined)?1:+params['page'];
80
      this.searchUtils.page = ( page <= 0 ) ? 1 : page;
81
      this.searchPage.fieldIds = this.fieldIds;
82
      this.selectedFields =[];
83
      this.searchPage.selectedFields = this.selectedFields;
84
      this.searchPage.fieldIdsMap = this.fieldIdsMap;
85
      this.searchPage.getSelectedFiltersFromUrl(params);
86
      this.getResults(this.searchPage.createQueryParameters(),  this.searchUtils.page, this.searchUtils.size);
87

    
88
    });
89
  }
90
  ngOnDestroy() {
91
    this.sub.unsubscribe();
92
  }
93
  sub: any;
94
  public getResults(parameters:string, page: number, size: number){
95
    if(page > this.pagingLimit) {
96
      size=0;
97
    }
98
    if(page <= this.pagingLimit || this.searchUtils.status == this.errorCodes.LOADING) {
99
      if(parameters!= null && parameters != ''  ) {
100
        this.csvParams ="&fq=( "+this.resourcesQuery + "and (" + parameters + "))";
101
      }else{
102
        this.csvParams ="&fq="+this.resourcesQuery;
103
      }
104

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

    
112
      console.info("Advanced Search for Research Data: Execute search query "+parameters);
113
      this._searchDatasetsService.advancedSearchDatasets(parameters, page, size, this.properties).subscribe(
114
        data => {
115
                this.searchUtils.totalResults = data[0];
116
                console.info("search Research Data total="+this.searchUtils.totalResults);
117
                this.results = data[1];
118
                this.searchPage.updateBaseUrlWithParameters();
119
                //var errorCodes:ErrorCodes = new ErrorCodes();
120
                this.searchUtils.status = this.errorCodes.DONE;
121
                if(this.searchUtils.totalResults == 0 ){
122
                  this.searchUtils.status = this.errorCodes.NONE;
123
                }
124
                //this.searchPage.closeLoading();
125
                this.disableForms = false;
126

    
127
                if(this.searchUtils.status == this.errorCodes.DONE) {
128
                  // Page out of limit!!!
129
                  let totalPages:any = this.searchUtils.totalResults/(this.searchUtils.size);
130
                  if(!(Number.isInteger(totalPages))) {
131
                      totalPages = (parseInt(totalPages, 10) + 1);
132
                  }
133
                  if(totalPages < page) {
134
                    this.searchUtils.totalResults = 0;
135
                    this.searchUtils.status = this.errorCodes.OUT_OF_BOUND;
136
                  }
137
                }
138
        },
139
        err => {
140
              console.log(err);
141
              console.info("error");
142
              //TODO check erros (service not available, bad request)
143
              // if( ){
144
              //   this.searchUtils.status = errorCodes.ERROR;
145
              // }
146
              //var errorCodes:ErrorCodes = new ErrorCodes();
147
              //this.searchUtils.status = errorCodes.NOT_AVAILABLE;
148
              if(err.status == '404') {
149
                this.searchUtils.status = this.errorCodes.NOT_FOUND;
150
              } else if(err.status == '500') {
151
                this.searchUtils.status = this.errorCodes.ERROR;
152
              } else {
153
                this.searchUtils.status = this.errorCodes.NOT_AVAILABLE;
154
              }
155

    
156
              //this.searchPage.closeLoading();
157
              this.disableForms = false;
158
        }
159
      );
160
    }
161
  }
162
  private setFilters(){
163
    //TODO set filters from
164
  }
165

    
166
  public queryChanged($event) {
167
    this.loadPaging = true;
168

    
169
    var parameters = $event.value;
170
    this.getResults(parameters, this.searchUtils.page,this.searchUtils.size);
171
    console.info("queryChanged: Execute search query "+parameters);
172

    
173
  }
174

    
175

    
176
}
(3-3/12)