summaryrefslogtreecommitdiff
path: root/qpid/java/broker-plugins
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2015-03-03 14:56:40 +0000
committerKeith Wall <kwall@apache.org>2015-03-03 14:56:40 +0000
commit9dc57fe738f366d875c2319dafdfa2c50ce2f20b (patch)
treebe6634866a966f358fcb1ba6ba29dfb5c9c340c1 /qpid/java/broker-plugins
parentfe37626d4fd8fb3ee5b3146a5159024a3d6d3357 (diff)
downloadqpid-python-9dc57fe738f366d875c2319dafdfa2c50ce2f20b.tar.gz
merge from trunk
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/QPID-6262-JavaBrokerNIO@1663717 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-plugins')
-rw-r--r--qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java24
-rw-r--r--qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java41
-rw-r--r--qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java65
-rw-r--r--qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java42
-rw-r--r--qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java22
-rw-r--r--qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhost/derby/add.js9
-rw-r--r--qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhost/derby/edit.js10
-rw-r--r--qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhostnode/derby/edit.js7
-rw-r--r--qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/show.js14
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js12
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js9
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/show.js9
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js11
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js8
-rw-r--r--qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/show.js11
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java3
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/QueueBinaryReport.java28
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/QueueReport.java161
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/QueueTextReport.java28
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/ReportRunner.java408
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/ReportableMessage.java42
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/ReportableMessageHeader.java58
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java4
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueueReportServlet.java103
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html17
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html33
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js38
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/ColumnDefDialog.js11
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/RowNumberLimitDialog.js14
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js52
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AccessControlProvider.js12
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js4
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js12
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Connection.js14
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Exchange.js5
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js7
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/KeyStore.js4
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Plugin.js7
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Port.js18
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Preferences.js11
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/PreferencesProvider.js5
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js5
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/TrustStore.js4
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js5
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js6
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/accesscontrolprovider/AclFile.js6
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/accesscontrolprovider/aclfile/add.js7
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js7
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js7
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js7
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js15
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPreferencesProvider.js7
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js14
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js7
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js6
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/base64md5passwordfile/add.js13
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/external/add.js13
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/plainpasswordfile/add.js13
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/simpleldap/add.js7
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js7
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editQueue.js6
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js6
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHostNode.js9
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/Group.js5
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js15
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/groupfile/add.js13
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogFileDownloadDialog.js8
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogViewer.js8
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/plugin/managementhttp.js5
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/plugin/managementjmx.js5
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/filesystempreferences/add.js13
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/filesystempreferences/show.js6
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js79
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js74
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js93
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js85
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/show.js11
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/providedstore/add.js8
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/providedstore/edit.js11
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhostnode/json/edit.js7
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/showPort.html81
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html2
-rw-r--r--qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/report/ReportRunnerTest.java186
-rw-r--r--qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/report/TestBinaryReport.java114
-rw-r--r--qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/report/TestTextReport.java84
-rw-r--r--qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java1
-rw-r--r--qpid/java/broker-plugins/management-http/src/test/resources/META-INF/services/org.apache.qpid.server.management.plugin.report.QueueReport2
-rw-r--r--qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBean.java2
-rw-r--r--qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBeanTest.java6
89 files changed, 2062 insertions, 432 deletions
diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
index 78228c209f..6e2a6cac7d 100644
--- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
+++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
@@ -184,7 +184,8 @@ public class ServerConnectionDelegate extends ServerDelegate
vhostName = "";
}
- vhost = ((AmqpPort)sconn.getPort()).getVirtualHost(vhostName);
+ AmqpPort port = (AmqpPort) sconn.getPort();
+ vhost = port.getVirtualHost(vhostName);
@@ -193,14 +194,28 @@ public class ServerConnectionDelegate extends ServerDelegate
if (vhost.getState() != State.ACTIVE)
{
sconn.setState(Connection.State.CLOSING);
- sconn.invoke(new ConnectionClose(ConnectionCloseCode.CONNECTION_FORCED, "Virtual host '"+vhostName+"' is not active"));
+ final String redirectHost = vhost.getRedirectHost(port);
+ if(redirectHost == null)
+ {
+ sconn.invoke(new ConnectionClose(ConnectionCloseCode.CONNECTION_FORCED,
+ "Virtual host '" + vhostName + "' is not active"));
+ }
+ else
+ {
+ sconn.invoke(new ConnectionRedirect(redirectHost, new ArrayList<Object>()));
+ }
return;
}
sconn.setVirtualHost(vhost);
try
{
- vhost.getSecurityManager().authoriseCreateConnection(sconn);
+ if(!vhost.authoriseCreateConnection(sconn))
+ {
+ sconn.setState(Connection.State.CLOSING);
+ sconn.invoke(new ConnectionClose(ConnectionCloseCode.CONNECTION_FORCED, "Connection not authorized"));
+ return;
+ }
}
catch (AccessControlException e)
{
@@ -215,7 +230,8 @@ public class ServerConnectionDelegate extends ServerDelegate
else
{
sconn.setState(Connection.State.CLOSING);
- sconn.invoke(new ConnectionClose(ConnectionCloseCode.INVALID_PATH, "Unknown virtualhost '"+vhostName+"'"));
+ sconn.invoke(new ConnectionClose(ConnectionCloseCode.INVALID_PATH,
+ "Unknown virtualhost '" + vhostName + "'"));
}
}
diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java
index c42630d0c6..dd634c36ff 100644
--- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java
+++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java
@@ -33,6 +33,7 @@ import java.util.UUID;
import org.apache.log4j.Logger;
+import org.apache.qpid.common.AMQPFilterTypes;
import org.apache.qpid.exchange.ExchangeDefaults;
import org.apache.qpid.protocol.AMQConstant;
import org.apache.qpid.server.protocol.ServerProtocolEngine;
@@ -40,8 +41,10 @@ import org.apache.qpid.server.consumer.ConsumerImpl;
import org.apache.qpid.server.exchange.ExchangeImpl;
import org.apache.qpid.server.virtualhost.VirtualHostUnavailableException;
import org.apache.qpid.server.filter.AMQInvalidArgumentException;
+import org.apache.qpid.server.filter.ArrivalTimeFilter;
import org.apache.qpid.server.filter.FilterManager;
import org.apache.qpid.server.filter.FilterManagerFactory;
+import org.apache.qpid.server.filter.MessageFilter;
import org.apache.qpid.server.logging.messages.ChannelMessages;
import org.apache.qpid.server.logging.messages.ExchangeMessages;
import org.apache.qpid.server.message.InstanceProperties;
@@ -259,6 +262,43 @@ public class ServerSessionDelegate extends SessionDelegate
return;
}
+
+ if(method.hasArguments() && method.getArguments().containsKey(AMQPFilterTypes.REPLAY_PERIOD.toString()))
+ {
+ Object value = method.getArguments().get(AMQPFilterTypes.REPLAY_PERIOD.toString());
+ final long period;
+ if(value instanceof Number)
+ {
+ period = ((Number)value).longValue();
+ }
+ else if(value instanceof String)
+ {
+ try
+ {
+ period = Long.parseLong(value.toString());
+ }
+ catch (NumberFormatException e)
+ {
+ exception(session, method, ExecutionErrorCode.ILLEGAL_ARGUMENT, "Cannot parse value " + value + " as a number for filter " + AMQPFilterTypes.REPLAY_PERIOD.toString());
+ return;
+ }
+ }
+ else
+ {
+ exception(session, method, ExecutionErrorCode.ILLEGAL_ARGUMENT, "Cannot parse value " + value + " as a number for filter " + AMQPFilterTypes.REPLAY_PERIOD.toString());
+ return;
+ }
+ final long startingFrom = System.currentTimeMillis() - (1000l * period);
+ if(filterManager == null)
+ {
+ filterManager = new FilterManager();
+ }
+ MessageFilter filter = new ArrivalTimeFilter(startingFrom);
+ filterManager.add(filter.getName(), filter);
+
+ }
+
+
ConsumerTarget_0_10 target = new ConsumerTarget_0_10((ServerSession)session, destination,
method.getAcceptMode(),
method.getAcquireMode(),
@@ -1609,4 +1649,5 @@ public class ServerSessionDelegate extends SessionDelegate
{
}
}
+
}
diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
index 9631530f90..18ebc94187 100644
--- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
+++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
@@ -59,11 +59,11 @@ import org.apache.qpid.server.consumer.ConsumerImpl;
import org.apache.qpid.server.consumer.ConsumerTarget;
import org.apache.qpid.server.exchange.ExchangeImpl;
import org.apache.qpid.server.filter.AMQInvalidArgumentException;
+import org.apache.qpid.server.filter.ArrivalTimeFilter;
import org.apache.qpid.server.filter.FilterManager;
import org.apache.qpid.server.filter.FilterManagerFactory;
import org.apache.qpid.server.filter.Filterable;
import org.apache.qpid.server.filter.MessageFilter;
-import org.apache.qpid.server.filter.SimpleFilterManager;
import org.apache.qpid.server.flow.FlowCreditManager;
import org.apache.qpid.server.logging.LogMessage;
import org.apache.qpid.server.logging.LogSubject;
@@ -673,7 +673,7 @@ public class AMQChannel
* @param tag the tag chosen by the client (if null, server will generate one)
* @param sources the queues to subscribe to
* @param acks Are acks enabled for this subscriber
- * @param filters Filters to apply to this subscriber
+ * @param arguments Filters to apply to this subscriber
*
* @param exclusive Flag requesting exclusive access to the queue
* @return the consumer tag. This is returned to the subscriber and used in subsequent unsubscribe requests
@@ -681,7 +681,7 @@ public class AMQChannel
* @throws org.apache.qpid.AMQException if something goes wrong
*/
public AMQShortString consumeFromSource(AMQShortString tag, Collection<MessageSource> sources, boolean acks,
- FieldTable filters, boolean exclusive, boolean noLocal)
+ FieldTable arguments, boolean exclusive, boolean noLocal)
throws MessageSource.ExistingConsumerPreventsExclusive,
MessageSource.ExistingExclusiveConsumer,
AMQInvalidArgumentException,
@@ -700,19 +700,19 @@ public class AMQChannel
ConsumerTarget_0_8 target;
EnumSet<ConsumerImpl.Option> options = EnumSet.noneOf(ConsumerImpl.Option.class);
- if(filters != null && Boolean.TRUE.equals(filters.get(AMQPFilterTypes.NO_CONSUME.getValue())))
+ if(arguments != null && Boolean.TRUE.equals(arguments.get(AMQPFilterTypes.NO_CONSUME.getValue())))
{
- target = ConsumerTarget_0_8.createBrowserTarget(this, tag, filters, _noAckCreditManager);
+ target = ConsumerTarget_0_8.createBrowserTarget(this, tag, arguments, _noAckCreditManager);
}
else if(acks)
{
- target = ConsumerTarget_0_8.createAckTarget(this, tag, filters, _creditManager);
+ target = ConsumerTarget_0_8.createAckTarget(this, tag, arguments, _creditManager);
options.add(ConsumerImpl.Option.ACQUIRES);
options.add(ConsumerImpl.Option.SEES_REQUEUES);
}
else
{
- target = ConsumerTarget_0_8.createNoAckTarget(this, tag, filters, _noAckCreditManager);
+ target = ConsumerTarget_0_8.createNoAckTarget(this, tag, arguments, _noAckCreditManager);
options.add(ConsumerImpl.Option.ACQUIRES);
options.add(ConsumerImpl.Option.SEES_REQUEUES);
}
@@ -732,23 +732,66 @@ public class AMQChannel
try
{
- FilterManager filterManager = FilterManagerFactory.createManager(FieldTable.convertToMap(filters));
+ FilterManager filterManager = FilterManagerFactory.createManager(FieldTable.convertToMap(arguments));
if(noLocal)
{
if(filterManager == null)
{
- filterManager = new SimpleFilterManager();
+ filterManager = new FilterManager();
}
final Object connectionReference = getConnectionReference();
- filterManager.add(new MessageFilter()
+ MessageFilter filter = new MessageFilter()
{
+
+ @Override
+ public String getName()
+ {
+ return AMQPFilterTypes.NO_LOCAL.toString();
+ }
+
@Override
public boolean matches(final Filterable message)
{
return message.getConnectionReference() != connectionReference;
}
- });
+ };
+ filterManager.add(filter.getName(), filter);
+ }
+
+ if(arguments != null && arguments.containsKey(AMQPFilterTypes.REPLAY_PERIOD.toString()))
+ {
+ Object value = arguments.get(AMQPFilterTypes.REPLAY_PERIOD.toString());
+ final long period;
+ if(value instanceof Number)
+ {
+ period = ((Number)value).longValue();
+ }
+ else if(value instanceof String)
+ {
+ try
+ {
+ period = Long.parseLong(value.toString());
+ }
+ catch (NumberFormatException e)
+ {
+ throw new AMQInvalidArgumentException("Cannot parse value " + value + " as a number for filter " + AMQPFilterTypes.REPLAY_PERIOD.toString());
+ }
+ }
+ else
+ {
+ throw new AMQInvalidArgumentException("Cannot parse value " + value + " as a number for filter " + AMQPFilterTypes.REPLAY_PERIOD.toString());
+ }
+
+ final long startingFrom = System.currentTimeMillis() - (1000l * period);
+ if(filterManager == null)
+ {
+ filterManager = new FilterManager();
+ }
+ MessageFilter filter = new ArrivalTimeFilter(startingFrom);
+ filterManager.add(filter.getName(), filter);
+
}
+
for(MessageSource source : sources)
{
ConsumerImpl sub =
diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java
index 659207d9e8..d58ac36ff5 100644
--- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java
+++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java
@@ -1565,7 +1565,7 @@ public class AMQProtocolEngine implements ServerProtocolEngine,
virtualHostStr = virtualHostName == null ? null : virtualHostName.toString();
}
- VirtualHostImpl virtualHost = ((AmqpPort)getPort()).getVirtualHost(virtualHostStr);
+ VirtualHostImpl<?,?,?> virtualHost = ((AmqpPort)getPort()).getVirtualHost(virtualHostStr);
if (virtualHost == null)
{
@@ -1578,8 +1578,16 @@ public class AMQProtocolEngine implements ServerProtocolEngine,
// Check virtualhost access
if (virtualHost.getState() != State.ACTIVE)
{
- closeConnection(AMQConstant.CONNECTION_FORCED,
- "Virtual host '" + virtualHost.getName() + "' is not active",0);
+ String redirectHost = virtualHost.getRedirectHost(getPort());
+ if(redirectHost != null)
+ {
+ closeConnection(0, new AMQFrame(0,new ConnectionRedirectBody(getProtocolVersion(),AMQShortString.valueOf(redirectHost), null)));
+ }
+ else
+ {
+ closeConnection(AMQConstant.CONNECTION_FORCED,
+ "Virtual host '" + virtualHost.getName() + "' is not active", 0);
+ }
}
else
@@ -1587,21 +1595,29 @@ public class AMQProtocolEngine implements ServerProtocolEngine,
setVirtualHost(virtualHost);
try
{
- virtualHost.getSecurityManager().authoriseCreateConnection(this);
- if (getContextKey() == null)
+
+ if(virtualHost.authoriseCreateConnection(this))
{
- setContextKey(new AMQShortString(Long.toString(System.currentTimeMillis())));
- }
+ if (getContextKey() == null)
+ {
+ setContextKey(new AMQShortString(Long.toString(System.currentTimeMillis())));
+ }
+
+ MethodRegistry methodRegistry = getMethodRegistry();
+ AMQMethodBody responseBody = methodRegistry.createConnectionOpenOkBody(virtualHostName);
- MethodRegistry methodRegistry = getMethodRegistry();
- AMQMethodBody responseBody = methodRegistry.createConnectionOpenOkBody(virtualHostName);
+ writeFrame(responseBody.generateFrame(0));
+ _state = ConnectionState.OPEN;
- writeFrame(responseBody.generateFrame(0));
- _state = ConnectionState.OPEN;
+ }
+ else
+ {
+ closeConnection(AMQConstant.ACCESS_REFUSED, "Connection refused",0);
+ }
}
catch (AccessControlException e)
{
- closeConnection(AMQConstant.ACCESS_REFUSED, e.getMessage(),0);
+ closeConnection(AMQConstant.ACCESS_REFUSED, e.getMessage(), 0);
}
}
}
@@ -1767,7 +1783,7 @@ public class AMQProtocolEngine implements ServerProtocolEngine,
_logger.info("Locale selected: " + locale);
SubjectCreator subjectCreator = getSubjectCreator();
- SaslServer ss = null;
+ SaslServer ss;
try
{
ss = subjectCreator.createSaslServer(String.valueOf(mechanism),
diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java
index 6a202998f4..fe36ba91cb 100644
--- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java
+++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java
@@ -65,8 +65,8 @@ import org.apache.qpid.filter.selector.ParseException;
import org.apache.qpid.server.binding.BindingImpl;
import org.apache.qpid.server.consumer.ConsumerImpl;
import org.apache.qpid.server.exchange.ExchangeImpl;
+import org.apache.qpid.server.filter.FilterManager;
import org.apache.qpid.server.filter.JMSSelectorFilter;
-import org.apache.qpid.server.filter.SimpleFilterManager;
import org.apache.qpid.server.message.MessageInstance;
import org.apache.qpid.server.message.MessageSource;
import org.apache.qpid.server.model.ExclusivityPolicy;
@@ -154,15 +154,7 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS
actualFilters.put(entry.getKey(), entry.getValue());
}
- catch (ParseException e)
- {
- Error error = new Error();
- error.setCondition(AmqpError.INVALID_FIELD);
- error.setDescription("Invalid JMS Selector: " + selectorFilter.getValue());
- error.setInfo(Collections.singletonMap(Symbol.valueOf("field"), Symbol.valueOf("filter")));
- throw new AmqpErrorException(error);
- }
- catch (SelectorParsingException e)
+ catch (ParseException | SelectorParsingException e)
{
Error error = new Error();
error.setCondition(AmqpError.INVALID_FIELD);
@@ -374,8 +366,16 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS
{
name = getEndpoint().getName();
}
+
+ FilterManager filters = null;
+ if(messageFilter != null)
+ {
+ filters = new FilterManager();
+ filters.add(messageFilter.getName(), messageFilter);
+ }
+
_consumer = _queue.addConsumer(_target,
- messageFilter == null ? null : new SimpleFilterManager(messageFilter),
+ filters,
Message_1_0.class, name, options);
}
catch (MessageSource.ExistingExclusiveConsumer e)
diff --git a/qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhost/derby/add.js b/qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhost/derby/add.js
index 7b12d10343..323b8e9750 100644
--- a/qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhost/derby/add.js
+++ b/qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhost/derby/add.js
@@ -34,10 +34,11 @@ define(["dojo/_base/xhr",
show: function (data)
{
this.containerNode = domConstruct.create("div", {innerHTML: template}, data.containerNode);
- parser.parse(this.containerNode);
-
- registry.byId("addVirtualHost.storeUnderfullSize").set("regExpGen", util.numericOrContextVarRegexp);
- registry.byId("addVirtualHost.storeOverfullSize").set("regExpGen", util.numericOrContextVarRegexp);
+ parser.parse(this.containerNode).then(function(instances)
+ {
+ registry.byId("addVirtualHost.storeUnderfullSize").set("regExpGen", util.numericOrContextVarRegexp);
+ registry.byId("addVirtualHost.storeOverfullSize").set("regExpGen", util.numericOrContextVarRegexp);
+ });
}
};
}
diff --git a/qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhost/derby/edit.js b/qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhost/derby/edit.js
index a8b68a0c16..c1018313b8 100644
--- a/qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhost/derby/edit.js
+++ b/qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhost/derby/edit.js
@@ -22,10 +22,12 @@ define(["qpid/common/util", "dijit/registry", "dojo/domReady!"],
return {
show: function(data)
{
- util.buildEditUI(data.containerNode, "virtualhost/sizemonitoring/edit.html", "editVirtualHost.", null, null);
-
- registry.byId("editVirtualHost.storeUnderfullSize").set("regExpGen", util.numericOrContextVarRegexp);
- registry.byId("editVirtualHost.storeOverfullSize").set("regExpGen", util.numericOrContextVarRegexp);
+ util.parseHtmlIntoDiv(data.containerNode, "virtualhost/sizemonitoring/edit.html",
+ function()
+ {
+ registry.byId("editVirtualHost.storeUnderfullSize").set("regExpGen", util.numericOrContextVarRegexp);
+ registry.byId("editVirtualHost.storeOverfullSize").set("regExpGen", util.numericOrContextVarRegexp);
+ });
}
};
}
diff --git a/qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhostnode/derby/edit.js b/qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhostnode/derby/edit.js
index 5fa0443185..a7f5d05719 100644
--- a/qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhostnode/derby/edit.js
+++ b/qpid/java/broker-plugins/derby-store/src/main/java/resources/js/qpid/management/virtualhostnode/derby/edit.js
@@ -22,8 +22,11 @@ define(["qpid/common/util", "dijit/registry", "dojo/domReady!"],
return {
show: function(data)
{
- util.buildEditUI(data.containerNode, "virtualhostnode/filebased/edit.html", "editVirtualHostNode.", ["storePath"], data.data);
- registry.byId("editVirtualHostNode.storePath").set("disabled", data.data.state != "STOPPED");
+ util.parseHtmlIntoDiv(data.containerNode, "virtualhostnode/filebased/edit.html",
+ function()
+ {
+ registry.byId("editVirtualHostNode.storePath").set("disabled", data.data.state != "STOPPED");
+ });
}
};
}
diff --git a/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/show.js b/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/show.js
index 31e5db5035..3d15cdbc37 100644
--- a/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/show.js
+++ b/qpid/java/broker-plugins/jdbc-provider-bone/src/main/java/resources/js/qpid/management/store/pool/bonecp/show.js
@@ -40,13 +40,15 @@ define(["dojo/_base/xhr",
sync: true,
load: function(template) {
containerNode.innerHTML = template;
- parser.parse(containerNode);
+ parser.parse(containerNode).then(function(instances)
+ {
+ for(var i=0; i<fieldNames.length;i++)
+ {
+ var fieldName = fieldNames[i];
+ that[fieldName]= query("." + fieldName, containerNode)[0];
+ }
+ });
}});
- for(var i=0; i<fieldNames.length;i++)
- {
- var fieldName = fieldNames[i];
- this[fieldName]= query("." + fieldName, containerNode)[0];
- }
}
BoneCP.prototype.update=function(data)
diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js b/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js
index beb298e988..8de6206373 100644
--- a/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js
+++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js
@@ -36,12 +36,18 @@ define(["dojo/_base/xhr",
return {
show: function (data)
{
+ var that = this;
this.containerNode = domConstruct.create("div", {innerHTML: template}, data.containerNode);
- parser.parse(this.containerNode);
-
+ parser.parse(this.containerNode).then(function(instances)
+ {
+ that._postParse(data);
+ });
+ },
+ _postParse: function (data)
+ {
+ var that = this;
registry.byId("addVirtualHost.connectionUrl").set("regExpGen", util.jdbcUrlOrContextVarRegexp);
registry.byId("addVirtualHost.username").set("regExpGen", util.nameOrContextVarRegexp);
-
var poolTypes = json.parse(poolTypeJsonString);
var poolTypesData = [];
for (var i =0 ; i < poolTypes.length; i++)
diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js b/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js
index 90fc246276..4a2a3763bd 100644
--- a/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js
+++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js
@@ -29,12 +29,15 @@ define(["qpid/common/util",
function (util, poolTypeJsonString, array, json, string, Memory, dom, domConstruct, registry)
{
- var fieldNames = ["connectionUrl", "username", "connectionPoolType"];
return {
show: function(data)
{
- util.buildEditUI(data.containerNode, "virtualhost/jdbc/edit.html", "editVirtualHost.", fieldNames, data.data);
-
+ var that = this;
+ util.parseHtmlIntoDiv(data.containerNode, "virtualhost/jdbc/edit.html",
+ function(){that._postParse(data)});
+ },
+ _postParse: function(data)
+ {
registry.byId("editVirtualHost.connectionUrl").set("regExpGen", util.jdbcUrlOrContextVarRegexp);
registry.byId("editVirtualHost.username").set("regExpGen", util.nameOrContextVarRegexp);
diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/show.js b/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/show.js
index d3fdf50769..b717f2091d 100644
--- a/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/show.js
+++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/show.js
@@ -25,9 +25,12 @@ define(["qpid/common/util", "dojo/query", "dojo/_base/array", "dojo/dom-construc
function JDBC(data)
{
- util.buildUI(data.containerNode, data.parent, "virtualhostnode/jdbc/show.html", fieldNames, this);
- this.usernameAttributeContainer=query(".usernameAttributeContainer", data.containerNode)[0];
- this.connectionPoolTypeAttributeContainer=query(".connectionPoolTypeAttributeContainer", data.containerNode)[0];
+ var that = this;
+ util.buildUI(data.containerNode, data.parent, "virtualhostnode/jdbc/show.html", fieldNames, this, function()
+ {
+ that.usernameAttributeContainer=query(".usernameAttributeContainer", data.containerNode)[0];
+ that.connectionPoolTypeAttributeContainer=query(".connectionPoolTypeAttributeContainer", data.containerNode)[0];
+ });
}
JDBC.prototype.update = function(data)
diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js b/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js
index d5a7b43aae..071c0c8b23 100644
--- a/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js
+++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js
@@ -38,9 +38,16 @@ define(["dojo/_base/xhr",
return {
show: function (data)
{
+ var that = this;
this.containerNode = domConstruct.create("div", {innerHTML: template}, data.containerNode);
- parser.parse(this.containerNode);
-
+ parser.parse(this.containerNode).then(function(instances)
+ {
+ that._postParse(data);
+ });
+ },
+ _postParse: function(data)
+ {
+ var that = this;
registry.byId("addVirtualHostNode.connectionUrl").set("regExpGen", util.jdbcUrlOrContextVarRegexp);
registry.byId("addVirtualHostNode.username").set("regExpGen", util.nameOrContextVarRegexp);
diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js b/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js
index 828369cae0..cccfa95d4c 100644
--- a/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js
+++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js
@@ -28,12 +28,14 @@ define(["qpid/common/util",
"dojo/domReady!"],
function (util, poolTypeJsonString, array, json, string, Memory, dom, domConstruct, registry)
{
- var fieldNames = ["connectionUrl", "username", "connectionPoolType"];
return {
show: function(data)
{
- util.buildEditUI(data.containerNode, "virtualhostnode/jdbc/edit.html", "editVirtualHostNode.", fieldNames, data.data);
-
+ var that = this;
+ util.parseHtmlIntoDiv(data.containerNode, "virtualhostnode/jdbc/edit.html", function(){ that._postParse(data);});
+ },
+ _postParse: function(data)
+ {
registry.byId("editVirtualHostNode.connectionUrl").set("regExpGen", util.jdbcUrlOrContextVarRegexp);
registry.byId("editVirtualHostNode.username").set("regExpGen", util.nameOrContextVarRegexp);
diff --git a/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/show.js b/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/show.js
index 15c237d0a2..019962fc64 100644
--- a/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/show.js
+++ b/qpid/java/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/show.js
@@ -27,10 +27,13 @@ define(["qpid/common/util", "dojo/query", "dojo/_base/array", "dojo/dom-construc
function Jdbc(data)
{
this.parent = data.parent;
- util.buildUI(data.containerNode, data.parent, "virtualhostnode/jdbc/show.html", fieldNames, this);
-
- this.usernameAttributeContainer=query(".usernameAttributeContainer", data.containerNode)[0];
- this.connectionPoolTypeAttributeContainer=query(".connectionPoolTypeAttributeContainer", data.containerNode)[0];
+ var that = this;
+ util.buildUI(data.containerNode, data.parent, "virtualhostnode/jdbc/show.html", fieldNames, this,
+ function()
+ {
+ that.usernameAttributeContainer=query(".usernameAttributeContainer", data.containerNode)[0];
+ that.connectionPoolTypeAttributeContainer=query(".connectionPoolTypeAttributeContainer", data.containerNode)[0];
+ });
}
Jdbc.prototype.update=function(data)
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 4e340c7b72..69920ff488 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
@@ -69,6 +69,7 @@ import org.apache.qpid.server.management.plugin.servlet.rest.LogoutServlet;
import org.apache.qpid.server.management.plugin.servlet.rest.MessageContentServlet;
import org.apache.qpid.server.management.plugin.servlet.rest.MessageServlet;
import org.apache.qpid.server.management.plugin.servlet.rest.MetaDataServlet;
+import org.apache.qpid.server.management.plugin.servlet.rest.QueueReportServlet;
import org.apache.qpid.server.management.plugin.servlet.rest.RestServlet;
import org.apache.qpid.server.management.plugin.servlet.rest.SaslServlet;
import org.apache.qpid.server.management.plugin.servlet.rest.StructureServlet;
@@ -304,6 +305,8 @@ public class HttpManagement extends AbstractPluginAdapter<HttpManagement> implem
root.addServlet(new ServletHolder(new StructureServlet()), "/service/structure");
root.addServlet(new ServletHolder(new MessageServlet()), "/service/message/*");
root.addServlet(new ServletHolder(new MessageContentServlet()), "/service/message-content/*");
+ root.addServlet(new ServletHolder(new QueueReportServlet()), "/service/queuereport/*");
+
root.addServlet(new ServletHolder(new LogRecordsServlet()), "/service/logrecords");
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/QueueBinaryReport.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/QueueBinaryReport.java
new file mode 100644
index 0000000000..d842de3f1b
--- /dev/null
+++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/QueueBinaryReport.java
@@ -0,0 +1,28 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.management.plugin.report;
+
+public abstract class QueueBinaryReport extends QueueReport<byte[]>
+{
+ public QueueBinaryReport()
+ {
+ }
+}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/QueueReport.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/QueueReport.java
new file mode 100644
index 0000000000..23b24aaf8d
--- /dev/null
+++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/QueueReport.java
@@ -0,0 +1,161 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.management.plugin.report;
+
+import org.apache.qpid.server.model.Queue;
+import org.apache.qpid.server.model.VirtualHost;
+
+/**
+ * <p>
+ * The QueueReport class provides an extension point for installations to provide custom management reporting on
+ * queues through the REST API.
+ * </p>
+ *
+ * <p>
+ * A custom QueueReport must extend either {@link org.apache.qpid.server.management.plugin.report.QueueTextReport}
+ * or {@link org.apache.qpid.server.management.plugin.report.QueueBinaryReport}. The report implementation must
+ * define a {@link #getName() name} which is unique amongst all installed reports. The report class must be present
+ * in the classpath of the broker, and a provider-configuration file named
+ * org.apache.qpid.server.management.plugin.report.QueueReport must be added in the resource directory
+ * META-INF/services directory with the binary name of the implementation (as described in
+ * {@link java.util.ServiceLoader ServiceLoader}).
+ * </p>
+ *
+ * <h3>Running reports</h3>
+ * <p>
+ * The report can be run using the URL:
+ * {@code http://<broker>/service/queuereport/<virtualhost name>/<queue name>/<report name>[?param1=x&param2=y...]}
+ * </p>
+ *
+ * <h4>Report Parameters</h4>
+ *
+ * <p>
+ * Reports can take parameters from the query string of the HTTP request. For every parameter in the query string
+ * the system will look for a setter on the report object with either a String or String[] parameter. Thus if
+ * the query string contains {@code foo=bar}, then the system will look for a setter {@code setFoo(String value)} or
+ * {@code setFoo(String[] value)}. If the same parameter occurs multiple times in the query string then only the
+ * array variant of the setter will be called.
+ * </p>
+ * <p>
+ * Setters for the parameters are guaranteed to be called before the first message is added to the report.
+ * </p>
+ *
+ * <p>
+ * NOTE: In order to comply with the requirements of the {@link java.util.ServiceLoader ServiceLoader} api, all
+ * implementations of QueueReport MUST provide a public no-args constructor.
+ * </p>
+ * @param <T>
+ */
+public abstract class QueueReport<T>
+{
+ private Queue<?> _queue;
+
+ QueueReport()
+ {
+
+ }
+
+ /**
+ * Gets the name of the report.
+ * <p>
+ * The name of the report must be unique amongst all installed implementations. The name of the report
+ * is examined by the Qpid immediately upon construction. The name should not change during
+ * the lifetime of the object (the value is only meaningful to the system at the time of initial construction)
+ * and all instances of the same concrete implementation should have the same name.
+ * </p>
+ * @return the name of the report
+ */
+ public abstract String getName();
+
+ /**
+ * Get the name of the queue against which the report is being run.
+ *
+ * @return the name of the queue
+ */
+ public final String getQueueName()
+ {
+ return _queue.getName();
+ }
+
+ final void setQueue(final Queue<?> queue)
+ {
+ _queue = queue;
+ }
+
+ /**
+ * Get the name of the virtual host against which the report is being run.
+ *
+ * @return the name of the virtual host
+ */
+ public final String getVirtualHostName()
+ {
+ return _queue.getParent(VirtualHost.class).getName();
+ }
+
+ /**
+ *
+ * The value returned by getContentType() will be used to set the Content-Type HTTP header field
+ *
+ * @return the value to use for the content-type HTTP header field
+ */
+ public abstract String getContentType();
+
+ /**
+ * Called by the system to add a message to the report.
+ *
+ * <p>
+ * The method is called by the system for every message on the queue, or until {@link #isComplete()} returns true.
+ * </p>
+ * @param reportableMessage the message to add to the report
+ */
+ public abstract void addMessage(final ReportableMessage reportableMessage);
+
+ /**
+ * Informs the system if the report is complete (i.e. does not need to report on any more messages).
+ *
+ * <p>
+ * This method will be called by the system after each message is {@link #addMessage(ReportableMessage) added}
+ * to the report. If a report is only interested in some messages, and can determine that the addition of more
+ * messages will not vary the content of the report, then it can return true.
+ * </p>
+ * <p>
+ * If this method always returns false, then all messages from the queue will be added to the report.
+ * </p>
+ * <p>
+ * NOTE: Retrieving content or properties of the message may require it to be reloaded from disk, and so care
+ * should be taken by reports to only access properties/content of the message if it is going to be required
+ * for the report production.
+ * </p>
+ *
+ * @return true if the report does not want to report on any more messages in the queue
+ */
+ public abstract boolean isComplete();
+
+ /**
+ * Called by the system to get the content of the report to retrun to the user.
+ * <p>
+ * The system guarantees to only call this method once
+ * </p>
+ * @return the report content.
+ */
+ public abstract T getReport();
+
+}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/QueueTextReport.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/QueueTextReport.java
new file mode 100644
index 0000000000..09bc5c4229
--- /dev/null
+++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/QueueTextReport.java
@@ -0,0 +1,28 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.management.plugin.report;
+
+public abstract class QueueTextReport extends QueueReport<String>
+{
+ public QueueTextReport()
+ {
+ }
+}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/ReportRunner.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/ReportRunner.java
new file mode 100644
index 0000000000..2a05cfc9a1
--- /dev/null
+++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/ReportRunner.java
@@ -0,0 +1,408 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.management.plugin.report;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.ServiceLoader;
+import java.util.Set;
+import java.util.UUID;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.qpid.server.message.AMQMessageHeader;
+import org.apache.qpid.server.message.ServerMessage;
+import org.apache.qpid.server.model.Queue;
+import org.apache.qpid.server.queue.QueueEntry;
+import org.apache.qpid.server.queue.QueueEntryVisitor;
+
+public class ReportRunner<T>
+{
+ private static final Logger LOGGER = LoggerFactory.getLogger(ReportRunner.class);
+
+ private static final Set<Class> IMMUTABLE_CLASSES = new HashSet<>(Arrays.<Class>asList(
+ Boolean.class,
+ Byte.class,
+ Short.class,
+ Character.class,
+ Integer.class,
+ Long.class,
+ Float.class,
+ Double.class,
+ UUID.class,
+ Date.class,
+ String.class
+ ));
+
+ private ReportRunner(final QueueReport<T> report)
+ {
+ _report = report;
+ }
+
+ public boolean isBinaryReport()
+ {
+ return _report instanceof QueueBinaryReport;
+ }
+
+ public static ReportRunner<?> createRunner(final String reportName, final Map<String, String[]> parameterMap)
+ {
+ QueueReport<?> report = getReport(reportName);
+ setReportParameters(report, parameterMap);
+ return new ReportRunner<>(report);
+ }
+
+ private static void setReportParameters(final QueueReport<?> report, final Map<String, String[]> parameterMap)
+ {
+ if(parameterMap != null && !parameterMap.isEmpty())
+ {
+ Class<? extends QueueReport> clazz = report.getClass();
+ for(Map.Entry<String,String[]> entry : parameterMap.entrySet())
+ {
+ String key = entry.getKey();
+ String[] value = entry.getValue();
+ if(isValidName(key))
+ {
+
+ StringBuilder setterName = new StringBuilder("set");
+ setterName.append(key.substring(0,1).toUpperCase());
+ if(key.length()>1)
+ {
+ setterName.append(key.substring(1));
+ }
+ Method method = null;
+ try
+ {
+
+ if (value == null || value.length == 0 || value.length == 1)
+ {
+ try
+ {
+ method = clazz.getMethod(setterName.toString(), String.class);
+ method.invoke(report, value == null || value.length == 0 ? null : value[0]);
+ }
+ catch (NoSuchMethodException | IllegalAccessException e)
+ {
+ method = null;
+ }
+ }
+ if (method == null)
+ {
+ try
+ {
+ method = clazz.getMethod(setterName.toString(), String[].class);
+ method.invoke(report, new Object[] { value });
+ }
+ catch (NoSuchMethodException | IllegalAccessException e)
+ {
+ LOGGER.info("Unknown parameter '"
+ + key
+ + "' (no setter) for report "
+ + report.getName());
+ }
+ }
+ }
+ catch (InvocationTargetException e)
+ {
+ LOGGER.info("Error setting parameter '" + key + "' for report " + report.getName(), e);
+ }
+ }
+ else
+ {
+ LOGGER.info("Invalid parameter name '" + key + "' running report " + report.getName());
+ }
+ }
+ }
+ }
+
+ private static boolean isValidName(final String key)
+ {
+ if(key != null && key.length() != 0)
+ {
+ if(Character.isJavaIdentifierStart(key.charAt(0)))
+ {
+ for(int i = 1; i < key.length(); i++)
+ {
+ if(!Character.isJavaIdentifierPart(key.charAt(i)))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ }
+ return false;
+
+ }
+
+ private static QueueReport<?> getReport(final String reportName)
+ {
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ for (final QueueReport report : ServiceLoader.load(QueueReport.class, classLoader))
+ {
+ if (report.getName().equals(reportName))
+ {
+ try
+ {
+ return report.getClass().newInstance();
+ }
+ catch (InstantiationException | IllegalAccessException e)
+ {
+ // can't happen as by definition must have public noargs constructor
+ }
+ }
+ }
+ throw new IllegalArgumentException("Unknown report: " + reportName);
+ }
+
+ public String getContentType()
+ {
+ return _report.getContentType();
+ }
+
+
+ private static class ReportVisitor implements QueueEntryVisitor
+ {
+
+ private final QueueReport _report;
+
+ public ReportVisitor(final QueueReport report)
+ {
+ _report = report;
+ }
+
+ @Override
+ public boolean visit(final QueueEntry entry)
+ {
+ _report.addMessage(convertMessage(entry.getMessage()));
+ return _report.isComplete();
+ }
+
+
+ }
+
+
+ private static ReportableMessage convertMessage(final ServerMessage message)
+ {
+ return new ReportableMessage()
+ {
+ @Override
+ public String getInitialRoutingAddress()
+ {
+ return message.getInitialRoutingAddress();
+ }
+
+ @Override
+ public ReportableMessageHeader getMessageHeader()
+ {
+ return convertMessageHeader(message.getMessageHeader());
+ }
+
+ @Override
+ public ByteBuffer getContent()
+ {
+ ByteBuffer content = message.getContent(0, (int) getSize());
+
+ return content.asReadOnlyBuffer();
+ }
+
+ @Override
+ public boolean isPersistent()
+ {
+ return message.isPersistent();
+ }
+
+ @Override
+ public long getSize()
+ {
+ return message.getSize();
+ }
+
+ @Override
+ public long getExpiration()
+ {
+ return message.getExpiration();
+ }
+
+ @Override
+ public long getMessageNumber()
+ {
+ return message.getMessageNumber();
+ }
+
+ @Override
+ public long getArrivalTime()
+ {
+ return message.getArrivalTime();
+ }
+ };
+ }
+
+ private static ReportableMessageHeader convertMessageHeader(final AMQMessageHeader messageHeader)
+ {
+ return new ReportableMessageHeader()
+ {
+ @Override
+ public String getCorrelationId()
+ {
+ return messageHeader.getCorrelationId();
+ }
+
+ @Override
+ public long getExpiration()
+ {
+ return messageHeader.getExpiration();
+ }
+
+ @Override
+ public String getUserId()
+ {
+ return messageHeader.getUserId();
+ }
+
+ @Override
+ public String getAppId()
+ {
+ return messageHeader.getAppId();
+ }
+
+ @Override
+ public String getMessageId()
+ {
+ return messageHeader.getMessageId();
+ }
+
+ @Override
+ public String getMimeType()
+ {
+ return messageHeader.getMimeType();
+ }
+
+ @Override
+ public String getEncoding()
+ {
+ return messageHeader.getEncoding();
+ }
+
+ @Override
+ public byte getPriority()
+ {
+ return messageHeader.getPriority();
+ }
+
+ @Override
+ public long getTimestamp()
+ {
+ return messageHeader.getTimestamp();
+ }
+
+ @Override
+ public String getType()
+ {
+ return messageHeader.getType();
+ }
+
+ @Override
+ public String getReplyTo()
+ {
+ return messageHeader.getReplyTo();
+ }
+
+ @Override
+ public Object getHeader(final String name)
+ {
+ return makeImmutable(messageHeader.getHeader(name));
+ }
+
+ @Override
+ public boolean containsHeaders(final Set<String> names)
+ {
+ return messageHeader.containsHeaders(names);
+ }
+
+ @Override
+ public boolean containsHeader(final String name)
+ {
+ return messageHeader.containsHeader(name);
+ }
+
+ @Override
+ public Collection<String> getHeaderNames()
+ {
+ return Collections.unmodifiableCollection(messageHeader.getHeaderNames());
+ }
+ };
+ }
+
+ private static Object makeImmutable(final Object value)
+ {
+ if(value == null || IMMUTABLE_CLASSES.contains(value.getClass()))
+ {
+ return value;
+ }
+ else if(value instanceof byte[])
+ {
+ return ByteBuffer.wrap((byte[])value).asReadOnlyBuffer();
+ }
+ else if(value instanceof List)
+ {
+ List orig = (List) value;
+ List<Object> copy = new ArrayList<>(orig.size());
+ for(Object element : orig)
+ {
+ copy.add(makeImmutable(element));
+ }
+ return copy;
+ }
+ else if(value instanceof Map)
+ {
+ Map<?,?> orig = (Map<?,?>) value;
+ LinkedHashMap<Object,Object> copy = new LinkedHashMap<>();
+ for(Map.Entry<?,?> entry : orig.entrySet())
+ {
+ copy.put(makeImmutable(entry.getKey()),makeImmutable(entry.getValue()));
+ }
+ return copy;
+ }
+ else return null;
+ }
+
+ private final QueueReport<T> _report;
+
+ public final T runReport(Queue<?> queue)
+ {
+ _report.setQueue(queue);
+ ReportVisitor visitor = new ReportVisitor(_report);
+ queue.visit(visitor);
+ return _report.getReport();
+ }
+}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/ReportableMessage.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/ReportableMessage.java
new file mode 100644
index 0000000000..00b6c4abeb
--- /dev/null
+++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/ReportableMessage.java
@@ -0,0 +1,42 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.management.plugin.report;
+
+import java.nio.ByteBuffer;
+
+public interface ReportableMessage
+{
+ String getInitialRoutingAddress();
+
+ ReportableMessageHeader getMessageHeader();
+
+ public ByteBuffer getContent();
+
+ boolean isPersistent();
+
+ long getSize();
+
+ long getExpiration();
+
+ long getMessageNumber();
+
+ long getArrivalTime();
+}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/ReportableMessageHeader.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/ReportableMessageHeader.java
new file mode 100644
index 0000000000..e78415f8d0
--- /dev/null
+++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/report/ReportableMessageHeader.java
@@ -0,0 +1,58 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.management.plugin.report;
+
+import java.util.Collection;
+import java.util.Set;
+
+public interface ReportableMessageHeader
+{
+ String getCorrelationId();
+
+ long getExpiration();
+
+ String getUserId();
+
+ String getAppId();
+
+ String getMessageId();
+
+ String getMimeType();
+
+ String getEncoding();
+
+ byte getPriority();
+
+ long getTimestamp();
+
+ String getType();
+
+ String getReplyTo();
+
+ Object getHeader(String name);
+
+ boolean containsHeaders(Set<String> names);
+
+ boolean containsHeader(String name);
+
+ Collection<String> getHeaderNames();
+
+}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java
index 331b50ea7c..0f1b7d03e9 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java
+++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java
@@ -162,14 +162,14 @@ public class ConfiguredObjectToMapConverter
.getAttributeTypes(confObject.getClass())
.get(name);
- if (attribute.isSecure() && !(isSecureTransport && extractAsConfig))
+ if (attribute.isSecureValue(value) && !(isSecureTransport && extractAsConfig))
{
// do not expose actual secure attribute value
// getAttribute() returns encoded value
value = confObject.getAttribute(name);
}
- if(attribute.isOversized() && !extractAsConfig)
+ if(attribute.isOversized() && !extractAsConfig && !useActualValues)
{
String valueString = String.valueOf(value);
if(valueString.length() > oversizeThreshold)
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueueReportServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueueReportServlet.java
new file mode 100644
index 0000000000..2b3def2dab
--- /dev/null
+++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/QueueReportServlet.java
@@ -0,0 +1,103 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.management.plugin.servlet.rest;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.qpid.server.management.plugin.report.ReportRunner;
+import org.apache.qpid.server.model.Queue;
+import org.apache.qpid.server.model.VirtualHost;
+
+public class QueueReportServlet extends AbstractServlet
+{
+ @Override
+ protected void doGetWithSubjectAndActor(HttpServletRequest request, HttpServletResponse response) throws
+ IOException,
+ ServletException
+ {
+ String[] pathInfoElements = getPathInfoElements(request);
+ if(pathInfoElements != null && pathInfoElements.length == 3)
+ {
+ Queue<?> queue = getQueueFromRequest(request);
+ ReportRunner<?> reportRunner = ReportRunner.createRunner(pathInfoElements[2],request.getParameterMap());
+ Object output = reportRunner.runReport(queue);
+ response.setContentType(reportRunner.getContentType());
+ if(reportRunner.isBinaryReport())
+ {
+ response.getOutputStream().write((byte[])output);
+ }
+ else
+ {
+ response.getWriter().write((String)output);
+ }
+ }
+ else
+ {
+ throw new IllegalArgumentException("Invalid path is specified");
+ }
+
+ }
+
+ private Queue<?> getQueueFromRequest(HttpServletRequest request)
+ {
+ String[] pathInfoElements = getPathInfoElements(request);
+ if(pathInfoElements == null || pathInfoElements.length < 2)
+ {
+ throw new IllegalArgumentException("Invalid path is specified");
+ }
+ String vhostName = pathInfoElements[0];
+ String queueName = pathInfoElements[1];
+
+ VirtualHost<?,?,?> vhost = getBroker().findVirtualHostByName(vhostName);
+ if (vhost == null)
+ {
+ throw new IllegalArgumentException("Could not find virtual host with name '" + vhostName + "'");
+ }
+
+ Queue queueFromVirtualHost = getQueueFromVirtualHost(queueName, vhost);
+ if (queueFromVirtualHost == null)
+ {
+ throw new IllegalArgumentException("Could not find queue with name '" + queueName + "' on virtual host '" + vhost.getName() + "'");
+ }
+ return queueFromVirtualHost;
+ }
+
+ private Queue getQueueFromVirtualHost(String queueName, VirtualHost<?,?,?> vhost)
+ {
+ Queue queue = null;
+
+ for(Queue<?> q : vhost.getQueues())
+ {
+
+ if(q.getName().equals(queueName))
+ {
+ queue = q;
+ break;
+ }
+ }
+ return queue;
+ }
+
+}
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 b787e701ec..10b79987a5 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
@@ -159,6 +159,23 @@
</div>
</div>
+ <div id="formAddPort:maxOpenConnections" >
+ <div class="clear">
+ <div class="formLabel-labelCell">
+ <label for="formAddPort.transports">Maximum number of connections:</label>
+ </div>
+ <div class="formLabel-controlCell">
+ <input id="formAddPort.maxOpenConnections" type="text"
+ data-dojo-type="dijit.form.ValidationTextBox"
+ data-dojo-props="
+ name: 'maxOpenConnections',
+ placeHolder: 'maximum number of connections',
+ promptMessage: 'Maximum number of concurrent connections permitted by this port. The <code>-1</code> signifies no limit is imposed.',
+ title: 'Enter a maximum number of connections'"/>
+ </div>
+ </div>
+ </div>
+
<div id="formAddPort:fieldsTransportSSL">
<div class="clear">
<div class="formLabel-labelCell">
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html
index cee18f7185..59597845a2 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html
@@ -19,31 +19,34 @@
<div class="dijitHidden">
<div data-dojo-type="dijit/Dialog" data-dojo-props="title:'Edit Virtual Host'" id="editVirtualHostNodeDialog">
<form id="editVirtualHostNodeForm" method="post" data-dojo-type="dijit/form/Form">
- <div id="editVirtualHostNode.contentPane">
- <div class="editNoteBanner">NOTE: All changes will only take effect after Virtual Host Node restart.</div>
- <div class="clear">
- <div class="formLabel-labelCell tableContainer-labelCell">Name*:</div>
- <div class="formLabel-controlCell tableContainer-valueCell">
- <input type="text" id="editVirtualHostNode.name"
- data-dojo-type="dijit/form/ValidationTextBox"
- data-dojo-props="
+ <div id="editVirtualHostNode.allFields">
+ <div id="editVirtualHostNode.contentPane">
+ <div class="editNoteBanner">NOTE: All changes will only take effect after Virtual Host Node restart.</div>
+ <div class="clear">
+ <div class="formLabel-labelCell tableContainer-labelCell">Name*:</div>
+ <div class="formLabel-controlCell tableContainer-valueCell">
+ <input type="text" id="editVirtualHostNode.name"
+ data-dojo-type="dijit/form/ValidationTextBox"
+ data-dojo-props="
name: 'name',
placeHolder: 'name',
required: true,
missingMessage: 'Name must be supplied',
disabled: true,
title: 'Enter virtual host name'" />
- </div>
- </div>
+ </div>
+ </div>
- <div id="editVirtualHostNode.typeFields"></div>
+ <div id="editVirtualHostNode.typeFields"></div>
- <div class="clear"></div>
+ <div class="clear"></div>
- <div data-dojo-type="dijit/TitlePane" data-dojo-props="title: 'Context variables', open: false">
- <div id="editVirtualHostNode.context" ></div>
+ <div data-dojo-type="dijit/TitlePane" data-dojo-props="title: 'Context variables', open: false">
+ <div id="editVirtualHostNode.context" ></div>
+ </div>
+ </div>
</div>
- </div>
+
<div class="dijitDialogPaneActionBar qpidDialogPaneActionBar">
<button data-dojo-type="dijit/form/Button" id="editVirtualHostNode.saveButton" data-dojo-props="label: 'Save'">Save</button>
<button data-dojo-type="dijit/form/Button" id="editVirtualHostNode.cancelButton" data-dojo-props="label: 'Cancel'" ></button>
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js
index f603c96ff3..bee38149da 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js
@@ -44,6 +44,7 @@ function (declare, array, lang, util, _WidgetBase, _TemplatedMixin, _WidgetsInTe
fileReaderSupported: window.FileReader ? true : false,
displayWarningWhenFileReaderUnsupported: false,
isDebug: false,
+ uploaded: false,
buildRendering: function()
{
@@ -74,7 +75,7 @@ function (declare, array, lang, util, _WidgetBase, _TemplatedMixin, _WidgetsInTe
{
// Fall back for IE8/9 which do not support FileReader
this.uploadFields.style.display = "none";
- if (displayWarningWhenFileReaderUnsupported)
+ if (this.displayWarningWhenFileReaderUnsupported)
{
this.unsupportedWarning.className = this.unsupportedWarning.className.replace("hidden", "");
}
@@ -127,6 +128,7 @@ function (declare, array, lang, util, _WidgetBase, _TemplatedMixin, _WidgetsInTe
},
_fileClearButtonClicked: function(event)
{
+ this.uploaded = false;
this.uploader.reset();
this.set("value", this._resetValue);
},
@@ -134,20 +136,17 @@ function (declare, array, lang, util, _WidgetBase, _TemplatedMixin, _WidgetsInTe
{
var serverPathValue = this.resourceLocation.get("value") || this._resetValue;
this.set("value", serverPathValue);
+ if (this.uploaded )
+ {
+ this.uploaded = !serverPathValue;
+ }
},
_setValueAttr: function(newValue, priorityChange)
{
- var isDataUrl = newValue && newValue.indexOf("data:") == 0;
+ var isDataUrl = this.uploaded || ( newValue && newValue.indexOf("data:") == 0 );
if (isDataUrl)
{
- this.uploadData.style.display = "block";
- this.selectedFileStatus.className = "loadedIcon";
- this.selectedFile.innerHTML = this.selectedFileName || "uploaded data";
- this.resourceLocation.set("value", "");
- this.resourceLocation.setDisabled(true);
- this.resourceLocation.set("required", false);
- this.clearButton.setDisabled(false);
- this.selectedFileStatus.className = "loadedIcon";
+ this._initUploaded(true);
}
else
{
@@ -172,6 +171,25 @@ function (declare, array, lang, util, _WidgetBase, _TemplatedMixin, _WidgetsInTe
_setPlaceHolderAttr: function(newValue)
{
this.resourceLocation.set("placeHolder", newValue);
+ },
+ _setUploadedAttr: function(uploaded)
+ {
+ this.uploaded = uploaded;
+ this._initUploaded(uploaded);
+ },
+ _initUploaded: function(uploaded)
+ {
+ if (uploaded)
+ {
+ this.uploadData.style.display = "block";
+ this.selectedFileStatus.className = "loadedIcon";
+ this.selectedFile.innerHTML = this.selectedFileName || "uploaded data";
+ this.resourceLocation.set("value", "");
+ this.resourceLocation.setDisabled(true);
+ this.resourceLocation.set("required", false);
+ this.clearButton.setDisabled(false);
+ this.selectedFileStatus.className = "loadedIcon";
+ }
}
}
);
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/ColumnDefDialog.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/ColumnDefDialog.js
index d285dfaad6..a0b62082cb 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/ColumnDefDialog.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/ColumnDefDialog.js
@@ -45,10 +45,15 @@ return declare("qpid.common.grid.ColumnDefDialog", null, {
constructor: function(args){
var grid = this.grid = args.grid;
-
+ var that = this;
this.containerNode = dom.create("div", {innerHTML: template});
- parser.parse(this.containerNode);
-
+ parser.parse(this.containerNode).then(function(instances)
+ {
+ that._postParse();
+ });
+ },
+ _postParse: function()
+ {
var submitButton = registry.byNode(query(".displayButton", this.containerNode)[0]);
this.closeButton = registry.byNode(query(".cancelButton", this.containerNode)[0]);
var columnsContainer = query(".columnList", this.containerNode)[0];
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/RowNumberLimitDialog.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/RowNumberLimitDialog.js
index db3ae5a2ea..e78670bf57 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/RowNumberLimitDialog.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/grid/RowNumberLimitDialog.js
@@ -41,11 +41,17 @@ return declare("qpid.management.logs.RowNumberLimitDialog", null, {
grid: null,
dialog: null,
- constructor: function(domNode, limitChangedCallback){
-
+ constructor: function(domNode, limitChangedCallback)
+ {
+ var that = this;
this.containerNode = dom.create("div", {innerHTML: template});
- parser.parse(this.containerNode);
-
+ parser.parse(this.containerNode).then(function(instances)
+ {
+ that._postParse(domNode, limitChangedCallback);
+ });
+ },
+ _postParse: function(domNode, limitChangedCallback)
+ {
this.rowNumberLimit = registry.byNode(query(".rowNumberLimit", this.containerNode)[0])
this.submitButton = registry.byNode(query(".submitButton", this.containerNode)[0]);
this.closeButton = registry.byNode(query(".cancelButton", this.containerNode)[0]);
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 60be40b62b..746eb4bbbc 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
@@ -528,40 +528,41 @@ define(["dojo/_base/xhr",
return object1 === object2;
}
- util.parseHtmlIntoDiv = function(containerNode, htmlTemplateLocation)
+ util.parseHtmlIntoDiv = function(containerNode, htmlTemplateLocation, postParseCallback)
{
xhr.get({url: htmlTemplateLocation,
sync: true,
load: function(template) {
containerNode.innerHTML = template;
- parser.parse(containerNode);
+ parser.parse(containerNode).then(function(instances)
+ {
+ if (postParseCallback && typeof postParseCallback == "function")
+ {
+ postParseCallback();
+ }
+ });
}});
}
- util.buildUI = function(containerNode, parent, htmlTemplateLocation, fieldNames, obj)
+ util.buildUI = function(containerNode, parent, htmlTemplateLocation, fieldNames, obj, postParseCallback)
{
- this.parseHtmlIntoDiv(containerNode, htmlTemplateLocation);
- if (fieldNames && obj)
- {
- for(var i=0; i<fieldNames.length;i++)
+ this.parseHtmlIntoDiv(containerNode, htmlTemplateLocation,
+ function()
+ {
+ if (fieldNames && obj)
{
- var fieldName = fieldNames[i];
- obj[fieldName]= query("." + fieldName, containerNode)[0];
+ for(var i=0; i<fieldNames.length;i++)
+ {
+ var fieldName = fieldNames[i];
+ obj[fieldName]= query("." + fieldName, containerNode)[0];
+ }
}
- }
- }
- util.buildEditUI = function(containerNode, htmlTemplateLocation, fieldNamePrefix, fieldNames, data)
- {
- this.parseHtmlIntoDiv(containerNode, htmlTemplateLocation);
- if (fieldNames)
- {
- for(var i = 0; i < fieldNames.length; i++)
- {
- var fieldName = fieldNames[i];
- var widget = registry.byId(fieldNamePrefix + fieldName);
- widget.set("value", data[fieldName]);
- }
- }
+ if (postParseCallback && typeof postParseCallback == "function")
+ {
+ postParseCallback();
+ }
+ });
+
}
util.updateUI = function(data, fieldNames, obj)
@@ -736,6 +737,11 @@ define(["dojo/_base/xhr",
return "^(\\d+)|" + singleContextVarRegexp + "$";
}
+ util.signedOrContextVarRegexp = function(constraints)
+ {
+ return "^(-?\\d+)|" + singleContextVarRegexp + "$";
+ }
+
util.nameOrContextVarRegexp = function(constraints)
{
return "^(\\w+)|" + singleContextVarRegexp + "$";
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AccessControlProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AccessControlProvider.js
index 1d4cc1447b..cf95a23819 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AccessControlProvider.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AccessControlProvider.js
@@ -52,17 +52,19 @@ define(["dojo/_base/xhr",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
- parser.parse(contentPane.containerNode);
+ parser.parse(contentPane.containerNode).then(function(instances)
+ {
- that.accessControlProviderUpdater = new AccessControlProviderUpdater(contentPane.containerNode, that.modelObj, that.controller);
+ that.accessControlProviderUpdater = new AccessControlProviderUpdater(contentPane.containerNode, that.modelObj, that.controller);
- var deleteButton = query(".deleteAccessControlProviderButton", contentPane.containerNode)[0];
- var deleteWidget = registry.byNode(deleteButton);
- connect.connect(deleteWidget, "onClick",
+ var deleteButton = query(".deleteAccessControlProviderButton", contentPane.containerNode)[0];
+ var deleteWidget = registry.byNode(deleteButton);
+ connect.connect(deleteWidget, "onClick",
function(evt){
event.stop(evt);
that.deleteAccessControlProvider();
});
+ });
}});
};
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js
index 8545d2da75..cf9c32496a 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js
@@ -56,7 +56,8 @@ define(["dojo/_base/xhr",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
- parser.parse(contentPane.containerNode);
+ parser.parse(contentPane.containerNode).then(function(instances)
+ {
var authProviderUpdater = new AuthProviderUpdater(contentPane.containerNode, that.modelObj, that.controller, that);
that.authProviderUpdater = authProviderUpdater;
@@ -97,6 +98,7 @@ define(["dojo/_base/xhr",
}
updater.add( that.authProviderUpdater );
+ });
}});
};
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 a0a2e8324f..9720bc988b 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
@@ -82,14 +82,10 @@ define(["dojo/_base/xhr",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
- parser.parse(contentPane.containerNode);
-
+ parser.parse(contentPane.containerNode).then(function(instances)
+ {
that.brokerUpdater = new BrokerUpdater(contentPane.containerNode, that.modelObj, that.controller);
- updater.add( that.brokerUpdater );
-
- that.brokerUpdater.update();
-
var logViewerButton = query(".logViewer", contentPane.containerNode)[0];
registry.byNode(logViewerButton).on("click", function(evt){
that.controller.show("logViewer", "");
@@ -233,6 +229,7 @@ define(["dojo/_base/xhr",
"Are you sure you want to delete access control provider");
}
);
+ });
}});
};
@@ -554,6 +551,9 @@ define(["dojo/_base/xhr",
});
}, gridProperties, EnhancedGrid);
that.displayACLWarnMessage(aclData);
+
+ updater.add( that);
+
});
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Connection.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Connection.js
index 34d9a9b2de..bbb4dc8322 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Connection.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Connection.js
@@ -50,14 +50,12 @@ define(["dojo/_base/xhr",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
- parser.parse(contentPane.containerNode);
-
- that.connectionUpdater = new ConnectionUpdater(contentPane.containerNode, that.modelObj, that.controller);
-
- updater.add( that.connectionUpdater );
-
- that.connectionUpdater.update();
-
+ parser.parse(contentPane.containerNode).then(function(instances)
+ {
+ that.connectionUpdater = new ConnectionUpdater(contentPane.containerNode, that.modelObj, that.controller);
+ updater.add( that.connectionUpdater );
+ that.connectionUpdater.update();
+ });
}});
};
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Exchange.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Exchange.js
index 2ac881abc1..1f1b8361a2 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Exchange.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Exchange.js
@@ -69,7 +69,8 @@ define(["dojo/_base/xhr",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
- parser.parse(contentPane.containerNode);
+ parser.parse(contentPane.containerNode).then(function(instances)
+ {
that.exchangeUpdater = new ExchangeUpdater(contentPane.containerNode, that.modelObj, that.controller);
@@ -106,7 +107,7 @@ define(["dojo/_base/xhr",
that.deleteExchange();
});
}
-
+ });
}});
};
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js
index f739e52665..9b32d0e6b2 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js
@@ -56,8 +56,13 @@ define(["dojo/_base/xhr",
var that = this;
this.contentPane = contentPane;
contentPane.containerNode.innerHTML = template;
- parser.parse(contentPane.containerNode);
+ parser.parse(contentPane.containerNode).then(function(instances) { that.onOpen(); });
+ };
+ GroupProvider.prototype.onOpen = function()
+ {
+ var that = this;
+ var contentPane = this.contentPane;
this.groupProviderUpdater = new GroupProviderUpdater(contentPane.containerNode, this.modelObj, this.controller);
// load data
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/KeyStore.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/KeyStore.js
index 0f23053c2d..dfcb712740 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/KeyStore.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/KeyStore.js
@@ -51,7 +51,8 @@ define(["dojo/dom",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
- parser.parse(contentPane.containerNode);
+ parser.parse(contentPane.containerNode).then(function(instances)
+ {
that.keyStoreUpdater = new KeyStoreUpdater(contentPane.containerNode, that.modelObj, that.controller, that.url);
that.keyStoreUpdater.update();
@@ -75,6 +76,7 @@ define(["dojo/dom",
addStore.show(data[0], that.url);
});
});
+ });
}});
};
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Plugin.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Plugin.js
index 47f6cffe5a..300754ed8c 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Plugin.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Plugin.js
@@ -48,9 +48,10 @@ define(["dojo/_base/xhr",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
- parser.parse(contentPane.containerNode);
-
- that.pluginUpdater = new PluginUpdater(contentPane.containerNode, that.modelObj, that.controller);
+ parser.parse(contentPane.containerNode).then(function(instances)
+ {
+ that.pluginUpdater = new PluginUpdater(contentPane.containerNode, that.modelObj, that.controller);
+ });
}});
};
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 1bf41ec730..91407c0e83 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
@@ -51,8 +51,8 @@ define(["dojo/dom",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
- parser.parse(contentPane.containerNode);
-
+ parser.parse(contentPane.containerNode).then(function(instances)
+ {
that.portUpdater = new PortUpdater(contentPane.containerNode, that.modelObj, that.controller, "api/latest/port/" + encodeURIComponent(that.name));
updater.add( that.portUpdater );
@@ -72,6 +72,7 @@ define(["dojo/dom",
function(evt){
that.showEditDialog();
});
+ });
}});
};
@@ -137,12 +138,15 @@ define(["dojo/dom",
"needClientAuthValue",
"wantClientAuthValue",
"trustStoresValue",
+ "connectionCountValue",
+ "maxOpenConnectionsValue",
"authenticationProvider",
"bindingAddress",
"keyStore",
"needClientAuth",
"wantClientAuth",
- "trustStores"
+ "trustStores",
+ "maxOpenConnections"
]);
this.query = url;
@@ -150,6 +154,7 @@ define(["dojo/dom",
xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}).then(function(data)
{
that.portData = data[0];
+ util.flattenStatistics( that.portData );
that.updateHeader();
});
@@ -177,6 +182,9 @@ define(["dojo/dom",
this.protocolsValue.innerHTML = printArray( "protocols", this.portData);
this.transportsValue.innerHTML = printArray( "transports", this.portData);
this.bindingAddressValue.innerHTML = this.portData[ "bindingAddress" ] ? entities.encode(String(this.portData[ "bindingAddress" ])) : "" ;
+ this.connectionCountValue.innerHTML = this.portData[ "connectionCount" ] ? entities.encode(String(this.portData[ "connectionCount" ])) : "0" ;
+ this.maxOpenConnectionsValue.innerHTML = (this.portData[ "maxOpenConnections" ] && this.portData[ "maxOpenConnections" ] >= 0) ? entities.encode(String(this.portData[ "maxOpenConnections" ])) : "(no limit)" ;
+
this.keyStoreValue.innerHTML = this.portData[ "keyStore" ] ? entities.encode(String(this.portData[ "keyStore" ])) : "";
this.needClientAuthValue.innerHTML = "<input type='checkbox' disabled='disabled' "+(this.portData[ "needClientAuth" ] ? "checked='checked'": "")+" />" ;
this.wantClientAuthValue.innerHTML = "<input type='checkbox' disabled='disabled' "+(this.portData[ "wantClientAuth" ] ? "checked='checked'": "")+" />" ;
@@ -190,6 +198,9 @@ define(["dojo/dom",
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";
+
+ this.maxOpenConnections.style.display = "maxOpenConnections" in typeMetaData.attributes ? "block" : "none";
+
};
PortUpdater.prototype.update = function()
@@ -200,6 +211,7 @@ define(["dojo/dom",
xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}).then(function(data)
{
thisObj.portData = data[0];
+ util.flattenStatistics( thisObj.portData );
thisObj.updateHeader();
});
};
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Preferences.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Preferences.js
index f9982a1699..c8e1d17e06 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Preferences.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Preferences.js
@@ -65,8 +65,15 @@ function (declare, xhr, event, connect, dom, domConstruct, parser, json, Memory,
this.userPreferences = {};
this.domNode = domConstruct.create("div", {innerHTML: markup});
- this.preferencesDialog = parser.parse(this.domNode)[0];
-
+ parser.parse(this.domNode).then(function(instances)
+ {
+ that._postParse();
+ });
+ },
+ _postParse: function()
+ {
+ var that = this;
+ this.preferencesDialog = registry.byId("preferences.preferencesDialog");
for(var i=0; i<preferenceNames.length; i++)
{
var name = preferenceNames[i];
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/PreferencesProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/PreferencesProvider.js
index 0d40669823..c145ba0d34 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/PreferencesProvider.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/PreferencesProvider.js
@@ -51,8 +51,8 @@ define(["dojo/_base/xhr",
sync: true,
load: function(data) {
node.innerHTML = data;
- parser.parse(node);
-
+ parser.parse(node).then(function(instances)
+ {
that.containerNode = node;
that.parentObject = parentObject;
that.preferencesProviderType=query(".preferencesProviderType", node)[0];
@@ -65,6 +65,7 @@ define(["dojo/_base/xhr",
editPreferencesProviderWidget.on("click", function(evt){ event.stop(evt); that.editPreferencesProvider();});
var deletePreferencesProviderWidget = registry.byNode(that.deletePreferencesProviderButton);
deletePreferencesProviderWidget.on("click", function(evt){ event.stop(evt); that.deletePreferencesProvider();});
+ });
}});
};
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
index 5b441a7b2f..55d0df1241 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
@@ -79,7 +79,8 @@ define(["dojo/_base/xhr",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
- parser.parse(contentPane.containerNode);
+ parser.parse(contentPane.containerNode).then(function(instances)
+ {
that.queueUpdater = new QueueUpdater(contentPane.containerNode, that, that.controller);
@@ -180,6 +181,8 @@ define(["dojo/_base/xhr",
editQueue.show({nodeName:that.modelObj.parent.parent.name, hostName:that.modelObj.parent.name,queueName:that.name});
});
UserPreferences.addListener(that);
+
+ });
}});
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/TrustStore.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/TrustStore.js
index 82e2b204f9..fa6b63212e 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/TrustStore.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/TrustStore.js
@@ -51,7 +51,8 @@ define(["dojo/dom",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
- parser.parse(contentPane.containerNode);
+ parser.parse(contentPane.containerNode).then(function(instances)
+ {
that.keyStoreUpdater = new KeyStoreUpdater(contentPane.containerNode, that.modelObj, that.controller, that.url);
that.keyStoreUpdater.update();
@@ -75,6 +76,7 @@ define(["dojo/dom",
addStore.show(data[0], that.url);
});
});
+ });
}});
};
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js
index 434e119736..e4482cc39e 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js
@@ -55,8 +55,8 @@ define(["dojo/_base/xhr",
load: function(data) {
var containerNode = contentPane.containerNode;
containerNode.innerHTML = data;
- parser.parse(containerNode);
-
+ parser.parse(containerNode).then(function(instances)
+ {
that.vhostUpdater = new Updater(containerNode, that.modelObj, that.controller, that);
var addQueueButton = query(".addQueueButton", containerNode)[0];
@@ -149,6 +149,7 @@ define(["dojo/_base/xhr",
that.vhostUpdater.update();
updater.add( that.vhostUpdater );
+ });
}});
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js
index 76eaadad18..837ff04c78 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHostNode.js
@@ -56,8 +56,10 @@ define(["dojo/_base/xhr",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
- parser.parse(contentPane.containerNode);
- that.onOpen(contentPane.containerNode)
+ parser.parse(contentPane.containerNode).then(function(instances)
+ {
+ that.onOpen(contentPane.containerNode)
+ });
}});
};
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/accesscontrolprovider/AclFile.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/accesscontrolprovider/AclFile.js
index 12c8677c11..e8250217c6 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/accesscontrolprovider/AclFile.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/accesscontrolprovider/AclFile.js
@@ -53,14 +53,14 @@ define(["dojo/_base/xhr",
sync: true,
load: function(data) {
node.innerHTML = data;
- parser.parse(node);
-
+ parser.parse(node).then(function(instances)
+ {
that.groupDatabaseUpdater= new AclFileUpdater(node, aclProviderObj, controller);
updater.add( that.groupDatabaseUpdater);
that.groupDatabaseUpdater.update();
-
+ });
}});
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/accesscontrolprovider/aclfile/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/accesscontrolprovider/aclfile/add.js
index e42dafb3c3..2c25149091 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/accesscontrolprovider/aclfile/add.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/accesscontrolprovider/aclfile/add.js
@@ -31,8 +31,11 @@ define(["dojo/dom","dojo/query","dijit/registry","qpid/common/util"],
show: function(data)
{
var that=this;
- util.parseHtmlIntoDiv(data.containerNode, "accesscontrolprovider/aclfile/add.html");
-
+ util.parseHtmlIntoDiv(data.containerNode, "accesscontrolprovider/aclfile/add.html", function(){that._postParse(data);});
+ },
+ _postParse: function(data)
+ {
+ var that=this;
this.aclServerPath = registry.byId("addAccessControlProvider.serverPath");
this.aclUploadFields = dom.byId("addAccessControlProvider.uploadFields");
this.aclSelectedFileContainer = dom.byId("addAccessControlProvider.selectedFile");
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js
index 38a6c8e841..83bf23f669 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js
@@ -53,8 +53,11 @@ define(["dojo/_base/lang",
{
var that=this;
this.containerNode = construct.create("div", {innerHTML: template});
- parser.parse(this.containerNode);
-
+ parser.parse(this.containerNode).then(function(instances){ that._postParse(); });
+ },
+ _postParse: function()
+ {
+ var that=this;
this.accessControlProviderName = registry.byId("addAccessControlProvider.name");
this.accessControlProviderName.set("regExpGen", util.nameOrContextVarRegexp);
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js
index 17b7edcec9..ccae89d6c1 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js
@@ -56,8 +56,11 @@ define(["dojo/_base/xhr",
{
var that=this;
this.containerNode = construct.create("div", {innerHTML: template});
- parser.parse(this.containerNode);
-
+ parser.parse(this.containerNode).then(function(instances) { that._postParse(); });
+ },
+ _postParse: function()
+ {
+ var that = this;
this.authenticationProviderName = registry.byId("addAuthenticationProvider.name");
this.authenticationProviderName.set("regExpGen", util.nameOrContextVarRegexp);
this.authenticationProviderName.on("change", function(newValue){that.preferencesProviderForm.preferencesProviderNameWidget.set("value",newValue);});
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js
index f158b8ceb6..81ce40ebe9 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js
@@ -53,8 +53,11 @@ define([
{
var that=this;
this.containerNode = construct.create("div", {innerHTML: template});
- parser.parse(this.containerNode);
-
+ parser.parse(this.containerNode).then(function(instances) { that._postParse(); });
+ },
+ _postParse: function()
+ {
+ var that=this;
this.groupProviderName = registry.byId("addGroupProvider.name");
this.groupProviderName.set("regExpGen", util.nameOrContextVarRegexp);
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 43ccdfff70..befb5df9c1 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
@@ -79,6 +79,10 @@ define(["dojo/_base/xhr",
registry.byId("formAddPort.bindingAddress").set("disabled", ! ("bindingAddress" in typeMetaData.attributes));
dom.byId("formAddPort:fieldsBindingAddress").style.display = "bindingAddress" in typeMetaData.attributes ? "block" : "none";
+ //maxOpenConnections
+ registry.byId("formAddPort.maxOpenConnections").set("disabled", ! ("maxOpenConnections" in typeMetaData.attributes));
+ dom.byId("formAddPort:maxOpenConnections").style.display = "maxOpenConnections" in typeMetaData.attributes ? "block" : "none";
+
//transports
var transportsMultiSelect = dom.byId("formAddPort.transports");
var transportsValidValues = typeMetaData.attributes.transports.validValues;
@@ -314,6 +318,7 @@ define(["dojo/_base/xhr",
var nameWidget = registry.byId("formAddPort.name");
var typeWidget = registry.byId("formAddPort.type");
var portWidget = registry.byId("formAddPort.port");
+ var maxOpenConnectionsWidget = registry.byId("formAddPort.maxOpenConnections");
var editWarning = dojo.byId("portEditWarning");
var providerWidget = registry.byId("formAddPort.authenticationProvider");
@@ -418,6 +423,13 @@ define(["dojo/_base/xhr",
bindAddressWidget.set("disabled", ! ("bindingAddress" in typeMetaData.attributes));
dom.byId("formAddPort:fieldsBindingAddress").style.display = "bindingAddress" in typeMetaData.attributes ? "block" : "none";
+ //maxOpenConnections
+ var maxOpenConnectionsWidget = registry.byId("formAddPort.maxOpenConnections");
+ maxOpenConnectionsWidget.set("regExpGen", util.signedOrContextVarRegexp);
+ maxOpenConnectionsWidget.set("value", port.maxOpenConnections ? port.maxOpenConnections : "");
+ maxOpenConnectionsWidget.set("disabled", ! ("maxOpenConnections" in typeMetaData.attributes));
+ dom.byId("formAddPort:maxOpenConnections").style.display = "maxOpenConnections" in typeMetaData.attributes ? "block" : "none";
+
//ssl
keystoreWidget.set("value", port.keyStore ? port.keyStore : "");
if (port.trustStores)
@@ -447,6 +459,7 @@ define(["dojo/_base/xhr",
truststoreWidget.initialValue = port.trustStores;
transportWidget.initialValue = transportWidget.value;
providerWidget.initialValue = providerWidget.value;
+ maxOpenConnectionsWidget.initialValue = maxOpenConnectionsWidget.value;
registry.byId("addPort").show();
util.applyMetadataToWidgets(registry.byId("addPort").domNode, "Port", portType);
@@ -465,8 +478,8 @@ define(["dojo/_base/xhr",
nameWidget.set("disabled", false);
nameWidget.set("regExpGen", util.nameOrContextVarRegexp);
-
portWidget.set("regExpGen", util.numericOrContextVarRegexp);
+ maxOpenConnectionsWidget.set("regExpGen", util.signedOrContextVarRegexp);
editWarning.style.display = "none";
registry.byId("addPort").show();
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPreferencesProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPreferencesProvider.js
index 072b202b23..2136318dfb 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPreferencesProvider.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPreferencesProvider.js
@@ -40,8 +40,11 @@ define([
{
var that=this;
this.containerNode = construct.create("div", {innerHTML: template});
- parser.parse(this.containerNode);
-
+ parser.parse(this.containerNode).then(function(instances) { that._postParse(); });
+ },
+ _postParse: function()
+ {
+ var that=this;
this.preferencesProviderForm = registry.byId("addPreferencesProvider.preferencesProvider");
this.dialog = registry.byId("addPreferencesProvider");
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js
index 5a42f12870..caf14d0cc8 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js
@@ -53,8 +53,11 @@ define(["dojo/_base/lang",
{
var that=this;
this.containerNode = construct.create("div", {innerHTML: template});
- parser.parse(this.containerNode);
-
+ parser.parse(this.containerNode).then(function(instances) { that._postParse(); });
+ },
+ _postParse: function()
+ {
+ var that=this;
this.storeName = registry.byId("addStore.name");
this.storeName.set("regExpGen", util.nameOrContextVarRegexp);
@@ -81,11 +84,11 @@ define(["dojo/_base/lang",
show: function(effectiveData)
{
this.effectiveData = effectiveData;
+ this._destroyTypeFields(this.containerNode);
this.storeForm.reset();
if (effectiveData)
{
- this._destroyTypeFields(this.containerNode);
this._initFields(effectiveData);
}
this.storeName.set("disabled", effectiveData == null ? false : true);
@@ -185,11 +188,6 @@ define(["dojo/_base/lang",
{
typeUI.show({containerNode:typeFieldsContainer, parent: that, data: that.initialData, effectiveData: that.effectiveData});
util.applyMetadataToWidgets(typeFieldsContainer, category, type);
- if (that.effectiveData)
- {
- typeUI.update(that.effectiveData);
- that.effectiveData = undefined;
- }
}
catch(e)
{
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js
index f379361a09..21927ea0e5 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js
@@ -57,8 +57,11 @@ define(["dojo/_base/xhr",
{
var that=this;
this.containerNode = domConstruct.create("div", {innerHTML: template});
- parser.parse(this.containerNode);
-
+ parser.parse(this.containerNode).then(function(instances) { that._postParse(); });
+ },
+ _postParse: function()
+ {
+ var that=this;
var virtualHostNodeName = registry.byId("addVirtualHostNode.nodeName");
virtualHostNodeName.set("regExpGen", util.nameOrContextVarRegexp);
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js
index 96083843fa..e6f2249f65 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js
@@ -51,8 +51,10 @@ define(["dojo/_base/xhr",
sync: true,
load: function(data) {
node.innerHTML = data;
- parser.parse(node);
- that.init(node, authProviderObj, controller);
+ parser.parse(node).then(function(instances)
+ {
+ that.init(node, authProviderObj, controller);
+ });
}});
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/base64md5passwordfile/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/base64md5passwordfile/add.js
index a593b14fd6..cbc5ce356d 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/base64md5passwordfile/add.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/base64md5passwordfile/add.js
@@ -24,12 +24,15 @@ define(["dojo/query","dijit/registry","qpid/common/util"],
return {
show: function(data)
{
- util.parseHtmlIntoDiv(data.containerNode, "authenticationprovider/filebased/add.html");
- if (data.data)
+ util.parseHtmlIntoDiv(data.containerNode, "authenticationprovider/filebased/add.html",
+ function()
{
- var path = registry.byNode(query(".path", data.containerNode)[0]);
- path.set("value", data.data.path);
- }
+ if (data.data)
+ {
+ var path = registry.byNode(query(".path", data.containerNode)[0]);
+ path.set("value", data.data.path);
+ }
+ });
}
};
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/external/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/external/add.js
index 6147bf5249..979a10cae9 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/external/add.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/external/add.js
@@ -24,12 +24,15 @@ define(["dojo/query","dijit/registry","qpid/common/util"],
return {
show: function(data)
{
- util.parseHtmlIntoDiv(data.containerNode, "authenticationprovider/external/add.html");
- if (data.data)
+ util.parseHtmlIntoDiv(data.containerNode, "authenticationprovider/external/add.html",
+ function()
{
- var useFullDN = registry.byNode(query(".useFullDN", data.containerNode)[0]);
- useFullDN.set("value", data.data.useFullDN);
- }
+ if (data.data)
+ {
+ var useFullDN = registry.byNode(query(".useFullDN", data.containerNode)[0]);
+ useFullDN.set("value", data.data.useFullDN);
+ }
+ });
}
};
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/plainpasswordfile/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/plainpasswordfile/add.js
index a593b14fd6..cbc5ce356d 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/plainpasswordfile/add.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/plainpasswordfile/add.js
@@ -24,12 +24,15 @@ define(["dojo/query","dijit/registry","qpid/common/util"],
return {
show: function(data)
{
- util.parseHtmlIntoDiv(data.containerNode, "authenticationprovider/filebased/add.html");
- if (data.data)
+ util.parseHtmlIntoDiv(data.containerNode, "authenticationprovider/filebased/add.html",
+ function()
{
- var path = registry.byNode(query(".path", data.containerNode)[0]);
- path.set("value", data.data.path);
- }
+ if (data.data)
+ {
+ var path = registry.byNode(query(".path", data.containerNode)[0]);
+ path.set("value", data.data.path);
+ }
+ });
}
};
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/simpleldap/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/simpleldap/add.js
index 2c0dc688e9..4e04bfd6f0 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/simpleldap/add.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/simpleldap/add.js
@@ -24,8 +24,11 @@ define(["dojo/_base/xhr","dojo/query","dijit/registry","qpid/common/util","qpid/
return {
show: function(data)
{
- util.parseHtmlIntoDiv(data.containerNode, "authenticationprovider/simpleldap/add.html");
-
+ var that = this;
+ util.parseHtmlIntoDiv(data.containerNode, "authenticationprovider/simpleldap/add.html", function(){that._postParse(data);});
+ },
+ _postParse: function(data)
+ {
var that = this;
xhr.get({url: "api/latest/truststore", sync: true, handleAs: "json"}).then(
function(trustStores)
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js
index 07938fe8e7..08a4a84d47 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js
@@ -55,8 +55,11 @@ define(["dojo/_base/xhr",
{
var that=this;
this.containerNode = domConstruct.create("div", {innerHTML: template});
- parser.parse(this.containerNode);
-
+ parser.parse(this.containerNode).then(function(instances){ that._postParse();});
+ },
+ _postParse: function()
+ {
+ var that=this;
this.dialog = registry.byId("editBrokerDialog");
this.saveButton = registry.byId("editBroker.saveButton");
this.cancelButton = registry.byId("editBroker.cancelButton");
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editQueue.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editQueue.js
index 06c9672efe..91fc9891cf 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editQueue.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editQueue.js
@@ -79,7 +79,11 @@ define(["dojo/_base/xhr",
{
var that=this;
this.containerNode = domConstruct.create("div", {innerHTML: template});
- parser.parse(this.containerNode);
+ parser.parse(this.containerNode).then(function(instances){ that._postParse();});
+ },
+ _postParse: function()
+ {
+ var that=this;
this.allFieldsContainer = dom.byId("formEditQueue.allFields");
this.dialog = registry.byId("editQueue");
this.saveButton = registry.byId("formEditQueue.saveButton");
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js
index 849fd9378c..b47052b546 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js
@@ -56,7 +56,11 @@ define(["dojo/_base/xhr",
{
var that=this;
this.containerNode = domConstruct.create("div", {innerHTML: template});
- parser.parse(this.containerNode);
+ parser.parse(this.containerNode).then(function(instances){ that._postParse();});
+ },
+ _postParse: function()
+ {
+ var that=this;
this.allFieldsContainer = dom.byId("editVirtualHost.allFields");
this.typeFieldsContainer = dom.byId("editVirtualHost.typeFields");
this.dialog = registry.byId("editVirtualHostDialog");
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHostNode.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHostNode.js
index 4f815f1f1d..b5a7edab2d 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHostNode.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHostNode.js
@@ -52,7 +52,12 @@ define(["dojo/_base/xhr",
{
var that=this;
this.containerNode = domConstruct.create("div", {innerHTML: template});
- parser.parse(this.containerNode);
+ parser.parse(this.containerNode).then(function(instances){ that._postParse();});
+ },
+ _postParse: function()
+ {
+ var that=this;
+ this.allFieldsContainer = dom.byId("editVirtualHostNode.allFields");
this.typeFieldsContainer = dom.byId("editVirtualHostNode.typeFields");
this.dialog = registry.byId("editVirtualHostNodeDialog");
this.saveButton = registry.byId("editVirtualHostNode.saveButton");
@@ -160,7 +165,7 @@ define(["dojo/_base/xhr",
TypeUI.show({containerNode:that.typeFieldsContainer, parent: that, data: actualData, effectiveData: effectiveData});
that.form.connectChildren();
- util.applyMetadataToWidgets(that.allFieldsContainer, "VirtualHostNode", actualData.type);
+ util.applyToWidgets(that.allFieldsContainer, "VirtualHostNode", actualData.type, actualData);
}
catch(e)
{
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/Group.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/Group.js
index 8ac6be04cc..7832941e71 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/Group.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/Group.js
@@ -76,8 +76,8 @@ define(["dojo/_base/xhr",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
- parser.parse(contentPane.containerNode);
-
+ parser.parse(contentPane.containerNode).then(function(instances)
+ {
that.groupUpdater = new GroupUpdater(contentPane.containerNode, that, that.controller);
that.groupUpdater.update();
updater.add( that.groupUpdater );
@@ -100,6 +100,7 @@ define(["dojo/_base/xhr",
"Are you sure you want to remove group member");
}
);
+ });
}});
};
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js
index ea12280d0d..5788fad8af 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js
@@ -54,9 +54,9 @@ define(["dojo/_base/xhr",
var that = this;
this.name = groupProviderObj.name;
node.innerHTML = template;
- parser.parse(node);
this.controller = controller;
-
+ parser.parse(node).then(function(instances)
+ {
var groupDiv = query(".groups", node)[0];
var gridProperties = {
@@ -75,7 +75,7 @@ define(["dojo/_base/xhr",
indirectSelection: true
}};
- this.groupsGrid = new UpdatableStore([], groupDiv,
+ that.groupsGrid = new UpdatableStore([], groupDiv,
[ { name: "Group Name", field: "name", width: "100%" }
], function(obj) {
connect.connect(obj.grid, "onRowDblClick", obj.grid,
@@ -86,10 +86,11 @@ define(["dojo/_base/xhr",
that.controller.show("group", name, groupProviderObj, theItem.id);
});
}, gridProperties, EnhancedGrid);
- var addGroupButton = query(".addGroupButton", node)[0];
- registry.byNode(addGroupButton).on("click", function(evt){ addGroup.show(groupProviderObj.name) });
- var deleteWidget = registry.byNode(query(".deleteGroupButton", node)[0]);
- deleteWidget.on("click", function(evt){ event.stop(evt); that.deleteGroups(); });
+ var addGroupButton = query(".addGroupButton", node)[0];
+ registry.byNode(addGroupButton).on("click", function(evt){ addGroup.show(groupProviderObj.name) });
+ var deleteWidget = registry.byNode(query(".deleteGroupButton", node)[0]);
+ deleteWidget.on("click", function(evt){ event.stop(evt); that.deleteGroups(); });
+ });
}
GroupManagingGroupProvider.prototype.deleteGroups = function()
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/groupfile/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/groupfile/add.js
index f28f250134..6543d6a797 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/groupfile/add.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/groupfile/add.js
@@ -25,12 +25,15 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm
return { show: function(data)
{
var that=this;
- util.parseHtmlIntoDiv(data.containerNode, "groupprovider/groupfile/add.html");
- if (data.data)
+ util.parseHtmlIntoDiv(data.containerNode, "groupprovider/groupfile/add.html",
+ function()
{
- var pathWidget = registry.byNode(query(".addGroupProviderPath", data.containerNode)[0]);
- pathWidget.set("value", data.data.path);
- }
+ if (data.data)
+ {
+ var pathWidget = registry.byNode(query(".addGroupProviderPath", data.containerNode)[0]);
+ pathWidget.set("value", data.data.path);
+ }
+ });
}
};
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogFileDownloadDialog.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogFileDownloadDialog.js
index 29054b5379..c013a88d0a 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogFileDownloadDialog.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogFileDownloadDialog.js
@@ -51,9 +51,13 @@ return declare("qpid.management.logs.LogFileDownloadDialog", null, {
closeButton: null,
constructor: function(args){
+ var that = this;
this.containerNode = domConstruct.create("div", {innerHTML: template});
- parser.parse(this.containerNode);
-
+ parser.parse(this.containerNode).then(function(instances){that._postParse();});
+ },
+ _postParse: function()
+ {
+ var that = this;
this.logFileTreeDiv = query(".logFilesGrid", this.containerNode)[0];
this.downloadLogsButton = registry.byNode(query(".downloadLogsButton", this.containerNode)[0]);
this.closeButton = registry.byNode(query(".downloadLogsDialogCloseButton", this.containerNode)[0]);
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogViewer.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogViewer.js
index 470ad28cd2..4a76110a58 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogViewer.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/logs/LogViewer.js
@@ -62,9 +62,13 @@ define(["dojo/_base/xhr",
this.contentPane = contentPane;
this.contentPane.containerNode.innerHTML = markup;
- parser.parse(this.contentPane.containerNode);
+ parser.parse(this.contentPane.containerNode).then(function(instances){self._postParse();});
+ };
+ LogViewer.prototype._postParse = function()
+ {
+ var self = this;
- this.downloadLogsButton = registry.byNode(query(".downloadLogs", contentPane.containerNode)[0]);
+ this.downloadLogsButton = registry.byNode(query(".downloadLogs", this.contentPane.containerNode)[0]);
this.downloadLogDialog = new LogFileDownloadDialog();
this.downloadLogsButton.on("click", function(evt){
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/plugin/managementhttp.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/plugin/managementhttp.js
index 69f520bf42..4c32cce7cd 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/plugin/managementhttp.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/plugin/managementhttp.js
@@ -47,14 +47,15 @@ define(["dojo/_base/xhr",
sync: true,
load: function(data) {
node.innerHTML = data;
- parser.parse(node);
-
+ parser.parse(node).then(function(instances)
+ {
that.managementHttpUpdater= new ManagementHttpUpdater(node, pluginObject, controller);
that.managementHttpUpdater.update(true);
updater.add( that.managementHttpUpdater);
var editButton = query(".editPluginButton", node)[0];
connect.connect(registry.byNode(editButton), "onClick", function(evt){ that.edit(); });
+ });
}});
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/plugin/managementjmx.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/plugin/managementjmx.js
index 3579d258e9..4141b6b670 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/plugin/managementjmx.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/plugin/managementjmx.js
@@ -43,14 +43,15 @@ define(["dojo/_base/xhr",
sync: true,
load: function(data) {
node.innerHTML = data;
- parser.parse(node);
-
+ parser.parse(node).then(function(instances)
+ {
that.managementJmxUpdater= new ManagementJmxUpdater(node, pluginObject, controller);
that.managementJmxUpdater.update(true);
updater.add( that.managementJmxUpdater);
var editButton = query(".editPluginButton", node)[0];
connect.connect(registry.byNode(editButton), "onClick", function(evt){ that.edit(); });
+ });
}});
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/filesystempreferences/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/filesystempreferences/add.js
index d030ea2832..929d318b4f 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/filesystempreferences/add.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/filesystempreferences/add.js
@@ -23,12 +23,15 @@ define(["dojo/query", "dijit/registry", "qpid/common/util"],
return {
show: function (data)
{
- util.parseHtmlIntoDiv(data.containerNode, "preferencesprovider/filesystempreferences/add.html");
- if (data.data)
+ util.parseHtmlIntoDiv(data.containerNode, "preferencesprovider/filesystempreferences/add.html",
+ function()
{
- var pathWidget = registry.byNode(query(".addPreferencesProviderPath", data.containerNode)[0]);
- pathWidget.set("value", data.data.path);
- }
+ if (data.data)
+ {
+ var pathWidget = registry.byNode(query(".addPreferencesProviderPath", data.containerNode)[0]);
+ pathWidget.set("value", data.data.path);
+ }
+ });
}
};
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/filesystempreferences/show.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/filesystempreferences/show.js
index 46dedcc9f5..660b6673f2 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/filesystempreferences/show.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/filesystempreferences/show.js
@@ -32,8 +32,10 @@ define(["dojo/_base/xhr",
sync: true,
load: function(template) {
containerNode.innerHTML = template;
- parser.parse(containerNode);
- that.preferencesProviderPath=query(".fileSystemPreferencesProviderPath", containerNode)[0];
+ parser.parse(containerNode).then(function(instances)
+ {
+ that.preferencesProviderPath=query(".fileSystemPreferencesProviderPath", containerNode)[0];
+ });
}});
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js
index b4c45d8f99..dfe8e5059a 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js
@@ -18,30 +18,41 @@
* under the License.
*
*/
-define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/common/util", "qpid/common/metadata"],
- function (dom, query, array, registry, util, metadata)
+define(["dojo/dom",
+ "dojo/query",
+ "dojo/_base/array",
+ "dijit/registry",
+ "qpid/common/util",
+ "qpid/common/metadata",
+ "dojo/parser",
+ "dojo/text!store/filekeystore/add.html",
+ "dojo/domReady!"],
+ function (dom, query, array, registry, util, metadata, parser, template)
{
var addKeyStore =
{
- init: function()
- {
- },
show: function(data)
{
var that=this;
- util.parseHtmlIntoDiv(data.containerNode, "store/filekeystore/add.html");
-
this.containerNode = data.containerNode;
+ data.containerNode.innerHTML = template;
+ parser.parse(this.containerNode).then(function(instances)
+ {
+ that.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning");
- this.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning");
+ if (!window.FileReader)
+ {
+ that.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support";
+ that.keyStoreOldBrowserWarning.className = that.keyStoreOldBrowserWarning.className.replace("hidden", "");
+ }
- this.addButton = data.parent.addButton;
+ if (data.effectiveData)
+ {
+ that.update(data.effectiveData);
+ }
- if (!window.FileReader)
- {
- this.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support";
- this.keyStoreOldBrowserWarning.className = this.keyStoreOldBrowserWarning.className.replace("hidden", "");
- }
+ util.applyMetadataToWidgets(data.containerNode, "KeyStore", "FileKeyStore");
+ });
},
update: function(effectiveData)
{
@@ -53,28 +64,38 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm
if (name in attributes )
{
var attribute = attributes[name];
- if (attribute.secure || attribute.oversize)
- {
- item.set("required", false);
- item.set("placeHolder", effectiveData[name]);
- }
- else
+ var value = effectiveData[name];
+ if (value)
{
- item.set("value", effectiveData[name]);
+ if (attribute.secure)
+ {
+ if (!/^\*+/.test(value) )
+ {
+ item.set("value", value);
+ }
+ else
+ {
+ item.set("required", false);
+ if (name == "storeUrl")
+ {
+ item.set("uploaded", true)
+ }
+ else
+ {
+ item.set("placeHolder", value);
+ }
+ }
+ }
+ else
+ {
+ item.set("value", value);
+ }
}
}
});
}
};
- try
- {
- addKeyStore.init();
- }
- catch(e)
- {
- console.warn(e);
- }
return addKeyStore;
}
);
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js
index e04ee1a835..5893ce0d2d 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js
@@ -18,31 +18,42 @@
* under the License.
*
*/
-define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/common/util", "qpid/common/metadata"],
- function (dom, query, array, registry, util, metadata)
+define(["dojo/dom",
+ "dojo/query",
+ "dojo/_base/array",
+ "dijit/registry",
+ "qpid/common/util",
+ "qpid/common/metadata",
+ "dojo/parser",
+ "dojo/text!store/filetruststore/add.html",
+ "dojo/domReady!"],
+ function (dom, query, array, registry, util, metadata, parser, template)
{
var addTrustStore =
{
- init: function()
- {
- },
show: function(data)
{
var that=this;
- util.parseHtmlIntoDiv(data.containerNode, "store/filetruststore/add.html");
-
this.containerNode = data.containerNode;
+ data.containerNode.innerHTML = template;
+ parser.parse(this.containerNode).then(function(instances)
+ {
+ that.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning");
- this.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning");
+ if (!window.FileReader)
+ {
+ // Fall back for IE8/9 which do not support FileReader
+ that.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support";
+ that.keyStoreOldBrowserWarning.className = that.keyStoreOldBrowserWarning.className.replace("hidden", "");
+ }
- this.addButton = data.parent.addButton;
+ if (data.effectiveData)
+ {
+ that.update(data.effectiveData);
+ }
- if (!window.FileReader)
- {
- // Fall back for IE8/9 which do not support FileReader
- this.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support";
- this.keyStoreOldBrowserWarning.className = this.keyStoreOldBrowserWarning.className.replace("hidden", "");
- }
+ util.applyMetadataToWidgets(data.containerNode, "TrustStore", "FileTrustStore");
+ });
},
update: function(effectiveData)
{
@@ -54,14 +65,25 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm
if (name in attributes )
{
var attribute = attributes[name];
- if (attribute.secure || attribute.oversize)
- {
- item.set("required", false);
- item.set("placeHolder", effectiveData[name]);
- }
- else
+ var value = effectiveData[name];
+ if (value)
{
- item.set("value", effectiveData[name]);
+ if (attribute.secure)
+ {
+ if (!/^\*+/.test(value) )
+ {
+ item.set("value", value);
+ }
+ else
+ {
+ item.set("placeHolder", value);
+ item.set("required", false);
+ }
+ }
+ else
+ {
+ item.set("value", value);
+ }
}
}
});
@@ -69,14 +91,6 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm
}
};
- try
- {
- addTrustStore.init();
- }
- catch(e)
- {
- console.warn(e);
- }
return addTrustStore;
}
);
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js
index 0d74699d79..5c25ae2cc6 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js
@@ -18,64 +18,85 @@
* under the License.
*
*/
-define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/common/util", "qpid/common/metadata", "qpid/common/ResourceWidget"],
- function (dom, query, array, registry, util, metadata)
+define(["dojo/dom",
+ "dojo/query",
+ "dojo/_base/array",
+ "dijit/registry",
+ "qpid/common/util",
+ "qpid/common/metadata",
+ "dojo/parser",
+ "dojo/text!store/nonjavakeystore/add.html",
+ "qpid/common/ResourceWidget",
+ "dojo/domReady!"],
+ function (dom, query, array, registry, util, metadata, parser, template)
{
var addKeyStore =
{
- init: function()
- {
- },
show: function(data)
{
var that=this;
- util.parseHtmlIntoDiv(data.containerNode, "store/nonjavakeystore/add.html");
-
- this.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning");
- this.addButton = data.parent.addButton;
this.containerNode = data.containerNode;
-
- if (!window.FileReader)
+ data.containerNode.innerHTML = template;
+ parser.parse(this.containerNode).then(function(instances)
{
- this.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support";
- this.keyStoreOldBrowserWarning.className = this.keyStoreOldBrowserWarning.className.replace("hidden", "");
- }
+ that.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning");
+
+ if (!window.FileReader)
+ {
+ that.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support";
+ that.keyStoreOldBrowserWarning.className = that.keyStoreOldBrowserWarning.className.replace("hidden", "");
+ }
+
+ if (data.effectiveData)
+ {
+ that.update(data.effectiveData);
+ }
+
+ util.applyMetadataToWidgets(data.containerNode, "KeyStore", "NonJavaKeyStore");
+ });
},
update: function(effectiveData)
{
- if (effectiveData)
- {
- var attributes = metadata.getMetaData("KeyStore", "NonJavaKeyStore").attributes;
- var widgets = registry.findWidgets(this.containerNode);
- array.forEach(widgets, function(item)
+ var attributes = metadata.getMetaData("KeyStore", "NonJavaKeyStore").attributes;
+ var widgets = registry.findWidgets(this.containerNode);
+ array.forEach(widgets, function(item)
+ {
+ var name = item.id.replace("addStore.","");
+ if (name in attributes )
{
- var name = item.id.replace("addStore.","");
- if (name in attributes )
+ var attribute = attributes[name];
+ var value = effectiveData[name];
+ if (value)
{
- var attribute = attributes[name];
- if (attribute.oversize || attribute.secure)
+ if (attribute.secure)
{
- item.set("required", false);
- item.set("placeHolder", effectiveData[name]);
+ if (!/^\*+/.test(value) )
+ {
+ item.set("value", value);
+ }
+ else
+ {
+ item.set("required", false);
+ if (name == "privateKeyUrl")
+ {
+ item.set("uploaded", true)
+ }
+ else
+ {
+ item.set("placeHolder", value);
+ }
+ }
}
else
{
- item.set("value", effectiveData[name]);
+ item.set("value", value);
}
}
- });
- }
+ }
+ });
}
};
- try
- {
- addKeyStore.init();
- }
- catch(e)
- {
- console.warn(e);
- }
return addKeyStore;
}
);
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js
index 53e3b43082..550c388910 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js
@@ -18,64 +18,77 @@
* under the License.
*
*/
-define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/common/util", "qpid/common/metadata"],
- function (dom, query, array, registry, util, metadata)
+define(["dojo/dom",
+ "dojo/query",
+ "dojo/_base/array",
+ "dijit/registry",
+ "qpid/common/util",
+ "qpid/common/metadata",
+ "dojo/parser",
+ "dojo/text!store/nonjavatruststore/add.html",
+ "dojo/domReady!"],
+ function (dom, query, array, registry, util, metadata, parser, template)
{
var addKeyStore =
{
- init: function()
- {
- },
show: function(data)
{
var that=this;
- util.parseHtmlIntoDiv(data.containerNode, "store/nonjavatruststore/add.html");
-
- this.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning");
- this.addButton = data.parent.addButton;
this.containerNode = data.containerNode;
-
- if (!window.FileReader)
+ data.containerNode.innerHTML = template;
+ parser.parse(this.containerNode).then(function(instances)
{
- this.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support";
- this.keyStoreOldBrowserWarning.className = this.keyStoreOldBrowserWarning.className.replace("hidden", "");
- }
+ that.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning");
+
+ if (!window.FileReader)
+ {
+ that.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support";
+ that.keyStoreOldBrowserWarning.className = that.keyStoreOldBrowserWarning.className.replace("hidden", "");
+ }
+
+ if (data.effectiveData)
+ {
+ that.update(data.effectiveData);
+ }
+
+ util.applyMetadataToWidgets(data.containerNode, "TrustStore", "NonJavaTrustStore");
+ });
},
update: function(effectiveData)
{
- if (effectiveData)
- {
- var attributes = metadata.getMetaData("TrustStore", "NonJavaTrustStore").attributes;
- var widgets = registry.findWidgets(this.containerNode);
- array.forEach(widgets, function(item)
+ var attributes = metadata.getMetaData("TrustStore", "NonJavaTrustStore").attributes;
+ var widgets = registry.findWidgets(this.containerNode);
+ array.forEach(widgets, function(item)
+ {
+ var name = item.id.replace("addStore.","");
+ if (name in attributes )
{
- var name = item.id.replace("addStore.","");
- if (name in attributes )
+ var attribute = attributes[name];
+ var value = effectiveData[name];
+ if (value)
{
- var attribute = attributes[name];
- if (attribute.oversize || attribute.secure)
+ if (attribute.secure)
{
- item.set("required", false);
- item.set("placeHolder", effectiveData[name]);
+ if (!/^\*+/.test(value) )
+ {
+ item.set("value", value);
+ }
+ else
+ {
+ item.set("placeHolder", value);
+ item.set("required", false);
+ }
}
else
{
- item.set("value", effectiveData[name]);
+ item.set("value", value);
}
}
- });
- }
+ }
+ });
}
};
- try
- {
- addKeyStore.init();
- }
- catch(e)
- {
- console.warn(e);
- }
return addKeyStore;
}
);
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/show.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/show.js
index 89b0b5d88f..7d78026d05 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/show.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/show.js
@@ -36,10 +36,12 @@ define(["dojo/query",
{
this.fields.push(name);
}
- util.buildUI(data.containerNode, data.parent, "store/nonjavatruststore/show.html", this.fields, this);
- var gridNode = query(".details", data.containerNode)[0];
- var dateTimeFormatter = function(value){ return value ? UserPreferences.formatDateTime(value, {addOffset: true, appendTimeZone: true}) : "";};
- this.detailsGrid = new UpdatableStore([],
+ var that = this;
+ util.buildUI(data.containerNode, data.parent, "store/nonjavatruststore/show.html", this.fields, this, function()
+ {
+ var gridNode = query(".details", data.containerNode)[0];
+ var dateTimeFormatter = function(value){ return value ? UserPreferences.formatDateTime(value, {addOffset: true, appendTimeZone: true}) : "";};
+ that.detailsGrid = new UpdatableStore([],
gridNode,
[
{ name: 'Subject', field: 'SUBJECT_NAME', width: '25%' },
@@ -47,6 +49,7 @@ define(["dojo/query",
{ name: 'Valid from', field: 'VALID_START', width: '25%', formatter: dateTimeFormatter },
{ name: 'Valid to', field: 'VALID_END', width: '25%', formatter: dateTimeFormatter}
]);
+ });
}
NonJavaTrustStore.prototype.update = function(data)
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/providedstore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/providedstore/add.js
index 7d14c6450f..c4e44f5027 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/providedstore/add.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/providedstore/add.js
@@ -32,9 +32,12 @@ define(["dojo/_base/xhr",
return {
show: function (data)
{
+ var that= this;
this.containerNode = domConstruct.create("div", {innerHTML: template}, data.containerNode);
- parser.parse(this.containerNode);
-
+ parser.parse(this.containerNode).then(function(instances) {that._postParse(data);});
+ },
+ _postParse: function(data)
+ {
registry.byId("addVirtualHost.storeUnderfullSize").set("regExpGen", util.numericOrContextVarRegexp);
registry.byId("addVirtualHost.storeOverfullSize").set("regExpGen", util.numericOrContextVarRegexp);
@@ -42,6 +45,7 @@ define(["dojo/_base/xhr",
{
dom.byId("addVirtualHost.diskFlowControls").style.display = "none";
}
+
}
};
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/providedstore/edit.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/providedstore/edit.js
index 6264d81335..3a305fb016 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/providedstore/edit.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/providedstore/edit.js
@@ -20,14 +20,15 @@
define(["dijit/registry", "qpid/common/util", "dojo/domReady!"],
function (registry, util)
{
- var fieldNames = ["storeUnderfullSize", "storeOverfullSize"];
return {
show: function(data)
{
- util.buildEditUI(data.containerNode, "virtualhost/providedstore/edit.html", "editVirtualHost.", fieldNames, data.data);
-
- registry.byId("editVirtualHost.storeUnderfullSize").set("regExpGen", util.numericOrContextVarRegexp);
- registry.byId("editVirtualHost.storeOverfullSize").set("regExpGen", util.numericOrContextVarRegexp);
+ util.parseHtmlIntoDiv(data.containerNode, "virtualhost/providedstore/edit.html",
+ function()
+ {
+ registry.byId("editVirtualHost.storeUnderfullSize").set("regExpGen", util.numericOrContextVarRegexp);
+ registry.byId("editVirtualHost.storeOverfullSize").set("regExpGen", util.numericOrContextVarRegexp);
+ });
}
};
}
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhostnode/json/edit.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhostnode/json/edit.js
index 35ecbec315..4c70b4a22d 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhostnode/json/edit.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhostnode/json/edit.js
@@ -22,8 +22,11 @@ define(["qpid/common/util", "dijit/registry", "dojo/domReady!"],
return {
show: function(data)
{
- util.buildEditUI(data.containerNode, "virtualhostnode/filebased/edit.html", "editVirtualHostNode.", ["storePath"], data.data);
- registry.byId("editVirtualHostNode.storePath").set("disabled", !(data.data.state == "STOPPED" || data.data.state == "ERRORED"));
+ util.parseHtmlIntoDiv(data.containerNode, "virtualhostnode/filebased/edit.html",
+ function()
+ {
+ registry.byId("editVirtualHostNode.storePath").set("disabled", !(data.data.state == "STOPPED" || data.data.state == "ERRORED"));
+ });
}
};
}
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 32071e262d..5e324bd219 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
@@ -25,61 +25,72 @@
<div class="formLabel-labelCell">Name:</div>
<div class="nameValue"></div>
</div>
-
- <div class="clear type">
- <div class="formLabel-labelCell">Port Type:</div>
- <div class="typeValue"></div>
+ <div class="clear"></div>
+ <div class="alignLeft">
+ <div class="clear type">
+ <div class="formLabel-labelCell">Port Type:</div>
+ <div class="formValue-valueCell typeValue"></div>
+ </div>
</div>
+ <div class="alignRight">
+ <div class="clear maxOpenConnections">
+ <div class="formLabel-labelCell">Open connections (current/maximum):</div>
+ <div class="formValue-valueCell">
+ <span class="connectionCountValue"></span><span>/</span><span class="maxOpenConnectionsValue"></span>
+ </div>
+ </div>
+ </div>
- <div class="clear state">
+ <div class="clear state">
<div class="formLabel-labelCell">State:</div>
- <div class="stateValue"></div>
- </div>
+ <div class="formValue-valueCell stateValue"></div>
+ </div>
- <div class="clear port">
+ <div class="clear port">
<div class="formLabel-labelCell">Port Number:</div>
- <div class="portValue"></div>
- </div>
+ <div class="formValue-valueCell portValue"></div>
+ </div>
- <div class="clear protocols">
+ <div class="clear protocols">
<div class="formLabel-labelCell">Protocols:</div>
- <div class="protocolsValue multiLineValue"></div>
- </div>
+ <div class="formValue-valueCell protocolsValue multiLineValue"></div>
+ </div>
<div class="clear authenticationProvider">
- <div class="formLabel-labelCell">Authentication Provider:</div>
- <div class="authenticationProviderValue"></div>
+ <div class="formLabel-labelCell">Authentication Provider:</div>
+ <div class="formValue-valueCell authenticationProviderValue"></div>
</div>
<div class="clear bindingAddress">
- <div class="formLabel-labelCell">Binding address:</div>
- <div class="bindingAddressValue"></div>
+ <div class="formLabel-labelCell">Binding address:</div>
+ <div class="formValue-valueCell bindingAddressValue"></div>
</div>
<div class="clear transports">
<div class="formLabel-labelCell">Transports:</div>
- <div class="transportsValue multiLineValue"></div>
- </div>
+ <div class="formValue-valueCell transportsValue multiLineValue"></div>
+ </div>
- <div class="clear keyStore">
- <div class="formLabel-labelCell">Key Store:</div>
- <div class="keyStoreValue"></div>
- </div>
+ <div class="clear keyStore">
+ <div class="formLabel-labelCell">Key Store:</div>
+ <div class="formValue-valueCell keyStoreValue"></div>
+ </div>
- <div class="clear needClientAuth">
- <div class="formLabel-labelCell">Need SSL Client Certificate:</div>
- <div class="needClientAuthValue"></div>
- </div>
+ <div class="clear needClientAuth">
+ <div class="formLabel-labelCell">Need SSL Client Certificate:</div>
+ <div class="formValue-valueCell needClientAuthValue"></div>
+ </div>
- <div class="clear wantClientAuth">
- <div class="formLabel-labelCell">Want SSL Client Certificate:</div>
- <div class="wantClientAuthValue"></div>
- </div>
+ <div class="clear wantClientAuth">
+ <div class="formLabel-labelCell">Want SSL Client Certificate:</div>
+ <div class="formValue-valueCell wantClientAuthValue"></div>
+ </div>
+
+ <div class="clear trustStores">
+ <div class="formLabel-labelCell">Trust Stores:</div>
+ <div class="formValue-valueCell trustStoresValue multiLineValue"></div>
+ </div>
- <div class="clear trustStores">
- <div class="formLabel-labelCell">Trust Stores:</div>
- <div class="trustStoresValue multiLineValue"></div>
- </div>
<div class="clear"></div>
</div>
<br/>
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html
index a068868e7f..7132dd8105 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html
@@ -25,7 +25,7 @@
<div class="formLabel-labelCell">Name:</div>
<div class="name formValue-valueCell"></div>
</div>
- <div class="clear">
+ <div class="clear"></div>
<div class="alignLeft">
<div class="clear">
<div class="formLabel-labelCell">Type:</div>
diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/report/ReportRunnerTest.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/report/ReportRunnerTest.java
new file mode 100644
index 0000000000..38432a26f4
--- /dev/null
+++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/report/ReportRunnerTest.java
@@ -0,0 +1,186 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.management.plugin.report;
+
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectOutputStream;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.mockito.ArgumentCaptor;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import org.apache.qpid.server.message.AMQMessageHeader;
+import org.apache.qpid.server.message.ServerMessage;
+import org.apache.qpid.server.model.Queue;
+import org.apache.qpid.server.queue.AMQQueue;
+import org.apache.qpid.server.queue.QueueEntry;
+import org.apache.qpid.server.queue.QueueEntryVisitor;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class ReportRunnerTest extends QpidTestCase
+{
+ public void testTextReportCountsMessages()
+ {
+ ReportRunner<String> runner = (ReportRunner<String>) ReportRunner.createRunner(TestTextReport.NAME,
+ Collections.<String, String[]>emptyMap());
+ Queue queue = createMockQueue();
+ assertEquals("There are 0 messages on the queue.", runner.runReport(queue));
+
+ runner = (ReportRunner<String>) ReportRunner.createRunner(TestTextReport.NAME,
+ Collections.<String, String[]>emptyMap());
+ Queue queue1 = createMockQueue(mock(ServerMessage.class));
+ assertEquals("There are 1 messages on the queue.", runner.runReport(queue1));
+
+ runner = (ReportRunner<String>) ReportRunner.createRunner(TestTextReport.NAME,
+ Collections.<String, String[]>emptyMap());
+ Queue queue2 = createMockQueue(mock(ServerMessage.class), mock(ServerMessage.class));
+ assertEquals("There are 2 messages on the queue.", runner.runReport(queue2));
+ }
+
+ public void testTextReportSingleStringParam()
+ {
+ Queue queue2 = createMockQueue(mock(ServerMessage.class), mock(ServerMessage.class));
+
+ Map<String, String[]> parameterMap = new HashMap<>();
+ parameterMap.put("stringParam", new String[]{"hello world"});
+ ReportRunner<String> runner =
+ (ReportRunner<String>) ReportRunner.createRunner(TestTextReport.NAME, parameterMap);
+ assertEquals("There are 2 messages on the queue. stringParam = hello world.", runner.runReport(queue2));
+ }
+
+ public void testTextReportSingleStringArrayParam()
+ {
+ Queue queue = createMockQueue();
+
+ Map<String, String[]> parameterMap = new HashMap<>();
+ parameterMap.put("stringArrayParam", new String[] { "hello world", "goodbye"});
+ ReportRunner<String> runner = (ReportRunner<String>) ReportRunner.createRunner(TestTextReport.NAME, parameterMap);
+ assertEquals("There are 0 messages on the queue. stringArrayParam = [hello world, goodbye].", runner.runReport(queue));
+
+ }
+
+
+ public void testTextReportBothParams()
+ {
+ Queue queue = createMockQueue();
+
+ Map<String, String[]> parameterMap = new HashMap<>();
+ parameterMap.put("stringParam", new String[]{"hello world"});
+ parameterMap.put("stringArrayParam", new String[] { "hello world", "goodbye"});
+ ReportRunner<String> runner = (ReportRunner<String>) ReportRunner.createRunner(TestTextReport.NAME, parameterMap);
+ assertEquals("There are 0 messages on the queue. stringParam = hello world. stringArrayParam = [hello world, goodbye].", runner.runReport(queue));
+
+ }
+
+ public void testInvalidReportName()
+ {
+ try
+ {
+ ReportRunner.createRunner("unknown", Collections.<String, String[]>emptyMap());
+ fail("Unknown report name should throw exception");
+ }
+ catch(IllegalArgumentException e)
+ {
+ assertEquals("Unknown report: unknown", e.getMessage());
+ }
+ }
+
+ public void testBinaryReportWithLimit() throws Exception
+ {
+ Queue queue = createMockQueue(createMessageWithAppProperties(Collections.<String,Object>singletonMap("key",1)),
+ createMessageWithAppProperties(Collections.<String,Object>singletonMap("key",2)),
+ createMessageWithAppProperties(Collections.<String, Object>singletonMap("key", 3)),
+ createMessageWithAppProperties(Collections.<String, Object>singletonMap("key", 4)));
+ Map<String, String[]> parameterMap = new HashMap<>();
+ parameterMap.put("propertyName", new String[]{"key"});
+ parameterMap.put("limit", new String[] { "3" });
+
+ ReportRunner<byte[]> runner = (ReportRunner<byte[]>) ReportRunner.createRunner(TestBinaryReport.NAME, parameterMap);
+
+ ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+ ObjectOutputStream objects = new ObjectOutputStream(bytes);
+ objects.writeObject(Integer.valueOf(1));
+ objects.writeObject(Integer.valueOf(2));
+ objects.writeObject(Integer.valueOf(3));
+ objects.flush();
+ byte[] expected = bytes.toByteArray();
+ byte[] actual = runner.runReport(queue);
+ assertTrue("Output not as expected", Arrays.equals(expected, actual));
+ }
+
+ private ServerMessage<?> createMessageWithAppProperties(final Map<String,Object> props)
+ {
+ ServerMessage<?> message = mock(ServerMessage.class);
+ final AMQMessageHeader header = mock(AMQMessageHeader.class);
+ when(message.getMessageHeader()).thenReturn(header);
+ final ArgumentCaptor<String> headerNameCaptor = ArgumentCaptor.forClass(String.class);
+ when(header.getHeader(headerNameCaptor.capture())).thenAnswer(new Answer<Object>()
+ {
+ @Override
+ public Object answer(final InvocationOnMock invocation) throws Throwable
+ {
+ String header = headerNameCaptor.getValue();
+ return props.get(header);
+ }
+ });
+ when(header.getHeaderNames()).thenReturn(props.keySet());
+ return message;
+ }
+
+ private Queue createMockQueue(final ServerMessage<?>... messages)
+ {
+ final AMQQueue queue = mock(AMQQueue.class);
+ final ArgumentCaptor<QueueEntryVisitor> captor = ArgumentCaptor.forClass(QueueEntryVisitor.class);
+ doAnswer(new Answer()
+ {
+ @Override
+ public Object answer(final InvocationOnMock invocation) throws Throwable
+ {
+ QueueEntryVisitor visitor = captor.getValue();
+ for(ServerMessage<?> message : messages)
+ {
+ if(visitor.visit(makeEntry(queue, message)))
+ {
+ break;
+ }
+ }
+ return null;
+ }
+ }).when(queue).visit(captor.capture());
+ return queue;
+ }
+
+ private QueueEntry makeEntry(final AMQQueue queue, final ServerMessage<?> message)
+ {
+ QueueEntry entry = mock(QueueEntry.class);
+ when(entry.getQueue()).thenReturn(queue);
+ when(entry.getMessage()).thenReturn(message);
+ return entry;
+ }
+}
diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/report/TestBinaryReport.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/report/TestBinaryReport.java
new file mode 100644
index 0000000000..fc5e93631e
--- /dev/null
+++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/report/TestBinaryReport.java
@@ -0,0 +1,114 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.management.plugin.report;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+
+public class TestBinaryReport extends QueueBinaryReport
+{
+
+
+ private int _limit;
+ private String _propertyName;
+ private int _count;
+ private final ByteArrayOutputStream _bytesOutputStream = new ByteArrayOutputStream();
+ private final ObjectOutputStream _objectOutputStream;
+ public static final String NAME = "testBinary";
+
+ public TestBinaryReport()
+ {
+ try
+ {
+ _objectOutputStream = new ObjectOutputStream(_bytesOutputStream);
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ ;
+ }
+
+ @Override
+ public String getName()
+ {
+ return NAME;
+ }
+
+ @Override
+ public String getContentType()
+ {
+ return "application/octet-stream";
+ }
+
+ @Override
+ public void addMessage(final ReportableMessage reportableMessage)
+ {
+ if(_propertyName != null)
+ {
+ Object value = reportableMessage.getMessageHeader().getHeader(_propertyName);
+ if(value != null)
+ {
+ try
+ {
+ _objectOutputStream.writeObject(value);
+ }
+ catch (IOException e)
+ {
+ // ignore
+ }
+ }
+ }
+ _count++;
+ }
+
+ @Override
+ public boolean isComplete()
+ {
+ return _limit != 0 && _count >= _limit;
+ }
+
+ @Override
+ public byte[] getReport()
+ {
+ try
+ {
+ _objectOutputStream.flush();
+
+ return _bytesOutputStream.toByteArray();
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void setLimit(final String limit)
+ {
+ _limit = Integer.parseInt(limit);
+ }
+
+ public void setPropertyName(final String propertyName)
+ {
+ this._propertyName = propertyName;
+ }
+}
diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/report/TestTextReport.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/report/TestTextReport.java
new file mode 100644
index 0000000000..7f9e1e2962
--- /dev/null
+++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/report/TestTextReport.java
@@ -0,0 +1,84 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.management.plugin.report;
+
+import java.util.Arrays;
+
+public class TestTextReport extends QueueTextReport
+{
+ public static final String NAME = "testText";
+ private int _count;
+ private String _stringParam;
+ private String[] _stringArrayParam;
+
+ @Override
+ public String getName()
+ {
+ return NAME;
+ }
+
+ @Override
+ public String getContentType()
+ {
+ return "text/plain";
+ }
+
+ @Override
+ public void addMessage(final ReportableMessage reportableMessage)
+ {
+ _count++;
+ }
+
+ @Override
+ public boolean isComplete()
+ {
+ return false;
+ }
+
+ @Override
+ public String getReport()
+ {
+ StringBuilder result = new StringBuilder("There are " + _count + " messages on the queue.");
+ if(_stringParam != null)
+ {
+ result.append(" stringParam = " + _stringParam + ".");
+ }
+ if(_stringArrayParam != null)
+ {
+ result.append(" stringArrayParam = " + Arrays.asList(_stringArrayParam) + ".");
+ }
+ return result.toString();
+ }
+
+ @SuppressWarnings("unused")
+ public void setStringParam(final String value)
+ {
+ _stringParam = value;
+ }
+
+ @SuppressWarnings("unused")
+ public void setStringArrayParam(final String[] value)
+ {
+ _stringArrayParam = value;
+ }
+
+
+}
diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java
index b3c9bd911f..5fb73c8ee4 100644
--- a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java
+++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java
@@ -313,6 +313,7 @@ public class ConfiguredObjectToMapConverterTest extends TestCase
Map<String, ConfiguredObjectAttribute<?, ?>> attributeTypes = typeRegistry.getAttributeTypes(TestChild.class);
ConfiguredObjectAttribute secureAttribute = mock(ConfiguredObjectAttribute.class);
when(secureAttribute.isSecure()).thenReturn(true);
+ when(secureAttribute.isSecureValue(any())).thenReturn(true);
when(attributeTypes.get(eq("secureAttribute"))).thenReturn(secureAttribute);
TestChild mockChild = mock(TestChild.class);
diff --git a/qpid/java/broker-plugins/management-http/src/test/resources/META-INF/services/org.apache.qpid.server.management.plugin.report.QueueReport b/qpid/java/broker-plugins/management-http/src/test/resources/META-INF/services/org.apache.qpid.server.management.plugin.report.QueueReport
new file mode 100644
index 0000000000..7d25ec4378
--- /dev/null
+++ b/qpid/java/broker-plugins/management-http/src/test/resources/META-INF/services/org.apache.qpid.server.management.plugin.report.QueueReport
@@ -0,0 +1,2 @@
+org.apache.qpid.server.management.plugin.report.TestTextReport
+org.apache.qpid.server.management.plugin.report.TestBinaryReport
diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBean.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBean.java
index a016ff9d9d..0787e404fa 100644
--- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBean.java
+++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBean.java
@@ -100,7 +100,7 @@ public class ConnectionMBean extends AbstractStatisticsGatheringMBean<Connection
public String getObjectInstanceName()
{
- return ObjectName.quote(getRemoteAddress());
+ return ObjectName.quote(getConfiguredObject().getName());
}
@Override
diff --git a/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBeanTest.java b/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBeanTest.java
index 8754f9a465..232094ce9e 100644
--- a/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBeanTest.java
+++ b/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/ConnectionMBeanTest.java
@@ -159,9 +159,9 @@ public class ConnectionMBeanTest extends TestCase
public void testGetObjectInstanceName()
{
- String remoteAddress = "testRemoteAddress";
- String quotedRemoteAddress = "\"testRemoteAddress\"";
- when(_mockConnection.getAttribute(Connection.REMOTE_ADDRESS)).thenReturn(remoteAddress);
+ String name = "[1] 127.0.0.1:5555";
+ String quotedRemoteAddress = "\"" + name +"\"";
+ when(_mockConnection.getName()).thenReturn(name);
String objectInstanceName = _connectionMBean.getObjectInstanceName();
assertEquals(quotedRemoteAddress, objectInstanceName);
}