Name

sn_appclient.AppManagerHandler

Description

App Manager utility to handle install/update/activate/repair of apps/plugins

Script

var AppManagerHandler = Class.create();
AppManagerHandler.prototype = {
  initialize: function() {
      this.appManagerAPI = global.AppManagerAPI;
      this.useQueuedInstall = gs.getProperty("sn_appclient.use_queued_installation") == 'true';
      this.appUpgarder = new AppUpgrader();
  },

  _trackAndBuildResponse: function(inputPayload, response, id, type, mode) {
      var trackerPayload = CommonUtils.parse(response);
      var trackerId = trackerPayload && trackerPayload.links && trackerPayload.links.progress && trackerPayload.links.progress.id;
      if (trackerId)
          trackerPayload.trackerId = trackerId;
      CommonUtils.addProgressTracker(inputPayload, trackerPayload, id, type, mode);
      return trackerPayload;
  },

  _trackAndBuildBatchResponse: function(inputPayload, response, id, type, mode) {
      var trackerPayload = CommonUtils.parse(response);
      var trackerId = trackerPayload && trackerPayload.links && trackerPayload.links.progress && trackerPayload.links.progress.id;
      var batchInstallId = trackerPayload && trackerPayload.links && trackerPayload.links.results && trackerPayload.links.results.id;
      if (trackerId) {
          trackerPayload.batchInfo = {};
          trackerPayload.batchInfo[Constants.EXECUTION_TRACKER_ID] = trackerId;
          trackerPayload.batchInfo[Constants.BATCH_INSTALLATION_ID] = batchInstallId;
      }
      trackerPayload.trackerId = trackerPayload.batchInfo[Constants.EXECUTION_TRACKER_ID];
      CommonUtils.addProgressTracker(inputPayload, trackerPayload, id, type, mode);
      return trackerPayload;
  },

  installApp: function(params) {
      var queryParams = params.queryParams || {};
      var applicationId, response;
      var isReinstall = queryParams['isReinstall'] || false;
      if (!this.useQueuedInstall) {
          applicationId = queryParams.app_id;
          response = this.appUpgarder.installAndUpdateApps(queryParams);
      } else {
          var inputPayload = this._getApplicationParams(params.queryParams);
          var applicationId = inputPayload.appId;
          var version = inputPayload.version;
          var customizationVersion = inputPayload.customizationVersion;
          var loadDemoData = inputPayload.loadDemoData;
          response = isReinstall ? AppManagerAPI.repairApplication(applicationId, version, customizationVersion, loadDemoData) :
              AppManagerAPI.installApplication(applicationId, version, customizationVersion, loadDemoData);

      }
      return this._trackAndBuildResponse(queryParams, response, applicationId, Constants.APPLICATION, isReinstall ? Constants.REINSTALL : Constants.INSTALL);
  },

  updateApp: function(params) {
      var queryParams = params.queryParams || {};
      var applicationId, response;
      if (!this.useQueuedInstall) {
          applicationId = queryParams.app_id;
          response = this.appUpgarder.installAndUpdateApps(queryParams);
      } else {
          var inputPayload = this._getApplicationParams(params.queryParams);
          var applicationId = inputPayload.appId;
          var version = inputPayload.version;
          var customizationVersion = inputPayload.customizationVersion;
          var loadDemoData = inputPayload.loadDemoData;
          response = AppManagerAPI.updateApplication(applicationId, version, customizationVersion, loadDemoData);
      }
      return this._trackAndBuildResponse(queryParams, response, applicationId, Constants.APPLICATION, Constants.UPDATE);
  },

  repairApp: function(params) {
      var queryParams = params.queryParams || {};
      queryParams.isReinstall = true;
      var applicationId, response;
      if (!this.useQueuedInstall) {
          applicationId = queryParams.app_id;
          response = this.appUpgarder.installAndUpdateApps(queryParams);
      } else {
          var inputPayload = this._getApplicationParams(params.queryParams);
          var applicationId = inputPayload.appId;
          var version = inputPayload.version;
          var customizationVersion = inputPayload.customizationVersion;
          var loadDemoData = inputPayload.loadDemoData;
          response = AppManagerAPI.repairApplication(applicationId, version, customizationVersion, loadDemoData);
      }
      return this._trackAndBuildResponse(queryParams, response, applicationId, Constants.APPLICATION, Constants.REPAIR);
  },

  activatePlugin: function(params) {
      var inputPayload = this._getPluginParams(params.queryParams);
      var pluginId = inputPayload.pluginId;
      var customizationVersion = inputPayload.customizationVersion;
      var loadDemoData = inputPayload.loadDemoData;
      var response = AppManagerAPI.activatePlugin(pluginId, customizationVersion, loadDemoData);
      return this._trackAndBuildResponse(inputPayload, response, pluginId, Constants.PLUGIN, Constants.ACTIVATE);
  },

  repairPlugin: function(params) {
      var inputPayload = this._getPluginParams(params.queryParams);
      var pluginId = inputPayload.pluginId;
      var customizationVersion = inputPayload.customizationVersion;
      var loadDemoData = inputPayload.loadDemoData;
      var response = AppManagerAPI.repairPlugin(pluginId, customizationVersion, loadDemoData);
      return this._trackAndBuildResponse(inputPayload, response, pluginId, Constants.PLUGIN, Constants.REPAIR);
  },

  installProduct: function(installationPlan) {
      var productId = installationPlan.product_id;
      var response = {};
      if (!this.useQueuedInstall)
          response = this.appUpgarder.installProductByPlan(installationPlan);
      else
          response = AppManagerAPI.installBatch(JSON.stringify(installationPlan));
      return this._trackAndBuildBatchResponse(installationPlan, response, productId, Constants.PRODUCT, Constants.INSTALL);
  },

  _isBaseOnlyInstall: function(version, installedVersion, customizationVersion, installedCustomizationVersion) {
      return version && version != installedVersion && customizationVersion == installedCustomizationVersion;
  },

  _isCustomizedInstall: function(version, installedVersion, customizationVersion, installedCustomizationVersion) {
      return customizationVersion && version == installedVersion && customizationVersion != installedCustomizationVersion;
  },

  _getApplicationParams: function(queryParams) {
      var appId = queryParams[Constants.APP_ID] || '';
      var loadDemoData = queryParams[Constants.LOAD_DEMO_DATA] ? CommonUtils.getBooleanParam(queryParams, Constants.LOAD_DEMO_DATA) : false;
      var version = queryParams[Constants.VERSION] || '';
      var customizationVersion = queryParams[Constants.CUSTOMIZATION_VERSION] || '';
      var installedVersion = CommonUtils.getInstalledVersion(appId);
      var installedCustomizationVersion = CommonUtils.getInstalledCustomizationVersion(appId);

      if (this._isBaseOnlyInstall(version, installedVersion, customizationVersion, installedCustomizationVersion))
          customizationVersion = '';
      else if (this._isCustomizedInstall(version, installedVersion, customizationVersion, installedCustomizationVersion))
          version = '';

      return {
          appId: appId,
          version: version,
          customizationVersion: customizationVersion,
          loadDemoData: loadDemoData,
      };
  },

  _getPluginParams: function(queryParams) {
      var customizationVersion = queryParams[Constants.CUSTOMIZATION_VERSION] || '';
      if (Constants.NONE == customizationVersion.toLowerCase())
          customizationVersion = '';
      return {
          pluginId: queryParams[Constants.PLUGIN_ID_PARAM] || '',
          customizationVersion: customizationVersion,
          loadDemoData: queryParams[Constants.LOAD_DEMO_DATA] ? CommonUtils.getBooleanParam(queryParams, Constants.LOAD_DEMO_DATA) : false
      };
  },

  type: 'AppManagerHandler'
};

Sys ID

9cd5d0f077902110c918256a5b5a99d0

Offical Documentation

Official Docs: