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-- |
133 | 1 |
import Ember from 'ember'; |
2 |
import store from 'corpus-common-addon/utils/store'; |
|
3 |
import * as constants from 'corpus-common-addon/utils/constants' |
|
4 |
||
5 |
export default Ember.Service.extend({ |
|
6 |
env: function() { |
|
7 |
return Ember.getOwner(this).resolveRegistration('config:environment') |
|
8 |
}, |
|
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 | 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 | 68 |
} |
69 |
||
134
c06d08c8a1b8
add bnf resolver in common addon + applications
ymh <ymh.work@gmail.com>
parents:
133
diff
changeset
|
70 |
|
133 | 71 |
}); |