service.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. /*
  2. * Licensed Materials - Property of IBM
  3. *
  4. * IBM Cognos Products: SHARE
  5. *
  6. * (C) Copyright IBM Corp. 2015, 2017
  7. *
  8. * US Government Users Restricted Rights - Use, duplication or disclosure
  9. * restricted by GSA ADP Schedule Contract with IBM Corp.
  10. */
  11. define(["jquery", "q", "bi/sharecommon/utils/translator"], function($, Q, t) {
  12. var scheduleSvc = {};
  13. var SERVER_URI = 'v1/reports/';
  14. var SERVER_URI_SUBSCRIPTION= "v1/subscriptions/";
  15. var SERVER_URI_USERPROFILE = 'v1/users/~/credentials';
  16. var SERVER_URI_CONTENTAPPS = 'v1/objects/';
  17. var PRINTERS_URI = 'v1/system/printers';
  18. var ARCHIVE_LOCATION_URI = 'v1/archive_locations';
  19. var SCHEDULE_ENDPOINT = '/schedule';
  20. var SUBSCRIPTION_ENDPOINT = '/subscriptions';
  21. var CLOUD_STORAGE_ENDPOINT = 'v1/cos/consumption';
  22. /* Service functions for UPS / Credential */
  23. /**
  24. * create a user credential
  25. * @param glassContext
  26. * @param data (optional) parameter data to send
  27. * @returns promise
  28. */
  29. scheduleSvc.createUserCredential = function(glassContext, data) {
  30. var deferred = Q.defer();
  31. var server_URL = SERVER_URI_USERPROFILE;
  32. if (typeof data == 'undefined') {
  33. data = {};
  34. }
  35. glassContext.services.ajax.ajax({
  36. url: server_URL,
  37. type: 'POST',
  38. dataType: 'json',
  39. headers: {
  40. Accept: 'application/json',
  41. "Content-Type": 'application/json'
  42. },
  43. data: JSON.stringify(data)
  44. }).done(function(data, textStatus, jqXHR) {
  45. deferred.resolve(data);
  46. }).fail(function(dfd, jqXHR, textStatus, errorThrown) {
  47. if(!jqXHR.responseJSON.promptInfo || !jqXHR.responseJSON.promptInfo.displayObjects) {
  48. // no promptInfo, true error.
  49. var errmsg = jqXHR.responseJSON.code + ": " + jqXHR.responseJSON.message;
  50. glassContext.appController.showErrorMessage(errmsg, t.translate("error_label_share"));
  51. deferred.reject();
  52. } else {
  53. deferred.reject(jqXHR.responseJSON.promptInfo);
  54. }
  55. });
  56. return deferred.promise;
  57. };
  58. /**
  59. * get a user's credentials
  60. * @param glassContext
  61. */
  62. scheduleSvc.getUserCredential = function(glassContext) {
  63. var deferred = Q.defer();
  64. var server_URL = SERVER_URI_USERPROFILE;
  65. glassContext.services.ajax.ajax({
  66. url: server_URL,
  67. type: 'GET',
  68. dataType: 'json'
  69. }).done(function(data, textStatus, jqXHR) {
  70. deferred.resolve(data);
  71. }).fail(function(jqXHR, textStatus, errorThrown) {
  72. console.log(textStatus +": We can't get your credentials right now. Try again later.");
  73. deferred.reject();
  74. });
  75. return deferred.promise;
  76. };
  77. scheduleSvc.setOption = function(options, anOptName, value, type) {
  78. options.forEach(function(anOpt) {
  79. if (anOpt.name === anOptName) {
  80. anOpt.value = value;
  81. return;
  82. }
  83. }.bind(this));
  84. options.push({
  85. name: anOptName,
  86. value: value,
  87. type: type
  88. });
  89. return;
  90. };
  91. scheduleSvc.updateScheduleCloudOptions = function(scheduleObj, saveToCloudOptions, glassContext) {
  92. var deferred = Q.defer();
  93. if (saveToCloudOptions.location) {
  94. scheduleSvc.setOption(scheduleObj.options, 'runOptionEnum#saveToCloud', saveToCloudOptions.location, 'genericOptionObjectRef');
  95. if (saveToCloudOptions.reportName) {
  96. scheduleSvc.setOption(scheduleObj.options, 'runOptionEnum#cloudName', saveToCloudOptions.reportName, 'genericOptionString');
  97. }
  98. var server_URL = SERVER_URI_CONTENTAPPS + scheduleObj.id;
  99. glassContext.getCoreSvc('.Ajax').ajax({
  100. url: server_URL,
  101. method: 'PUT',
  102. contentType: 'application/json; charset=utf-8',
  103. data: JSON.stringify({
  104. type: scheduleObj.type,
  105. id: scheduleObj.id,
  106. options: scheduleObj.options
  107. })
  108. }).done(function(data) {
  109. deferred.resolve(data);
  110. });
  111. } else {
  112. deferred.resolve();
  113. }
  114. return deferred.promise;
  115. };
  116. scheduleSvc.readRawSchedule = function(scheduleId, glassContext) {
  117. var deferred = Q.defer();
  118. var server_URL = SERVER_URI_CONTENTAPPS + scheduleId + '?fields=options';
  119. if (!glassContext.services.ajax) {
  120. return Promise.resolve({ data:[{}] });
  121. }
  122. glassContext.services.ajax.ajax({
  123. type: 'GET',
  124. url: server_URL,
  125. contentType: 'application/json; charset=utf-8',
  126. dataType: 'json'
  127. }).done(function(data, textStatus, jqXHR) {
  128. deferred.resolve(data);
  129. }).fail(function(jqXHR, textStatus, errorThrown) {
  130. var errorMessage = t.translate("error_get_object_properties");
  131. console.log(errorMessage);
  132. glassContext.appController.showErrorMessage(errorMessage, t.translate("error_label_share"));
  133. deferred.reject({
  134. message: errorMessage,
  135. causedBy: errorThrown
  136. });
  137. });
  138. return deferred.promise;
  139. };
  140. /* Service functions for SCHEDULE */
  141. /**
  142. * Create schedule
  143. * @param scheduleDesc schedule descriptor for the new schedule
  144. * @returns promise
  145. */
  146. scheduleSvc.createOrUpdateSchedule = function(scheduleDescriptor, glassContext) {
  147. var deferred = Q.defer();
  148. var server_URL = SERVER_URI + scheduleDescriptor.reportId + SCHEDULE_ENDPOINT;
  149. glassContext.services.ajax.ajax({
  150. url: server_URL,
  151. type: 'PUT',
  152. headers: {
  153. Accept: 'application/vnd.ibm.bi.platform.schedule+json',
  154. "Content-Type": 'application/vnd.ibm.bi.platform.schedule+json'
  155. },
  156. dataType: 'json',
  157. data: JSON.stringify(scheduleDescriptor)
  158. }).done(function(data, textStatus, jqXHR) {
  159. deferred.resolve(data);
  160. }).fail(function(jqXHR, textStatus, errorThrown) {
  161. var errmsg = textStatus + ':' + t.translate("error_create_schedule");
  162. console.log(errmsg);
  163. glassContext.appController.showErrorMessage(t.translate("error_create_schedule"), t.translate("error_label_share"));
  164. deferred.reject({
  165. message: errmsg,
  166. causedBy: errorThrown
  167. });
  168. });
  169. return deferred.promise;
  170. };
  171. /**
  172. * Delete schedule for a report
  173. * @param reportId id of the report to delete
  174. * @returns promise
  175. */
  176. scheduleSvc.deleteSchedule = function(reportId, glassContext) {
  177. var deferred = Q.defer();
  178. var server_URL = SERVER_URI + reportId + SCHEDULE_ENDPOINT;
  179. glassContext.services.ajax.ajax({
  180. url: server_URL,
  181. type: 'PUT',
  182. headers: {
  183. Accept: 'application/vnd.ibm.bi.platform.schedule+json',
  184. "Content-Type": 'application/vnd.ibm.bi.platform.schedule+json'
  185. },
  186. dataType: 'json',
  187. data: JSON.stringify({})
  188. }).done(function(data, textStatus, jqXHR) {
  189. deferred.resolve(data);
  190. }).fail(function(jqXHR, textStatus, errorThrown) {
  191. var errmsg = textStatus + ':' + t.translate("error_delete_schedule");
  192. console.log(errmsg);
  193. glassContext.appController.showErrorMessage(t.translate("error_delete_schedule"), t.translate("error_label_share"));
  194. deferred.reject({
  195. message: errmsg,
  196. causedBy: errorThrown
  197. });
  198. });
  199. return deferred.promise;
  200. };
  201. /**
  202. * Retrieve schedule for a report
  203. * @param reportId id of the report whose schedule we retrieve
  204. * @returns promise
  205. */
  206. scheduleSvc.getSchedule = function(reportId, glassContext) {
  207. var deferred = Q.defer();
  208. var server_URL = SERVER_URI + reportId + SCHEDULE_ENDPOINT;
  209. glassContext.services.ajax.ajax({
  210. url: server_URL,
  211. type: 'GET',
  212. dataType: 'json'
  213. }).done(function(data, textStatus, jqXHR) {
  214. console.log(data);
  215. deferred.resolve(data);
  216. }).fail(function(jqXHR, textStatus, errorThrown) {
  217. var errmsg = textStatus + ':' + t.translate("error_get_schedule");
  218. console.log(errmsg);
  219. glassContext.appController.showErrorMessage(t.translate("error_get_schedule"), t.translate("error_label_share"));
  220. deferred.reject({
  221. message: errmsg,
  222. causedBy: errorThrown
  223. });
  224. });
  225. return deferred.promise;
  226. };
  227. /* Service functions for SUBSCRIPTION */
  228. /**
  229. * Create subscription
  230. * @param scheduleDesc subscription descriptor for the new subscription
  231. * @returns promise
  232. */
  233. scheduleSvc.createSubscription = function(subscriptionDesc, glassContext){
  234. var deferred = Q.defer();
  235. var server_URL = SERVER_URI + subscriptionDesc.reportId + SUBSCRIPTION_ENDPOINT;
  236. glassContext.services.ajax.ajax({
  237. url: server_URL,
  238. type: 'POST',
  239. headers: {
  240. Accept: 'application/vnd.ibm.bi.platform.subscription+json',
  241. "Content-Type": 'application/vnd.ibm.bi.platform.subscription+json'
  242. },
  243. dataType: 'json',
  244. data: JSON.stringify(subscriptionDesc)
  245. }).done(function(data, textStatus, jqXHR) {
  246. deferred.resolve(data);
  247. }).fail(function(jqXHR, textStatus, errorThrown) {
  248. /*
  249. The error message from the REST service is translated
  250. */
  251. var errmsg = textStatus.responseJSON.error;
  252. console.log(errmsg);
  253. glassContext.appController.showErrorMessage(errmsg, t.translate("error_label_share"));
  254. deferred.reject({
  255. message: errmsg,
  256. causedBy: errorThrown
  257. });
  258. });
  259. return deferred.promise;
  260. };
  261. /**
  262. * Update subscription
  263. * @param descriptor The information to use to update a subscription
  264. * @returns promise
  265. */
  266. scheduleSvc.updateSubscription = function(descriptor, glassContext){
  267. var deferred = Q.defer();
  268. var server_URL = SERVER_URI_SUBSCRIPTION + descriptor.id;
  269. glassContext.services.ajax.ajax({
  270. url: server_URL,
  271. type: 'PUT',
  272. headers: {
  273. Accept: 'application/vnd.ibm.bi.platform.subscription+json',
  274. "Content-Type": 'application/vnd.ibm.bi.platform.subscription+json'
  275. },
  276. dataType: 'json',
  277. data: JSON.stringify(descriptor)
  278. }).done(function(data, textStatus, jqXHR) {
  279. deferred.resolve(data);
  280. }).fail(function(jqXHR, textStatus, errorThrown) {
  281. var errmsg = textStatus + ':' + t.translate("error_update_subscription");
  282. console.log(errmsg);
  283. glassContext.appController.showErrorMessage(t.translate("error_update_subscription"), t.translate("error_label_share"));
  284. deferred.reject({
  285. message: errmsg,
  286. causedBy: errorThrown
  287. });
  288. });
  289. return deferred.promise;
  290. };
  291. /**
  292. * Get subscriptions. retrieve all subscriptions for the current user.
  293. * @param glassContext
  294. * @returns promise
  295. */
  296. scheduleSvc.getSubscriptions = function(glassContext){
  297. var deferred = Q.defer();
  298. var server_URL = SERVER_URI_SUBSCRIPTION;
  299. glassContext.services.ajax.ajax({
  300. url: server_URL,
  301. type: 'GET',
  302. dataType: 'json'
  303. }).done(function(data, textStatus, jqXHR) {
  304. deferred.resolve(data);
  305. }).fail(function(jqXHR, textStatus, errorThrown) {
  306. var errmsg = textStatus + ':' + t.translate("error_get_susbcriptions");
  307. console.log(errmsg);
  308. glassContext.appController.showErrorMessage(t.translate("error_get_susbcriptions"), t.translate("error_label_share"));
  309. deferred.reject({
  310. message: errmsg,
  311. causedBy: errorThrown
  312. });
  313. });
  314. return deferred.promise;
  315. };
  316. /**
  317. * Get subscriptions. retrieve all subscriptions for the current user.
  318. * @param glassContext
  319. * @returns promise
  320. */
  321. scheduleSvc.getSubscriptionDetails = function(subscriptionId, glassContext) {
  322. var deferred = Q.defer();
  323. var server_URL = SERVER_URI_SUBSCRIPTION + subscriptionId;
  324. glassContext.services.ajax.ajax({
  325. url: server_URL,
  326. type: 'GET',
  327. dataType: 'json'
  328. }).done(function(data, textStatus, jqXHR) {
  329. deferred.resolve(data);
  330. }).fail(function(jqXHR, textStatus, errorThrown) {
  331. var errmsg = textStatus + ':' + t.translate("error_get_susbcriptions");
  332. console.log(errmsg);
  333. glassContext.appController.showErrorMessage(t.translate("error_get_susbcriptions"), t.translate("error_label_share"));
  334. deferred.reject({
  335. message: errmsg,
  336. causedBy: errorThrown
  337. });
  338. });
  339. return deferred.promise;
  340. };
  341. /**
  342. * Deletes a specified subscription
  343. *
  344. * @param subContext The context that holds the glassContext and the subId used to delete the specified subscription
  345. * @returns promise
  346. */
  347. scheduleSvc.deleteSubscription = function(subscriptionId, glassContext) {
  348. var deferred = Q.defer();
  349. var server_URL = SERVER_URI_SUBSCRIPTION + subscriptionId;
  350. glassContext.services.ajax.ajax({
  351. type: 'DELETE',
  352. url: server_URL,
  353. contentType: 'application/json; charset=utf-8',
  354. dataType: 'json'
  355. }).done(function(data, textStatus, jqXHR) {
  356. deferred.resolve(data);
  357. }).fail(function(jqXHR, textStatus, errorThrown) {
  358. var errmsg = textStatus + ':' + t.translate("error_delete_subscription");
  359. console.log(errmsg);
  360. glassContext.appController.showErrorMessage(t.translate("error_delete_subscription"), t.translate("error_label_share"));
  361. deferred.reject({
  362. message: errmsg,
  363. causedBy: errorThrown
  364. });
  365. });
  366. return deferred.promise;
  367. };
  368. /* Content Apps functions */
  369. scheduleSvc.getObjectProperties = function(objectId, glassContext) {
  370. var deferred = Q.defer();
  371. var server_URL = SERVER_URI_CONTENTAPPS + objectId;
  372. glassContext.services.ajax.ajax({
  373. type: 'GET',
  374. url: server_URL,
  375. contentType: 'application/json; charset=utf-8',
  376. dataType: 'json'
  377. }).done(function(data, textStatus, jqXHR) {
  378. deferred.resolve(data);
  379. }).fail(function(jqXHR, textStatus, errorThrown) {
  380. var errorMessage = t.translate("error_get_object_properties");
  381. console.log(errorMessage);
  382. glassContext.appController.showErrorMessage(errorMessage, t.translate("error_label_share"));
  383. deferred.reject({
  384. message: errorMessage,
  385. causedBy: errorThrown
  386. });
  387. });
  388. return deferred.promise;
  389. };
  390. /**
  391. * Gets all printers configured in the system
  392. *
  393. * @param
  394. * @returns promise
  395. */
  396. scheduleSvc.getPrinters = function(glassContext) {
  397. var deferred = Q.defer();
  398. var server_URL = PRINTERS_URI;
  399. glassContext.services.ajax.ajax({
  400. type: 'GET',
  401. url: server_URL,
  402. contentType: 'application/json; charset=utf-8',
  403. dataType: 'json'
  404. }).done(function(data, textStatus, jqXHR) {
  405. deferred.resolve(data);
  406. }).fail(function(jqXHR, textStatus, errorThrown) {
  407. var errmsg = textStatus + ':' + t.translate("error_get_printers");
  408. console.log(errmsg);
  409. glassContext.appController.showErrorMessage(t.translate("error_get_printers"), t.translate("error_label_share"));
  410. deferred.reject({
  411. message: errmsg,
  412. causedBy: errorThrown
  413. });
  414. });
  415. return deferred.promise;
  416. };
  417. /**
  418. * Gets archive locations configured in the system
  419. *
  420. * @param
  421. * @returns promise
  422. */
  423. scheduleSvc.getArchiveLocations = function(glassContext) {
  424. var deferred = Q.defer();
  425. var server_URL = ARCHIVE_LOCATION_URI;
  426. glassContext.services.ajax.ajax({
  427. type: 'GET',
  428. url: server_URL,
  429. contentType: 'application/json; charset=utf-8',
  430. dataType: 'json'
  431. }).done(function(data, textStatus, jqXHR) {
  432. deferred.resolve(data);
  433. }).fail(function(jqXHR, textStatus, errorThrown) {
  434. var errmsg = textStatus + ':' + t.translate("error_get_file_system_locations");
  435. console.log(errmsg);
  436. glassContext.appController.showErrorMessage(t.translate("error_get_file_system_locations"), t.translate("error_label_share"));
  437. deferred.reject({
  438. message: errmsg,
  439. causedBy: errorThrown
  440. });
  441. });
  442. return deferred.promise;
  443. };
  444. scheduleSvc.getS3ConnectionDetails = function(glassContext) {
  445. var deferred = Q.defer();
  446. var server_URL = CLOUD_STORAGE_ENDPOINT;
  447. glassContext.services.ajax.ajax({
  448. type: 'GET',
  449. url: server_URL,
  450. contentType: 'application/json; charset=utf-8',
  451. dataType: 'json'
  452. }).done(function(data, textStatus, jqXHR) {
  453. deferred.resolve(data);
  454. });
  455. return deferred.promise;
  456. };
  457. scheduleSvc.getS3LocationsDetails = function(glassContext, id) {
  458. var deferred = Q.defer();
  459. var server_URL = 'v1/cos/' + id + '/coslocations/consumption';
  460. glassContext.services.ajax.ajax({
  461. type: 'GET',
  462. url: server_URL,
  463. contentType: 'application/json; charset=utf-8',
  464. dataType: 'json'
  465. }).done(function(data, textStatus, jqXHR) {
  466. deferred.resolve(data);
  467. });
  468. return deferred.promise;
  469. };
  470. scheduleSvc.getS3LocationParentConnectionID = function(glassContext, id) {
  471. var deferred = Q.defer();
  472. var server_URL = 'v1/objects/' + id + '?fields=parent';
  473. glassContext.services.ajax.ajax({
  474. type: 'GET',
  475. url: server_URL,
  476. contentType: 'application/json; charset=utf-8',
  477. dataType: 'json'
  478. }).done(function(data, textStatus, jqXHR) {
  479. deferred.resolve(data);
  480. });
  481. return deferred.promise;
  482. };
  483. return scheduleSvc;
  484. });