Project

General

Profile

1

    
2
import {SearchPublicationsService} from '../../services/searchPublications.service';
3
import {ErrorCodes} from '../../utils/properties/openaireProperties';
4
import {SearchFields} from '../../utils/properties/searchFields';
5
 import {SearchUtilsClass } from '../../searchPages/searchUtils/searchUtils.class';
6
import {DOI} from '../../utils/string-utils.class';
7
import {Subject} from 'rxjs/Subject';
8

    
9
export class FetchPublications {
10
  private errorCodes: ErrorCodes;
11

    
12
  public results =[];
13

    
14
  public requestComplete: Subject<void>;
15

    
16
  // public filters =[];
17
  public searchUtils:SearchUtilsClass = new SearchUtilsClass();
18
  // public baseUrl:string = "";
19
  public sub: any;
20
  public subResults: any;
21
  public searchFields:SearchFields = new SearchFields();
22
  // public refineFields: string[] =  this.searchFields.RESULT_REFINE_FIELDS;
23
  // public fieldIdsMap=this.searchFields.RESULT_FIELDS;
24
    //:  { [key:string] :{ name:string, operator:string, type:string, indexField:string, equalityOperator:string  }} = this.searchFields.PUBLICATION_FIELDS_MAP;
25

    
26
  public CSV: any = {  "columnNames":  ["Title", "Authors", "Publication Year", "DOI",
27
                                       /*"Download From", "Publication type", "Journal",*/
28
                                       "Funder", "Project Name (GA Number)", "Access"],
29
                      "export":[]
30
                  };
31
  public CSVDownloaded = false;
32
  public csvParams: string;
33

    
34
  constructor ( private _searchPublicationsService: SearchPublicationsService ) {
35
    this.errorCodes = new ErrorCodes();
36
    this.searchUtils.status = this.errorCodes.LOADING;
37
    // this.baseUrl = OpenaireProperties.getLinkToSearchPublications();
38

    
39
    this.requestComplete = new Subject<void>();
40
  }
41

    
42

    
43
  public ngOnDestroy() {
44
    if(this.sub){
45
      this.sub.unsubscribe();
46
    }
47
    if(this.subResults){
48
      this.subResults.unsubscribe();
49
    }
50
  }
51

    
52
  public getResultsByKeyword(keyword:string,  page: number, size: number){
53
    var parameters = "";
54
    if(keyword.length > 0){
55
      var DOIs:string[] = DOI.getDOIsFromString(keyword);
56
      var doisParams = "";
57

    
58
      for(var i =0 ;i < DOIs.length; i++){
59
        doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"';
60
      }
61
      if(doisParams.length > 0){
62
        parameters +=  "&"+doisParams;
63
      }else{
64
        parameters = "q=" + keyword;
65
      }
66
    }
67

    
68

    
69
    //var errorCodes:ErrorCodes = new ErrorCodes();
70
    this.searchUtils.status = this.errorCodes.LOADING;
71

    
72
    this.subResults = this._searchPublicationsService.searchPublications(parameters,null, page, size, []).subscribe(
73
        data => {
74
            this.searchUtils.totalResults = data[0];
75
            console.info("search Publications: [Parameters:"+parameters+" ]  [total results:"+this.searchUtils.totalResults+"]");
76
            this.results = data[1];
77

    
78
            //var errorCodes:ErrorCodes = new ErrorCodes();
79
            this.searchUtils.status = this.errorCodes.DONE;
80
            if(this.searchUtils.totalResults == 0 ){
81
              this.searchUtils.status = this.errorCodes.NONE;
82
            }
83
         },
84
        err => {
85
            console.log(err);
86
             //TODO check erros (service not available, bad request)
87
            // if( ){
88
            //   this.searchUtils.status = ErrorCodes.ERROR;
89
            // }
90
            //var errorCodes:ErrorCodes = new ErrorCodes();
91
            //this.searchUtils.status = errorCodes.ERROR;
92
            if(err.status == '404') {
93
              this.searchUtils.status = this.errorCodes.NOT_FOUND;
94
            } else if(err.status == '500') {
95
              this.searchUtils.status = this.errorCodes.ERROR;
96
            } else {
97
              this.searchUtils.status = this.errorCodes.NOT_AVAILABLE;
98
            }
99
        }
100
    );
101
  }
102

    
103
public getResultsForEntity(entity:string, id:string, page: number, size: number){
104
    //var errorCodes:ErrorCodes = new ErrorCodes();
105
    this.searchUtils.status = this.errorCodes.LOADING;
106

    
107
  var parameters = "";
108
  if(entity == "project") {
109
    parameters = "projects/"+id;
110
  } else if(entity == "organization") {
111
    parameters = "organizations/"+id;
112
  }
113

    
114
  if(parameters != "") {
115
      this._searchPublicationsService.searchPublicationsForEntity(parameters, page, size).subscribe(
116
          data => {
117
              this.searchUtils.totalResults = data[0];
118

    
119
              console.info("search Publications for "+entity+": [Parameters:"+parameters+" ]  [total results:"+this.searchUtils.totalResults+"]");
120
              this.results = data[1];
121

    
122
              //var errorCodes:ErrorCodes = new ErrorCodes();
123
              this.searchUtils.status = this.errorCodes.DONE;
124
              if(this.searchUtils.totalResults == 0 ){
125
                this.searchUtils.status = this.errorCodes.NONE;
126
              }
127
          },
128
          err => {
129
              console.log(err);
130
               //TODO check erros (service not available, bad request)
131
              // if( ){
132
              //   this.searchUtils.status = ErrorCodes.ERROR;
133
              // }
134
              //var errorCodes:ErrorCodes = new ErrorCodes();
135
              //this.searchUtils.status = errorCodes.ERROR;
136

    
137
              if(err.status == '404') {
138
                this.searchUtils.status = this.errorCodes.NOT_FOUND;
139
              } else if(err.status == '500') {
140
                this.searchUtils.status = this.errorCodes.ERROR;
141
              } else {
142
                this.searchUtils.status = this.errorCodes.NOT_AVAILABLE;
143
              }
144
          }
145
      );
146
  }
147
}
148

    
149
public getResultsForDataproviders(id:string, resultsFrom:string, page: number, size: number){
150
    //var errorCodes:ErrorCodes = new ErrorCodes();
151
    this.searchUtils.status = this.errorCodes.LOADING;
152

    
153
  var parameters;
154
  if(resultsFrom == "collectedFrom") {
155
      parameters = "publications?fq=collectedfromdatasourceid exact "+'"'+id+'"';
156
  } else if(resultsFrom == "hostedBy") {
157
      parameters = "publications?fq=resulthostingdatasourceid exact "+'"'+id+'"';
158
  }
159

    
160
  if(parameters != "") {
161

    
162
      this._searchPublicationsService.searchPublicationsForDataproviders(parameters, page, size).subscribe(
163
          data => {
164
              this.searchUtils.totalResults = data[0];
165
              console.info("search Publications for Dataproviders: [Parameters:"+parameters+" ]  [total results:"+this.searchUtils.totalResults+"]");
166
              this.results = data[1];
167

    
168
              //var errorCodes:ErrorCodes = new ErrorCodes();
169
              this.searchUtils.status = this.errorCodes.DONE;
170
              if(this.searchUtils.totalResults == 0 ){
171
                this.searchUtils.status = this.errorCodes.NONE;
172
              }
173
          },
174
          err => {
175
              console.log(err);
176
               //TODO check erros (service not available, bad request)
177
              // if( ){
178
              //   this.searchUtils.status = ErrorCodes.ERROR;
179
              // }
180
              //var errorCodes:ErrorCodes = new ErrorCodes();
181
              //this.searchUtils.status = errorCodes.ERROR;
182
              if(err.status == '404') {
183
                this.searchUtils.status = this.errorCodes.NOT_FOUND;
184
              } else if(err.status == '500') {
185
                this.searchUtils.status = this.errorCodes.ERROR;
186
              } else {
187
                this.searchUtils.status = this.errorCodes.NOT_AVAILABLE;
188
              }
189
          }
190
      );
191
  }
192
}
193

    
194
public getAggregatorResults(id:string, page: number, size: number){
195
    //var errorCodes:ErrorCodes = new ErrorCodes();
196
    this.searchUtils.status = this.errorCodes.LOADING;
197

    
198
  this.subResults = this._searchPublicationsService.searchAggregators(id, '&fq=collectedfromdatasourceid exact "'+id+'"',"&refine=true&fields=resulthostingdatasource" , page, size).subscribe(
199
      data => {
200
          this.results = data;
201
          this.searchUtils.totalResults = this.results.length;
202

    
203
          //var errorCodes:ErrorCodes = new ErrorCodes();
204
          this.searchUtils.status = this.errorCodes.DONE;
205
          if(this.searchUtils.totalResults == 0 ){
206
            this.searchUtils.status = this.errorCodes.NONE;
207
          }
208

    
209
          this.requestComplete.complete();
210
      },
211
      err => {
212
          console.log(err);
213
           //TODO check erros (service not available, bad request)
214
          // if( ){
215
          //   this.searchUtils.status = ErrorCodes.ERROR;
216
          // }
217
          //var errorCodes:ErrorCodes = new ErrorCodes();
218
          //this.searchUtils.status = errorCodes.ERROR;
219
          if(err.status == '404') {
220
            this.searchUtils.status = this.errorCodes.NOT_FOUND;
221
          } else if(err.status == '500') {
222
            this.searchUtils.status = this.errorCodes.ERROR;
223
          } else {
224
            this.searchUtils.status = this.errorCodes.NOT_AVAILABLE;
225
          }
226

    
227
          this.requestComplete.complete();
228
      }
229
  );
230
}
231

    
232

    
233
}
(5-5/6)