nextcloud/apps/user_ldap/js/wizard/wizardDetectorGeneric.js

118 lines
2.9 KiB
JavaScript

/**
* Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
OCA = OCA || {};
(function() {
/**
* @classdesc a generic (abstract) Detector template. A Detector's task is
* to kick off server side detection of certain LDAP features. It is invoked
* when changes to specified configuration keys happen.
*
* @constructor
*/
var WizardDetectorGeneric = OCA.LDAP.Wizard.WizardObject.subClass({
/**
* initializes the instance. Always call it after creating the instance.
*/
init: function() {
this.setTrigger([]);
this.targetKey = '';
this.runsOnRequest = false;
},
/**
* sets the configuration keys the detector is listening on
*
* @param {string[]} triggers
*/
setTrigger: function(triggers) {
this.triggers = triggers;
},
/**
* tests whether the detector is triggered by the provided key
*
* @param {string} key
* @returns {boolean}
*/
triggersOn: function(key) {
return ($.inArray(key, this.triggers) >= 0);
},
/**
* whether the detector runs on explicit request
*
* @param {string} key
* @returns {boolean}
*/
runsOnFeatureRequest: function(key) {
return !!(this.runsOnRequest && this.targetKey === key);
},
/**
* sets the configuration key the detector is attempting to auto-detect
*
* @param {string} key
*/
setTargetKey: function(key) {
this.targetKey = key;
},
/**
* returns the configuration key the detector is attempting to
* auto-detect
*/
getTargetKey: function() {
return this.targetKey;
},
/**
* runs the detector. This method is supposed to be implemented by the
* concrete detector.
*
* Must return false if the detector decides not to run.
* Must return a jqXHR object otherwise, which is provided by the
* model's callWizard()
*
* @param {OCA.LDAP.Wizard.ConfigModel} model
* @param {string} configID - the configuration prefix
* @returns {boolean|jqXHR}
* @abstract
*/
run: function(model, configID) {
// to be implemented by subClass
return false;
},
/**
* processes the result of the Nextcloud server
*
* @param {OCA.LDAP.Wizard.ConfigModel} model
* @param {WizardDetectorGeneric} detector
* @param {object} result
*/
processResult: function(model, detector, result) {
model['notifyAboutDetectionCompletion'](detector.getTargetKey());
if(result.status === 'success') {
for (var id in result.changes) {
// update and not set method, as values are already stored
model['update'](id, result.changes[id]);
}
} else {
var payload = { relatedKey: detector.targetKey };
if(!_.isUndefined(result.message)) {
payload.message = result.message;
}
model.gotServerError(payload);
}
}
});
OCA.LDAP.Wizard.WizardDetectorGeneric = WizardDetectorGeneric;
})();