server/bo_client/app/services/viaf-resolver.js
author ymh <ymh.work@gmail.com>
Fri, 15 Jan 2016 15:35:00 +0100
changeset 28 b0b56e0f8c7f
permissions -rw-r--r--
Add contributor edition - added viaf resolver - improve contributors list display - add update of document objects - propagate update to back office - update back office - add bo-client to back office - setup language initializer - add options mechanism - add language information in language list - add lexvo resolver service + api - add language and lexvo resolver to js app - correct env template - refresh bootstrap - download google font - add version information - update dev virtual machine to centos7 - add a readme + clean folders - add local .env file to start commands

import Ember from 'ember';
import store from 'store';
import ENV from 'bo-client/config/environment';

// TODO: implement store layer with auto-expiration : c.f. https://github.com/marcuswestin/store.js/#no-sessionstorageauto-expiration
export default Ember.Service.extend({
  constants: Ember.inject.service(),
  _getStoreKey: function(id) {
    return 'viaf:'+id;
  },
  getName: function(id) {
    var viafId = id;
    if(id.startsWith(this.get('constants').VIAF_BASE_URL)) {
      viafId = id.slice(this.get('constants').VIAF_BASE_URL.length);
    }
    var storeKey = this._getStoreKey(id);
    var namePromise = null;

    var name = store.get(storeKey);
    if(!name) {
      //TODO: handle error !!!
      namePromise = this.queryName(viafId)
        .then( function(response) {
            return store.set(storeKey, response);
        });
    }
    else {
      namePromise = new Ember.RSVP.Promise(function(resolve/*, reject*/) {
        resolve(name);
      });
    }
    return namePromise;
  },
  // make the query for the name.
  // return a Promise
  queryName: function(id) {
    return new Ember.RSVP.Promise(function(resolve, reject) {
      Ember.$.ajax({
        //TODO Configuration ?
        url:  ENV.baseURL.replace(/\/$/,"") + "/api/v1/viaf/"+id,
        success: function(viafDoc) {
          var names = viafDoc.viafids;
          resolve((id in names)?names[id]:null);
        },
        error: function(req, status, error) {
          reject(status + ":" + error);
        }
      });
    }.bind(this));
  }
});