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 {OpenaireProperties} from '../utils/properties/openaireProperties';
6
import 'rxjs/add/observable/of';
7
import 'rxjs/add/operator/do';
8
import 'rxjs/add/operator/share';
9
import { CacheService  } from '../shared/cache.service';
10
import {RefineResultsUtils} from './servicesUtils/refineResults.class';
11

    
12
@Injectable()
13
export class RefineFieldResultsService {
14
  // scoobydoo.di.uoa.gr:8181/dnet-functionality-services-2.0.0-SNAPSHOT/rest/v2/api/projects?refine=true&fields=funderid&page=1&size=0
15
     constructor(private http: Http, public _cache: CacheService) {}
16
     getRefineFieldsResultsByEntityName(fields:string[], entityName:string):any{
17
        let link = OpenaireProperties.getSearchAPIURLForEntity(entityName)+"?format=json&refine=true&page=1&size=0";
18
        for(var i=0; i < fields.length; i++){
19
            link += "&fields="+fields[i];
20
        }
21
        let key = link;
22
        if (this._cache.has(key)) {
23
          return Observable.of(this._cache.get(key)).do(res => console.log(res['meta'])).map(res =>   [res['meta'].total, RefineResultsUtils.parse(res['refineResults'],fields, entityName)]).do(res => console.log(res));
24
        }
25
        return this.http.get(link)
26
                    .map(res => <any> res.json())
27
                    .do(res => {
28
                      this._cache.set(key, res);
29
                    })
30
                    .map(res =>   [res['meta'].total, RefineResultsUtils.parse(res['refineResults'],fields, entityName)]);
31

    
32
     }
33
    getRefineFieldResultsByFieldName(fieldName:string, entityName:string):any{
34
       let link = OpenaireProperties.getSearchAPIURLForEntity(entityName)+"?fields="+fieldName + "&format=json";
35
        return  this.getField(link,fieldName)
36

    
37
    }
38

    
39
    getField (link:string,fieldName:string):any{
40
      let url = link+"&refine=true&page=1&size=0";
41
      let key = url;
42
      if (this._cache.has(key)) {
43
        return Observable.of(this._cache.get(key)).map(res =>  this.parse(res,fieldName));
44
      }
45
      return this.http.get(url)
46
                  .map(res => <any> res.json())
47
                  .map(res => res['refineResults'])
48
                  .do(res => {
49
                    this._cache.set(key, res);
50
                  })
51
                  .map(res =>  this.parse(res,fieldName));
52

    
53
    }
54
    parse(data: any,fieldName:string):any {
55
      var values:AutoCompleteValue[] = [];
56
      if(data){
57
          let field = data[fieldName];
58
          for(let i=0; i<field.length; i++) {
59
            var value:AutoCompleteValue = new AutoCompleteValue();
60
            value.label = field[i].name;
61
            value.label = RefineResultsUtils.inParenthesisThePartAfterCharacters(field[i],"||");
62
            value.id = field[i].id;
63
            values.push(value);
64

    
65
        }
66
    }
67

    
68
    return values;
69
    }
70

    
71
    private handleError (error: Response) {
72
      // in a real world app, we may send the error to some remote logging infrastructure
73
      // instead of just logging it to the console
74
      console.log(error);
75
      return Observable.throw(error  || 'Server error');
76
    }
77
}
(10-10/18)