Project

General

Profile

1
import {Injectable} from '@angular/core';
2
import {Http, Response} from '@angular/http';
3
import {Observable}     from 'rxjs/Observable';
4
import {AutoCompleteValue} from '../searchPages/searchUtils/searchHelperClasses.class';
5
import 'rxjs/add/observable/of';
6
import 'rxjs/add/operator/do';
7
import 'rxjs/add/operator/share';
8
import {RefineResultsUtils} from './servicesUtils/refineResults.class';
9
import{EnvProperties} from '../utils/properties/env-properties';
10

    
11
@Injectable()
12
export class RefineFieldResultsService {
13
     constructor(private http: Http ) {}
14
     getRefineFieldsResultsByEntityName(fields:string[], entityName:string, properties:EnvProperties, communityQuery=null):any{
15
        let url = properties.searchAPIURLLAst + this.getSearchAPIURLForEntity(entityName)+"?format=json&refine=true&page=1&size=0";
16
        for(var i=0; i < fields.length; i++){
17
            url += "&fields="+fields[i];
18
        }
19
        if(communityQuery!= null && communityQuery != ''  ) {
20
            url += communityQuery;
21
        }
22

    
23
        return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url)
24
                    .map(res => <any> res.json())
25

    
26
                    .map(res =>   [res['meta'].total, RefineResultsUtils.parse(res['refineResults'],fields, entityName)]);
27

    
28
     }
29
    getRefineFieldResultsByFieldName(fieldName:string, entityName:string, properties:EnvProperties):any{
30
       let link = properties.searchAPIURLLAst +this.getSearchAPIURLForEntity(entityName)+"?fields="+fieldName + "&format=json";
31
        return  this.getField(link,fieldName, properties);
32

    
33
    }
34

    
35
    getField (link:string,fieldName:string, properties:EnvProperties):any{
36
      let url = link+"&refine=true&page=1&size=0";
37

    
38
      return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url)
39
                  .map(res => <any> res.json())
40
                  .map(res => res['refineResults'])
41
                  .map(res =>  this.parse(res,fieldName));
42

    
43
    }
44
    parse(data: any,fieldName:string):any {
45
      var values:AutoCompleteValue[] = [];
46
      if(data){
47
          let field = data[fieldName];
48
          for(let i=0; i<field.length; i++) {
49
            var value:AutoCompleteValue = new AutoCompleteValue();
50
            value.label = field[i].name;
51
            value.label = RefineResultsUtils.inParenthesisThePartAfterCharacters(field[i],"||");
52
            value.id = field[i].id;
53
            values.push(value);
54

    
55
        }
56
    }
57

    
58
    return values;
59
    }
60
    getSearchAPIURLForEntity(entityType:string):string{
61
      var suffix = "";
62
      if(entityType == "project"){
63
        suffix="projects/";
64
      }else if(entityType == "publication"){
65
        suffix="publications/";
66
      }else if(entityType == "dataset"){
67
        suffix="datasets/";
68
      } else if(entityType == "software"){
69
        suffix="software/";
70
      } else if(entityType == "other"){
71
        suffix="other/";
72
      }else if(entityType == "organization"){
73
        suffix="organizations/";
74
      }else if(entityType == "dataprovider"){
75
        suffix="datasources/";
76
      }else if(entityType == "person"){
77
        suffix="people/";
78
      }
79
      return  suffix;
80
    }
81
    private handleError (error: Response) {
82
      // in a real world app, we may send the error to some remote logging infrastructure
83
      // instead of just logging it to the console
84
      console.log(error);
85
      return Observable.throw(error  || 'Server error');
86
    }
87
}
(10-10/21)