123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- "use strict";
- define(['bi/glass/core/Class', 'jquery'], function (Class, $) {
- 'use strict';
-
- var ExtensionService = Class.extend({
- themesUrl: 'v1/plugins/themes',
- extensionsUrl: 'v1/plugins/extensions',
- init: function init(options) {
- ExtensionService.inherited('init', this, arguments);
- this.logger = options.glassContext.appController.logger;
- this.ajaxService = options.glassContext.getCoreSvc('.Ajax');
- },
-
- ajax: function ajax(options) {
- var dfd = $.Deferred();
- if (this.ajaxService) {
- this.logDebug(options);
- return this.ajaxService.ajax(options, dfd);
- }
- var err = 'There is no ajax service from glass context.';
- this.logError(err);
- return dfd.reject(err);
- },
-
- delete: function _delete(type, name, tenantID) {
- var url;
- if (type === 'theme' || type === 'extension') {
- if (name) {
- url = this.getUrl(type, name, tenantID, 'delete');
- } else {
- this.logError('Missing name for deletion');
- }
- } else {
- this.logError('Incorrect extension type: ' + type);
- }
- var options = {
- 'dataType': 'json',
- 'type': 'DELETE',
- 'url': url
- };
- return this.ajax(options);
- },
-
- updateOrUpload: function updateOrUpload(options) {
- var url;
- var type;
- if (options.isUpload) {
- url = this.getUrl(options.type, null);
- type = 'POST';
- } else {
- if (!options.name) {
- var err = 'Name is not specified for update.';
- this.logError(err);
- var dfd = $.Deferred();
- return dfd.reject(err);
- }
- url = this.getUrl(options.type, options.name, null, 'update');
- type = 'PUT';
- }
- var requestOptions = {
- 'headers': {
- 'Accept': 'application/json',
- 'Content-Type': 'application/zip'
- },
- 'url': url,
- 'type': type,
- 'data': options.data,
- 'Content-Length': options.byteLength,
- 'processData': false
- };
- return this.ajax(requestOptions);
- },
-
- logError: function logError(msg) {
- if (this.logger) {
- this.logger.error(msg);
- }
- },
-
- logDebug: function logDebug(msg) {
- if (this.logger) {
- this.logger.debug(msg);
- }
- },
-
- buildUrl: function buildUrl(serviceUrl, name, tenantID, action) {
- var url;
- tenantID = tenantID ? tenantID : 'global';
- if (!name) {
- url = serviceUrl;
- } else {
- url = action !== 'update' ? serviceUrl + '/' + tenantID + '/' + name : serviceUrl + '/' + name;
- }
- return url;
- },
-
- getUrl: function getUrl(type, name, tenantID, action) {
- var url;
- if (type === 'theme') {
- url = this.buildUrl(this.themesUrl, name, tenantID, action);
- } else if (type === 'extension') {
- url = this.buildUrl(this.extensionsUrl, name, tenantID, action);
- } else {
- this.logError('Incorrect extension type: ' + type);
- }
- if (!url) {
- this.logDebug('Empty url');
- }
- return url;
- }
- });
- return ExtensionService;
- });
|