Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Admin.js 3.61 KiB
"use strict";

/* exported logger */

var Promise = require("bluebird");

var CustomMapOptions = require('./map/CustomMapOptions');
var AbstractGuiElement = require('./gui/AbstractGuiElement');

var ConfigurationAdminPanel = require('./gui/admin/ConfigurationAdminPanel');
var GenomeAdminPanel = require('./gui/admin/GenomeAdminPanel');
var MapsAdminPanel = require('./gui/admin/MapsAdminPanel');
var UsersAdminPanel = require('./gui/admin/UsersAdminPanel');

// noinspection JSUnusedLocalSymbols
var logger = require('./logger');
var GuiUtils = require('./gui/leftPanel/GuiUtils');

/**
 * Default constructor.
 *
 * @param {CustomMapOptions} options
 *           object representing all parameters needed for map creation
 * @constructor
 */
function Admin(options) {
  var self = this;
  if (!(options instanceof CustomMapOptions)) {
    options = new CustomMapOptions(options);
  }

  self.setElement(options.getElement());
  self.setConfiguration(options.getConfiguration());
  self.setServerConnector(options.getServerConnector());

  self._createGui();
}

Admin.prototype = Object.create(AbstractGuiElement.prototype);
Admin.prototype.constructor = AbstractGuiElement;

/**
 *
 * @private
 */
Admin.prototype._createGui = function () {
  var self = this;
  self.getElement().innerHTML = "";
  self.getGuiUtils().initTabContent(self);

  var panels = [{
    name: "PROJECTS",
    panelClass: MapsAdminPanel
  }, {
    name: "USERS",
    panelClass: UsersAdminPanel
  }, {
    name: "CONFIGURATION",
    panelClass: ConfigurationAdminPanel
  }, {
    name: "GENOMES",
    panelClass: GenomeAdminPanel
  }];

  for (var i = 0; i < panels.length; i++) {
    self.getGuiUtils().addTab(self, panels[i]);
  }
  self.addLogoutButton($(this.getElement()).find("> .parentTabs > .nav-tabs")[0]);
};
/**
 *
 * @param navElement
 */
Admin.prototype.addLogoutButton = function (navElement) {
  var self = this;
  var logoutLink = self.getGuiUtils().createLogoutLink();

  var navLi = document.createElement("li");
  navLi.appendChild(logoutLink);
  navLi.style.cssFloat = "right";

  navElement.appendChild(navLi);
};

/**
 *
 * @param {HTMLElement} element
 */
Admin.prototype.setElement = function (element) {
  this._element = element;
};
/**
 *
 * @returns {HTMLElement}
 */
Admin.prototype.getElement = function () {
  return this._element;
};

/**
 *
 * @returns {Promise}
 */
Admin.prototype.init = function () {
  var promises = [];
  for (var i = 0; i < this._panels.length; i++) {
    promises.push(this._panels[i].init());
  }
  return Promise.all(promises).then(function () {
    $(window).trigger('resize');
  });
};

/**
 *
 * @param {Configuration} configuration
 */
Admin.prototype.setConfiguration = function (configuration) {
  this._configuration = configuration;
};

/**
 *
 * @returns {Configuration}
 */
Admin.prototype.getConfiguration = function () {
  return this._configuration;
};

/**
 *
 * @returns {Promise}
 */
Admin.prototype.destroy = function () {
  var self = this;
  var promises = [];
  for (var i = 0; i < self._panels.length; i++) {
    promises.push(self._panels[i].destroy());
  }
  return Promise.all(promises);
};

/**
 *
 * @param {ServerConnector} serverConnector
 */
Admin.prototype.setServerConnector = function (serverConnector) {
  this._serverConnector = serverConnector;
};

/**
 *
 * @returns {ServerConnector}
 */
Admin.prototype.getServerConnector = function () {
  return this._serverConnector;
};

/**
 *
 * @returns {GuiUtils}
 */
Admin.prototype.getGuiUtils = function () {
  var self = this;
  if (self._guiUtils === undefined) {
    self._guiUtils = new GuiUtils(self.getConfiguration());
  }
  return this._guiUtils;
};


module.exports = Admin;