blob: d54623d9abf5e424bb50765217b430131e635c0d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
define([
"dojo/dom",
"dojo/dom-construct",
"dijit/registry",
"dojo/parser",
"dojo/_base/array",
"dojo/_base/event",
"qpid/common/util",
"dojo/text!addConnectionLimitProvider.html",
"dijit/Dialog",
"dijit/form/Form",
"dijit/form/TextBox",
"dijit/form/ValidationTextBox",
"dijit/form/FilteringSelect",
"dijit/form/Button",
"dojo/domReady!"], function (dom, construct, registry, parser, array, event, util, template)
{
const addConnectionLimitProvider = {
init: function ()
{
const that = this;
this.containerNode = construct.create("div", {innerHTML: template});
parser.parse(this.containerNode)
.then(function ()
{
that._dialog = registry.byId("addConnectionLimitProvider");
const providerName = registry.byId("addConnectionLimitProvider.name");
providerName.set("regExpGen", util.nameOrContextVarRegexp);
const addButton = registry.byId("addConnectionLimitProvider.addButton");
addButton.on("click", function (e)
{
that._add(e);
});
const cancelButton = registry.byId("addConnectionLimitProvider.cancelButton");
cancelButton.on("click", function (e)
{
that._cancel(e);
});
that._providerTypeFieldsContainer = dom.byId("addConnectionLimitProvider.typeFields");
that._providerForm = registry.byId("addConnectionLimitProvider.form");
that._providerType = registry.byId("addConnectionLimitProvider.type");
that._providerType.on("change", function (type)
{
that._providerTypeChanged(type);
});
});
return this;
},
show: function (management, modelObj)
{
this.management = management;
this.modelObj = modelObj;
this._providerForm.reset();
this._category =
modelObj && (modelObj.type === "virtualhost" || modelObj.type === "virtualhostconnectionlimitprovider")
? "VirtualHostConnectionLimitProvider"
: "BrokerConnectionLimitProvider";
const supportedProviderTypes = management.metadata.getTypesForCategory(this._category);
supportedProviderTypes.sort();
this._providerType.set("store", util.makeTypeStore(supportedProviderTypes));
this._dialog.show();
},
_cancel: function (e)
{
event.stop(e);
this._destroyTypeFields();
this._dialog.hide();
},
_add: function (e)
{
event.stop(e);
this._submit();
},
_submit: function ()
{
if (this._providerForm.validate())
{
const data = util.getFormWidgetValues(this._providerForm, this.initialData);
const that = this;
this.management.create(this._category, this.modelObj, data)
.then(function ()
{
that._dialog.hide();
});
}
else
{
alert('Form contains invalid data. Please correct first');
}
},
_providerTypeChanged: function (type)
{
this._destroyTypeFields();
if (type)
{
const that = this;
require(["qpid/management/connectionlimitprovider/" + type.toLowerCase() + "/add"], function (typeUI)
{
try
{
typeUI.show({
containerNode: that._providerTypeFieldsContainer,
parent: that,
initialData: that.initialData || {},
metadata: that.management.metadata,
effectiveData: {},
category: that._category,
type: type
});
}
catch (e)
{
console.warn(e);
}
});
}
},
_destroyTypeFields: function ()
{
const widgets = registry.findWidgets(this._providerTypeFieldsContainer);
array.forEach(widgets, function (item)
{
item.destroyRecursive();
});
construct.empty(this._providerTypeFieldsContainer);
}
};
try
{
addConnectionLimitProvider.init();
}
catch (e)
{
console.warn(e);
}
return addConnectionLimitProvider;
});