diff options
| author | Andrew MacBean <macbean@apache.org> | 2014-08-22 16:08:07 +0000 |
|---|---|---|
| committer | Andrew MacBean <macbean@apache.org> | 2014-08-22 16:08:07 +0000 |
| commit | f6f758f83599ac2832cbc7a9e209d11e3ac98d95 (patch) | |
| tree | 3aae457b0ef408d76a00a2d971312339178695e3 /qpid/java/broker-plugins | |
| parent | 80097244af5350560a787b58a5135ae54365047a (diff) | |
| download | qpid-python-f6f758f83599ac2832cbc7a9e209d11e3ac98d95.tar.gz | |
QPID-6034: [Java Broker] Refactor Port UI to use metadata service rather than hard-coding a list of protocols/transports etc
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1619854 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-plugins')
11 files changed, 305 insertions, 355 deletions
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java index f55b373119..2339cfb000 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java @@ -210,7 +210,7 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem + transports); } lastPort = port.getPort(); - String bindingAddress = port.getBindingAddress(); + String bindingAddress = ((HttpPort)port).getBindingAddress(); if (bindingAddress != null && !bindingAddress.trim().equals("") && !bindingAddress.trim().equals("*")) { connector.setHost(bindingAddress.trim()); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html index a0f1d6d440..348b18f355 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html @@ -39,6 +39,25 @@ title: 'Enter name of port'"/> </div> </div> + + <div class="clear"> + <div class="formLabel-labelCell"> + <label for="formAddPort.type">Port Type*:</label> + </div> + <div class="formLabel-controlCell"> + <select id="formAddPort.type" + data-dojo-type="dijit.form.FilteringSelect" + data-dojo-props=" + name: 'type', + label: 'Port Type*:', + value: '', + placeHolder: 'port type', + promptMessage: 'Port type', + title: 'Enter port type'"> + </select> + </div> + </div> + <div class="clear"> <div class="formLabel-labelCell"> <label for="formAddPort.port">Port Number*:</label> @@ -54,27 +73,27 @@ title: 'Enter port number'"/> </div> </div> + </div> + + <div id="formAddPort:fieldsProtocols"> <div class="clear"> <div class="formLabel-labelCell"> - <label for="formAddPort.type">Port Type*:</label> + <label for="formAddPort.protocols">Protocols*:</label> </div> <div class="formLabel-controlCell"> - <select id="formAddPort.type" - data-dojo-type="dijit.form.FilteringSelect" + <select id="formAddPort.protocols" + data-dojo-type="dijit.form.MultiSelect" data-dojo-props=" - name: 'type', - label: 'Port Type*:', + name: 'protocols', value: '', - placeHolder: 'port type', - promptMessage: 'Port type', - title: 'Enter port type'"> - <option value="AMQP" selected="selected">AMQP</option> - <option value="JMX">JMX</option> - <option value="HTTP">HTTP</option> + label: 'protocol*:', + promptMessage: 'Protocol to be associated with this port', + title: 'Enter protocol to be associated with this port'"> </select> </div> </div> </div> + <div id="formAddPort:fieldsAuthenticationProvider"> <div class="clear"> <div class="formLabel-labelCell"> @@ -94,6 +113,7 @@ </div> </div> </div> + <div id="formAddPort:fieldsBindingAddress"> <div class="clear"> <div class="formLabel-labelCell"> @@ -110,79 +130,6 @@ </div> </div> </div> - <div id="formAddPort:fieldsAMQP"> - <div class="clear"> - <div class="formLabel-labelCell"> - <label for="formAddPort.protocolsDefault">Support default protocols:</label> - </div> - <div class="formLabel-controlCell"> - <input id="formAddPort.protocolsDefault" type="checkbox" - dojoType="dijit.form.CheckBox" - data-dojo-props="checked: true"/> - </div> - </div> - <div class="clear"> - <div class="formLabel-labelCell"> - <label for="formAddPort.protocolsAMQP">AMQP protocols:</label> - </div> - <div class="formLabel-controlCell"> - <select id="formAddPort.protocolsAMQP" - data-dojo-type="dijit.form.MultiSelect" - data-dojo-props=" - name: 'protocols', - value: '', - placeHolder: 'AMQP protocols', - promptMessage: 'AMQP protocols to be associated with this port', - title: 'Select AMQP protocols to be associated with this port', - multiple: true"> - <option value="AMQP_0_8">AMQP 0.8</option> - <option value="AMQP_0_9">AMQP 0.9</option> - <option value="AMQP_0_9_1">AMQP 0.9.1</option> - <option value="AMQP_0_10">AMQP 0.10</option> - <option value="AMQP_1_0">AMQP 1.0</option> - </select> - </div> - </div> - </div> - <div id="formAddPort:fieldsJMX"> - <div class="clear"> - <div class="formLabel-labelCell"> - <label for="formAddPort.protocolsJMX">JMX protocol*:</label> - </div> - <div class="formLabel-controlCell"> - <select id="formAddPort.protocolsJMX" - data-dojo-type="dijit.form.FilteringSelect" - data-dojo-props=" - name: 'protocols', - value: '', - promptMessage: 'JMX protocol to be associated with this port', - title: 'Enter JMX protocol to be associated with this port'"> - <option value="RMI">RMI</option> - <option value="JMX_RMI">JMX RMI</option> - </select> - </div> - </div> - </div> - - <div id="formAddPort:fieldsHTTP"> - <div class="clear"> - <div class="formLabel-labelCell"> - <label for="formAddPort.protocolsHTTP">HTTP protocols*:</label> - </div> - <div class="formLabel-controlCell"> - <select id="formAddPort.protocolsHTTP" - data-dojo-type="dijit.form.FilteringSelect" - data-dojo-props=" - name: 'protocols', - value: 'HTTP', - label: 'HTTP protocol*:', - promptMessage: 'HTTP protocol to be associated with this port', - title: 'Enter HTTP protocol to be associated with this port'"> - <option value="HTTP">HTTP</option> - </select> - </div> - </div> - </div> <div id="formAddPort:transport" > <div class="clear"> @@ -199,13 +146,11 @@ multiple: true, promptMessage: 'Transport(s)', title: 'Select transports'"> - <option value="TCP">TCP</option> - <option value="SSL">SSL</option> </select> </div> </div> - <div class="clear"/> </div> + <div id="formAddPort:fieldsTransportSSL"> <div class="clear"> <div class="formLabel-labelCell"> @@ -227,6 +172,7 @@ </div> </div> </div> + <div id="formAddPort:fieldsClientAuth"> <div id="formAddPort:fieldsClientAuthCheckboxes"> <div class="clear"> @@ -252,6 +198,7 @@ </div> </div> </div> + <div class="clear"> <div class="formLabel-labelCell"> Trust Stores: @@ -265,7 +212,7 @@ data-dojo-props=" plugins: {indirectSelection: true}, rowSelector:'0px'" - style="height: 100px; width:400px"> + style="height: 100px; width:400px"> <!--todo remove --> <thead> <tr> <th field="name">Name</th> @@ -276,8 +223,9 @@ </div> </div> </div> + <input type="hidden" id="formAddPort.id" name="id"/> - <div class="clear"/> + <div class="clear"></div> <div class="dijitDialogPaneActionBar"> <!-- submit buttons --> <input type="submit" value="Save Port" label="Save Port" dojoType="dijit.form.Button" /> diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css b/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css index b6e67ddb4e..7076f08b0b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css @@ -279,3 +279,7 @@ div .messages { border: none; background-color: transparent; } + +.dijitMultiSelect { + width : 14.75em; +} diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js index 19ec53744f..901172f80e 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js @@ -17,11 +17,12 @@ * under the License. */ define(["dojo/_base/xhr", + "dojo/_base/array", "dojox/lang/functional/object", "qpid/common/properties", "dojo/domReady!" ], - function (xhr, fobject, properties) + function (xhr, array, fobject, properties) { var metadata = { @@ -48,6 +49,22 @@ define(["dojo/_base/xhr", getTypesForCategory: function (category) { return fobject.keys(this.metadata[category]); + }, + extractUniqueListOfValues : function(data) + { + var values = []; + for (i = 0; i < data.length; i++) + { + for (j = 0; j < data[i].length; j++) + { + var current = data[i][j]; + if (array.indexOf(values, current) == -1) + { + values.push(current); + } + } + } + return values; } }; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js index cb0cc792e8..f9a22b8767 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js @@ -26,7 +26,7 @@ define(["dojo/_base/xhr", "dojo/dom-construct", "dojo/dom-geometry", "dojo/dom-style", - "dojo/window", + "dojo/_base/window", "dojo/query", "dojo/parser", "dojo/store/Memory", @@ -683,6 +683,36 @@ define(["dojo/_base/xhr", return new Memory({ data: typeData }); } + util.setMultiSelectOptions = function(multiSelectWidget, options) + { + util.addMultiSelectOptions(multiSelectWidget, options, true); + } + + util.addMultiSelectOptions = function(multiSelectWidget, options, clearExistingOptions) + { + if (clearExistingOptions) + { + var children = multiSelectWidget.children; + var initialLength = children.length; + for (var i = initialLength - 1; i >= 0 ; i--) + { + var child = children.item(i); + multiSelectWidget.removeChild(child); + } + } + for (var i = 0; i < options.length; i++) + { + // construct new option for list + var newOption = win.doc.createElement('option'); + var value = options[i]; + newOption.innerHTML = value; + newOption.value = value; + + // add new option to list + multiSelectWidget.appendChild(newOption); + } + } + var singleContextVarRegexp = "(\\${[\\w\\.\\-]+})"; util.numericOrContextVarRegexp = function(constraints) diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js index c52553c386..56d50dc7a6 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js @@ -210,7 +210,7 @@ define(["dojo/_base/xhr", var addPortButton = query(".addPort", contentPane.containerNode)[0]; connect.connect(registry.byNode(addPortButton), "onClick", function(evt){ - addPort.show(null, that.brokerUpdater.brokerData.authenticationproviders, + addPort.show(null, "AMQP", that.brokerUpdater.brokerData.authenticationproviders, that.brokerUpdater.brokerData.keystores, that.brokerUpdater.brokerData.truststores); }); @@ -543,7 +543,8 @@ define(["dojo/_base/xhr", var idx = evt.rowIndex, theItem = this.getItem(idx); var name = obj.dataStore.getValue(theItem,"name"); - that.controller.show("port", name, brokerObj, theItem.id); + var type = obj.dataStore.getValue(theItem,"type"); + that.controller.show("port", name, brokerObj, theItem.id, type); }); }, gridProperties, EnhancedGrid); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js index 250b85b59f..b7e68a0201 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js @@ -30,12 +30,14 @@ define(["dojo/dom", "qpid/common/util", "qpid/common/formatter", "qpid/management/addPort", + "qpid/common/metadata", "dojo/domReady!"], - function (dom, xhr, parser, query, connect, registry, entities, properties, updater, util, formatter, addPort) { + function (dom, xhr, parser, query, connect, registry, entities, properties, updater, util, formatter, addPort, metadata) { - function Port(name, parent, controller) { + function Port(name, parent, controller, type) { this.name = name; this.controller = controller; + this.type = type; this.modelObj = { type: "port", name: name, parent: parent}; } @@ -104,7 +106,7 @@ define(["dojo/dom", .then(function(data) { var brokerData= data[0]; - addPort.show(that.name, brokerData.authenticationproviders, brokerData.keystores, brokerData.truststores); + addPort.show(that.name, that.type, brokerData.authenticationproviders, brokerData.keystores, brokerData.truststores); } ); } @@ -126,6 +128,7 @@ define(["dojo/dom", storeNodes(["nameValue", "stateValue", + "typeValue", "portValue", "authenticationProviderValue", "protocolsValue", @@ -168,6 +171,7 @@ define(["dojo/dom", this.nameValue.innerHTML = entities.encode(String(this.keyStoreData[ "name" ])); this.stateValue.innerHTML = entities.encode(String(this.keyStoreData[ "state" ])); + this.typeValue.innerHTML = entities.encode(String(this.keyStoreData[ "type" ])); this.portValue.innerHTML = entities.encode(String(this.keyStoreData[ "port" ])); this.authenticationProviderValue.innerHTML = this.keyStoreData[ "authenticationProvider" ] ? entities.encode(String(this.keyStoreData[ "authenticationProvider" ])) : ""; this.protocolsValue.innerHTML = printArray( "protocols", this.keyStoreData); @@ -177,15 +181,14 @@ define(["dojo/dom", this.needClientAuthValue.innerHTML = "<input type='checkbox' disabled='disabled' "+(this.keyStoreData[ "needClientAuth" ] ? "checked='checked'": "")+" />" ; this.wantClientAuthValue.innerHTML = "<input type='checkbox' disabled='disabled' "+(this.keyStoreData[ "wantClientAuth" ] ? "checked='checked'": "")+" />" ; this.trustStoresValue.innerHTML = printArray( "trustStores", this.keyStoreData); - var amqpProtocol = this.keyStoreData["protocols"][0] && this.keyStoreData["protocols"][0].indexOf("AMQP") == 0; - this.bindingAddress.style.display= amqpProtocol? "block" : "none"; - var sslTransport = this.keyStoreData["transports"][0] && this.keyStoreData["transports"][0] == "SSL"; - var displayStyle = sslTransport ? "block" : "none"; - this.trustStoresValue.style.display = displayStyle; - this.keyStore.style.display = displayStyle; - this.needClientAuth.style.display = displayStyle; - this.wantClientAuth.style.display = displayStyle; - this.trustStores.style.display = displayStyle; + + var typeMetaData = metadata.getMetaData("Port", this.keyStoreData["type"]); + + this.bindingAddress.style.display = "bindingAddress" in typeMetaData.attributes ? "block" : "none"; + this.keyStore.style.display = "keyStore" in typeMetaData.attributes ? "block" : "none"; + this.needClientAuth.style.display = "needClientAuth" in typeMetaData.attributes ? "block" : "none"; + this.wantClientAuth.style.display = "wantClientAuth" in typeMetaData.attributes ? "block" : "none"; + this.trustStores.style.display = "trustStores" in typeMetaData.attributes ? "block" : "none"; }; PortUpdater.prototype.update = function() diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js index 4a635b1c0d..e3b861d2ea 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js @@ -33,6 +33,7 @@ define(["dojo/_base/xhr", "dojo/dom-style", "dojo/_base/lang", "qpid/common/util", + "qpid/common/metadata", /* dojox/ validate resources */ "dojox/validate/us", "dojox/validate/web", @@ -55,12 +56,39 @@ define(["dojo/_base/xhr", "dojox/grid/EnhancedGrid", "dojox/grid/enhanced/plugins/IndirectSelection", "dojo/domReady!"], - function (xhr, dom, construct, win, registry, parser, array, event, json, Memory, ObjectStore, FilteringSelect, domStyle, lang, util) { + function (xhr, dom, construct, win, registry, parser, array, event, json, Memory, ObjectStore, FilteringSelect, domStyle, lang, util, metadata) { var addPort = {}; var node = construct.create("div", null, win.body(), "last"); + addPort._typeChanged = function (newValue) + { + var typeMetaData = metadata.getMetaData("Port", newValue); + + //protocols + var protocolsMultiSelect = dom.byId("formAddPort.protocols"); + var protocolValidValues = typeMetaData.attributes.protocols.validValues; + var protocolValues = metadata.extractUniqueListOfValues(protocolValidValues); + util.setMultiSelectOptions(protocolsMultiSelect, protocolValues.sort()); + + //authenticationProvider + registry.byId("formAddPort.authenticationProvider").set("disabled", ! ("authenticationProvider" in typeMetaData.attributes)); + dom.byId("formAddPort:fieldsAuthenticationProvider").style.display = "authenticationProvider" in typeMetaData.attributes ? "block" : "none"; + + //bindingAddress + registry.byId("formAddPort.bindingAddress").set("disabled", ! ("bindingAddress" in typeMetaData.attributes)); + dom.byId("formAddPort:fieldsBindingAddress").style.display = "bindingAddress" in typeMetaData.attributes ? "block" : "none"; + + //transports + var transportsMultiSelect = dom.byId("formAddPort.transports"); + var transportsValidValues = typeMetaData.attributes.transports.validValues; + var transportsValues = metadata.extractUniqueListOfValues(transportsValidValues); + util.setMultiSelectOptions(transportsMultiSelect, transportsValues.sort()); + + toggleSslWidgets(newValue, transportsMultiSelect.value); + }; + var convertToPort = function convertToPort(formValues) { var newPort = {}; @@ -157,189 +185,107 @@ define(["dojo/_base/xhr", return newPort; }; - var toggleSslWidgets = function toggleSslWidgets(protocolType, transportType) + var toggleSslWidgets = function toggleSslWidgets(portType, transportType) { var clientAuthPanel = dojo.byId("formAddPort:fieldsClientAuth"); - var display = clientAuthPanel.style.display; + var transportSSLPanelNode = dom.byId("formAddPort:fieldsTransportSSL"); - if ((transportType == "SSL" || (lang.isArray(transportType) && array.indexOf(transportType, "SSL")>=0)) - && (protocolType == "AMQP" || protocolType == "HTTP")) + if (transportType == "SSL" || (lang.isArray(transportType) && array.indexOf(transportType, "SSL")>=0)) { - clientAuthPanel.style.display = "block"; - registry.byId("formAddPort.needClientAuth").set("disabled", false); - registry.byId("formAddPort.wantClientAuth").set("disabled", false); + var typeMetaData = metadata.getMetaData("Port", portType); + var clientAuth = "needClientAuth" in typeMetaData.attributes || "wantClientAuth" in typeMetaData.attributes; + clientAuthPanel.style.display = clientAuth ? "block" : "none"; + if (clientAuth) + { + registry.byId("formAddPort.needClientAuth").set("disabled", !("needClientAuth" in typeMetaData.attributes)); + registry.byId("formAddPort.wantClientAuth").set("disabled", !("wantClientAuth" in typeMetaData.attributes)); + registry.byId("formAddPort.trustStores").resize(); + } + + transportSSLPanelNode.style.display = "block"; + registry.byId("formAddPort.keyStore").set("disabled", false); } else { clientAuthPanel.style.display = "none"; registry.byId("formAddPort.needClientAuth").set("disabled", true); registry.byId("formAddPort.wantClientAuth").set("disabled", true); - } - var transportSSLPanelNode = dom.byId("formAddPort:fieldsTransportSSL"); - var transportSSLPanelDisplay = transportSSLPanelNode.style.display; - if (transportType == "SSL" || (lang.isArray(transportType) && array.indexOf(transportType, "SSL")>=0)) - { - transportSSLPanelNode.style.display = "block"; - registry.byId("formAddPort.keyStore").set("disabled", false); - } - else - { transportSSLPanelNode.style.display = "none"; registry.byId("formAddPort.keyStore").set("disabled", true); } - if (transportSSLPanelNode.style.display != transportSSLPanelDisplay && transportSSLPanelNode.style.display=="block") - { - registry.byId("formAddPort.trustStores").resize(); - } }; - xhr.get({url: "addPort.html", - sync: true, - load: function(data) { - var theForm; - node.innerHTML = data; - addPort.dialogNode = dom.byId("addPort"); - parser.instantiate([addPort.dialogNode]); - - registry.byId("formAddPort.protocolsDefault").on("change", function(isChecked) { - dijit.byId("formAddPort.protocolsAMQP").set("disabled", isChecked); - }); - - registry.byId("formAddPort.transports").on("change", function(newValue){ - var protocolType = registry.byId("formAddPort.type").value; - if(lang.isArray(newValue) && newValue.length == 2 && protocolType == "JMX") - { - registry.byId("formAddPort.transports").set("value", ["SSL"]); - newValue = "SSL" - } - toggleSslWidgets(protocolType, newValue); - }); - - registry.byId("formAddPort.type").on("change", function(newValue) { - var typeWidget = registry.byId("formAddPort.type"); - var store = typeWidget.store; - store.data.forEach(function(option){ - registry.byId("formAddPort.protocols" + option.value).set("disabled", true); - dom.byId("formAddPort:fields" + option.value).style.display = "none"; - }); - - var isAMQP = ("AMQP" == newValue); - - var isHTTP = ("HTTP" == newValue); - - registry.byId("formAddPort.needClientAuth").set("enabled", isAMQP || isHTTP); - registry.byId("formAddPort.wantClientAuth").set("enabled", isAMQP || isHTTP); - - dom.byId("formAddPort:fields" + newValue).style.display = "block"; - var defaultsAMQPProtocols = registry.byId("formAddPort.protocolsDefault"); - defaultsAMQPProtocols.set("disabled", "AMQP" != newValue) - var protocolsWidget = registry.byId("formAddPort.protocols" + newValue); - if (protocolsWidget) - { - protocolsWidget.set("disabled", (isAMQP && defaultsAMQPProtocols.checked)); - } - - var transportWidget = registry.byId("formAddPort.transports"); - var disableTransportWidget = false; - var toggleSsl = true; - var isRMI = (newValue == "JMX" && registry.byId("formAddPort.protocolsJMX").value == "RMI"); - if (isRMI) - { - if (transportWidget.value != "TCP") - { - transportWidget.set("value", ["TCP"]); - - // changing of transport widget value will cause the call to toggleSslWidgets - toggleSsl = false; - } - disableTransportWidget = true; - - } - else if(newValue == "JMX" ) - { - var transports = transportWidget.value; - if(lang.isArray(transports) && transports.length == 2) - { - transportWidget.set("value", ["SSL"]); - } - } - - - if (toggleSsl) - { - toggleSslWidgets(newValue, transportWidget.value); - } - transportWidget.set("disabled", disableTransportWidget); - registry.byId("formAddPort.authenticationProvider").set("disabled", isRMI); - dom.byId("formAddPort:fieldsAuthenticationProvider").style.display = isRMI? "none" : "block"; - dom.byId("formAddPort:fieldsBindingAddress").style.display = newValue == "JMX" ? "none" : "block"; - dom.byId("formAddPort:transport").style.display = isRMI ? "none" : "block"; - - - - }); - - theForm = registry.byId("formAddPort"); - - registry.byId("formAddPort.protocolsJMX").on("change", function(newValue){ - var isRMI = newValue == "RMI"; - var transportWidget = registry.byId("formAddPort.transports"); - if (isRMI && transportWidget.value != "TCP") - { - transportWidget.set("value", "TCP"); - } - transportWidget.set("disabled", isRMI); - dom.byId("formAddPort:transport").style.display = isRMI ? "none" : "block"; - dom.byId("formAddPort:fieldsAuthenticationProvider").style.display = isRMI? "none" : "block"; - registry.byId("formAddPort.authenticationProvider").set("disabled", isRMI); - }); - - theForm.on("submit", function(e) { - - event.stop(e); - if(theForm.validate()){ - - var newPort = convertToPort(theForm.getValues()); - if ((newPort.needClientAuth || newPort.wantClientAuth) && (!newPort.hasOwnProperty("trustStores") || newPort.trustStores.length==0)) - { - alert("A trust store must be selected when requesting client certificates."); - return false; - } - var that = this; - - xhr.put({url: "api/latest/port/"+encodeURIComponent(newPort.name), sync: true, handleAs: "json", - headers: { "Content-Type": "application/json"}, - putData: json.toJson(newPort), - load: function(x) {that.success = true; }, - error: function(error) {that.success = false; that.failureReason = error;}}); - - if(this.success === true) - { - registry.byId("addPort").hide(); - } - else - { - util.xhrErrorHandler(this.failureReason); - } - - return false; - - - }else{ - alert('Form contains invalid data. Please correct first'); - return false; - } - - }); - }}); - - addPort.show = function(portName, providers, keystores, truststores) { + xhr.get({url: "addPort.html", sync: true, load: function(data) { + var theForm; + node.innerHTML = data; + addPort.dialogNode = dom.byId("addPort"); + parser.instantiate([addPort.dialogNode]); + + //add the port types to formAddPort.type + var portTypeSelect = registry.byId("formAddPort.type"); + var supportedPortTypes = metadata.getTypesForCategory("Port"); + var portTypeSelectStore = util.makeTypeStore(supportedPortTypes); + portTypeSelect.set("store", portTypeSelectStore); + + //add handler for transports change + registry.byId("formAddPort.transports").on("change", function(newValue){ + var portType = portTypeSelect.get("value"); + toggleSslWidgets(portType, newValue); + }); + + + theForm = registry.byId("formAddPort"); + theForm.on("submit", function(e) { + + event.stop(e); + if(theForm.validate()){ + + var newPort = convertToPort(theForm.getValues()); + if ((newPort.needClientAuth || newPort.wantClientAuth) && (!newPort.hasOwnProperty("trustStores") || newPort.trustStores.length==0)) + { + alert("A trust store must be selected when requesting client certificates."); + return false; + } + var that = this; + + xhr.put({url: "api/latest/port/"+encodeURIComponent(newPort.name), sync: true, handleAs: "json", + headers: { "Content-Type": "application/json"}, + putData: json.toJson(newPort), + load: function(x) {that.success = true; }, + error: function(error) {that.success = false; that.failureReason = error;}}); + + if(this.success === true) + { + registry.byId("addPort").hide(); + } + else + { + util.xhrErrorHandler(this.failureReason); + } + + return false; + + + }else{ + alert('Form contains invalid data. Please correct first'); + return false; + } + + }); + }}); + + addPort.show = function(portName, portType, providers, keystores, truststores) { registry.byId("formAddPort").reset(); dojo.byId("formAddPort.id").value = ""; + + var nameWidget = registry.byId("formAddPort.name"); + var typeWidget = registry.byId("formAddPort.type"); + var portWidget = registry.byId("formAddPort.port"); var editWarning = dojo.byId("portEditWarning"); + var providerWidget = registry.byId("formAddPort.authenticationProvider"); if (providers) { @@ -354,7 +300,6 @@ define(["dojo/_base/xhr", } var keystoreWidget = registry.byId("formAddPort.keyStore"); - if (keystores) { var data = []; @@ -386,6 +331,12 @@ define(["dojo/_base/xhr", if (portName) { + // Editing existing port, de-register existing on change handler if set + if (this.typeChangeHandler) + { + this.typeChangeHandler.remove(); + } + editWarning.style.display = "block"; xhr.get({ @@ -395,12 +346,47 @@ define(["dojo/_base/xhr", }).then( function(data){ var port = data[0]; - var nameWidget = registry.byId("formAddPort.name"); nameWidget.set("value", port.name); nameWidget.set("disabled", true); dom.byId("formAddPort.id").value=port.id; + + //type + typeWidget.set("value", portType); + typeWidget.set("disabled", true); + var typeMetaData = metadata.getMetaData("Port", portType); + + //port number + portWidget.set("value", port.port); + portWidget.set("regExpGen", util.numericOrContextVarRegexp); + + //protocols + var protocolsMultiSelect = dom.byId("formAddPort.protocols"); + var protocolValidValues = typeMetaData.attributes.protocols.validValues; + var protocolValues = metadata.extractUniqueListOfValues(protocolValidValues); + util.setMultiSelectOptions(protocolsMultiSelect, protocolValues.sort()); + + var protocolsMultiSelectWidget = registry.byId("formAddPort.protocols"); + protocolsMultiSelectWidget.set("value", port.protocols); + + //authenticationProvider providerWidget.set("value", port.authenticationProvider ? port.authenticationProvider : ""); + + //transports + var transportsMultiSelect = dom.byId("formAddPort.transports"); + var transportsValidValues = typeMetaData.attributes.transports.validValues; + var transportsValues = metadata.extractUniqueListOfValues(transportsValidValues); + util.setMultiSelectOptions(transportsMultiSelect, transportsValues.sort()); + var transportWidget = registry.byId("formAddPort.transports"); + transportWidget.set("value", port.transports); + + //binding address + var bindAddressWidget = registry.byId("formAddPort.bindingAddress"); + bindAddressWidget.set("value", port.bindingAddress ? port.bindingAddress : ""); + bindAddressWidget.set("disabled", ! ("bindingAddress" in typeMetaData.attributes)); + dom.byId("formAddPort:fieldsBindingAddress").style.display = "bindingAddress" in typeMetaData.attributes ? "block" : "none"; + + //ssl keystoreWidget.set("value", port.keyStore ? port.keyStore : ""); if (port.trustStores) { @@ -421,64 +407,9 @@ define(["dojo/_base/xhr", } } - var transportWidget = registry.byId("formAddPort.transports"); - transportWidget.set("value", port.transports); - - var portWidget = registry.byId("formAddPort.port"); - portWidget.set("value", port.port); - portWidget.set("regExpGen", util.numericOrContextVarRegexp); - - var protocols = port.protocols; - var typeWidget = registry.byId("formAddPort.type"); - - var store = typeWidget.store; - store.data.forEach(function(option){ - registry.byId("formAddPort.protocols" + option.value).set("disabled", true); - dom.byId("formAddPort:fields" + option.value).style.display = "none"; - }); - - // identify the type of port using first protocol specified in protocol field if provided - if ( !protocols || protocols.length == 0 || protocols[0].indexOf("AMQP") == 0) - { - typeWidget.set("value", "AMQP"); - var amqpProtocolsWidget = registry.byId("formAddPort.protocolsAMQP"); - var defaultProtocolsWidget = registry.byId("formAddPort.protocolsDefault"); - var addressWidget = registry.byId("formAddPort.bindingAddress"); - addressWidget.set("value", port.bindingAddress); - - if (protocols) - { - amqpProtocolsWidget.set("value", protocols) - amqpProtocolsWidget.set("disabled", false) - defaultProtocolsWidget.set("checked", false); - } - else - { - defaultProtocolsWidget.set("checked", true); - amqpProtocolsWidget.set("disabled", true) - } - - registry.byId("formAddPort.needClientAuth").set("checked", port.needClientAuth); - registry.byId("formAddPort.wantClientAuth").set("checked", port.wantClientAuth); - } - else if (protocols[0].indexOf("RMI") != -1) - { - var jmxProtocolsWidget = registry.byId("formAddPort.protocolsJMX"); - jmxProtocolsWidget.set("disabled", false); - jmxProtocolsWidget.set("value", protocols[0]); - typeWidget.set("value", "JMX"); - } - else if (protocols[0].indexOf("HTTP") == 0) - { - var httpProtocolsWidget = registry.byId("formAddPort.protocolsHTTP"); - httpProtocolsWidget.set("disabled", false); - httpProtocolsWidget.set("value", protocols[0]); - typeWidget.set("value", "HTTP"); - var addressWidget = registry.byId("formAddPort.bindingAddress"); - addressWidget.set("value", port.bindingAddress) - } - dom.byId("formAddPort:fields" + typeWidget.value).style.display = "block"; - typeWidget.set("disabled", true); + // want/need client auth + registry.byId("formAddPort.needClientAuth").set("checked", port.needClientAuth); + registry.byId("formAddPort.wantClientAuth").set("checked", port.wantClientAuth); keystoreWidget.initialValue = port.keyStore; truststoreWidget.initialValue = port.trustStores; @@ -486,31 +417,29 @@ define(["dojo/_base/xhr", providerWidget.initialValue = providerWidget.value; registry.byId("addPort").show(); - util.applyMetadataToWidgets(registry.byId("addPort").domNode, "Port", typeWidget.get("value")); - + util.applyMetadataToWidgets(registry.byId("addPort").domNode, "Port", portType); }); } else { - // Creating new port - var typeWidget = registry.byId("formAddPort.type"); + // Adding new port, register the on change handler + this.typeChangeHandler = typeWidget.on("change", addPort._typeChanged); + if (typeWidget.get("disabled")) { typeWidget.set("disabled", false); } - typeWidget.set("value", "AMQP"); + typeWidget.set("value", portType); - var nameWidget = registry.byId("formAddPort.name"); nameWidget.set("disabled", false); nameWidget.set("regExpGen", util.nameOrContextVarRegexp); - var portWidget = registry.byId("formAddPort.port"); portWidget.set("regExpGen", util.numericOrContextVarRegexp); editWarning.style.display = "none"; registry.byId("addPort").show(); - util.applyMetadataToWidgets(registry.byId("addPort").domNode, "Port", "AMQP"); + util.applyMetadataToWidgets(registry.byId("addPort").domNode, "Port", portType); } }; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/controller.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/controller.js index 4b8e9db4b0..b4c34ab2e8 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/controller.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/controller.js @@ -63,7 +63,7 @@ define(["dojo/dom", controller.viewedObjects = {}; - controller.show = function(objType, name, parent, objectId) { + controller.show = function(objType, name, parent, objectId, type) { function generateName(obj) { @@ -87,7 +87,7 @@ define(["dojo/dom", } else { var Constructor = constructors[ objType ]; if(Constructor) { - obj = new Constructor(name, parent, this); + obj = new Constructor(name, parent, this, type); obj.tabData = { objectId: objectId, objectType: objType diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/showPort.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/showPort.html index 62265a7248..1efae12bbf 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/showPort.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/showPort.html @@ -26,6 +26,11 @@ <div class="nameValue"></div> </div> + <div class="clear name"> + <div class="formLabel-labelCell">Port Type:</div> + <div class="typeValue"></div> + </div> + <div class="clear state"> <div class="formLabel-labelCell">State:</div> <div class="stateValue"></div> @@ -36,24 +41,24 @@ <div class="portValue"></div> </div> - <div class="clear authenticationProvider"> - <div class="formLabel-labelCell">Authentication Provider:</div> - <div class="authenticationProviderValue"></div> - </div> - <div class="clear protocols"> <div class="formLabel-labelCell">Protocols:</div> - <div class="protocolsValue"></div> + <div class="protocolsValue multiLineValue"></div> </div> - <div class="clear transports"> - <div class="formLabel-labelCell">Transports:</div> - <div class="transportsValue"></div> - </div> + <div class="clear authenticationProvider"> + <div class="formLabel-labelCell">Authentication Provider:</div> + <div class="authenticationProviderValue"></div> + </div> - <div class="clear bindingAddress"> - <div class="formLabel-labelCell">Binding address:</div> - <div class="bindingAddressValue"></div> + <div class="clear bindingAddress"> + <div class="formLabel-labelCell">Binding address:</div> + <div class="bindingAddressValue"></div> + </div> + + <div class="clear transports"> + <div class="formLabel-labelCell">Transports:</div> + <div class="transportsValue multiLineValue"></div> </div> <div class="clear keyStore"> @@ -73,7 +78,7 @@ <div class="clear trustStores"> <div class="formLabel-labelCell">Trust Stores:</div> - <div class="trustStoresValue"></div> + <div class="trustStoresValue multiLineValue"></div> </div> </div> diff --git a/qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java b/qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java index 2b23efc95b..d989a73fa2 100644 --- a/qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java +++ b/qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java @@ -32,6 +32,8 @@ import java.util.Set; import javax.net.ssl.SSLContext; import javax.servlet.http.HttpServletRequest; +import org.apache.qpid.server.model.port.AmqpPort; +import org.apache.qpid.server.model.port.HttpPort; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.nio.SelectChannelConnector; @@ -108,11 +110,22 @@ class WebSocketProvider implements AcceptingTransport { throw new IllegalArgumentException("Unexpected transport on port " + _port.getName() + ":" + _transport); } - String bindingAddress = _port.getBindingAddress(); - if(bindingAddress != null && !bindingAddress.trim().equals("") && !bindingAddress.trim().equals("*")) + + String bindingAddress = null; + if (_port instanceof HttpPort) + { + bindingAddress = ((HttpPort)_port).getBindingAddress(); + } + else if (_port instanceof AmqpPort) + { + bindingAddress = ((AmqpPort)_port).getBindingAddress(); + } + + if (bindingAddress != null && !bindingAddress.trim().equals("") && !bindingAddress.trim().equals("*")) { connector.setHost(bindingAddress.trim()); } + connector.setPort(_port.getPort()); _server.addConnector(connector); |
