Skip to content

Commit 2ea563c

Browse files
committed
Migrate to ibm-watson
1 parent 640ffb9 commit 2ea563c

File tree

6 files changed

+141
-110
lines changed

6 files changed

+141
-110
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Node-RED Watson Nodes for IBM Cloud
1313
- Discovery node
1414
- Discovery Document Loader node
1515
- Discovery Query Builder node
16-
16+
- List Expansion list, and List Training data modes added to Discovery node
1717

1818
### New in version 0.8.1
1919
- Node-RED & IBM-Watson & Use of promises on API invocation & IAM URL construct migration & Removal of default endpoint of

services/discovery/discovery-utils.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -334,18 +334,20 @@ DiscoveryUtils.prototype = {
334334

335335
if (schemaData &&
336336
'object' === typeof schemaData &&
337-
schemaData['fields'] &&
338-
Array.isArray(schemaData['fields'])) {
339-
schemaData['fields'].forEach((f) => {
337+
schemaData.result &&
338+
'object' === typeof schemaData.result &&
339+
schemaData.result['fields'] &&
340+
Array.isArray(schemaData.result['fields'])) {
341+
schemaData.result['fields'].forEach((f) => {
340342
if (f['field'] && f['type'] && 'nested' !== f['type']) {
341343
fields.push(f['field']);
342344
}
343345
});
344-
345346
}
346347

347348
if (fields.length) {
348349
fields = fields.filter(this.uniqueFilter);
350+
fields.sort();
349351
}
350352

351353
return fields;

services/discovery/v1-query-builder.html

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,6 @@
5454
</div>
5555

5656
<div class="form-row credentials">
57-
<label>&nbsp;</label>
58-
<input type="checkbox" id="node-input-default-endpoint" style="display: inline-block; width: auto; vertical-align: top;">
59-
<label for="node-input-default-endpoint" style="width: 70%;"> Use Default Service Endpoint</label>
60-
</div>
61-
<div class="form-row">
6257
<label for="node-input-service-endpoint"><i class="fa fa-tag"></i> Service Endpoint</label>
6358
<input type="text" id="node-input-service-endpoint" placeholder="https://gateway.watsonplatform.net/discovery/api">
6459
</div>
@@ -275,15 +270,6 @@
275270
}
276271
});
277272

278-
$('input#node-input-default-endpoint').change(function () {
279-
var checked = $('input#node-input-default-endpoint').prop('checked')
280-
if (checked) {
281-
$('#node-input-service-endpoint').parent().hide();
282-
} else {
283-
$('#node-input-service-endpoint').parent().show();
284-
}
285-
});
286-
287273
}
288274

289275
// The dialog is about to be shown.
@@ -458,10 +444,8 @@
458444
var k = $('#node-input-apikey').val();
459445

460446
var creds = {un: u, pwd: p, key: k};
461-
var eChecked = $('input#node-input-default-endpoint').prop('checked')
462-
if (!eChecked) {
463-
creds.endpoint = $('#node-input-service-endpoint').val();
464-
}
447+
448+
creds.endpoint = $('#node-input-service-endpoint').val();
465449

466450
$.getJSON('watson-discovery-v1-query-builder/environments', creds
467451
).done(function (data) {
@@ -496,10 +480,9 @@
496480
var k = $('#node-input-apikey').val();
497481

498482
var creds = {un: u, pwd: p, key: k};
499-
var eChecked = $('input#node-input-default-endpoint').prop('checked')
500-
if (!eChecked) {
501-
creds.endpoint = $('#node-input-service-endpoint').val();
502-
}
483+
484+
creds.endpoint = $('#node-input-service-endpoint').val();
485+
503486
creds.environment_id = disQB.environment_selected;
504487

505488
$.getJSON('watson-discovery-v1-query-builder/collections', creds
@@ -533,10 +516,9 @@
533516
var k = $('#node-input-apikey').val();
534517

535518
var creds = {un: u, pwd: p, key: k};
536-
var eChecked = $('input#node-input-default-endpoint').prop('checked')
537-
if (!eChecked) {
538-
creds.endpoint = $('#node-input-service-endpoint').val();
539-
}
519+
520+
creds.endpoint = $('#node-input-service-endpoint').val();
521+
540522
creds.environment_id = disQB.environment_selected;
541523
creds.collection_id = disQB.collection_selected;
542524

@@ -731,8 +713,7 @@
731713
queryvalue3hidden: {value: ''},
732714
passages: {value: false},
733715
passageshidden: {value: false},
734-
'default-endpoint' :{value: true},
735-
'service-endpoint' :{value: 'https://gateway.watsonplatform.net/discovery/api'}
716+
'service-endpoint' :{value: ''}
736717

737718
},
738719
credentials: {

services/discovery/v1-query-builder.js

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,20 @@ module.exports = function(RED) {
3737
res.json(serviceutils.checkServiceBound(SERVICE_IDENTIFIER));
3838
});
3939

40+
function processResponse(response, field) {
41+
let reply = response;
42+
if (response) {
43+
if (response.result) {
44+
if (response.result[field]) {
45+
reply = response.result[field];
46+
} else {
47+
reply = response.result;
48+
}
49+
}
50+
}
51+
return reply;
52+
}
53+
4054
// API used by widget to fetch available environments
4155
RED.httpAdmin.get('/watson-discovery-v1-query-builder/environments', function(req, res) {
4256

@@ -45,13 +59,13 @@ module.exports = function(RED) {
4559
sApikey ? sApikey : req.query.key,
4660
req.query.endpoint ? req.query.endpoint : sEndpoint);
4761

48-
discovery.listEnvironments({}, function(err, response) {
49-
if (err) {
62+
discovery.listEnvironments({})
63+
.then((response) => {
64+
res.json(processResponse(response,'environments'));
65+
})
66+
.catch((err) => {
5067
res.json(err);
51-
} else {
52-
res.json(response.environments ? response.environments : response);
53-
}
54-
});
68+
});
5569
});
5670

5771
// API used by widget to fetch available collections in environment
@@ -61,17 +75,13 @@ module.exports = function(RED) {
6175
sApikey ? sApikey : req.query.key,
6276
req.query.endpoint ? req.query.endpoint : sEndpoint);
6377

64-
discovery.listCollections({
65-
environment_id: req.query.environment_id
66-
},
67-
function(err, response) {
68-
if (err) {
69-
res.json(err);
70-
} else {
71-
res.json(response.collections ? response.collections : response);
72-
}
73-
}
74-
);
78+
discovery.listCollections({environmentId: req.query.environment_id})
79+
.then((response) => {
80+
res.json(processResponse(response,'collections'));
81+
})
82+
.catch((err) => {
83+
res.json(err);
84+
});
7585
});
7686

7787

@@ -83,18 +93,17 @@ module.exports = function(RED) {
8393
req.query.endpoint ? req.query.endpoint : sEndpoint);
8494

8595
discovery.listCollectionFields({
86-
environment_id: req.query.environment_id,
87-
collection_id: req.query.collection_id
88-
},
89-
function(err, response) {
90-
if (err) {
91-
res.json(err);
92-
} else {
93-
var fieldList = discoveryutils.buildFieldList(response);
94-
res.json(fieldList);
95-
}
96-
}
97-
);
96+
environmentId: req.query.environment_id,
97+
collectionId: req.query.collection_id
98+
})
99+
.then((response) => {
100+
let fieldList = discoveryutils.buildFieldList(response);
101+
res.json(fieldList);
102+
})
103+
.catch((err) => {
104+
res.json(err);
105+
});
106+
98107
});
99108

100109
function Node(config) {

services/discovery/v1.html

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@
6262
<option value="listConfigurations">List existing configurations</option>
6363
<option value="getConfigurationDetails">Retrieve configuration details</option>
6464
<option value="deleteConfiguration">Delete configuration</option>
65+
<option disabled>______________</option>
66+
<option value="listExpansions">Get expansion list for collection.</option>
67+
<option value="listTrainingData">Get training data for collection.</option>
6568
</select>
6669
</div>
6770

@@ -312,6 +315,33 @@
312315
</ul>
313316
</li>
314317
<br/>
318+
<li>
319+
<p><b>List Expansions</b><p>
320+
<p>For this method the node needs an Environment ID and Collection ID as input.</p>
321+
<p>The Environment ID, and Collection ID for the collection list being requested can be overridden by specifying the search id
322+
in <code>msg.discoveryparams.environmentId</code>
323+
and in <code>msg.discoveryparams.collectionId</code>
324+
</p>
325+
<p>Node output : </p>
326+
<ul>
327+
<li><code>msg.expansions</code> : The current expansion list for the specified collection.
328+
If an expansion list is not specified, an object with empty expansion arrays is returned.</li>
329+
</ul>
330+
</li>
331+
<br/>
332+
<li>
333+
<p><b>List Training Data</b><p>
334+
<p>For this method the node needs an Environment ID and Collection ID as input.</p>
335+
<p>The Environment ID, and Collection ID for the collection list being requested can be overridden by specifying the search id
336+
in <code>msg.discoveryparams.environmentId</code>
337+
and in <code>msg.discoveryparams.collectionId</code>
338+
</p>
339+
<p>Node output : </p>
340+
<ul>
341+
<li><code>msg.trainingData</code> : Lists the training data for the specified collection</li>
342+
</ul>
343+
</li>
344+
<br/>
315345
<li>
316346
<p><b>Search in Collection</b><p>
317347
<p>For this method the node needs an Environment ID and Collection ID as input.
@@ -414,6 +444,8 @@
414444
break;
415445
case 'getCollectionDetails':
416446
case 'deleteCollection':
447+
case 'listExpansions':
448+
case 'listTrainingData':
417449
fields.push('#node-input-environmentId'
418450
+ ', #node-input-collectionId');
419451
break;

services/discovery/v1.js

Lines changed: 55 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,25 @@ module.exports = function (RED) {
3131
endpoint = '',
3232
sEndpoint = 'https://gateway.watsonplatform.net/discovery/api';
3333

34+
const ExecutionList = {
35+
'createEnvrionment': executeCreateEnvrionment,
36+
'listEnvrionments': executeListEnvrionments,
37+
'getEnvironmentDetails': executeEnvrionmentDetails,
38+
'createCollection': executeCreateCollection,
39+
'listCollections': executeListCollections,
40+
'getCollectionDetails': executeGetCollectionDetails,
41+
'deleteCollection': executeDeleteCollection,
42+
'createConfiguration': executeCreateConfiguration,
43+
'listConfigurations': executeListConfigurations,
44+
'getConfigurationDetails': executeGetConfigurationDetails,
45+
'deleteConfiguration': executeDeleteConfiguration,
46+
'deleteEnvironment': executeDeleteEnvironment,
47+
'listExpansions': executeListExpansions,
48+
'listTrainingData': executeListTrainingData,
49+
'query': executeQuery,
50+
'queryNotices': executeQueryNotices
51+
};
52+
3453

3554
function checkParams(method, params){
3655
var response = '';
@@ -51,6 +70,8 @@ module.exports = function (RED) {
5170
case 'getCollectionDetails':
5271
case 'query':
5372
case 'queryNotices':
73+
case 'listExpansions':
74+
case 'listTrainingData':
5475
response = discoveryutils.paramEnvCheck(params) +
5576
discoveryutils.paramCollectionCheck(params);
5677
break;
@@ -207,6 +228,35 @@ module.exports = function (RED) {
207228
return p;
208229
}
209230

231+
function executeListExpansions(node, discovery, params, msg) {
232+
var p = new Promise(function resolver(resolve, reject){
233+
discovery.listExpansions(params)
234+
.then((response) => {
235+
responseutils.parseResponseFor(msg, response, 'expansions');
236+
resolve();
237+
})
238+
.catch((err) => {
239+
reject(err);
240+
});
241+
});
242+
return p;
243+
}
244+
245+
function executeListTrainingData(node, discovery, params, msg) {
246+
var p = new Promise(function resolver(resolve, reject){
247+
discovery.listTrainingData(params)
248+
.then((response) => {
249+
msg.trainingData = response.result ? response.result : response;
250+
resolve();
251+
})
252+
.catch((err) => {
253+
reject(err);
254+
});
255+
});
256+
return p;
257+
}
258+
259+
210260
function executeCreateConfiguration(node, discovery, params, msg) {
211261
var p = new Promise(function resolver(resolve, reject){
212262
discovery.createConfiguration(params)
@@ -289,56 +339,13 @@ module.exports = function (RED) {
289339

290340
function executeMethod(node, method, params, msg) {
291341
let discovery = discoveryutils.buildService(username, password, apikey, endpoint);
292-
var p = null;
293342

294-
switch (method) {
295-
case 'createEnvrionment':
296-
p = executeCreateEnvrionment(node, discovery, params, msg);
297-
break;
298-
case 'listEnvrionments':
299-
p = executeListEnvrionments(node, discovery, params, msg);
300-
break;
301-
case 'getEnvironmentDetails':
302-
p = executeEnvrionmentDetails(node, discovery, params, msg);
303-
break;
304-
case 'createCollection':
305-
p = executeCreateCollection(node, discovery, params, msg);
306-
break;
307-
case 'listCollections':
308-
p = executeListCollections(node, discovery, params, msg);
309-
break;
310-
case 'getCollectionDetails':
311-
p = executeGetCollectionDetails(node, discovery, params, msg);
312-
break;
313-
case 'deleteCollection':
314-
p = executeDeleteCollection(node, discovery, params, msg);
315-
break;
316-
case 'createConfiguration':
317-
p = executeCreateConfiguration(node, discovery, params, msg);
318-
break;
319-
case 'listConfigurations':
320-
p = executeListConfigurations(node, discovery, params, msg);
321-
break;
322-
case 'getConfigurationDetails':
323-
p = executeGetConfigurationDetails(node, discovery, params, msg);
324-
break;
325-
case 'deleteConfiguration':
326-
p = executeDeleteConfiguration(node, discovery, params, msg);
327-
break;
328-
case 'deleteEnvironment':
329-
p = executeDeleteEnvironment(node, discovery, params, msg);
330-
break;
331-
case 'query':
332-
p = executeQuery(node, discovery, params, msg);
333-
break;
334-
case 'queryNotices':
335-
p = executeQueryNotices(node, discovery, params, msg);
336-
break;
337-
default :
338-
p = unknownMethod(node, discovery, params, msg);
339-
break;
343+
let exe = ExecutionList[method];
344+
if (!exe) {
345+
exe = unknownMethod
340346
}
341-
return p;
347+
348+
return exe(node, discovery, params, msg);
342349
}
343350

344351
function initialCheck(u, p, k, m) {

0 commit comments

Comments
 (0)