<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>JSDoc: Source: messaging/Connectors.js</title>

    <script src="scripts/prettify/prettify.js"> </script>
    <script src="scripts/prettify/lang-css.js"> </script>
    <!--[if lt IE 9]>
      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>

<body>

<div id="main">

    <h1 class="page-title">Source: messaging/Connectors.js</h1>

    



    
    <section>
        <article>
            <pre class="prettyprint source linenums"><code>/**
 * Licensed Materials - Property of IBM
 * IBM Cognos Products: Collaboration
 * (C) Copyright IBM Corp. 2017, 2018
 *
 * US Government Users Restricted Rights - Use, duplication or disclosure
 * restricted by GSA ADP Schedule Contract with IBM Corp.
 */

define([
	'../lib/@waca/core-client/js/core-client/ui/core/Class',
	'./connectors/index'
], function (Class, connectors) {
	'use strict';

	var Connectors = Class.extend( /** @lends Connectors */ {

		/**
		 * @desc Constructor for Connectors.
		 * @constructs Connectors
		 * @extends Class
		 * @public
		 * @param {object} options Options
		 * @param {object} options.glassContext The glass context
		 * @param {function} options.errorHandler Function to call when an error occurs
		 */
		init: function (options) {
			Connectors.inherited('init', this, arguments);
			this.glassContext = options.glassContext;
			if (!this.glassContext) {
				throw Error('Missing glassContext in options');
			}
			this.logger = this.glassContext.getCoreSvc('.Logger') || {
				log: console.log,
				error: console.error
			};
			this.errorHandler = options.errorHandler;

			// holds configured connectors
			this.connectors = [];
		},

		/**
		 * Discovers all the providers' and returns their connector instances.
		 * @instance
		 * @returns {promise}
		 */
		discover: function () {
			var ajaxSvc = this.glassContext.getCoreSvc('.Ajax');
			return ajaxSvc
				.ajax({
					type: 'GET',
					url: 'v1/collaboration/providers?flat=true'
				})
				.then(function (response) {
					return response.data.map(function (provider) {
						return this._handleSingleProvider(provider);
					}.bind(this));
				}.bind(this))
				.then(function (results) {
					return results
						// remove any unsupported/unknown connectors
						.filter(function (result) {
							return !!result;
						})
						// remove any connectors for which the user doesn't have the required capabilities
						.filter(function(result) {
							return result.checkUserCapabilities();
						});
				});
		},

		_handleSingleProvider: function (meta) {
			try {
				var Plugin = connectors[meta.type];
				if (Plugin) {
					var plugin = new Plugin({
						glassContext: this.glassContext,
						errorHandler: this.errorHandler,
						meta: meta
					});

					// ...and store it
					this.connectors.push(plugin);
					return plugin;
				} else {
					this.logger.error('Unable to load plugin: ' + meta.type);
				}
			} catch (error) {
				this.logger.error('Error while creating connector instance', error);
			}
			// null connectors will be removed below once all the promises are resolved
			return null;
		}
	});
	return Connectors;
});</code></pre>
        </article>
    </section>




</div>

<nav>
    <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="ConnectorBase.html">ConnectorBase</a></li><li><a href="Connectors.html">Connectors</a></li><li><a href="EmailClient.html">EmailClient</a></li><li><a href="EmailConnector.html">EmailConnector</a></li><li><a href="MSTeamsAuth.html">MSTeamsAuth</a></li><li><a href="MSTeamsClient.html">MSTeamsClient</a></li><li><a href="MSTeamsConnector.html">MSTeamsConnector</a></li><li><a href="ShareableItems.html">ShareableItems</a></li><li><a href="ShareController.html">ShareController</a></li><li><a href="ShareView.html">ShareView</a></li><li><a href="SlackAuth.html">SlackAuth</a></li><li><a href="SlackClient.html">SlackClient</a></li><li><a href="SlackConnector.html">SlackConnector</a></li></ul><h3>Interfaces</h3><ul><li><a href="ShareInterface.html">ShareInterface</a></li></ul>
</nav>

<br class="clear">

<footer>
    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed May 25 2022 13:54:53 GMT+0000 (UTC)
</footer>

<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>