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):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

    
20
        return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url)
21
                    .map(res => <any> res.json())
22

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

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

    
30
    }
31

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

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

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

    
52
        }
53
    }
54

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