summaryrefslogtreecommitdiff
path: root/qpid/java/broker-plugins
diff options
context:
space:
mode:
authorAndrew MacBean <macbean@apache.org>2014-08-22 16:08:07 +0000
committerAndrew MacBean <macbean@apache.org>2014-08-22 16:08:07 +0000
commitf6f758f83599ac2832cbc7a9e209d11e3ac98d95 (patch)
tree3aae457b0ef408d76a00a2d971312339178695e3 /qpid/java/broker-plugins
parent80097244af5350560a787b58a5135ae54365047a (diff)
downloadqpid-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')
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java2
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html126
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css4
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js19
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js32
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js5
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js27
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js391
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/controller.js4
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/showPort.html33
-rw-r--r--qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java17
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);