common/corpus-common-addon/app/services/bnf-resolver.js
author ymh <ymh.work@gmail.com>
Fri, 08 Apr 2016 17:50:49 +0200
changeset 145 49b75287c30b
parent 134 c06d08c8a1b8
child 182 1bcc373adabb
permissions -rw-r--r--
correct backoffocie with new handle if format
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
133
821253d361d1 add bnf resolver
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
import Ember from 'ember';
821253d361d1 add bnf resolver
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
import store from 'corpus-common-addon/utils/store';
821253d361d1 add bnf resolver
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
import * as constants from 'corpus-common-addon/utils/constants'
821253d361d1 add bnf resolver
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
821253d361d1 add bnf resolver
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
export default Ember.Service.extend({
821253d361d1 add bnf resolver
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
  env: function() {
821253d361d1 add bnf resolver
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
    return Ember.getOwner(this).resolveRegistration('config:environment')
821253d361d1 add bnf resolver
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
  },
821253d361d1 add bnf resolver
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
  _getStoreKey: function(id) {
134
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    10
    return 'bnf:'+id;
133
821253d361d1 add bnf resolver
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
  },
134
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    12
  getLabel: function(id) {
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    13
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    14
    if(!id) {
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    15
      return new Ember.RSVP.Promise(function(resolve/*, reject*/) {
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    16
        resolve("");
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    17
      });
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    18
    }
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    19
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    20
    var bnfId = id;
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    21
    if(id.startsWith(constants.BNF_BASE_URL + constants.BNF_ARK_BASE_ID)) {
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    22
      bnfId = id.slice((constants.BNF_BASE_URL + constants.BNF_ARK_BASE_ID).length);
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    23
    }
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    24
    else if (id.startsWith(constants.BNF_ARK_BASE_URL + constants.BNF_ARK_BASE_ID)) {
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    25
      bnfId = id.slice((constants.BNF_ARK_BASE_URL + constants.BNF_ARK_BASE_ID).length);
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    26
    }
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    27
    else if (id.startsWith(constants.BNF_ARK_BASE_ID)) {
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    28
      bnfId = id.slice(constants.BNF_ARK_BASE_ID.length);
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    29
    }
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    30
    var labelPromise = null;
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    31
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    32
    var storeKey = this._getStoreKey(id);
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    33
    var label = store.get(storeKey);
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    34
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    35
    if(!label) {
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    36
      //TODO: handle error !!!
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    37
      labelPromise = this.queryLabel(bnfId)
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    38
        .then( function(response) {
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    39
            return store.set(storeKey, response);
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    40
        });
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    41
    }
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    42
    else {
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    43
      labelPromise = new Ember.RSVP.Promise(function(resolve/*, reject*/) {
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    44
        resolve(label);
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    45
      });
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    46
    }
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    47
    return labelPromise;
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    48
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    49
  },
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    50
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    51
  // make the query for the name.
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    52
  // return a Promise
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    53
  queryLabel: function(id) {
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    54
    return new Ember.RSVP.Promise(function(resolve, reject) {
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    55
      Ember.$.ajax({
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    56
        //TODO Configuration for the host ?
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    57
        url: this.env().baseURL.replace(/\/$/,"") + "/api/v1/bnf/"+id,
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    58
        success: function(bnfDoc) {
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    59
          var labels = bnfDoc.bnfids;
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    60
          var expectedId = constants.BNF_ARK_BASE_ID + id;
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    61
          resolve((expectedId in labels)?labels[expectedId]:null);
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    62
        },
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    63
        error: function(req, status, error) {
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    64
          reject(status + ":" + error);
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    65
        }
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    66
      });
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    67
    }.bind(this));
133
821253d361d1 add bnf resolver
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
  }
821253d361d1 add bnf resolver
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
134
c06d08c8a1b8 add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents: 133
diff changeset
    70
133
821253d361d1 add bnf resolver
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
});