/* * Licensed Materials - Property of IBM * * IBM Cognos Products: SHARE * * (C) Copyright IBM Corp. 2015, 2017 * * US Government Users Restricted Rights - Use, duplication or disclosure * restricted by GSA ADP Schedule Contract with IBM Corp. */ define(["jquery", "q", "bi/sharecommon/utils/translator"], function($, Q, t) { var scheduleSvc = {}; var SERVER_URI = 'v1/reports/'; var SERVER_URI_SUBSCRIPTION= "v1/subscriptions/"; var SERVER_URI_USERPROFILE = 'v1/users/~/credentials'; var SERVER_URI_CONTENTAPPS = 'v1/objects/'; var PRINTERS_URI = 'v1/system/printers'; var ARCHIVE_LOCATION_URI = 'v1/archive_locations'; var SCHEDULE_ENDPOINT = '/schedule'; var SUBSCRIPTION_ENDPOINT = '/subscriptions'; var CLOUD_STORAGE_ENDPOINT = 'v1/cos/consumption'; /* Service functions for UPS / Credential */ /** * create a user credential * @param glassContext * @param data (optional) parameter data to send * @returns promise */ scheduleSvc.createUserCredential = function(glassContext, data) { var deferred = Q.defer(); var server_URL = SERVER_URI_USERPROFILE; if (typeof data == 'undefined') { data = {}; } glassContext.services.ajax.ajax({ url: server_URL, type: 'POST', dataType: 'json', headers: { Accept: 'application/json', "Content-Type": 'application/json' }, data: JSON.stringify(data) }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }).fail(function(dfd, jqXHR, textStatus, errorThrown) { if(!jqXHR.responseJSON.promptInfo || !jqXHR.responseJSON.promptInfo.displayObjects) { // no promptInfo, true error. var errmsg = jqXHR.responseJSON.code + ": " + jqXHR.responseJSON.message; glassContext.appController.showErrorMessage(errmsg, t.translate("error_label_share")); deferred.reject(); } else { deferred.reject(jqXHR.responseJSON.promptInfo); } }); return deferred.promise; }; /** * get a user's credentials * @param glassContext */ scheduleSvc.getUserCredential = function(glassContext) { var deferred = Q.defer(); var server_URL = SERVER_URI_USERPROFILE; glassContext.services.ajax.ajax({ url: server_URL, type: 'GET', dataType: 'json' }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }).fail(function(jqXHR, textStatus, errorThrown) { console.log(textStatus +": We can't get your credentials right now. Try again later."); deferred.reject(); }); return deferred.promise; }; scheduleSvc.setOption = function(options, anOptName, value, type) { options.forEach(function(anOpt) { if (anOpt.name === anOptName) { anOpt.value = value; return; } }.bind(this)); options.push({ name: anOptName, value: value, type: type }); return; }; scheduleSvc.updateScheduleCloudOptions = function(scheduleObj, saveToCloudOptions, glassContext) { var deferred = Q.defer(); if (saveToCloudOptions.location) { scheduleSvc.setOption(scheduleObj.options, 'runOptionEnum#saveToCloud', saveToCloudOptions.location, 'genericOptionObjectRef'); if (saveToCloudOptions.reportName) { scheduleSvc.setOption(scheduleObj.options, 'runOptionEnum#cloudName', saveToCloudOptions.reportName, 'genericOptionString'); } var server_URL = SERVER_URI_CONTENTAPPS + scheduleObj.id; glassContext.getCoreSvc('.Ajax').ajax({ url: server_URL, method: 'PUT', contentType: 'application/json; charset=utf-8', data: JSON.stringify({ type: scheduleObj.type, id: scheduleObj.id, options: scheduleObj.options }) }).done(function(data) { deferred.resolve(data); }); } else { deferred.resolve(); } return deferred.promise; }; scheduleSvc.readRawSchedule = function(scheduleId, glassContext) { var deferred = Q.defer(); var server_URL = SERVER_URI_CONTENTAPPS + scheduleId + '?fields=options'; if (!glassContext.services.ajax) { return Promise.resolve({ data:[{}] }); } glassContext.services.ajax.ajax({ type: 'GET', url: server_URL, contentType: 'application/json; charset=utf-8', dataType: 'json' }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }).fail(function(jqXHR, textStatus, errorThrown) { var errorMessage = t.translate("error_get_object_properties"); console.log(errorMessage); glassContext.appController.showErrorMessage(errorMessage, t.translate("error_label_share")); deferred.reject({ message: errorMessage, causedBy: errorThrown }); }); return deferred.promise; }; /* Service functions for SCHEDULE */ /** * Create schedule * @param scheduleDesc schedule descriptor for the new schedule * @returns promise */ scheduleSvc.createOrUpdateSchedule = function(scheduleDescriptor, glassContext) { var deferred = Q.defer(); var server_URL = SERVER_URI + scheduleDescriptor.reportId + SCHEDULE_ENDPOINT; glassContext.services.ajax.ajax({ url: server_URL, type: 'PUT', headers: { Accept: 'application/vnd.ibm.bi.platform.schedule+json', "Content-Type": 'application/vnd.ibm.bi.platform.schedule+json' }, dataType: 'json', data: JSON.stringify(scheduleDescriptor) }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }).fail(function(jqXHR, textStatus, errorThrown) { var errmsg = textStatus + ':' + t.translate("error_create_schedule"); console.log(errmsg); glassContext.appController.showErrorMessage(t.translate("error_create_schedule"), t.translate("error_label_share")); deferred.reject({ message: errmsg, causedBy: errorThrown }); }); return deferred.promise; }; /** * Delete schedule for a report * @param reportId id of the report to delete * @returns promise */ scheduleSvc.deleteSchedule = function(reportId, glassContext) { var deferred = Q.defer(); var server_URL = SERVER_URI + reportId + SCHEDULE_ENDPOINT; glassContext.services.ajax.ajax({ url: server_URL, type: 'PUT', headers: { Accept: 'application/vnd.ibm.bi.platform.schedule+json', "Content-Type": 'application/vnd.ibm.bi.platform.schedule+json' }, dataType: 'json', data: JSON.stringify({}) }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }).fail(function(jqXHR, textStatus, errorThrown) { var errmsg = textStatus + ':' + t.translate("error_delete_schedule"); console.log(errmsg); glassContext.appController.showErrorMessage(t.translate("error_delete_schedule"), t.translate("error_label_share")); deferred.reject({ message: errmsg, causedBy: errorThrown }); }); return deferred.promise; }; /** * Retrieve schedule for a report * @param reportId id of the report whose schedule we retrieve * @returns promise */ scheduleSvc.getSchedule = function(reportId, glassContext) { var deferred = Q.defer(); var server_URL = SERVER_URI + reportId + SCHEDULE_ENDPOINT; glassContext.services.ajax.ajax({ url: server_URL, type: 'GET', dataType: 'json' }).done(function(data, textStatus, jqXHR) { console.log(data); deferred.resolve(data); }).fail(function(jqXHR, textStatus, errorThrown) { var errmsg = textStatus + ':' + t.translate("error_get_schedule"); console.log(errmsg); glassContext.appController.showErrorMessage(t.translate("error_get_schedule"), t.translate("error_label_share")); deferred.reject({ message: errmsg, causedBy: errorThrown }); }); return deferred.promise; }; /* Service functions for SUBSCRIPTION */ /** * Create subscription * @param scheduleDesc subscription descriptor for the new subscription * @returns promise */ scheduleSvc.createSubscription = function(subscriptionDesc, glassContext){ var deferred = Q.defer(); var server_URL = SERVER_URI + subscriptionDesc.reportId + SUBSCRIPTION_ENDPOINT; glassContext.services.ajax.ajax({ url: server_URL, type: 'POST', headers: { Accept: 'application/vnd.ibm.bi.platform.subscription+json', "Content-Type": 'application/vnd.ibm.bi.platform.subscription+json' }, dataType: 'json', data: JSON.stringify(subscriptionDesc) }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }).fail(function(jqXHR, textStatus, errorThrown) { /* The error message from the REST service is translated */ var errmsg = textStatus.responseJSON.error; console.log(errmsg); glassContext.appController.showErrorMessage(errmsg, t.translate("error_label_share")); deferred.reject({ message: errmsg, causedBy: errorThrown }); }); return deferred.promise; }; /** * Update subscription * @param descriptor The information to use to update a subscription * @returns promise */ scheduleSvc.updateSubscription = function(descriptor, glassContext){ var deferred = Q.defer(); var server_URL = SERVER_URI_SUBSCRIPTION + descriptor.id; glassContext.services.ajax.ajax({ url: server_URL, type: 'PUT', headers: { Accept: 'application/vnd.ibm.bi.platform.subscription+json', "Content-Type": 'application/vnd.ibm.bi.platform.subscription+json' }, dataType: 'json', data: JSON.stringify(descriptor) }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }).fail(function(jqXHR, textStatus, errorThrown) { var errmsg = textStatus + ':' + t.translate("error_update_subscription"); console.log(errmsg); glassContext.appController.showErrorMessage(t.translate("error_update_subscription"), t.translate("error_label_share")); deferred.reject({ message: errmsg, causedBy: errorThrown }); }); return deferred.promise; }; /** * Get subscriptions. retrieve all subscriptions for the current user. * @param glassContext * @returns promise */ scheduleSvc.getSubscriptions = function(glassContext){ var deferred = Q.defer(); var server_URL = SERVER_URI_SUBSCRIPTION; glassContext.services.ajax.ajax({ url: server_URL, type: 'GET', dataType: 'json' }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }).fail(function(jqXHR, textStatus, errorThrown) { var errmsg = textStatus + ':' + t.translate("error_get_susbcriptions"); console.log(errmsg); glassContext.appController.showErrorMessage(t.translate("error_get_susbcriptions"), t.translate("error_label_share")); deferred.reject({ message: errmsg, causedBy: errorThrown }); }); return deferred.promise; }; /** * Get subscriptions. retrieve all subscriptions for the current user. * @param glassContext * @returns promise */ scheduleSvc.getSubscriptionDetails = function(subscriptionId, glassContext) { var deferred = Q.defer(); var server_URL = SERVER_URI_SUBSCRIPTION + subscriptionId; glassContext.services.ajax.ajax({ url: server_URL, type: 'GET', dataType: 'json' }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }).fail(function(jqXHR, textStatus, errorThrown) { var errmsg = textStatus + ':' + t.translate("error_get_susbcriptions"); console.log(errmsg); glassContext.appController.showErrorMessage(t.translate("error_get_susbcriptions"), t.translate("error_label_share")); deferred.reject({ message: errmsg, causedBy: errorThrown }); }); return deferred.promise; }; /** * Deletes a specified subscription * * @param subContext The context that holds the glassContext and the subId used to delete the specified subscription * @returns promise */ scheduleSvc.deleteSubscription = function(subscriptionId, glassContext) { var deferred = Q.defer(); var server_URL = SERVER_URI_SUBSCRIPTION + subscriptionId; glassContext.services.ajax.ajax({ type: 'DELETE', url: server_URL, contentType: 'application/json; charset=utf-8', dataType: 'json' }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }).fail(function(jqXHR, textStatus, errorThrown) { var errmsg = textStatus + ':' + t.translate("error_delete_subscription"); console.log(errmsg); glassContext.appController.showErrorMessage(t.translate("error_delete_subscription"), t.translate("error_label_share")); deferred.reject({ message: errmsg, causedBy: errorThrown }); }); return deferred.promise; }; /* Content Apps functions */ scheduleSvc.getObjectProperties = function(objectId, glassContext) { var deferred = Q.defer(); var server_URL = SERVER_URI_CONTENTAPPS + objectId; glassContext.services.ajax.ajax({ type: 'GET', url: server_URL, contentType: 'application/json; charset=utf-8', dataType: 'json' }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }).fail(function(jqXHR, textStatus, errorThrown) { var errorMessage = t.translate("error_get_object_properties"); console.log(errorMessage); glassContext.appController.showErrorMessage(errorMessage, t.translate("error_label_share")); deferred.reject({ message: errorMessage, causedBy: errorThrown }); }); return deferred.promise; }; /** * Gets all printers configured in the system * * @param * @returns promise */ scheduleSvc.getPrinters = function(glassContext) { var deferred = Q.defer(); var server_URL = PRINTERS_URI; glassContext.services.ajax.ajax({ type: 'GET', url: server_URL, contentType: 'application/json; charset=utf-8', dataType: 'json' }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }).fail(function(jqXHR, textStatus, errorThrown) { var errmsg = textStatus + ':' + t.translate("error_get_printers"); console.log(errmsg); glassContext.appController.showErrorMessage(t.translate("error_get_printers"), t.translate("error_label_share")); deferred.reject({ message: errmsg, causedBy: errorThrown }); }); return deferred.promise; }; /** * Gets archive locations configured in the system * * @param * @returns promise */ scheduleSvc.getArchiveLocations = function(glassContext) { var deferred = Q.defer(); var server_URL = ARCHIVE_LOCATION_URI; glassContext.services.ajax.ajax({ type: 'GET', url: server_URL, contentType: 'application/json; charset=utf-8', dataType: 'json' }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }).fail(function(jqXHR, textStatus, errorThrown) { var errmsg = textStatus + ':' + t.translate("error_get_file_system_locations"); console.log(errmsg); glassContext.appController.showErrorMessage(t.translate("error_get_file_system_locations"), t.translate("error_label_share")); deferred.reject({ message: errmsg, causedBy: errorThrown }); }); return deferred.promise; }; scheduleSvc.getS3ConnectionDetails = function(glassContext) { var deferred = Q.defer(); var server_URL = CLOUD_STORAGE_ENDPOINT; glassContext.services.ajax.ajax({ type: 'GET', url: server_URL, contentType: 'application/json; charset=utf-8', dataType: 'json' }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }); return deferred.promise; }; scheduleSvc.getS3LocationsDetails = function(glassContext, id) { var deferred = Q.defer(); var server_URL = 'v1/cos/' + id + '/coslocations/consumption'; glassContext.services.ajax.ajax({ type: 'GET', url: server_URL, contentType: 'application/json; charset=utf-8', dataType: 'json' }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }); return deferred.promise; }; scheduleSvc.getS3LocationParentConnectionID = function(glassContext, id) { var deferred = Q.defer(); var server_URL = 'v1/objects/' + id + '?fields=parent'; glassContext.services.ajax.ajax({ type: 'GET', url: server_URL, contentType: 'application/json; charset=utf-8', dataType: 'json' }).done(function(data, textStatus, jqXHR) { deferred.resolve(data); }); return deferred.promise; }; return scheduleSvc; });