You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2015/01/27 16:00:16 UTC
svn commit: r1655057 [5/8] - in /qpid/branches/QPID-6262-JavaBrokerNIO: ./
qpid/ qpid/cpp/examples/messaging/ qpid/cpp/src/
qpid/cpp/src/qpid/amqp_0_10/ qpid/cpp/src/qpid/broker/
qpid/cpp/src/qpid/broker/amqp/ qpid/cpp/src/qpid/client/amqp0_10/ qpid/cp...
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImplTest.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImplTest.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImplTest.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImplTest.java Tue Jan 27 15:00:13 2015
@@ -73,7 +73,7 @@ public class ACLFileAccessControlProvide
}
catch (IllegalConfigurationException e)
{
- assertEquals("Unexpected exception message:" + e.getMessage(), String.format("ACL file '%s' is not found", aclFilePath ), e.getMessage());
+ assertEquals("Unexpected exception message:" + e.getMessage(), String.format("Cannot convert %s to a readable resource", aclFilePath ), e.getMessage());
}
}
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java Tue Jan 27 15:00:13 2015
@@ -122,6 +122,8 @@ public class AMQChannel
public static final int DEFAULT_PREFETCH = 4096;
private static final Logger _logger = Logger.getLogger(AMQChannel.class);
+ private final DefaultQueueAssociationClearingTask
+ _defaultQueueAssociationClearingTask = new DefaultQueueAssociationClearingTask();
//TODO use Broker property to configure message authorization requirements
private boolean _messageAuthorizationRequired = Boolean.getBoolean(BrokerProperties.PROPERTY_MSG_AUTH);
@@ -139,7 +141,7 @@ public class AMQChannel
private long _deliveryTag = 0;
/** A channel has a default queue (the last declared) that is used when no queue name is explicitly set */
- private AMQQueue _defaultQueue;
+ private volatile AMQQueue<?> _defaultQueue;
/** This tag is unique per subscription to a queue. The server returns this in response to a basic.consume request. */
private int _consumerTag;
@@ -180,11 +182,9 @@ public class AMQChannel
private LogSubject _logSubject;
private volatile boolean _rollingBack;
- private static final Runnable NULL_TASK = new Runnable() { public void run() {} };
private List<MessageInstance> _resendList = new ArrayList<MessageInstance>();
private static final
AMQShortString IMMEDIATE_DELIVERY_REPLY_TEXT = new AMQShortString("Immediate delivery is not possible.");
- private long _createTime = System.currentTimeMillis();
private final ClientDeliveryMethod _clientDeliveryMethod;
@@ -829,7 +829,7 @@ public class AMQChannel
getVirtualHost().getEventLogger().message(_logSubject, operationalLogMessage);
unsubscribeAllConsumers();
-
+ setDefaultQueue(null);
for (Action<? super AMQChannel> task : _taskList)
{
task.performAction(this);
@@ -1291,17 +1291,6 @@ public class AMQChannel
return "("+ _suspended.get() + ", " + _closing.get() + ", " + _connection.isClosing() + ") "+"["+ _connection.toString()+":"+_channelId+"]";
}
- public void setDefaultQueue(AMQQueue queue)
- {
- _defaultQueue = queue;
- }
-
- public AMQQueue getDefaultQueue()
- {
- return _defaultQueue;
- }
-
-
public boolean isClosing()
{
return _closing.get();
@@ -2123,32 +2112,32 @@ public class AMQChannel
catch (AMQQueue.ExistingExclusiveConsumer e)
{
_connection.closeConnection(AMQConstant.ACCESS_REFUSED,
- "Cannot subscribe to queue "
+ "Cannot subscribe to queue '"
+ queue1.getName()
- + " as it already has an existing exclusive consumer", _channelId);
+ + "' as it already has an existing exclusive consumer", _channelId);
}
catch (AMQQueue.ExistingConsumerPreventsExclusive e)
{
_connection.closeConnection(AMQConstant.ACCESS_REFUSED,
- "Cannot subscribe to queue "
+ "Cannot subscribe to queue '"
+ queue1.getName()
- + " exclusively as it already has a consumer", _channelId);
+ + "' exclusively as it already has a consumer", _channelId);
}
catch (AccessControlException e)
{
- _connection.closeConnection(AMQConstant.ACCESS_REFUSED, "Cannot subscribe to queue "
+ _connection.closeConnection(AMQConstant.ACCESS_REFUSED, "Cannot subscribe to queue '"
+ queue1.getName()
- + " permission denied", _channelId);
+ + "' permission denied", _channelId);
}
catch (MessageSource.ConsumerAccessRefused consumerAccessRefused)
{
_connection.closeConnection(AMQConstant.ACCESS_REFUSED,
- "Cannot subscribe to queue "
+ "Cannot subscribe to queue '"
+ queue1.getName()
- + " as it already has an incompatible exclusivity policy", _channelId);
+ + "' as it already has an incompatible exclusivity policy", _channelId);
}
@@ -2257,7 +2246,7 @@ public class AMQChannel
// if the exchange does not exist we raise a channel exception
if (destination == null)
{
- closeChannel(AMQConstant.NOT_FOUND, "Unknown exchange name: " + exchangeName);
+ closeChannel(AMQConstant.NOT_FOUND, "Unknown exchange name: '" + exchangeName + "'");
}
else
{
@@ -2815,15 +2804,14 @@ public class AMQChannel
exchange = virtualHost.getExchange(exchangeName.toString());
if (exchange == null)
{
- closeChannel(AMQConstant.NOT_FOUND, "Unknown exchange: " + exchangeName);
+ closeChannel(AMQConstant.NOT_FOUND, "Unknown exchange: '" + exchangeName + "'");
}
else if (!(type == null || type.length() == 0) && !exchange.getType().equals(type.asString()))
{
- _connection.closeConnection(AMQConstant.NOT_ALLOWED, "Attempt to redeclare exchange: "
- +
- exchangeName
- + " of type "
+ _connection.closeConnection(AMQConstant.NOT_ALLOWED, "Attempt to redeclare exchange: '"
+ + exchangeName
+ + "' of type "
+ exchange.getType()
+ " to "
+ type
@@ -2850,7 +2838,6 @@ public class AMQChannel
{
attributes.putAll(FieldTable.convertToMap(arguments));
}
- attributes.put(Exchange.ID, null);
attributes.put(Exchange.NAME, name);
attributes.put(Exchange.TYPE, typeString);
attributes.put(Exchange.DURABLE, durable);
@@ -2875,8 +2862,8 @@ public class AMQChannel
catch (ReservedExchangeNameException e)
{
_connection.closeConnection(AMQConstant.NOT_ALLOWED,
- "Attempt to declare exchange: " + exchangeName +
- " which begins with reserved prefix.", getChannelId());
+ "Attempt to declare exchange: '" + exchangeName +
+ "' which begins with reserved prefix.", getChannelId());
}
@@ -2885,8 +2872,8 @@ public class AMQChannel
exchange = e.getExistingExchange();
if (!new AMQShortString(exchange.getType()).equals(type))
{
- _connection.closeConnection(AMQConstant.NOT_ALLOWED, "Attempt to redeclare exchange: "
- + exchangeName + " of type "
+ _connection.closeConnection(AMQConstant.NOT_ALLOWED, "Attempt to redeclare exchange: '"
+ + exchangeName + "' of type "
+ exchange.getType()
+ " to " + type + ".", getChannelId());
@@ -2922,7 +2909,7 @@ public class AMQChannel
// note - since 0-8/9/9-1 can't set the alt. exchange this exception should never occur
final String message = "Unknown alternate exchange "
+ (e.getName() != null
- ? "name: \"" + e.getName() + "\""
+ ? "name: '" + e.getName() + "'"
: "id: " + e.getId());
_connection.closeConnection(AMQConstant.NOT_FOUND, message, getChannelId());
@@ -2968,7 +2955,7 @@ public class AMQChannel
final ExchangeImpl exchange = virtualHost.getExchange(exchangeName);
if (exchange == null)
{
- closeChannel(AMQConstant.NOT_FOUND, "No such exchange: " + exchangeStr);
+ closeChannel(AMQConstant.NOT_FOUND, "No such exchange: '" + exchangeStr + "'");
}
else
{
@@ -3045,7 +3032,7 @@ public class AMQChannel
else if (isDefaultExchange(exchange))
{
_connection.closeConnection(AMQConstant.NOT_ALLOWED,
- "Cannot bind the queue " + queueName + " to the default exchange", getChannelId());
+ "Cannot bind the queue '" + queueName + "' to the default exchange", getChannelId());
}
else
@@ -3057,7 +3044,7 @@ public class AMQChannel
if (exch == null)
{
closeChannel(AMQConstant.NOT_FOUND,
- "Exchange " + exchangeName + " does not exist.");
+ "Exchange '" + exchangeName + "' does not exist.");
}
else
{
@@ -3137,7 +3124,7 @@ public class AMQChannel
queueName = queueStr.intern();
}
- AMQQueue queue;
+ AMQQueue<?> queue;
//TODO: do we need to check that the queue already exists with exactly the same "configuration"?
@@ -3148,19 +3135,19 @@ public class AMQChannel
if (queue == null)
{
closeChannel(AMQConstant.NOT_FOUND,
- "Queue: "
+ "Queue: '"
+ queueName
- + " not found on VirtualHost("
- + virtualHost
- + ").");
+ + "' not found on VirtualHost '"
+ + virtualHost.getName()
+ + "'.");
}
else
{
if (!queue.verifySessionAccess(this))
{
- _connection.closeConnection(AMQConstant.NOT_ALLOWED, "Queue "
+ _connection.closeConnection(AMQConstant.NOT_ALLOWED, "Queue '"
+ queue.getName()
- + " is exclusive, but not created on this Connection.", getChannelId());
+ + "' is exclusive, but not created on this Connection.", getChannelId());
}
else
{
@@ -3190,7 +3177,6 @@ public class AMQChannel
QueueArgumentsConverter.convertWireArgsToModel(FieldTable.convertToMap(arguments));
final String queueNameString = AMQShortString.toString(queueName);
attributes.put(Queue.NAME, queueNameString);
- attributes.put(Queue.ID, UUID.randomUUID());
attributes.put(Queue.DURABLE, durable);
LifetimePolicy lifetimePolicy;
@@ -3237,9 +3223,9 @@ public class AMQChannel
if (!queue.verifySessionAccess(this))
{
- _connection.closeConnection(AMQConstant.NOT_ALLOWED, "Queue "
+ _connection.closeConnection(AMQConstant.NOT_ALLOWED, "Queue '"
+ queue.getName()
- + " is exclusive, but not created on this Connection.", getChannelId());
+ + "' is exclusive, but not created on this Connection.", getChannelId());
}
else if (queue.isExclusive() != exclusive)
@@ -3333,27 +3319,27 @@ public class AMQChannel
if (queue == null)
{
- closeChannel(AMQConstant.NOT_FOUND, "Queue " + queueName + " does not exist.");
+ closeChannel(AMQConstant.NOT_FOUND, "Queue '" + queueName + "' does not exist.");
}
else
{
if (ifEmpty && !queue.isEmpty())
{
- closeChannel(AMQConstant.IN_USE, "Queue: " + queueName + " is not empty.");
+ closeChannel(AMQConstant.IN_USE, "Queue: '" + queueName + "' is not empty.");
}
else if (ifUnused && !queue.isUnused())
{
// TODO - Error code
- closeChannel(AMQConstant.IN_USE, "Queue: " + queueName + " is still used.");
+ closeChannel(AMQConstant.IN_USE, "Queue: '" + queueName + "' is still used.");
}
else
{
if (!queue.verifySessionAccess(this))
{
- _connection.closeConnection(AMQConstant.NOT_ALLOWED, "Queue "
+ _connection.closeConnection(AMQConstant.NOT_ALLOWED, "Queue '"
+ queue.getName()
- + " is exclusive, but not created on this Connection.", getChannelId());
+ + "' is exclusive, but not created on this Connection.", getChannelId());
}
else
@@ -3393,7 +3379,7 @@ public class AMQChannel
}
else if ((queueName != null) && (queue = virtualHost.getQueue(queueName.toString())) == null)
{
- closeChannel(AMQConstant.NOT_FOUND, "Queue " + queueName + " does not exist.");
+ closeChannel(AMQConstant.NOT_FOUND, "Queue '" + queueName + "' does not exist.");
}
else if (!queue.verifySessionAccess(this))
{
@@ -3426,14 +3412,14 @@ public class AMQChannel
@Override
public void receiveQueueUnbind(final AMQShortString queueName,
final AMQShortString exchange,
- final AMQShortString routingKey,
+ final AMQShortString bindingKey,
final FieldTable arguments)
{
if(_logger.isDebugEnabled())
{
_logger.debug("RECV[" + _channelId + "] QueueUnbind[" +" queue: " + queueName +
" exchange: " + exchange +
- " bindingKey: " + routingKey +
+ " bindingKey: " + bindingKey +
" arguments: " + arguments + " ]");
}
@@ -3450,14 +3436,14 @@ public class AMQChannel
{
String message = useDefaultQueue
? "No default queue defined on channel and queue was null"
- : "Queue " + queueName + " does not exist.";
+ : "Queue '" + queueName + "' does not exist.";
closeChannel(AMQConstant.NOT_FOUND, message);
}
else if (isDefaultExchange(exchange))
{
- _connection.closeConnection(AMQConstant.NOT_ALLOWED, "Cannot unbind the queue "
+ _connection.closeConnection(AMQConstant.NOT_ALLOWED, "Cannot unbind the queue '"
+ queue.getName()
- + " from the default exchange", getChannelId());
+ + "' from the default exchange", getChannelId());
}
else
@@ -3467,9 +3453,9 @@ public class AMQChannel
if (exch == null)
{
- closeChannel(AMQConstant.NOT_FOUND, "Exchange " + exchange + " does not exist.");
+ closeChannel(AMQConstant.NOT_FOUND, "Exchange '" + exchange + "' does not exist.");
}
- else if (!exch.hasBinding(String.valueOf(routingKey), queue))
+ else if (!exch.hasBinding(String.valueOf(bindingKey), queue))
{
closeChannel(AMQConstant.NOT_FOUND, "No such binding");
}
@@ -3477,7 +3463,7 @@ public class AMQChannel
{
try
{
- exch.deleteBinding(String.valueOf(routingKey), queue);
+ exch.deleteBinding(String.valueOf(bindingKey), queue);
final AMQMethodBody responseBody = _connection.getMethodRegistry().createQueueUnbindOkBody();
sync();
@@ -3598,4 +3584,37 @@ public class AMQChannel
return exchangeName == null || AMQShortString.EMPTY_STRING.equals(exchangeName);
}
+ private void setDefaultQueue(AMQQueue<?> queue)
+ {
+ AMQQueue<?> currentDefaultQueue = _defaultQueue;
+ if (queue != currentDefaultQueue)
+ {
+ if (currentDefaultQueue != null)
+ {
+ currentDefaultQueue.removeDeleteTask(_defaultQueueAssociationClearingTask);
+ }
+ if (queue != null)
+ {
+ queue.addDeleteTask(_defaultQueueAssociationClearingTask);
+ }
+ }
+ _defaultQueue = queue;
+ }
+
+ private AMQQueue getDefaultQueue()
+ {
+ return _defaultQueue;
+ }
+
+ private class DefaultQueueAssociationClearingTask implements Action<AMQQueue>
+ {
+ @Override
+ public void performAction(final AMQQueue queue)
+ {
+ if ( queue == _defaultQueue)
+ {
+ _defaultQueue = null;
+ }
+ }
+ }
}
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java Tue Jan 27 15:00:13 2015
@@ -518,6 +518,11 @@ public class Session_1_0 implements Sess
}
_connection.sessionEnded(this);
+ performCloseTasks();
+ if(_modelObject != null)
+ {
+ _modelObject.delete();
+ }
}
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbySystemConfigImpl.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbySystemConfigImpl.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbySystemConfigImpl.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbySystemConfigImpl.java Tue Jan 27 15:00:13 2015
@@ -20,7 +20,8 @@
*/
package org.apache.qpid.server.store.derby;
-import org.apache.qpid.server.BrokerOptions;
+import java.util.Map;
+
import org.apache.qpid.server.configuration.updater.TaskExecutor;
import org.apache.qpid.server.logging.EventLogger;
import org.apache.qpid.server.logging.LogRecorder;
@@ -48,10 +49,10 @@ public class DerbySystemConfigImpl exten
public DerbySystemConfigImpl(final TaskExecutor taskExecutor,
final EventLogger eventLogger,
final LogRecorder logRecorder,
- final BrokerOptions brokerOptions,
+ final Map<String,Object> attributes,
final BrokerShutdownProvider brokerShutdownProvider)
{
- super(taskExecutor, eventLogger, logRecorder, brokerOptions, brokerShutdownProvider);
+ super(taskExecutor, eventLogger, logRecorder, attributes, brokerShutdownProvider);
}
@Override
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeImpl.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeImpl.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeImpl.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/virtualhostnode/derby/DerbyVirtualHostNodeImpl.java Tue Jan 27 15:00:13 2015
@@ -21,6 +21,8 @@
package org.apache.qpid.server.virtualhostnode.derby;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Map;
import org.apache.qpid.server.logging.messages.ConfigStoreMessages;
@@ -33,7 +35,9 @@ import org.apache.qpid.server.store.Dura
import org.apache.qpid.server.store.derby.DerbyConfigurationStore;
import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode;
-@ManagedObject( category = false, type = DerbyVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE )
+@ManagedObject( category = false,
+ type = DerbyVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE,
+ validChildTypes = "org.apache.qpid.server.virtualhostnode.derby.DerbyVirtualHostNodeImpl#getSupportedChildTypes()" )
public class DerbyVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<DerbyVirtualHostNodeImpl> implements DerbyVirtualHostNode<DerbyVirtualHostNodeImpl>
{
public static final String VIRTUAL_HOST_NODE_TYPE = "DERBY";
@@ -70,4 +74,10 @@ public class DerbyVirtualHostNodeImpl ex
{
return getClass().getSimpleName() + " [id=" + getId() + ", name=" + getName() + ", storePath=" + getStorePath() + "]";
}
+
+
+ public static Map<String, Collection<String>> getSupportedChildTypes()
+ {
+ return Collections.singletonMap(VirtualHost.class.getSimpleName(), getSupportedVirtualHostTypes(true));
+ }
}
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCSystemConfigImpl.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCSystemConfigImpl.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCSystemConfigImpl.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCSystemConfigImpl.java Tue Jan 27 15:00:13 2015
@@ -20,7 +20,8 @@
*/
package org.apache.qpid.server.store.jdbc;
-import org.apache.qpid.server.BrokerOptions;
+import java.util.Map;
+
import org.apache.qpid.server.configuration.updater.TaskExecutor;
import org.apache.qpid.server.logging.EventLogger;
import org.apache.qpid.server.logging.LogRecorder;
@@ -50,10 +51,10 @@ public class JDBCSystemConfigImpl extend
public JDBCSystemConfigImpl(final TaskExecutor taskExecutor,
final EventLogger eventLogger,
final LogRecorder logRecorder,
- final BrokerOptions brokerOptions,
+ final Map<String,Object> attributes,
final BrokerShutdownProvider brokerShutdownProvider)
{
- super(taskExecutor, eventLogger, logRecorder, brokerOptions, brokerShutdownProvider);
+ super(taskExecutor, eventLogger, logRecorder, attributes, brokerShutdownProvider);
}
@Override
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNodeImpl.java Tue Jan 27 15:00:13 2015
@@ -20,6 +20,8 @@
*/
package org.apache.qpid.server.virtualhostnode.jdbc;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Map;
import org.apache.qpid.server.model.Broker;
@@ -31,7 +33,8 @@ import org.apache.qpid.server.store.Dura
import org.apache.qpid.server.store.jdbc.GenericJDBCConfigurationStore;
import org.apache.qpid.server.virtualhostnode.AbstractStandardVirtualHostNode;
-@ManagedObject(type = JDBCVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE, category = false )
+@ManagedObject(type = JDBCVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE, category = false ,
+ validChildTypes = "org.apache.qpid.server.virtualhostnode.jdbc.JDBCVirtualHostNodeImpl#getSupportedChildTypes()")
public class JDBCVirtualHostNodeImpl extends AbstractStandardVirtualHostNode<JDBCVirtualHostNodeImpl> implements JDBCVirtualHostNode<JDBCVirtualHostNodeImpl>
{
public static final String VIRTUAL_HOST_NODE_TYPE = "JDBC";
@@ -97,4 +100,10 @@ public class JDBCVirtualHostNodeImpl ext
", connectionPoolType=" + getConnectionPoolType() +
", username=" + getUsername() + "]";
}
+
+
+ public static Map<String, Collection<String>> getSupportedChildTypes()
+ {
+ return Collections.singletonMap(VirtualHost.class.getSimpleName(), getSupportedVirtualHostTypes(true));
+ }
}
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java Tue Jan 27 15:00:13 2015
@@ -54,9 +54,6 @@ public class HelperServlet extends Abstr
_mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
Action[] supportedActions = {
- new ListBrokerAttribute(Broker.SUPPORTED_VIRTUALHOSTNODE_TYPES, "ListVirtualHostNodeTypes"),
- new ListBrokerAttribute(Broker.SUPPORTED_VIRTUALHOST_TYPES, "ListVirtualHostTypes"),
- new ListBrokerAttribute(Broker.SUPPORTED_PREFERENCES_PROVIDER_TYPES, "ListPreferencesProvidersTypes"),
new ListBrokerAttribute(Broker.PRODUCT_VERSION, "version"),
new ListGroupProviderAttributes(),
new ListAccessControlProviderAttributes(),
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java Tue Jan 27 15:00:13 2015
@@ -24,6 +24,7 @@ import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -101,9 +102,24 @@ public class MetaDataServlet extends Abs
Map<String,Object> typeDetails = new LinkedHashMap<>();
typeDetails.put("attributes", processAttributes(type));
typeDetails.put("managedInterfaces", getManagedInterfaces(type));
+ typeDetails.put("validChildTypes", getValidChildTypes(type));
return typeDetails;
}
+ private Map<String, Collection<String>> getValidChildTypes(final Class<? extends ConfiguredObject> type)
+ {
+ Map<String, Collection<String>> validChildTypes = new HashMap<>();
+ for(Class<? extends ConfiguredObject> childType : _instance.getChildTypes(ConfiguredObjectTypeRegistry.getCategory(type)))
+ {
+ Collection<String> validValues = _instance.getTypeRegistry().getValidChildTypes(type, childType);
+ if(validValues != null)
+ {
+ validChildTypes.put(childType.getSimpleName(), validValues);
+ }
+ }
+ return validChildTypes;
+ }
+
private Set<String> getManagedInterfaces(Class<? extends ConfiguredObject> type)
{
Set<String> interfaces = new HashSet<>();
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java Tue Jan 27 15:00:13 2015
@@ -36,7 +36,6 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
-import javax.xml.bind.DatatypeConverter;
import org.apache.log4j.Logger;
import org.codehaus.jackson.map.ObjectMapper;
@@ -46,6 +45,7 @@ import org.apache.qpid.server.configurat
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.util.urlstreamhandler.data.Handler;
+import org.apache.qpid.util.DataUrlUtils;
public class RestServlet extends AbstractServlet
{
@@ -62,13 +62,20 @@ public class RestServlet extends Abstrac
public static final String INHERITED_ACTUALS_PARAM = "inheritedActuals";
public static final String EXTRACT_INITIAL_CONFIG_PARAM = "extractInitialConfig";
+ /**
+ * Signifies that the agent wishes the servlet to set the Content-Disposition on the
+ * response with the value attachment. This filename will be derived from the parameter value.
+ */
+ public static final String CONTENT_DISPOSITION_ATTACHMENT_FILENAME_PARAM = "contentDispositionAttachmentFilename";
+
public static final Set<String> RESERVED_PARAMS =
new HashSet<>(Arrays.asList(DEPTH_PARAM,
SORT_PARAM,
ACTUALS_PARAM,
INCLUDE_SYS_CONTEXT_PARAM,
EXTRACT_INITIAL_CONFIG_PARAM,
- INHERITED_ACTUALS_PARAM));
+ INHERITED_ACTUALS_PARAM,
+ CONTENT_DISPOSITION_ATTACHMENT_FILENAME_PARAM));
private Class<? extends ConfiguredObject>[] _hierarchy;
@@ -316,19 +323,29 @@ public class RestServlet extends Abstrac
@Override
protected void doGetWithSubjectAndActor(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
+ // TODO - sort special params, everything else should act as a filter
+ String attachmentFilename = request.getParameter(CONTENT_DISPOSITION_ATTACHMENT_FILENAME_PARAM);
+ boolean extractInitialConfig = getBooleanParameterFromRequest(request, EXTRACT_INITIAL_CONFIG_PARAM);
+
response.setContentType("application/json");
response.setStatus(HttpServletResponse.SC_OK);
- setCachingHeadersOnResponse(response);
+ if (attachmentFilename == null)
+ {
+ setCachingHeadersOnResponse(response);
+ }
+ else
+ {
+ setContentDispositionHeaderIfNecessary(response, attachmentFilename);
+ }
Collection<ConfiguredObject<?>> allObjects = getObjects(request);
- // TODO - sort special params, everything else should act as a filter
- boolean extractInitialConfig = getBooleanParameterFromRequest(request, EXTRACT_INITIAL_CONFIG_PARAM);
int depth;
boolean actuals;
boolean includeSystemContext;
boolean inheritedActuals;
+
if(extractInitialConfig)
{
depth = Integer.MAX_VALUE;
@@ -344,20 +361,35 @@ public class RestServlet extends Abstrac
inheritedActuals = getBooleanParameterFromRequest(request, INHERITED_ACTUALS_PARAM);
}
- List<Map<String, Object>> output = new ArrayList<Map<String, Object>>();
+ List<Map<String, Object>> output = new ArrayList<>();
for(ConfiguredObject configuredObject : allObjects)
{
output.add(_objectConverter.convertObjectToMap(configuredObject, getConfiguredClass(),
depth, actuals, inheritedActuals, includeSystemContext, extractInitialConfig));
}
+
Writer writer = getOutputWriter(request, response);
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
mapper.writeValue(writer, extractInitialConfig && output.size() == 1 ? output.get(0) : output);
+ }
- response.setContentType("application/json");
- response.setStatus(HttpServletResponse.SC_OK);
+ private void setContentDispositionHeaderIfNecessary(final HttpServletResponse response,
+ final String attachmentFilename)
+ {
+ if (attachmentFilename != null)
+ {
+ String filenameRfc2183 = ensureFilenameIsRfc2183(attachmentFilename);
+ if (filenameRfc2183.length() > 0)
+ {
+ response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", filenameRfc2183));
+ }
+ else
+ {
+ response.setHeader("Content-disposition", String.format("attachment")); // Agent will allow user to choose a name
+ }
+ }
}
private Class<? extends ConfiguredObject> getConfiguredClass()
@@ -407,8 +439,7 @@ public class RestServlet extends Abstrac
{
byte[] data = new byte[(int) part.getSize()];
part.getInputStream().read(data);
- StringBuilder inlineURL = new StringBuilder("data:;base64,");
- inlineURL.append(DatatypeConverter.printBase64Binary(data));
+ String inlineURL = DataUrlUtils.getDataUrlForBytes(data);
fileUploads.put(part.getName(),inlineURL.toString());
}
}
@@ -671,4 +702,10 @@ public class RestServlet extends Abstrac
return Boolean.parseBoolean(request.getParameter(paramName));
}
+ private String ensureFilenameIsRfc2183(final String requestedFilename)
+ {
+ String fileNameRfc2183 = requestedFilename.replaceAll("[\\P{InBasic_Latin}\\\\:/]", "");
+ return fileNameRfc2183;
+ }
+
}
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHostNodeAndVirtualHost.html
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHostNodeAndVirtualHost.html?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHostNodeAndVirtualHost.html (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHostNodeAndVirtualHost.html Tue Jan 27 15:00:13 2015
@@ -59,6 +59,34 @@
<div id="addVirtualHostNode.typeFields"></div>
+ <div id="addVirtualHostNode.uploadFields" class="clear">
+ <div class="formLabel-labelCell">
+ <label for="addVirtualHostNode.upload">Upload virtualhost configuration from file:</label>
+ </div>
+ <div class="formLabel-controlCell">
+ <input id="addVirtualHostNode.upload" type="checkbox"
+ data-dojo-type="dijit.form.CheckBox"
+ data-dojo-props="
+ name: 'upload'" />
+ </div>
+ <div id="addVirtualHostNode.fileFields" class="clear">
+ <div class="formLabel-labelCell">
+ <label for="addVirtualHostNode.file">Select JSON file*:</label>
+ </div>
+ <div class="tableContainer-valueCell formLabel-controlCell">
+ <input type="file" id="addVirtualHostNode.file"
+ multiple="false"
+ data-dojo-type="dojox.form.Uploader"
+ data-dojo-props="
+ label: 'Select'"/>
+ <span id="addVirtualHostNode.selectedFile" class="infoMessage"></span>
+ <span id="addVirtualHostNode.selectedFileStatus"></span>
+ </div>
+ </div>
+ </div>
+
+ <div class="clear"></div>
+
<div data-dojo-type="dijit/TitlePane" data-dojo-props="title: 'Context variables', open: false">
<div id="addVirtualHostNode.context"></div>
</div>
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css Tue Jan 27 15:00:13 2015
@@ -215,6 +215,30 @@ div .messages {
height: 16px;
}
+.loadingIcon
+{
+ background: url("../dojo/dojox/image/resources/images/loading.gif") no-repeat;
+ width: 16px;
+ height: 16px;
+ background-size: contain;
+ display: inline-block;
+}
+
+.loadedIcon
+{
+ background: url("../dojo/dijit/icons/images/commonIconsObjActEnabled_rtl.png") no-repeat;
+ background-position: -352px -0px;
+ width: 16px;
+ height: 16px;
+ display: inline-block;
+}
+
+.fileUpload
+{
+ float: right;
+ padding: 5px;
+}
+
.infoMessage
{
padding: 5px;
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/index.html Tue Jan 27 15:00:13 2015
@@ -25,6 +25,7 @@
<link rel="stylesheet" href="dojo/dojox/grid/enhanced/resources/claro/EnhancedGrid.css">
<link rel="stylesheet" href="dojo/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css">
<link rel="stylesheet" href="dojo/dojox/form/resources/CheckedMultiSelect.css">
+ <link rel="stylesheet" href="dojo/dojox/form/resources/FileInput.css" />
<link rel="stylesheet" href="css/common.css" media="screen">
<script>
function getContextPath()
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js Tue Jan 27 15:00:13 2015
@@ -69,7 +69,13 @@ define(["dojo/_base/xhr",
implementsManagedInterface: function (category, type, managedInterfaceName)
{
return this.getMetaData(category, type).managedInterfaces.indexOf(managedInterfaceName) >= 0;
+ },
+ validChildTypes: function (category, type, childCategory)
+ {
+ var metaData = this.getMetaData(category, type);
+ return metaData ? metaData.validChildTypes[childCategory] : [];
}
+
};
metadata._init();
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js Tue Jan 27 15:00:13 2015
@@ -159,8 +159,8 @@ define(["dojo/_base/xhr",
this.deletePreferencesProviderButton = query(".deletePreferencesProviderButton", node)[0];
this.preferencesProviderAttributes = dom.byId("preferencesProviderAttributes")
this.preferencesNode = query(".preferencesProviderDetails", node)[0];
- this.authenticationProviderDetailsContainer = query(".authenticationProviderDetails", node)[0];
+this.authenticationProviderDetailsContainer = query(".authenticationProviderDetails", node)[0];
this.query = "api/latest/authenticationprovider/" + encodeURIComponent(authProviderObj.name);
}
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js Tue Jan 27 15:00:13 2015
@@ -23,6 +23,7 @@ define(["dojo/_base/xhr",
"dojo/query",
"dojo/json",
"dojo/_base/connect",
+ "dojo/store/Memory",
"qpid/common/properties",
"qpid/common/updater",
"qpid/common/util",
@@ -33,7 +34,7 @@ define(["dojo/_base/xhr",
"qpid/management/addAuthenticationProvider",
"qpid/management/addVirtualHostNodeAndVirtualHost",
"qpid/management/addPort",
- "qpid/management/addKeystore",
+ "qpid/management/addStore",
"qpid/management/addGroupProvider",
"qpid/management/addAccessControlProvider",
"qpid/management/editBroker",
@@ -50,8 +51,8 @@ define(["dojo/_base/xhr",
"dijit/Menu",
"dijit/MenuItem",
"dojo/domReady!"],
- function (xhr, parser, query, json, connect, properties, updater, util, UpdatableStore, EnhancedGrid, registry, entities,
- addAuthenticationProvider, addVirtualHostNodeAndVirtualHost, addPort, addKeystore, addGroupProvider, addAccessControlProvider, editBroker) {
+ function (xhr, parser, query, json, connect, memory, properties, updater, util, UpdatableStore, EnhancedGrid, registry, entities,
+ addAuthenticationProvider, addVirtualHostNodeAndVirtualHost, addPort, addStore, addGroupProvider, addAccessControlProvider, editBroker) {
var brokerAttributeNames = ["name", "operatingSystem", "platform", "productVersion", "modelVersion",
"defaultVirtualHost", "statisticsReportingPeriod", "statisticsReportingResetEnabled",
@@ -153,7 +154,11 @@ define(["dojo/_base/xhr",
var addKeystoreButton = query(".addKeystore", contentPane.containerNode)[0];
connect.connect(registry.byNode(addKeystoreButton), "onClick",
- function(evt){ addKeystore.showKeystoreDialog() });
+ function(evt)
+ {
+ addStore.setupTypeStore("KeyStore");
+ addStore.show();
+ });
var deleteKeystore = query(".deleteKeystore", contentPane.containerNode)[0];
connect.connect(registry.byNode(deleteKeystore), "onClick",
@@ -168,7 +173,11 @@ define(["dojo/_base/xhr",
var addTruststoreButton = query(".addTruststore", contentPane.containerNode)[0];
connect.connect(registry.byNode(addTruststoreButton), "onClick",
- function(evt){ addKeystore.showTruststoreDialog() });
+ function(evt)
+ {
+ addStore.setupTypeStore("TrustStore");
+ addStore.show();
+ });
var deleteTruststore = query(".deleteTruststore", contentPane.containerNode)[0];
connect.connect(registry.byNode(deleteTruststore), "onClick",
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/KeyStore.js
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/KeyStore.js?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/KeyStore.js (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/KeyStore.js Tue Jan 27 15:00:13 2015
@@ -29,16 +29,15 @@ define(["dojo/dom",
"qpid/common/updater",
"qpid/common/util",
"qpid/common/formatter",
- "qpid/management/addKeystore",
+ "qpid/management/addStore",
"dojo/domReady!"],
- function (dom, xhr, parser, query, connect, registry, entities, properties, updater, util, formatter, addKeystore) {
+ function (dom, xhr, parser, query, connect, registry, entities, properties, updater, util, formatter, addStore) {
- function KeyStore(name, parent, controller, objectType) {
+ function KeyStore(name, parent, controller) {
this.keyStoreName = name;
this.controller = controller;
this.modelObj = { type: "keystore", name: name, parent: parent};
this.url = "api/latest/keystore/" + encodeURIComponent(name);
- this.dialog = addKeystore.showKeystoreDialog;
}
KeyStore.prototype.getTitle = function() {
@@ -48,7 +47,7 @@ define(["dojo/dom",
KeyStore.prototype.open = function(contentPane) {
var that = this;
this.contentPane = contentPane;
- xhr.get({url: "showKeyStore.html",
+ xhr.get({url: "showStore.html",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
@@ -60,22 +59,22 @@ define(["dojo/dom",
that.keyStoreUpdater.update();
- var deleteKeyStoreButton = query(".deleteKeyStoreButton", contentPane.containerNode)[0];
+ var deleteKeyStoreButton = query(".deleteStoreButton", contentPane.containerNode)[0];
var node = registry.byNode(deleteKeyStoreButton);
connect.connect(node, "onClick",
function(evt){
that.deleteKeyStore();
});
- var editKeyStoreButton = query(".editKeyStoreButton", contentPane.containerNode)[0];
+ var editKeyStoreButton = query(".editStoreButton", contentPane.containerNode)[0];
var node = registry.byNode(editKeyStoreButton);
connect.connect(node, "onClick",
function(evt){
xhr.get({url: that.url, sync: properties.useSyncGet, handleAs: "json", content: { actuals: true }})
.then(function(data)
{
- // calls showKeystoreDialog
- that.dialog(data[0], that.url);
+ addStore.setupTypeStore("KeyStore");
+ addStore.show(data[0], that.url);
});
});
}});
@@ -88,9 +87,10 @@ define(["dojo/dom",
function KeyStoreUpdater(containerNode, keyStoreObj, controller, url)
{
var that = this;
+ this.keyStoreDetailsContainer = query(".typeFieldsContainer", containerNode)[0];
function findNode(name) {
- return query("." + name + "Value", containerNode)[0];
+ return query("." + name, containerNode)[0];
}
function storeNodes(names)
@@ -101,12 +101,8 @@ define(["dojo/dom",
}
storeNodes(["name",
- "path",
- "keyStoreType",
- "keyStoreState",
- "keyManagerFactoryAlgorithm",
- "certificateAlias",
- "peersOnly"
+ "type",
+ "state"
]);
this.query = url;
@@ -122,22 +118,27 @@ define(["dojo/dom",
KeyStoreUpdater.prototype.updateHeader = function()
{
this.name.innerHTML = entities.encode(String(this.keyStoreData[ "name" ]));
- this.path.innerHTML = entities.encode(String(this.keyStoreData[ "path" ]));
- this.keyStoreType.innerHTML = entities.encode(String(this.keyStoreData[ "keyStoreType" ]));
- this.keyStoreState.innerHTML = entities.encode(String(this.keyStoreData[ "state" ]));
- this.keyManagerFactoryAlgorithm.innerHTML = entities.encode(String(this.keyStoreData[ "keyManagerFactoryAlgorithm" ]));
- this.certificateAlias.innerHTML = this.keyStoreData[ "certificateAlias" ] ? entities.encode(String( this.keyStoreData[ "certificateAlias" ])) : "";
+ this.type.innerHTML = entities.encode(String(this.keyStoreData[ "type" ]));
+ this.state.innerHTML = entities.encode(String(this.keyStoreData[ "state" ]));
};
KeyStoreUpdater.prototype.update = function()
{
- var thisObj = this;
+ var that = this;
xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}).then(function(data)
{
- thisObj.keyStoreData = data[0];
- thisObj.updateHeader();
+ that.keyStoreData = data[0];
+ that.updateHeader();
+
+ require(["qpid/management/store/" + encodeURIComponent(that.keyStoreData.type.toLowerCase()) + "/show"],
+ function(DetailsUI)
+ {
+ that.details = new DetailsUI({containerNode:that.keyStoreDetailsContainer, parent: that});
+ that.details.update(that.keyStoreData);
+ }
+ );
});
};
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/TrustStore.js
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/TrustStore.js?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/TrustStore.js (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/TrustStore.js Tue Jan 27 15:00:13 2015
@@ -29,16 +29,15 @@ define(["dojo/dom",
"qpid/common/updater",
"qpid/common/util",
"qpid/common/formatter",
- "qpid/management/addKeystore",
+ "qpid/management/addStore",
"dojo/domReady!"],
- function (dom, xhr, parser, query, connect, registry, entities, properties, updater, util, formatter, addKeystore) {
+ function (dom, xhr, parser, query, connect, registry, entities, properties, updater, util, formatter, addStore) {
function TrustStore(name, parent, controller) {
this.keyStoreName = name;
this.controller = controller;
this.modelObj = { type: "truststore", name: name, parent: parent};
this.url = "api/latest/truststore/" + encodeURIComponent(name);
- this.dialog = addKeystore.showTruststoreDialog;
}
TrustStore.prototype.getTitle = function() {
@@ -48,7 +47,7 @@ define(["dojo/dom",
TrustStore.prototype.open = function(contentPane) {
var that = this;
this.contentPane = contentPane;
- xhr.get({url: "showTrustStore.html",
+ xhr.get({url: "showStore.html",
sync: true,
load: function(data) {
contentPane.containerNode.innerHTML = data;
@@ -60,28 +59,27 @@ define(["dojo/dom",
that.keyStoreUpdater.update();
- var deleteTrustStoreButton = query(".deleteTrustStoreButton", contentPane.containerNode)[0];
+ var deleteTrustStoreButton = query(".deleteStoreButton", contentPane.containerNode)[0];
var node = registry.byNode(deleteTrustStoreButton);
connect.connect(node, "onClick",
function(evt){
that.deleteKeyStore();
});
- var editTrustStoreButton = query(".editTrustStoreButton", contentPane.containerNode)[0];
+ var editTrustStoreButton = query(".editStoreButton", contentPane.containerNode)[0];
var node = registry.byNode(editTrustStoreButton);
connect.connect(node, "onClick",
function(evt){
xhr.get({url: that.url, sync: properties.useSyncGet, handleAs: "json", content: { actuals: true }})
.then(function(data)
{
- that.dialog(data[0], that.url);
+ addStore.setupTypeStore("TrustStore");
+ addStore.show(data[0], that.url);
});
});
}});
};
-
-
TrustStore.prototype.close = function() {
updater.remove( this.keyStoreUpdater );
};
@@ -89,9 +87,10 @@ define(["dojo/dom",
function KeyStoreUpdater(containerNode, keyStoreObj, controller, url)
{
var that = this;
+ this.keyStoreDetailsContainer = query(".typeFieldsContainer", containerNode)[0];
function findNode(name) {
- return query("." + name + "Value", containerNode)[0];
+ return query("." + name , containerNode)[0];
}
function storeNodes(names)
@@ -102,12 +101,8 @@ define(["dojo/dom",
}
storeNodes(["name",
- "path",
- "trustStoreType",
- "trustStoreState",
- "trustManagerFactoryAlgorithm",
- "certificateAlias",
- "peersOnly"
+ "type",
+ "state"
]);
this.query = url;
@@ -123,23 +118,26 @@ define(["dojo/dom",
KeyStoreUpdater.prototype.updateHeader = function()
{
this.name.innerHTML = entities.encode(String(this.keyStoreData[ "name" ]));
- this.path.innerHTML = entities.encode(String(this.keyStoreData[ "path" ]));
- this.trustStoreType.innerHTML = entities.encode(String(this.keyStoreData[ "trustStoreType" ]));
- this.trustStoreState.innerHTML = entities.encode(String(this.keyStoreData[ "state" ]));
- this.trustManagerFactoryAlgorithm.innerHTML = entities.encode(String(this.keyStoreData[ "trustManagerFactoryAlgorithm" ]));
- this.peersOnly.innerHTML = "<input type='checkbox' disabled='disabled' "+(this.keyStoreData[ "peersOnly" ] ? "checked='checked'": "")+" />" ;
+ this.type.innerHTML = entities.encode(String(this.keyStoreData[ "type" ]));
+ this.state.innerHTML = entities.encode(String(this.keyStoreData[ "state" ]));
};
KeyStoreUpdater.prototype.update = function()
{
-
- var thisObj = this;
-
+ var that = this;
xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}).then(function(data)
- {
- thisObj.keyStoreData = data[0];
- thisObj.updateHeader();
- });
+ {
+ that.trustStoreData = data[0];
+ that.updateHeader();
+
+ require(["qpid/management/store/" + encodeURIComponent(that.trustStoreData.type.toLowerCase()) + "/show"],
+ function(DetailsUI)
+ {
+ that.details = new DetailsUI({containerNode:that.keyStoreDetailsContainer, parent: that});
+ that.details.update(that.trustStoreData);
+ }
+ );
+ });
};
TrustStore.prototype.deleteKeyStore = function() {
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js Tue Jan 27 15:00:13 2015
@@ -93,6 +93,19 @@ define(["dojo/_base/xhr",
that.stopButton = registry.byNode(query(".stopButton", containerNode)[0]);
that.startButton = registry.byNode(query(".startButton", containerNode)[0]);
that.editButton = registry.byNode(query(".editButton", containerNode)[0]);
+ that.downloadButton = registry.byNode(query(".downloadButton", containerNode)[0]);
+ that.downloadButton.on("click",
+ function(e)
+ {
+ var iframe = document.createElement('iframe');
+ iframe.id = "downloader_" + that.name;
+ document.body.appendChild(iframe);
+ var suggestedAttachmentName = encodeURIComponent(that.name + ".json");
+ iframe.src = "/api/latest/virtualhost/" + encodeURIComponent(that.modelObj.parent.name) + "/" + encodeURIComponent(that.name) + "?extractInitialConfig=true&contentDispositionAttachmentFilename=" + suggestedAttachmentName;
+ // It seems there is no way to remove this iframe in a manner that is cross browser compatible.
+ }
+ );
+
that.deleteButton = registry.byNode(query(".deleteButton", containerNode)[0]);
that.deleteButton.on("click",
function(e)
@@ -344,6 +357,7 @@ define(["dojo/_base/xhr",
this.virtualHost.startButton.set("disabled", !this.vhostData.state || this.vhostData.state != "STOPPED");
this.virtualHost.stopButton.set("disabled", !this.vhostData.state || this.vhostData.state != "ACTIVE");
this.virtualHost.editButton.set("disabled", !this.vhostData.state || this.vhostData.state == "UNAVAILABLE");
+ this.virtualHost.downloadButton.set("disabled", !this.vhostData.state || this.vhostData.state != "ACTIVE");
this.virtualHost.deleteButton.set("disabled", !this.vhostData.state);
util.flattenStatistics( thisObj.vhostData );
Modified: qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js?rev=1655057&r1=1655056&r2=1655057&view=diff
==============================================================================
--- qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js (original)
+++ qpid/branches/QPID-6262-JavaBrokerNIO/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js Tue Jan 27 15:00:13 2015
@@ -26,8 +26,10 @@ define(["dojo/_base/lang",
"dojo/parser",
"dojo/_base/array",
"dojo/_base/event",
- 'dojo/_base/json',
+ 'dojo/json',
"qpid/common/util",
+ "qpid/common/metadata",
+ "dojo/text!addAccessControlProvider.html",
"dojo/store/Memory",
"dojox/validate/us",
"dojox/validate/web",
@@ -42,140 +44,124 @@ define(["dojo/_base/lang",
"dijit/layout/ContentPane",
"dojox/layout/TableContainer",
"dojo/domReady!"],
- function (lang, xhr, dom, construct, registry, parser, array, event, json, util) {
+ function (lang, xhr, dom, construct, registry, parser, array, event, json, util, metadata, template)
+ {
- var addAccessControlProvider = {};
-
- addAccessControlProvider.show = function(accessControlProvider) {
- var fields = [{
- name: "name",
- createWidget: function(accessControlProvider) {
- return new dijit.form.ValidationTextBox({
- required: true,
- value: accessControlProvider.name,
- disabled: accessControlProvider.name ? true : false,
- label: "Name*:",
- regexp: "^[\x20-\x2e\x30-\x7F]{1,255}$",
- promptMessage: "Name of access control provider.",
- placeHolder: "name",
- name: "name"});
- }
- }, {
- name: "type",
- createWidget: function(accessControlProvider) {
-
- var typeContainer = construct.create("div");
-
- var typeListContainer = new dojox.layout.TableContainer({
- cols: 1,
- "labelWidth": "300",
- customClass: "formLabel",
- showLabels: true,
- orientation: "horiz"
- });
-
- typeContainer.appendChild(typeListContainer.domNode);
-
- var providers = [];
- var fieldSetContainers = {};
- xhr.get({
- url: "service/helper?action=ListAccessControlProviderAttributes",
- handleAs: "json",
- sync: true
- }).then(
- function(data) {
- var providerIndex = 0;
-
- for (var providerType in data) {
- if (data.hasOwnProperty(providerType)) {
- providers[providerIndex++] = {id: providerType, name: providerType};
-
- var attributes = data[providerType].attributes;
- var descriptions = data[providerType].descriptions;
-
- var layout = new dojox.layout.TableContainer( {
- cols: 1,
- "labelWidth": "300",
- customClass: "formLabel",
- showLabels: true,
- orientation: "horiz"
- });
-
- for(var i=0; i < attributes.length; i++) {
- if ("type" == attributes[i])
- {
- continue;
- }
- var labelValue = attributes[i];
- if (descriptions && descriptions[attributes[i]])
- {
- labelValue = descriptions[attributes[i]];
- }
- var text = new dijit.form.TextBox({
- label: labelValue + ":",
- name: attributes[i]
- });
- layout.addChild(text);
- }
-
- typeContainer.appendChild(layout.domNode);
- fieldSetContainers[providerType] = layout;
- }
- }
- });
-
- var providersStore = new dojo.store.Memory({ data: providers });
-
- var typeList = new dijit.form.FilteringSelect({
- required: true,
- value: accessControlProvider.type,
- store: providersStore,
- label: "Type*:",
- name: "type"});
-
- typeListContainer.addChild(typeList);
-
- var onChangeHandler = function onChangeHandler(newValue){
- for (var i in fieldSetContainers) {
- var container = fieldSetContainers[i];
- var descendants = container.getChildren();
- for(var i in descendants){
- var descendant = descendants[i];
- var propName = descendant.name;
- if (propName) {
- descendant.set("disabled", true);
- }
+ var addAccessControlProvider =
+ {
+ init: function()
+ {
+ var that=this;
+ this.containerNode = construct.create("div", {innerHTML: template});
+ parser.parse(this.containerNode);
+
+ this.accessControlProviderName = registry.byId("addAccessControlProvider.name");
+ this.accessControlProviderName.set("regExpGen", util.nameOrContextVarRegexp);
+
+ this.dialog = registry.byId("addAccessControlProvider");
+ this.addButton = registry.byId("addAccessControlProvider.addButton");
+ this.cancelButton = registry.byId("addAccessControlProvider.cancelButton");
+ this.cancelButton.on("click", function(e){that._cancel(e);});
+ this.addButton.on("click", function(e){that._add(e);});
+
+ this.accessControlProviderTypeFieldsContainer = dom.byId("addAccessControlProvider.typeFields");
+ this.accessControlProviderForm = registry.byId("addAccessControlProvider.form");
+ this.accessControlProviderType = registry.byId("addAccessControlProvider.type");
+ this.supportedAccessControlProviderTypes = metadata.getTypesForCategory("AccessControlProvider");
+ this.supportedAccessControlProviderTypes.sort();
+ var accessControlProviderTypeStore = util.makeTypeStore(this.supportedAccessControlProviderTypes);
+ this.accessControlProviderType.set("store", accessControlProviderTypeStore);
+ this.accessControlProviderType.on("change", function(type){that._accessControlProviderTypeChanged(type);});
+ },
+ show: function(effectiveData)
+ {
+ this.accessControlProviderForm.reset();
+ this.dialog.show();
+ },
+ _cancel: function(e)
+ {
+ event.stop(e);
+ if (this.reader)
+ {
+ this.reader.abort();
+ }
+ this.dialog.hide();
+ },
+ _add: function(e)
+ {
+ event.stop(e);
+ this._submit();
+ },
+ _submit: function()
+ {
+ if (this.accessControlProviderForm.validate())
+ {
+ var success = false,failureReason=null;
+
+ var accessControlProviderData = util.getFormWidgetValues(this.accessControlProviderForm, this.initialData);
+ var encodedAccessControlProviderName = encodeURIComponent(this.accessControlProviderName.value);
+
+ xhr.put(
+ {
+ url: "api/latest/accesscontrolprovider/" + encodedAccessControlProviderName,
+ sync: true,
+ handleAs: "json",
+ headers: { "Content-Type": "application/json"},
+ putData: json.stringify(accessControlProviderData),
+ load: function(x) {success = true; },
+ error: function(error) {success = false; failureReason = error;}
+ });
+
+ if (success == true)
+ {
+ this.dialog.hide();
}
- container.domNode.style.display = "none";
- }
- var container = fieldSetContainers[newValue];
- if (container)
- {
- container.domNode.style.display = "block";
- var descendants = container.getChildren();
- for(var i in descendants){
- var descendant = descendants[i];
- var propName = descendant.name;
- if (propName) {
- descendant.set("disabled", false);
- }
+ else
+ {
+ util.xhrErrorHandler(failureReason);
}
- }
- };
- typeList.on("change", onChangeHandler);
- onChangeHandler(typeList.value);
- return new dijit.layout.ContentPane({content: typeContainer, style:{padding: 0}});
- }
- }];
-
- util.showSetAttributesDialog(
- fields,
- accessControlProvider ? accessControlProvider : {},
- "api/latest/accesscontrolprovider" + (name ? "/" + encodeURIComponent(name.name) : ""),
- accessControlProvider ? "Edit access control provider - " + accessControlProvider.name : "Add access control provider",
- "AccessControlProvider",
- accessControlProvider && accessControlProvider.type ? accessControlProvider.type : "AclFile",
- accessControlProvider ? false : true);
+ }
+ else
+ {
+ alert('Form contains invalid data. Please correct first');
+ }
+ },
+ _accessControlProviderTypeChanged: function(type)
+ {
+ this._typeChanged(type, this.accessControlProviderTypeFieldsContainer, "qpid/management/accesscontrolprovider/", "AccessControlProvider" );
+ },
+ _typeChanged: function(type, typeFieldsContainer, baseUrl, category )
+ {
+ var widgets = registry.findWidgets(typeFieldsContainer);
+ array.forEach(widgets, function(item) { item.destroyRecursive();});
+ construct.empty(typeFieldsContainer);
+
+ if (type)
+ {
+ var that = this;
+ require([ baseUrl + type.toLowerCase() + "/add"], function(typeUI)
+ {
+ try
+ {
+ typeUI.show({containerNode:typeFieldsContainer, parent: that, data: that.initialData, effectiveData: that.effectiveData});
+ util.applyMetadataToWidgets(typeFieldsContainer, category, type);
+ }
+ catch(e)
+ {
+ console.warn(e);
+ }
+ });
+ }
+ }
};
+
+ try
+ {
+ addAccessControlProvider.init();
+ }
+ catch(e)
+ {
+ console.warn(e);
+ }
return addAccessControlProvider;
- });
\ No newline at end of file
+ });
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org