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