You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2013/02/19 10:35:33 UTC

svn commit: r1447646 [6/16] - in /qpid/trunk/qpid/java: ./ bdbstore/ bdbstore/jmx/src/main/java/org/apache/qpid/server/store/berkeleydb/jmx/ bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/ bdbstore/src/main/java/org/apache/qpid/serv...

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/ConfigurationChangeListener.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/ConfigurationChangeListener.java?rev=1447646&r1=1447645&r2=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/ConfigurationChangeListener.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/ConfigurationChangeListener.java Tue Feb 19 09:35:28 2013
@@ -36,4 +36,5 @@ public interface ConfigurationChangeList
 
     void childRemoved(ConfiguredObject object, ConfiguredObject child);
 
+    void attributeSet(ConfiguredObject object, String attributeName, Object oldAttributeValue, Object newAttributeValue);
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java?rev=1447646&r1=1447645&r2=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java Tue Feb 19 09:35:28 2013
@@ -25,6 +25,9 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.UUID;
 
+/**
+ * An object that can be "managed" (eg via the web interface) and usually read from configuration.
+ */
 public interface ConfiguredObject
 {
 
@@ -47,7 +50,7 @@ public interface ConfiguredObject
      * Attempt to change the name of the object
      *
      * Request a change to the name of the object.  The caller must pass in the name it believes the object currently
-     * has. If the current name differes from this expected value, then no name change will occur
+     * has. If the current name differs from this expected value, then no name change will occur
      *
      * @param currentName the name the caller believes the object to have
      * @param desiredName the name the caller would like the object to have
@@ -198,14 +201,25 @@ public interface ConfiguredObject
 
 
     /**
-     * Return the value for the given attribute
-     *
-     * @param name the name of the attribute
-     * @return the value of the attribute at the object (or null if the attribute is not set
+     * Return the value for the given attribute name. The actual attribute value
+     * is returned if the configured object has such attribute set. If not, the
+     * value is looked default attributes.
+     *
+     * @param name
+     *            the name of the attribute
+     * @return the value of the attribute at the object (or null if the
+     *         attribute value is set neither on object itself no in defaults)
      */
     Object getAttribute(String name);
 
     /**
+     * Return the map containing only explicitly set attributes
+     *
+     * @return the map with the attributes
+     */
+    Map<String, Object> getActualAttributes();
+
+    /**
      * Set the value of an attribute
      *
      * @param name the name of the attribute to be set

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/GroupProvider.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/GroupProvider.java?rev=1447646&r1=1447645&r2=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/GroupProvider.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/GroupProvider.java Tue Feb 19 09:35:28 2013
@@ -19,9 +19,11 @@
  */
 package org.apache.qpid.server.model;
 
+import java.security.Principal;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Set;
 
 public interface GroupProvider extends ConfiguredObject
 {
@@ -48,4 +50,6 @@ public interface GroupProvider extends C
                                   CREATED,
                                   UPDATED,
                                   TYPE));
+
+    Set<Principal> getGroupPrincipalsForUser(String username);
 }

Copied: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/KeyStore.java (from r1447519, qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/GroupProvider.java)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/KeyStore.java?p2=qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/KeyStore.java&p1=qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/GroupProvider.java&r1=1447519&r2=1447646&rev=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/GroupProvider.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/KeyStore.java Tue Feb 19 09:35:28 2013
@@ -1,4 +1,5 @@
 /*
+ *
  * 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
@@ -23,29 +24,28 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
-public interface GroupProvider extends ConfiguredObject
+public interface KeyStore extends TrustStore
 {
-    public static final String ID = "id";
-    public static final String DESCRIPTION = "description";
-    public static final String NAME = "name";
-    public static final String STATE = "state";
-    public static final String DURABLE = "durable";
-    public static final String LIFETIME_POLICY = "lifetimePolicy";
-    public static final String TIME_TO_LIVE = "timeToLive";
-    public static final String CREATED = "created";
-    public static final String UPDATED = "updated";
-    public static final String TYPE = "type";
+
+    String CERTIFICATE_ALIAS = "certificateAlias";
 
     public static final Collection<String> AVAILABLE_ATTRIBUTES =
             Collections.unmodifiableList(
-                    Arrays.asList(ID,
-                                  NAME,
-                                  DESCRIPTION,
-                                  STATE,
-                                  DURABLE,
-                                  LIFETIME_POLICY,
-                                  TIME_TO_LIVE,
-                                  CREATED,
-                                  UPDATED,
-                                  TYPE));
+                Arrays.asList(
+                              ID,
+                              NAME,
+                              STATE,
+                              DURABLE,
+                              LIFETIME_POLICY,
+                              TIME_TO_LIVE,
+                              CREATED,
+                              UPDATED,
+                              DESCRIPTION,
+                              PATH,
+                              PASSWORD,
+                              TYPE,
+                              KEY_MANAGER_FACTORY_ALGORITHM,
+                              CERTIFICATE_ALIAS
+                              ));
+
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Model.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Model.java?rev=1447646&r1=1447645&r2=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Model.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Model.java Tue Feb 19 09:35:28 2013
@@ -48,6 +48,9 @@ public class Model
         addRelationship(Broker.class, Port.class);
         addRelationship(Broker.class, AuthenticationProvider.class);
         addRelationship(Broker.class, GroupProvider.class);
+        addRelationship(Broker.class, TrustStore.class);
+        addRelationship(Broker.class, KeyStore.class);
+        addRelationship(Broker.class, Plugin.class);
 
         addRelationship(VirtualHost.class, Exchange.class);
         addRelationship(VirtualHost.class, Queue.class);

Copied: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Plugin.java (from r1447519, qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/GroupProvider.java)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Plugin.java?p2=qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Plugin.java&p1=qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/GroupProvider.java&r1=1447519&r2=1447646&rev=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/GroupProvider.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Plugin.java Tue Feb 19 09:35:28 2013
@@ -1,4 +1,5 @@
 /*
+ *
  * 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
@@ -23,29 +24,29 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
-public interface GroupProvider extends ConfiguredObject
+public interface Plugin extends ConfiguredObject
 {
-    public static final String ID = "id";
-    public static final String DESCRIPTION = "description";
-    public static final String NAME = "name";
-    public static final String STATE = "state";
-    public static final String DURABLE = "durable";
-    public static final String LIFETIME_POLICY = "lifetimePolicy";
-    public static final String TIME_TO_LIVE = "timeToLive";
-    public static final String CREATED = "created";
-    public static final String UPDATED = "updated";
-    public static final String TYPE = "type";
+    //Hack, using it for the class name only for consistency with the other things.
+    String CREATED                              = "created";
+    String DURABLE                              = "durable";
+    String ID                                   = "id";
+    String LIFETIME_POLICY                      = "lifetimePolicy";
+    String NAME                                 = "name";
+    String STATE                                = "state";
+    String TIME_TO_LIVE                         = "timeToLive";
+    String UPDATED                              = "updated";
 
+    // Attributes
     public static final Collection<String> AVAILABLE_ATTRIBUTES =
             Collections.unmodifiableList(
-                    Arrays.asList(ID,
-                                  NAME,
-                                  DESCRIPTION,
-                                  STATE,
-                                  DURABLE,
-                                  LIFETIME_POLICY,
-                                  TIME_TO_LIVE,
-                                  CREATED,
-                                  UPDATED,
-                                  TYPE));
+                    Arrays.asList(
+                            ID,
+                            NAME,
+                            STATE,
+                            DURABLE,
+                            LIFETIME_POLICY,
+                            TIME_TO_LIVE,
+                            CREATED,
+                            UPDATED
+                                 ));
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Port.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Port.java?rev=1447646&r1=1447645&r2=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Port.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Port.java Tue Feb 19 09:35:28 2013
@@ -39,6 +39,16 @@ public interface Port extends Configured
     String PORT                                 = "port";
     String PROTOCOLS                            = "protocols";
     String TRANSPORTS                           = "transports";
+    String TCP_NO_DELAY                         = "tcpNoDelay";
+    String SEND_BUFFER_SIZE                     = "sendBufferSize";
+    String RECEIVE_BUFFER_SIZE                  = "receiveBufferSize";
+    String NEED_CLIENT_AUTH                     = "needClientAuth";
+    String WANT_CLIENT_AUTH                     = "wantClientAuth";
+
+    /**
+     * TODO: rename it to AUTHENTICATION_MANAGER_ID or introduce relationships
+     */
+    String AUTHENTICATION_MANAGER               = "authenticationManager";
 
     // Attributes
     public static final Collection<String> AVAILABLE_ATTRIBUTES =
@@ -55,7 +65,13 @@ public interface Port extends Configured
                             BINDING_ADDRESS,
                             PORT,
                             PROTOCOLS,
-                            TRANSPORTS
+                            TRANSPORTS,
+                            TCP_NO_DELAY,
+                            SEND_BUFFER_SIZE,
+                            RECEIVE_BUFFER_SIZE,
+                            NEED_CLIENT_AUTH,
+                            WANT_CLIENT_AUTH,
+                            AUTHENTICATION_MANAGER
                                  ));
 
 
@@ -88,4 +104,8 @@ public interface Port extends Configured
     //children
     Collection<VirtualHostAlias> getVirtualHostBindings();
     Collection<Connection> getConnections();
+
+    AuthenticationProvider getAuthenticationProvider();
+
+    void setAuthenticationProvider(AuthenticationProvider authenticationProvider);
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Protocol.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Protocol.java?rev=1447646&r1=1447645&r2=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Protocol.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Protocol.java Tue Feb 19 09:35:28 2013
@@ -20,14 +20,95 @@
  */
 package org.apache.qpid.server.model;
 
+import java.util.Collection;
+import java.util.EnumSet;
+
+import org.apache.qpid.server.protocol.AmqpProtocolVersion;
+
 public enum Protocol
 {
-    AMQP_0_8,
-    AMQP_0_9,
-    AMQP_0_9_1,
-    AMQP_0_10,
-    AMQP_1_0,
-    JMX,
-    HTTP,
-    HTTPS
+    AMQP_0_8(ProtocolType.AMQP),
+    AMQP_0_9(ProtocolType.AMQP),
+    AMQP_0_9_1(ProtocolType.AMQP),
+    AMQP_0_10(ProtocolType.AMQP),
+    AMQP_1_0(ProtocolType.AMQP),
+    JMX_RMI(ProtocolType.JMX),
+    HTTP(ProtocolType.HTTP),
+    HTTPS(ProtocolType.HTTP),
+    RMI(ProtocolType.RMI);
+
+    private final ProtocolType _protocolType;
+
+    private Protocol(ProtocolType type)
+    {
+        _protocolType =  type;
+    }
+
+    public ProtocolType getProtocolType()
+    {
+        return _protocolType;
+    }
+
+    public boolean isAMQP()
+    {
+        return _protocolType == ProtocolType.AMQP;
+    }
+
+    public AmqpProtocolVersion toAmqpProtocolVersion()
+    {
+        switch(this)
+        {
+            case AMQP_0_8:
+                return AmqpProtocolVersion.v0_8;
+            case AMQP_0_9:
+                return AmqpProtocolVersion.v0_9;
+            case AMQP_0_9_1:
+                return AmqpProtocolVersion.v0_9_1;
+            case AMQP_0_10:
+                return AmqpProtocolVersion.v0_10;
+            case AMQP_1_0:
+                return AmqpProtocolVersion.v1_0_0;
+            default:
+                throw new IllegalArgumentException(this + " is not an known AMQP protocol");
+        }
+    }
+
+    public static Protocol valueOfObject(Object protocolObject)
+    {
+        Protocol protocol;
+        if (protocolObject instanceof Protocol)
+        {
+            protocol = (Protocol) protocolObject;
+        }
+        else
+        {
+            try
+            {
+                protocol = Protocol.valueOf(String.valueOf(protocolObject));
+            }
+            catch (Exception e)
+            {
+                throw new IllegalArgumentException("Can't convert '" + protocolObject
+                        + "' to one of the supported protocols: " + EnumSet.allOf(Protocol.class), e);
+            }
+        }
+        return protocol;
+    }
+
+    public static boolean hasAmqpProtocol(Collection<Protocol> protocols)
+    {
+        for (Protocol protocol : protocols)
+        {
+            if (protocol.isAMQP())
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static enum ProtocolType
+    {
+        AMQP, HTTP, JMX, RMI;
+    }
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Transport.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Transport.java?rev=1447646&r1=1447645&r2=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Transport.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Transport.java Tue Feb 19 09:35:28 2013
@@ -20,8 +20,32 @@
  */
 package org.apache.qpid.server.model;
 
+import java.util.EnumSet;
+
 public enum Transport
 {
     TCP,
-    SSL
+    SSL;
+
+    public static Transport valueOfObject(Object transportObject)
+    {
+        Transport transport;
+        if (transportObject instanceof Transport)
+        {
+            transport = (Transport) transportObject;
+        }
+        else
+        {
+            try
+            {
+                transport = Transport.valueOf(String.valueOf(transportObject));
+            }
+            catch (Exception e)
+            {
+                throw new IllegalArgumentException("Can't convert '" + transportObject
+                        + "' to one of the supported transports: " + EnumSet.allOf(Transport.class), e);
+            }
+        }
+        return transport;
+    }
 }

Copied: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/TrustStore.java (from r1447519, qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/TrustStore.java?p2=qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/TrustStore.java&p1=qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java&r1=1447519&r2=1447646&rev=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/TrustStore.java Tue Feb 19 09:35:28 2013
@@ -20,61 +20,46 @@
  */
 package org.apache.qpid.server.model;
 
-import java.security.AccessControlException;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Map;
 
-public interface Broker extends ConfiguredObject
+public interface TrustStore extends ConfiguredObject
 {
-
-    String BUILD_VERSION = "buildVersion";
-    String BYTES_RETAINED = "bytesRetained";
-    String OPERATING_SYSTEM = "operatingSystem";
-    String PLATFORM = "platform";
-    String PROCESS_PID = "processPid";
-    String PRODUCT_VERSION = "productVersion";
-    String SUPPORTED_STORE_TYPES = "supportedStoreTypes";
-    String CREATED = "created";
-    String DURABLE = "durable";
     String ID = "id";
-    String LIFETIME_POLICY = "lifetimePolicy";
     String NAME = "name";
+    String DURABLE = "durable";
+    String LIFETIME_POLICY = "lifetimePolicy";
     String STATE = "state";
     String TIME_TO_LIVE = "timeToLive";
+    String CREATED = "created";
     String UPDATED = "updated";
+    String DESCRIPTION = "description";
+
+    String PATH = "path";
+    String PASSWORD = "password";
+    String TYPE = "type";
+    String KEY_MANAGER_FACTORY_ALGORITHM = "keyManagerFactoryAlgorithm";
 
-    // Attributes
     public static final Collection<String> AVAILABLE_ATTRIBUTES =
             Collections.unmodifiableList(
-                Arrays.asList(BUILD_VERSION,
-                              BYTES_RETAINED,
-                              OPERATING_SYSTEM,
-                              PLATFORM,
-                              PROCESS_PID,
-                              PRODUCT_VERSION,
-                              SUPPORTED_STORE_TYPES,
-                              CREATED,
-                              DURABLE,
+                Arrays.asList(
                               ID,
-                              LIFETIME_POLICY,
                               NAME,
                               STATE,
+                              DURABLE,
+                              LIFETIME_POLICY,
                               TIME_TO_LIVE,
-                              UPDATED));
-
-    //children
-    Collection < VirtualHost > getVirtualHosts();
-
-    Collection<Port> getPorts();
-
-    Collection<AuthenticationProvider> getAuthenticationProviders();
+                              CREATED,
+                              UPDATED,
+                              DESCRIPTION,
+                              PATH,
+                              PASSWORD,
+                              TYPE,
+                              KEY_MANAGER_FACTORY_ALGORITHM
+                              ));
 
-    VirtualHost createVirtualHost(String name, State initialState, boolean durable,
-                                  LifetimePolicy lifetime, long ttl, Map<String, Object> attributes)
-            throws AccessControlException, IllegalArgumentException;
+    public String getPassword();
 
-    void deleteVirtualHost(VirtualHost virtualHost)
-            throws AccessControlException, IllegalStateException;
+    public void setPassword(String password);
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/UUIDGenerator.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/UUIDGenerator.java?rev=1447646&r1=1447645&r2=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/UUIDGenerator.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/UUIDGenerator.java Tue Feb 19 09:35:28 2013
@@ -87,4 +87,9 @@ public class UUIDGenerator
     {
         return createUUID(GroupMember.class.getName(), groupProviderName, groupName, groupMemberName);
     }
+
+    public static UUID generateBrokerChildUUID(String type, String childName)
+    {
+        return createUUID(type, childName);
+    }
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/VirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/VirtualHost.java?rev=1447646&r1=1447645&r2=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/VirtualHost.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/VirtualHost.java Tue Feb 19 09:35:28 2013
@@ -21,6 +21,9 @@
 package org.apache.qpid.server.model;
 
 import org.apache.qpid.server.queue.QueueEntry;
+import org.apache.qpid.server.security.SecurityManager;
+import org.apache.qpid.server.store.MessageStore;
+
 import java.security.AccessControlException;
 import java.util.Arrays;
 import java.util.Collection;
@@ -64,12 +67,12 @@ public interface VirtualHost extends Con
     String MAXIMUM_DELIVERY_ATTEMPTS            = "maximumDeliveryAttempts";
     String QUEUE_FLOW_CONTROL_SIZE_BYTES        = "queueFlowControlSizeBytes";
     String QUEUE_FLOW_RESUME_SIZE_BYTES         = "queueFlowResumeSizeBytes";
-    String STORE_CONFIGURATION                  = "storeConfiguration";
     String STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE = "storeTransactionIdleTimeoutClose";
     String STORE_TRANSACTION_IDLE_TIMEOUT_WARN  = "storeTransactionIdleTimeoutWarn";
     String STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE = "storeTransactionOpenTimeoutClose";
     String STORE_TRANSACTION_OPEN_TIMEOUT_WARN  = "storeTransactionOpenTimeoutWarn";
     String STORE_TYPE                           = "storeType";
+    String STORE_PATH                           = "storePath";
     String SUPPORTED_EXCHANGE_TYPES             = "supportedExchangeTypes";
     String SUPPORTED_QUEUE_TYPES                = "supportedQueueTypes";
     String CREATED                              = "created";
@@ -80,6 +83,8 @@ public interface VirtualHost extends Con
     String STATE                                = "state";
     String TIME_TO_LIVE                         = "timeToLive";
     String UPDATED                              = "updated";
+    String CONFIG_PATH                          = "configPath";
+
     // Attributes
     public static final Collection<String> AVAILABLE_ATTRIBUTES =
             Collections.unmodifiableList(
@@ -100,7 +105,7 @@ public interface VirtualHost extends Con
                             QUEUE_FLOW_CONTROL_SIZE_BYTES,
                             QUEUE_FLOW_RESUME_SIZE_BYTES,
                             STORE_TYPE,
-                            STORE_CONFIGURATION,
+                            STORE_PATH,
                             STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE,
                             STORE_TRANSACTION_IDLE_TIMEOUT_WARN,
                             STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE,
@@ -109,7 +114,8 @@ public interface VirtualHost extends Con
                             ALERT_THRESHOLD_MESSAGE_AGE,
                             ALERT_THRESHOLD_MESSAGE_SIZE,
                             ALERT_THRESHOLD_QUEUE_DEPTH_BYTES,
-                            ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES));
+                            ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES,
+                            CONFIG_PATH));
 
 
 
@@ -147,4 +153,12 @@ public interface VirtualHost extends Con
     }
 
     void executeTransaction(TransactionalOperation op);
+
+    /**
+     * A temporary hack to expose host security manager.
+     * TODO We need to add and implement an authorization provider configured object instead
+     */
+    SecurityManager getSecurityManager();
+
+    MessageStore getMessageStore();
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java?rev=1447646&r1=1447645&r2=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java Tue Feb 19 09:35:28 2013
@@ -24,12 +24,18 @@ import java.security.AccessControlExcept
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+
 import org.apache.qpid.server.model.ConfigurationChangeListener;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.IllegalStateTransitionException;
 import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.configuration.updater.ChangeStateTask;
+import org.apache.qpid.server.configuration.updater.CreateChildTask;
+import org.apache.qpid.server.configuration.updater.SetAttributeTask;
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
 
 abstract class AbstractAdapter implements ConfiguredObject
 {
@@ -40,134 +46,78 @@ abstract class AbstractAdapter implement
             new ArrayList<ConfigurationChangeListener>();
 
     private final UUID _id;
+    private final Map<String, Object> _defaultAttributes = new HashMap<String, Object>();
+    private final TaskExecutor _taskExecutor;
 
-    protected AbstractAdapter(UUID id)
+    protected AbstractAdapter(UUID id, Map<String, Object> defaults, Map<String, Object> attributes, TaskExecutor taskExecutor)
     {
+        _taskExecutor = taskExecutor;
         _id = id;
-    }
-
-    static String getStringAttribute(String name, Map<String,Object> attributes, String defaultVal)
-    {
-        final Object value = attributes.get(name);
-        return value == null ? defaultVal : String.valueOf(value);
-    }
-
-    static Map getMapAttribute(String name, Map<String,Object> attributes, Map defaultVal)
-    {
-        final Object value = attributes.get(name);
-        if(value == null)
-        {
-            return defaultVal;
-        }
-        else if(value instanceof Map)
+        if (attributes != null)
         {
-            return (Map) value;
+            Collection<String> names = getAttributeNames();
+            for (String name : names)
+            {
+                if (attributes.containsKey(name))
+                {
+                    _attributes.put(name, attributes.get(name));
+                }
+            }
         }
-        else
+        if (defaults != null)
         {
-            throw new IllegalArgumentException("Value for attribute " + name + " is not of required type Map");
+            _defaultAttributes.putAll(defaults);
         }
     }
 
-
-    static <E extends Enum> E getEnumAttribute(Class<E> clazz, String name, Map<String,Object> attributes, E defaultVal)
+    protected AbstractAdapter(UUID id, TaskExecutor taskExecutor)
     {
-        Object obj = attributes.get(name);
-        if(obj == null)
-        {
-            return defaultVal;
-        }
-        else if(clazz.isInstance(obj))
-        {
-            return (E) obj;
-        }
-        else if(obj instanceof String)
-        {
-            return (E) Enum.valueOf(clazz, (String)obj);
-        }
-        else
-        {
-            throw new IllegalArgumentException("Value for attribute " + name + " is not of required type " + clazz.getSimpleName());
-        }
+        this(id, null, null, taskExecutor);
     }
 
-    static Boolean getBooleanAttribute(String name, Map<String,Object> attributes, Boolean defaultValue)
+    public final UUID getId()
     {
-        Object obj = attributes.get(name);
-        if(obj == null)
-        {
-            return defaultValue;
-        }
-        else if(obj instanceof Boolean)
-        {
-            return (Boolean) obj;
-        }
-        else if(obj instanceof String)
-        {
-            return Boolean.parseBoolean((String) obj);
-        }
-        else
-        {
-            throw new IllegalArgumentException("Value for attribute " + name + " is not of required type Boolean");
-        }
+        return _id;
     }
 
-    static Integer getIntegerAttribute(String name, Map<String,Object> attributes, Integer defaultValue)
+    public State getDesiredState()
     {
-        Object obj = attributes.get(name);
-        if(obj == null)
-        {
-            return defaultValue;
-        }
-        else if(obj instanceof Number)
-        {
-            return ((Number) obj).intValue();
-        }
-        else if(obj instanceof String)
-        {
-            return Integer.valueOf((String) obj);
-        }
-        else
-        {
-            throw new IllegalArgumentException("Value for attribute " + name + " is not of required type Integer");
-        }
+        return null;  //TODO
     }
 
-    static Long getLongAttribute(String name, Map<String,Object> attributes, Long defaultValue)
+    @Override
+    public final State setDesiredState(final State currentState, final State desiredState)
+            throws IllegalStateTransitionException, AccessControlException
     {
-        Object obj = attributes.get(name);
-        if(obj == null)
-        {
-            return defaultValue;
-        }
-        else if(obj instanceof Number)
+        if (_taskExecutor.isTaskExecutorThread())
         {
-            return ((Number) obj).longValue();
-        }
-        else if(obj instanceof String)
-        {
-            return Long.valueOf((String) obj);
+            if (setState(currentState, desiredState))
+            {
+                notifyStateChanged(currentState, desiredState);
+            }
         }
         else
         {
-            throw new IllegalArgumentException("Value for attribute " + name + " is not of required type Long");
+            _taskExecutor.submitAndWait(new ChangeStateTask(this, currentState, desiredState));
         }
+        return getActualState();
     }
 
-    public final UUID getId()
-    {
-        return _id;
-    }
+    /**
+     * @return true when the state has been successfully updated to desiredState or false otherwise
+     */
+    protected abstract boolean setState(State currentState, State desiredState);
 
-    public State getDesiredState()
+    protected void notifyStateChanged(final State currentState, final State desiredState)
     {
-        return null;  //TODO
-    }
-
-    public State setDesiredState(final State currentState, final State desiredState)
-            throws IllegalStateTransitionException, AccessControlException
-    {
-        return null;  //TODO
+        synchronized (_changeListeners)
+        {
+            List<ConfigurationChangeListener> copy = new ArrayList<ConfigurationChangeListener>(_changeListeners);
+            for(ConfigurationChangeListener listener : copy)
+            {
+                listener.stateChanged(this, currentState, desiredState);
+            }
+        }
     }
 
     public void addChangeListener(final ConfigurationChangeListener listener)
@@ -176,7 +126,7 @@ abstract class AbstractAdapter implement
         {
             throw new NullPointerException("Cannot add a null listener");
         }
-        synchronized (this)
+        synchronized (_changeListeners)
         {
             if(!_changeListeners.contains(listener))
             {
@@ -191,39 +141,76 @@ abstract class AbstractAdapter implement
         {
             throw new NullPointerException("Cannot remove a null listener");
         }
-        synchronized (this)
+        synchronized (_changeListeners)
         {
             return _changeListeners.remove(listener);
         }
     }
 
-
     protected void childAdded(ConfiguredObject child)
     {
-        synchronized (this)
+        synchronized (_changeListeners)
         {
-            for(ConfigurationChangeListener listener : _changeListeners)
+            List<ConfigurationChangeListener> copy = new ArrayList<ConfigurationChangeListener>(_changeListeners);
+            for(ConfigurationChangeListener listener : copy)
             {
                 listener.childAdded(this, child);
             }
         }
     }
 
-
     protected void childRemoved(ConfiguredObject child)
     {
-        synchronized (this)
+        synchronized (_changeListeners)
         {
-            for(ConfigurationChangeListener listener : _changeListeners)
+            List<ConfigurationChangeListener> copy = new ArrayList<ConfigurationChangeListener>(_changeListeners);
+            for(ConfigurationChangeListener listener : copy)
             {
                 listener.childRemoved(this, child);
             }
         }
     }
 
-    public Object getAttribute(final String name)
+    protected void attributeSet(String attrinuteName, Object oldAttributeValue, Object newAttributeValue)
     {
-        synchronized (this)
+        synchronized (_changeListeners)
+        {
+            List<ConfigurationChangeListener> copy = new ArrayList<ConfigurationChangeListener>(_changeListeners);
+            for(ConfigurationChangeListener listener : copy)
+            {
+                listener.attributeSet(this, attrinuteName, oldAttributeValue, newAttributeValue);
+            }
+        }
+    }
+
+    private final Object getDefaultAttribute(String name)
+    {
+        return _defaultAttributes.get(name);
+    }
+
+    @Override
+    public Object getAttribute(String name)
+    {
+        Object value = getActualAttribute(name);
+        if (value == null)
+        {
+            value = getDefaultAttribute(name);
+        }
+        return value;
+    }
+
+    @Override
+    public final Map<String, Object> getActualAttributes()
+    {
+        synchronized (_attributes)
+        {
+            return new HashMap<String, Object>(_attributes);
+        }
+    }
+
+    private Object getActualAttribute(final String name)
+    {
+        synchronized (_attributes)
         {
             return _attributes.get(name);
         }
@@ -232,25 +219,41 @@ abstract class AbstractAdapter implement
     public Object setAttribute(final String name, final Object expected, final Object desired)
             throws IllegalStateException, AccessControlException, IllegalArgumentException
     {
-        synchronized (this)
+        if (_taskExecutor.isTaskExecutorThread())
         {
-            Object currentValue = _attributes.get(name);
+            if (changeAttribute(name, expected, desired))
+            {
+                attributeSet(name, expected, desired);
+            }
+        }
+        else
+        {
+            _taskExecutor.submitAndWait(new SetAttributeTask(this, name, expected, desired));
+        }
+        return getAttribute(name);
+    }
+
+    protected boolean changeAttribute(final String name, final Object expected, final Object desired)
+    {
+        synchronized (_attributes)
+        {
+            Object currentValue = getAttribute(name);
             if((currentValue == null && expected == null)
                || (currentValue != null && currentValue.equals(expected)))
             {
                 _attributes.put(name, desired);
-                return desired;
+                return true;
             }
             else
             {
-                return currentValue;
+                return false;
             }
         }
     }
 
     public <T extends ConfiguredObject> T getParent(final Class<T> clazz)
     {
-        synchronized (this)
+        synchronized (_parents)
         {
             return (T) _parents.get(clazz);
         }
@@ -258,7 +261,7 @@ abstract class AbstractAdapter implement
 
     protected <T extends ConfiguredObject> void addParent(Class<T> clazz, T parent)
     {
-        synchronized (this)
+        synchronized (_parents)
         {
             _parents.put(clazz, parent);
         }
@@ -280,4 +283,40 @@ abstract class AbstractAdapter implement
         }
     }
 
+    @Override
+    public String toString()
+    {
+        return getClass().getSimpleName() + " [id=" + _id + "]";
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        if (_taskExecutor.isTaskExecutorThread())
+        {
+            C child = addChild(childClass, attributes, otherParents);
+            if (child != null)
+            {
+                childAdded(child);
+            }
+            return child;
+        }
+        else
+        {
+            return (C)_taskExecutor.submitAndWait(new CreateChildTask(this, childClass, attributes, otherParents));
+        }
+    }
+
+    protected <C extends ConfiguredObject> C addChild(Class<C> childClass, Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        throw new UnsupportedOperationException();
+    }
+
+
+    protected TaskExecutor getTaskExecutor()
+    {
+        return _taskExecutor;
+    }
+
 }

Added: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractKeyStoreAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractKeyStoreAdapter.java?rev=1447646&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractKeyStoreAdapter.java (added)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractKeyStoreAdapter.java Tue Feb 19 09:35:28 2013
@@ -0,0 +1,198 @@
+/*
+ *
+ * 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.model.adapter;
+
+import java.security.AccessControlException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.KeyStore;
+import org.apache.qpid.server.model.LifetimePolicy;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.Statistics;
+import org.apache.qpid.server.model.TrustStore;
+import org.apache.qpid.server.util.MapValueConverter;
+
+public abstract class AbstractKeyStoreAdapter extends AbstractAdapter
+{
+    private String _name;
+    private String _password;
+
+    protected AbstractKeyStoreAdapter(UUID id, Broker broker, Map<String, Object> attributes)
+    {
+        super(id, broker.getTaskExecutor());
+        addParent(Broker.class, broker);
+        _name = MapValueConverter.getStringAttribute(TrustStore.NAME, attributes);
+        _password = MapValueConverter.getStringAttribute(TrustStore.PASSWORD, attributes);
+        setMandatoryAttribute(TrustStore.PATH, attributes);
+        setOptionalAttribute(TrustStore.TYPE, attributes);
+        setOptionalAttribute(TrustStore.KEY_MANAGER_FACTORY_ALGORITHM, attributes);
+        setOptionalAttribute(TrustStore.DESCRIPTION, attributes);
+    }
+
+    @Override
+    public String getName()
+    {
+        return _name;
+    }
+
+    @Override
+    public String setName(String currentName, String desiredName) throws IllegalStateException, AccessControlException
+    {
+        throw new IllegalStateException();
+    }
+
+    @Override
+    public State getActualState()
+    {
+        return State.ACTIVE;
+    }
+
+    @Override
+    public boolean isDurable()
+    {
+        return true;
+    }
+
+    @Override
+    public void setDurable(boolean durable) throws IllegalStateException, AccessControlException, IllegalArgumentException
+    {
+        throw new IllegalStateException();
+    }
+
+    @Override
+    public LifetimePolicy getLifetimePolicy()
+    {
+        return LifetimePolicy.PERMANENT;
+    }
+
+    @Override
+    public LifetimePolicy setLifetimePolicy(LifetimePolicy expected, LifetimePolicy desired) throws IllegalStateException, AccessControlException,
+            IllegalArgumentException
+    {
+        throw new IllegalStateException();
+    }
+
+    @Override
+    public long getTimeToLive()
+    {
+        return 0;
+    }
+
+    @Override
+    public long setTimeToLive(long expected, long desired) throws IllegalStateException, AccessControlException, IllegalArgumentException
+    {
+        throw new IllegalStateException();
+    }
+
+    @Override
+    public Statistics getStatistics()
+    {
+        return NoStatistics.getInstance();
+    }
+
+    @Override
+    public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz)
+    {
+        return Collections.emptySet();
+    }
+
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Object getAttribute(String name)
+    {
+        if(KeyStore.ID.equals(name))
+        {
+            return getId();
+        }
+        else if(KeyStore.NAME.equals(name))
+        {
+            return getName();
+        }
+        else if(KeyStore.STATE.equals(name))
+        {
+            return getActualState();
+        }
+        else if(KeyStore.DURABLE.equals(name))
+        {
+            return isDurable();
+        }
+        else if(KeyStore.LIFETIME_POLICY.equals(name))
+        {
+            return getLifetimePolicy();
+        }
+        else if(KeyStore.TIME_TO_LIVE.equals(name))
+        {
+            return getTimeToLive();
+        }
+        else if(KeyStore.CREATED.equals(name))
+        {
+
+        }
+        else if(KeyStore.UPDATED.equals(name))
+        {
+
+        }
+        else if(KeyStore.PASSWORD.equals(name))
+        {
+            return null; // for security reasons we don't expose the password
+        }
+        return super.getAttribute(name);
+    }
+
+    @Override
+    protected boolean setState(State currentState, State desiredState)
+    {
+        return false;
+    }
+
+    public String getPassword()
+    {
+        return _password;
+    }
+
+    public void setPassword(String password)
+    {
+        _password = password;
+    }
+
+    private void setMandatoryAttribute(String name, Map<String, Object> attributeValues)
+    {
+        changeAttribute(name, null, MapValueConverter.getStringAttribute(name, attributeValues));
+    }
+
+    private void setOptionalAttribute(String name, Map<String, Object> attributeValues)
+    {
+        if (attributeValues.get(name) != null)
+        {
+            changeAttribute(name, null, MapValueConverter.getStringAttribute(name, attributeValues));
+        }
+    }
+}

Copied: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java (from r1447519, qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java?p2=qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java&p1=qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java&r1=1447519&r2=1447646&rev=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java Tue Feb 19 09:35:28 2013
@@ -18,126 +18,135 @@
  * under the License.
  *
  */
-
 package org.apache.qpid.server.model.adapter;
 
+import java.security.AccessControlException;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
-import org.apache.qpid.server.model.AuthenticationMethod;
+import java.util.UUID;
+
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.LifetimePolicy;
-import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.Plugin;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.model.Statistics;
-import org.apache.qpid.server.model.UUIDGenerator;
-import org.apache.qpid.server.model.VirtualHost;
-import org.apache.qpid.server.model.VirtualHostAlias;
-
-import java.security.AccessControlException;
-import java.util.Collection;
-import java.util.Collections;
 
-public class VirtualHostAliasAdapter  extends AbstractAdapter implements VirtualHostAlias
+public abstract class AbstractPluginAdapter extends AbstractAdapter implements Plugin
 {
-    private VirtualHostAdapter _vhost;
-    private Port _port;
 
-    public VirtualHostAliasAdapter(VirtualHostAdapter virtualHostAdapter, Port port)
+    protected AbstractPluginAdapter(UUID id, Map<String, Object> defaults, Map<String, Object> attributes, TaskExecutor taskExecutor)
     {
-        super(UUIDGenerator.generateVhostAliasUUID(virtualHostAdapter.getName(), port.getName()));
-        _vhost = virtualHostAdapter;
-        _port = port;
+        super(id, defaults, attributes, taskExecutor);
     }
 
     @Override
-    public Port getPort()
-    {
-        return _port;
-    }
-
-    @Override
-    public VirtualHost getVirtualHost()
+    public String setName(String currentName, String desiredName) throws IllegalStateException, AccessControlException
     {
-        return _vhost;
+        throw new UnsupportedOperationException();
     }
 
     @Override
-    public Collection<AuthenticationMethod> getAuthenticationMethods()
+    public State getActualState()
     {
-        return Collections.emptySet();  // TODO - Implement
+        return null;
     }
 
     @Override
-    public String getName()
+    public boolean isDurable()
     {
-        return _vhost.getName();
+        return true;
     }
 
     @Override
-    public String setName(String currentName, String desiredName) throws IllegalStateException, AccessControlException
+    public void setDurable(boolean durable) throws IllegalStateException, AccessControlException, IllegalArgumentException
     {
-        throw new IllegalStateException();  // TODO - Implement
+        throw new UnsupportedOperationException();
     }
 
     @Override
-    public State getActualState()
+    public LifetimePolicy getLifetimePolicy()
     {
-        return State.ACTIVE;  // TODO - Implement
+        return LifetimePolicy.PERMANENT;
     }
 
     @Override
-    public boolean isDurable()
+    public LifetimePolicy setLifetimePolicy(LifetimePolicy expected, LifetimePolicy desired) throws IllegalStateException,
+            AccessControlException, IllegalArgumentException
     {
-        return true;  // TODO - Implement
+        throw new UnsupportedOperationException();
     }
 
     @Override
-    public void setDurable(boolean durable)
-            throws IllegalStateException, AccessControlException, IllegalArgumentException
+    public long getTimeToLive()
     {
-        throw new IllegalStateException();
+        return 0;
     }
 
     @Override
-    public LifetimePolicy getLifetimePolicy()
+    public long setTimeToLive(long expected, long desired) throws IllegalStateException, AccessControlException,
+            IllegalArgumentException
     {
-        return LifetimePolicy.PERMANENT;  // TODO - Implement
+        throw new UnsupportedOperationException();
     }
 
     @Override
-    public LifetimePolicy setLifetimePolicy(LifetimePolicy expected, LifetimePolicy desired)
-            throws IllegalStateException, AccessControlException, IllegalArgumentException
+    public Statistics getStatistics()
     {
-        throw new IllegalStateException();  // TODO - Implement
+        return null;
     }
 
     @Override
-    public long getTimeToLive()
+    public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz)
     {
-        return 0;  // TODO - Implement
+        return Collections.emptyList();
     }
 
     @Override
-    public long setTimeToLive(long expected, long desired)
-            throws IllegalStateException, AccessControlException, IllegalArgumentException
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, Map<String, Object> attributes,
+            ConfiguredObject... otherParents)
     {
-        throw new IllegalStateException();  // TODO - Implement
+        throw new UnsupportedOperationException();
     }
 
     @Override
-    public Statistics getStatistics()
+    public Collection<String> getAttributeNames()
     {
-        return NoStatistics.getInstance();
+        return AVAILABLE_ATTRIBUTES;
     }
 
     @Override
-    public <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz)
+    public Object getAttribute(String name)
     {
-        return Collections.emptySet();
-    }
+        if (ID.equals(name))
+        {
+            return getId();
+        }
+        else if (STATE.equals(name))
+        {
+            return getActualState();
+        }
+        else if (DURABLE.equals(name))
+        {
+            return isDurable();
+        }
+        else if (LIFETIME_POLICY.equals(name))
+        {
+            return getLifetimePolicy();
+        }
+        else if (TIME_TO_LIVE.equals(name))
+        {
+            return getTimeToLive();
+        }
+        else if (CREATED.equals(name))
+        {
+
+        }
+        else if (UPDATED.equals(name))
+        {
 
-    @Override
-    public <C extends ConfiguredObject> C createChild(Class<C> childClass, Map<String, Object> attributes, ConfiguredObject... otherParents)
-    {
-        throw new UnsupportedOperationException();
+        }
+        return super.getAttribute(name);
     }
 }

Added: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AmqpPortAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AmqpPortAdapter.java?rev=1447646&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AmqpPortAdapter.java (added)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AmqpPortAdapter.java Tue Feb 19 09:35:28 2013
@@ -0,0 +1,251 @@
+/*
+ * 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.model.adapter;
+
+import static org.apache.qpid.transport.ConnectionSettings.WILDCARD_ADDRESS;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.security.GeneralSecurityException;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+
+import javax.net.ssl.SSLContext;
+
+import org.apache.qpid.server.configuration.BrokerProperties;
+import org.apache.qpid.server.configuration.IllegalConfigurationException;
+import org.apache.qpid.server.logging.actors.CurrentActor;
+import org.apache.qpid.server.logging.messages.BrokerMessages;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.KeyStore;
+import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.Protocol;
+import org.apache.qpid.server.model.Transport;
+import org.apache.qpid.server.model.TrustStore;
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.protocol.AmqpProtocolVersion;
+import org.apache.qpid.server.protocol.MultiVersionProtocolEngineFactory;
+import org.apache.qpid.ssl.SSLContextFactory;
+import org.apache.qpid.transport.NetworkTransportConfiguration;
+import org.apache.qpid.transport.network.IncomingNetworkTransport;
+
+public class AmqpPortAdapter extends PortAdapter
+{
+    private final Broker _broker;
+    private IncomingNetworkTransport _transport;
+
+    public AmqpPortAdapter(UUID id, Broker broker, Map<String, Object> attributes, Map<String, Object> defaultAttributes, TaskExecutor taskExecutor)
+    {
+        super(id, broker, attributes, defaultAttributes, taskExecutor);
+        _broker = broker;
+    }
+
+    @Override
+    protected void onActivate()
+    {
+        Collection<Transport> transports = getTransports();
+        Set<AmqpProtocolVersion> supported = convertFromModelProtocolsToAmqp(getProtocols());
+
+        SSLContext sslContext = null;
+        if (transports.contains(Transport.SSL))
+        {
+            sslContext = createSslContext();
+        }
+
+        AmqpProtocolVersion defaultSupportedProtocolReply = getDefaultAmqpSupportedReply();
+
+        String bindingAddress = (String) getAttribute(Port.BINDING_ADDRESS);
+        if (WILDCARD_ADDRESS.equals(bindingAddress))
+        {
+            bindingAddress = null;
+        }
+        Integer port = (Integer) getAttribute(Port.PORT);
+        InetSocketAddress bindingSocketAddress = null;
+        if ( bindingAddress == null )
+        {
+            bindingSocketAddress = new InetSocketAddress(port);
+        }
+        else
+        {
+            bindingSocketAddress = new InetSocketAddress(bindingAddress, port);
+        }
+
+        final NetworkTransportConfiguration settings = new ServerNetworkTransportConfiguration(
+                bindingSocketAddress, (Boolean)getAttribute(TCP_NO_DELAY),
+                (Integer)getAttribute(SEND_BUFFER_SIZE), (Integer)getAttribute(RECEIVE_BUFFER_SIZE),
+                (Boolean)getAttribute(NEED_CLIENT_AUTH), (Boolean)getAttribute(WANT_CLIENT_AUTH));
+
+        _transport = org.apache.qpid.transport.network.Transport.getIncomingTransportInstance();
+        final MultiVersionProtocolEngineFactory protocolEngineFactory = new MultiVersionProtocolEngineFactory(
+                _broker, supported, defaultSupportedProtocolReply);
+
+        _transport.accept(settings, protocolEngineFactory, sslContext);
+        CurrentActor.get().message(BrokerMessages.LISTENING(getTransports().toString(), getPort()));
+    }
+
+    @Override
+    protected void onStop()
+    {
+        if (_transport != null)
+        {
+            CurrentActor.get().message(BrokerMessages.SHUTTING_DOWN(getTransports().toString(), getPort()));
+            _transport.close();
+        }
+    }
+
+    private Set<AmqpProtocolVersion> convertFromModelProtocolsToAmqp(Collection<Protocol> modelProtocols)
+    {
+        Set<AmqpProtocolVersion> amqpProtocols = new HashSet<AmqpProtocolVersion>();
+        for (Protocol protocol : modelProtocols)
+        {
+            amqpProtocols.add(protocol.toAmqpProtocolVersion());
+        }
+        return amqpProtocols;
+    }
+
+    private SSLContext createSslContext()
+    {
+        KeyStore keyStore = _broker.getDefaultKeyStore();
+        if (keyStore == null)
+        {
+            throw new IllegalConfigurationException("SSL was requested on AMQP port '"
+                    + this.getName() + "' but no key store defined");
+        }
+
+        TrustStore trustStore = _broker.getDefaultTrustStore();
+        if (((Boolean)getAttribute(NEED_CLIENT_AUTH) || (Boolean)getAttribute(WANT_CLIENT_AUTH)) && trustStore == null)
+        {
+            throw new IllegalConfigurationException("Client certificate authentication is enabled on AMQP port '"
+                    + this.getName() + "' but no trust store defined");
+        }
+
+        String keystorePath = (String)keyStore.getAttribute(KeyStore.PATH);
+        String keystorePassword = keyStore.getPassword();
+        String keystoreType = (String)keyStore.getAttribute(KeyStore.TYPE);
+        String keyManagerFactoryAlgorithm = (String)keyStore.getAttribute(KeyStore.KEY_MANAGER_FACTORY_ALGORITHM);
+        String certAlias = (String)keyStore.getAttribute(KeyStore.CERTIFICATE_ALIAS);
+
+        final SSLContext sslContext;
+        try
+        {
+            if(trustStore != null)
+            {
+                String trustStorePassword = trustStore.getPassword();
+                String trustStoreType = (String)trustStore.getAttribute(TrustStore.TYPE);
+                String trustManagerFactoryAlgorithm = (String)trustStore.getAttribute(TrustStore.KEY_MANAGER_FACTORY_ALGORITHM);
+                String trustStorePath = (String)trustStore.getAttribute(TrustStore.PATH);
+
+                sslContext = SSLContextFactory.buildClientContext(trustStorePath,
+                        trustStorePassword,
+                        trustStoreType,
+                        trustManagerFactoryAlgorithm,
+                        keystorePath,
+                        keystorePassword, keystoreType, keyManagerFactoryAlgorithm,
+                        certAlias);
+            }
+            else
+            {
+                sslContext = SSLContextFactory.buildServerContext(keystorePath, keystorePassword, keystoreType, keyManagerFactoryAlgorithm);
+            }
+        }
+        catch (GeneralSecurityException e)
+        {
+            throw new RuntimeException("Unable to create SSLContext for key or trust store", e);
+        }
+        catch (IOException e)
+        {
+            throw new RuntimeException("Unable to create SSLContext - unable to load key/trust store", e);
+        }
+        return sslContext;
+    }
+
+    private AmqpProtocolVersion getDefaultAmqpSupportedReply()
+    {
+        String defaultAmqpSupportedReply = System.getProperty(BrokerProperties.PROPERTY_DEFAULT_SUPPORTED_PROTOCOL_REPLY);
+        if (defaultAmqpSupportedReply != null)
+        {
+            return AmqpProtocolVersion.valueOf(defaultAmqpSupportedReply);
+        }
+        return null;
+    }
+
+
+    class ServerNetworkTransportConfiguration implements NetworkTransportConfiguration
+    {
+        private final InetSocketAddress _bindingSocketAddress;
+        private final Boolean _tcpNoDelay;
+        private final Integer _sendBufferSize;
+        private final Integer _receiveBufferSize;
+        private final boolean _needClientAuth;
+        private final boolean _wantClientAuth;
+
+        public ServerNetworkTransportConfiguration(
+                InetSocketAddress bindingSocketAddress, boolean tcpNoDelay,
+                int sendBufferSize, int receiveBufferSize,
+                boolean needClientAuth, boolean wantClientAuth)
+        {
+            _bindingSocketAddress = bindingSocketAddress;
+            _tcpNoDelay = tcpNoDelay;
+            _sendBufferSize = sendBufferSize;
+            _receiveBufferSize = receiveBufferSize;
+            _needClientAuth = needClientAuth;
+            _wantClientAuth = wantClientAuth;
+        }
+
+        @Override
+        public boolean wantClientAuth()
+        {
+            return _wantClientAuth;
+        }
+
+        @Override
+        public boolean needClientAuth()
+        {
+            return _needClientAuth;
+        }
+
+        @Override
+        public Boolean getTcpNoDelay()
+        {
+            return _tcpNoDelay;
+        }
+
+        @Override
+        public Integer getSendBufferSize()
+        {
+            return _sendBufferSize;
+        }
+
+        @Override
+        public Integer getReceiveBufferSize()
+        {
+            return _receiveBufferSize;
+        }
+
+        @Override
+        public InetSocketAddress getAddress()
+        {
+            return _bindingSocketAddress;
+        }
+    };
+}

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java?rev=1447646&r1=1447645&r2=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java Tue Feb 19 09:35:28 2013
@@ -29,38 +29,50 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
+
 import javax.security.auth.login.AccountNotFoundException;
 
 import org.apache.log4j.Logger;
-import org.apache.qpid.server.model.*;
-import org.apache.qpid.server.registry.ApplicationRegistry;
+import org.apache.qpid.server.model.AuthenticationProvider;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.IllegalStateTransitionException;
+import org.apache.qpid.server.model.LifetimePolicy;
+import org.apache.qpid.server.model.PasswordCredentialManagingAuthenticationProvider;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.Statistics;
+import org.apache.qpid.server.model.UUIDGenerator;
+import org.apache.qpid.server.model.User;
+import org.apache.qpid.server.model.VirtualHostAlias;
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.security.SubjectCreator;
 import org.apache.qpid.server.security.access.Operation;
+import org.apache.qpid.server.security.auth.UsernamePrincipal;
 import org.apache.qpid.server.security.auth.database.PrincipalDatabase;
 import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
 import org.apache.qpid.server.security.auth.manager.PrincipalDatabaseAuthenticationManager;
-import org.apache.qpid.server.security.auth.UsernamePrincipal;
+import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
+import org.apache.qpid.server.security.SecurityManager;
 
 public abstract class AuthenticationProviderAdapter<T extends AuthenticationManager> extends AbstractAdapter implements AuthenticationProvider
 {
     private static final Logger LOGGER = Logger.getLogger(AuthenticationProviderAdapter.class);
 
-    private final BrokerAdapter _broker;
     private final T _authManager;
+    protected final Broker _broker;
 
-    private AuthenticationProviderAdapter(BrokerAdapter brokerAdapter,
-                                          final T authManager)
-    {
-        super(UUIDGenerator.generateRandomUUID());
-        _broker = brokerAdapter;
-        _authManager = authManager;
-    }
+    private GroupPrincipalAccessor _groupAccessor;
+
+    private Object _type;
 
-    public static AuthenticationProviderAdapter createAuthenticationProviderAdapter(BrokerAdapter brokerAdapter,
-                                                                             final AuthenticationManager authManager)
+    private AuthenticationProviderAdapter(UUID id, Broker broker, final T authManager, Map<String, Object> attributes)
     {
-        return authManager instanceof PrincipalDatabaseAuthenticationManager
-                ? new PrincipalDatabaseAuthenticationManagerAdapter(brokerAdapter, (PrincipalDatabaseAuthenticationManager) authManager)
-                : new SimpleAuthenticationProviderAdapter(brokerAdapter, authManager);
+        super(id, null, attributes, broker.getTaskExecutor());
+        _authManager = authManager;
+        _broker = broker;
+        _type = authManager instanceof PrincipalDatabaseAuthenticationManager? PrincipalDatabaseAuthenticationManager.class.getSimpleName() : AuthenticationManager.class.getSimpleName() ;
+        addParent(Broker.class, broker);
     }
 
     T getAuthManager()
@@ -77,7 +89,7 @@ public abstract class AuthenticationProv
     @Override
     public String getName()
     {
-        return _authManager.getClass().getSimpleName();
+        return (String)getAttribute(AuthenticationProvider.NAME);
     }
 
     @Override
@@ -147,7 +159,7 @@ public abstract class AuthenticationProv
     {
         if(TYPE.equals(name))
         {
-            return getName();
+            return _type;
         }
         else if(CREATED.equals(name))
         {
@@ -165,10 +177,6 @@ public abstract class AuthenticationProv
         {
             return LifetimePolicy.PERMANENT;
         }
-        else if(NAME.equals(name))
-        {
-            return getName();
-        }
         else if(STATE.equals(name))
         {
             return State.ACTIVE; // TODO
@@ -191,31 +199,67 @@ public abstract class AuthenticationProv
     }
 
     @Override
-    public <C extends ConfiguredObject> C createChild(Class<C> childClass,
-                                                      Map<String, Object> attributes,
-                                                      ConfiguredObject... otherParents)
+    public boolean setState(State currentState, State desiredState)
+            throws IllegalStateTransitionException, AccessControlException
     {
-        throw new IllegalArgumentException("This authentication provider does not support" +
-                                           " creating children of type: " + childClass);
+        if(desiredState == State.DELETED)
+        {
+            return true;
+        }
+        else if(desiredState == State.ACTIVE)
+        {
+            if (_groupAccessor == null)
+            {
+                throw new IllegalStateTransitionException("Cannot transit into ACTIVE state with null group accessor!");
+            }
+            _authManager.initialise();
+            return true;
+        }
+        else if(desiredState == State.STOPPED)
+        {
+            _authManager.close();
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public SubjectCreator getSubjectCreator()
+    {
+        return new SubjectCreator(_authManager, _groupAccessor);
+    }
+
+    public void setGroupAccessor(GroupPrincipalAccessor groupAccessor)
+    {
+        _groupAccessor = groupAccessor;
     }
 
-    private static class SimpleAuthenticationProviderAdapter extends AuthenticationProviderAdapter<AuthenticationManager>
+    public static class SimpleAuthenticationProviderAdapter extends AuthenticationProviderAdapter<AuthenticationManager>
     {
+
         public SimpleAuthenticationProviderAdapter(
-                BrokerAdapter brokerAdapter, AuthenticationManager authManager)
+                UUID id, Broker broker, AuthenticationManager authManager, Map<String, Object> attributes)
         {
-            super(brokerAdapter,authManager);
+            super(id, broker,authManager, attributes);
+        }
+
+        @Override
+        public <C extends ConfiguredObject> C createChild(Class<C> childClass,
+                                                          Map<String, Object> attributes,
+                                                          ConfiguredObject... otherParents)
+        {
+            throw new UnsupportedOperationException();
         }
     }
 
-    private static class PrincipalDatabaseAuthenticationManagerAdapter
+    public static class PrincipalDatabaseAuthenticationManagerAdapter
             extends AuthenticationProviderAdapter<PrincipalDatabaseAuthenticationManager>
             implements PasswordCredentialManagingAuthenticationProvider
     {
         public PrincipalDatabaseAuthenticationManagerAdapter(
-                BrokerAdapter brokerAdapter, PrincipalDatabaseAuthenticationManager authManager)
+                UUID id, Broker broker, PrincipalDatabaseAuthenticationManager authManager, Map<String, Object> attributes)
         {
-            super(brokerAdapter, authManager);
+            super(id, broker, authManager, attributes);
         }
 
         @Override
@@ -245,9 +289,9 @@ public abstract class AuthenticationProv
             }
         }
 
-        private org.apache.qpid.server.security.SecurityManager getSecurityManager()
+        private SecurityManager getSecurityManager()
         {
-            return ApplicationRegistry.getInstance().getSecurityManager();
+            return _broker.getSecurityManager();
         }
 
         private PrincipalDatabase getPrincipalDatabase()
@@ -275,7 +319,7 @@ public abstract class AuthenticationProv
             Map<String, Map<String,String>> users = new HashMap<String, Map<String, String>>();
             for(Principal principal : getPrincipalDatabase().getUsers())
             {
-                users.put(principal.getName(), Collections.EMPTY_MAP);
+                users.put(principal.getName(), Collections.<String, String>emptyMap());
             }
             return users;
         }
@@ -286,7 +330,7 @@ public abstract class AuthenticationProv
         }
 
         @Override
-        public <C extends ConfiguredObject> C createChild(Class<C> childClass,
+        public <C extends ConfiguredObject> C addChild(Class<C> childClass,
                                                           Map<String, Object> attributes,
                                                           ConfiguredObject... otherParents)
         {
@@ -298,7 +342,9 @@ public abstract class AuthenticationProv
 
                 if(createUser(username, password,null))
                 {
-                    return (C) new PrincipalAdapter(p);
+                    @SuppressWarnings("unchecked")
+                    C pricipalAdapter = (C) new PrincipalAdapter(p, getTaskExecutor());
+                    return pricipalAdapter;
                 }
                 else
                 {
@@ -307,7 +353,7 @@ public abstract class AuthenticationProv
                 }
             }
 
-            return super.createChild(childClass, attributes, otherParents);
+            return super.addChild(childClass, attributes, otherParents);
         }
 
         @Override
@@ -319,9 +365,11 @@ public abstract class AuthenticationProv
                 Collection<User> principals = new ArrayList<User>(users.size());
                 for(Principal user : users)
                 {
-                    principals.add(new PrincipalAdapter(user));
+                    principals.add(new PrincipalAdapter(user, getTaskExecutor()));
                 }
-                return (Collection<C>) Collections.unmodifiableCollection(principals);
+                @SuppressWarnings("unchecked")
+                Collection<C> unmodifiablePrincipals = (Collection<C>) Collections.unmodifiableCollection(principals);
+                return unmodifiablePrincipals;
             }
             else
             {
@@ -334,9 +382,9 @@ public abstract class AuthenticationProv
             private final Principal _user;
 
 
-            public PrincipalAdapter(Principal user)
+            public PrincipalAdapter(Principal user, TaskExecutor taskExecutor)
             {
-                super(UUIDGenerator.generateUserUUID(PrincipalDatabaseAuthenticationManagerAdapter.this.getName(), user.getName()));
+                super(UUIDGenerator.generateUserUUID(PrincipalDatabaseAuthenticationManagerAdapter.this.getName(), user.getName()), taskExecutor);
                 _user = user;
 
             }
@@ -457,20 +505,19 @@ public abstract class AuthenticationProv
             }
 
             @Override
-            public Object setAttribute(String name, Object expected, Object desired)
+            public boolean changeAttribute(String name, Object expected, Object desired)
                     throws IllegalStateException, AccessControlException, IllegalArgumentException
             {
                 if(name.equals(PASSWORD))
                 {
                     setPassword((String)desired);
+                    return true;
                 }
-                return super.setAttribute(name,
-                                          expected,
-                                          desired);
+                return super.changeAttribute(name, expected, desired);
             }
 
             @Override
-            public State setDesiredState(State currentState, State desiredState)
+            protected boolean setState(State currentState, State desiredState)
                     throws IllegalStateTransitionException, AccessControlException
             {
                 if(desiredState == State.DELETED)
@@ -483,9 +530,9 @@ public abstract class AuthenticationProv
                     {
                         LOGGER.warn("Failed to delete user " + _user, e);
                     }
-                    return State.DELETED;
+                    return true;
                 }
-                return super.setDesiredState(currentState, desiredState);
+                return false;
             }
         }
     }

Added: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java?rev=1447646&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java (added)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java Tue Feb 19 09:35:28 2013
@@ -0,0 +1,77 @@
+/*
+ *
+ * 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.model.adapter;
+
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpid.server.model.AuthenticationProvider;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
+import org.apache.qpid.server.plugin.QpidServiceLoader;
+import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
+import org.apache.qpid.server.security.auth.manager.PrincipalDatabaseAuthenticationManager;
+import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
+import org.apache.qpid.server.model.adapter.AuthenticationProviderAdapter.PrincipalDatabaseAuthenticationManagerAdapter;
+import org.apache.qpid.server.model.adapter.AuthenticationProviderAdapter.SimpleAuthenticationProviderAdapter;
+
+public class AuthenticationProviderFactory
+{
+    private final Iterable<AuthenticationManagerFactory> _factories;
+
+    public AuthenticationProviderFactory(QpidServiceLoader<AuthenticationManagerFactory> authManagerFactoryServiceLoader)
+    {
+        _factories = authManagerFactoryServiceLoader.atLeastOneInstanceOf(AuthenticationManagerFactory.class);
+    }
+
+    /**
+     * Creates {@link AuthenticationProvider} for given ID, {@link Broker} and attributes.
+     * <p>
+     * The configured {@link AuthenticationManagerFactory}'s are used to try to create the {@link AuthenticationProvider}.
+     * The first non-null instance is returned. The factories are used in non-deterministic order.
+     * @param groupPrincipalAccessor TODO
+     */
+    public AuthenticationProvider create(UUID id, Broker broker, Map<String, Object> attributes, GroupPrincipalAccessor groupPrincipalAccessor)
+    {
+        for (AuthenticationManagerFactory factory : _factories)
+        {
+            AuthenticationManager manager = factory.createInstance(attributes);
+            if (manager != null)
+            {
+                AuthenticationProviderAdapter<?> authenticationProvider;
+                if (manager instanceof PrincipalDatabaseAuthenticationManager)
+                {
+                    authenticationProvider = new PrincipalDatabaseAuthenticationManagerAdapter(id, broker,
+                            (PrincipalDatabaseAuthenticationManager) manager, attributes);
+                }
+                else
+                {
+                    authenticationProvider = new SimpleAuthenticationProviderAdapter(id, broker, manager, attributes);
+                }
+                authenticationProvider.setGroupAccessor(groupPrincipalAccessor);
+                return authenticationProvider;
+            }
+        }
+
+        throw new IllegalArgumentException("No authentication provider factory found for configuration attributes " + attributes);
+    }
+
+}

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java?rev=1447646&r1=1447645&r2=1447646&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java Tue Feb 19 09:35:28 2013
@@ -48,7 +48,7 @@ final class BindingAdapter extends Abstr
                           ExchangeAdapter exchangeAdapter,
                           QueueAdapter queueAdapter)
     {
-        super(binding.getId());
+        super(binding.getId(), queueAdapter.getTaskExecutor());
         _binding = binding;
         _exchange = exchangeAdapter;
         _queue = queueAdapter;
@@ -206,27 +206,20 @@ final class BindingAdapter extends Abstr
     }
 
     @Override
-    public Object setAttribute(final String name, final Object expected, final Object desired)
-            throws IllegalStateException, AccessControlException, IllegalArgumentException
-    {
-        return super.setAttribute(name, expected, desired);    //TODO
-    }
-
-    @Override
     public Collection<String> getAttributeNames()
     {
         return Binding.AVAILABLE_ATTRIBUTES;
     }
 
     @Override
-    public State setDesiredState(State currentState, State desiredState) throws IllegalStateTransitionException,
+    protected boolean setState(State currentState, State desiredState) throws IllegalStateTransitionException,
             AccessControlException
     {
         if (desiredState == State.DELETED)
         {
             delete();
-            return State.DELETED;
+            return true;
         }
-        return super.setDesiredState(currentState, desiredState);
+        return false;
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org