common/corpus-common-addon/app/services/viaf-resolver.js
author ymh <ymh.work@gmail.com>
Sun, 28 Feb 2016 09:30:23 +0100
changeset 134 c06d08c8a1b8
parent 132 d97eda8bc8ec
child 182 1bcc373adabb
permissions -rw-r--r--
add bnf resolver in common addon + applications
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
132
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
import Ember from 'ember';
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
import store from 'corpus-common-addon/utils/store';
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
import * as constants from 'corpus-common-addon/utils/constants'
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
export default Ember.Service.extend({
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
  env: function() {
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
    return Ember.getOwner(this).resolveRegistration('config:environment')
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
  },
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
  _getStoreKey: function(id) {
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
    return 'viaf:'+id;
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
  },
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
  getName: function(id) {
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
    var viafId = id;
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
    if(id.startsWith(constants.VIAF_BASE_URL)) {
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
      viafId = id.slice(constants.VIAF_BASE_URL.length);
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
    }
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
    var storeKey = this._getStoreKey(id);
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
    var namePromise = null;
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
    var name = store.get(storeKey);
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
    if(!name) {
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
      //TODO: handle error !!!
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
      namePromise = this.queryName(viafId)
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
        .then( function(response) {
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
            return store.set(storeKey, response);
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
        });
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
    }
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
    else {
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
      namePromise = new Ember.RSVP.Promise(function(resolve/*, reject*/) {
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
        resolve(name);
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
      });
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
    }
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
    return namePromise;
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
  },
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
  // make the query for the name.
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
  // return a Promise
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
  queryName: function(id) {
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    return new Ember.RSVP.Promise(function(resolve, reject) {
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
      Ember.$.ajax({
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
        url: this.env().baseURL.replace(/\/$/,"") + "/api/v1/viaf/"+id,
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
        success: function(viafDoc) {
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
          var names = viafDoc.viafids;
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
          resolve((id in names)?names[id]:null);
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
        },
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
        error: function(req, status, error) {
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
          reject(status + ":" + error);
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
        }
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
      });
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    }.bind(this));
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
  }
d97eda8bc8ec move viaf-resolver to common module
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
});