Author: rgodfrey
Date: Mon Apr 23 15:41:59 2012
New Revision: 1329291

URL: http://svn.apache.org/viewvc?rev=1329291&view=rev
Log:
NO-JIRA : [Java Config] Initial work on allowing generic creation of children 
based on maps

Modified:
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConsumerAdapter.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/PortAdapter.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/BrokerImpl.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/ExchangeImpl.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/QueueImpl.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/VirtualHostImpl.java
    
qpid/branches/java-config-and-management/qpid/java/broker/src/test/java/org/apache/qpid/server/model/impl/AbstractConfiguredObjectImplTest.java

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java
 Mon Apr 23 15:41:59 2012
@@ -22,6 +22,7 @@ package org.apache.qpid.server.model;
 
 import java.security.AccessControlException;
 import java.util.Collection;
+import java.util.Map;
 import java.util.UUID;
 
 public interface ConfiguredObject
@@ -237,4 +238,9 @@ public interface ConfiguredObject
      *
      */
     <C extends ConfiguredObject> Collection<C> getChildren(Class<C> clazz);
+
+
+    <C extends ConfiguredObject> C createChild(Class<C> childClass,
+                                               Map<String, Object> attributes,
+                                               ConfiguredObject... 
otherParents);
 }

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java
 Mon Apr 23 15:41:59 2012
@@ -20,19 +20,16 @@
  */
 package org.apache.qpid.server.model.adapter;
 
-import org.apache.commons.lang.CharSet;
-
-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 java.security.AccessControlException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 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;
 
 abstract class AbstractAdapter implements ConfiguredObject
 {
@@ -59,6 +56,114 @@ abstract class AbstractAdapter implement
         _id = UUID.randomUUID();
     }
 
+    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)
+        {
+            return (Map) value;
+        }
+        else
+        {
+            throw new IllegalArgumentException("Value for attribute " + name + 
" is not of required type Map");
+        }
+    }
+
+
+    static <E extends Enum> E getEnumAttribute(Class<E> clazz, String name, 
Map<String,Object> attributes, E defaultVal)
+    {
+        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());
+        }
+    }
+
+    static Boolean getBooleanAttribute(String name, Map<String,Object> 
attributes, Boolean defaultValue)
+    {
+        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");
+        }
+    }
+
+    static Integer getIntegerAttribute(String name, Map<String,Object> 
attributes, Integer defaultValue)
+    {
+        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");
+        }
+    }
+
+    static Long getLongAttribute(String name, Map<String,Object> attributes, 
Long defaultValue)
+    {
+        Object obj = attributes.get(name);
+        if(obj == null)
+        {
+            return defaultValue;
+        }
+        else if(obj instanceof Number)
+        {
+            return ((Number) obj).longValue();
+        }
+        else if(obj instanceof String)
+        {
+            return Long.valueOf((String) obj);
+        }
+        else
+        {
+            throw new IllegalArgumentException("Value for attribute " + name + 
" is not of required type Long");
+        }
+    }
+
     public final UUID getId()
     {
         return _id;

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java
 Mon Apr 23 15:41:59 2012
@@ -129,6 +129,12 @@ final class BindingAdapter extends Abstr
         return Collections.emptySet();
     }
 
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        throw new IllegalArgumentException("Cannot add children to a binding");
+    }
+
     public Map<String, Object> getArguments()
     {
         return new HashMap<String, Object> (_binding.getArguments());

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
 Mon Apr 23 15:41:59 2012
@@ -130,6 +130,12 @@ public class BrokerAdapter extends Abstr
         return null;  //TODO
     }
 
+    public VirtualHost createVirtualHost(final Map<String, Object> attributes)
+            throws AccessControlException, IllegalArgumentException
+    {
+        return null;  //TODO
+    }
+    
     public void deleteVirtualHost(final VirtualHost vhost)
         throws AccessControlException, IllegalStateException
     {
@@ -212,6 +218,39 @@ public class BrokerAdapter extends Abstr
         return Collections.emptySet();
     }
 
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        if(childClass == VirtualHost.class)
+        {
+            return (C) createVirtualHost(attributes);
+        }
+        else if(childClass == Port.class)
+        {
+            return (C) createPort(attributes);
+        }
+        else if(childClass == AuthenticationProvider.class)
+        {
+            return (C) createAuthenticationProvider(attributes);
+        }
+        else
+        {
+            throw new IllegalArgumentException("Cannot create child of class " 
+ childClass.getSimpleName());
+        }
+    }
+
+    private Port createPort(Map<String, Object> attributes)
+    {
+        // TODO
+        return null;
+    }
+    
+    private AuthenticationProvider 
createAuthenticationProvider(Map<String,Object> attributes)
+    {
+        // TODO
+        return null;
+    }
+
 
     public void 
virtualHostRegistered(org.apache.qpid.server.virtualhost.VirtualHost 
virtualHost)
     {

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java
 Mon Apr 23 15:41:59 2012
@@ -271,6 +271,19 @@ final class ConnectionAdapter extends Ab
         }
     }
 
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        if(childClass == Session.class)
+        {
+            throw new IllegalStateException();
+        }
+        else
+        {
+            throw new IllegalArgumentException("Cannot create a child of class 
" + childClass.getSimpleName());
+        }
+
+    }
+
     private class ConnectionStatisticsAdapter extends StatisticsAdapter
     {
         public ConnectionStatisticsAdapter(StatisticsGatherer 
applicationRegistry)

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConsumerAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConsumerAdapter.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConsumerAdapter.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ConsumerAdapter.java
 Mon Apr 23 15:41:59 2012
@@ -20,6 +20,7 @@
  */
 package org.apache.qpid.server.model.adapter;
 
+import java.util.Map;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.Consumer;
 import org.apache.qpid.server.model.LifetimePolicy;
@@ -182,6 +183,12 @@ public class ConsumerAdapter extends Abs
         return Collections.emptySet();
     }
 
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        throw new IllegalArgumentException();
+    }
+
     private class ConsumerStatistics implements Statistics
     {
 

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java
 Mon Apr 23 15:41:59 2012
@@ -25,9 +25,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
-
 import org.apache.qpid.AMQException;
 import org.apache.qpid.AMQInternalException;
 import org.apache.qpid.AMQSecurityException;
@@ -106,6 +104,22 @@ final class ExchangeAdapter extends Abst
         return Collections.emptyList();
     }
 
+
+    public org.apache.qpid.server.model.Binding createBinding(Queue queue,
+                                                              Map<String, 
Object> attributes)
+            throws AccessControlException, IllegalStateException
+    {
+        attributes = new HashMap<String, Object>(attributes);
+        String bindingKey = 
getStringAttribute(org.apache.qpid.server.model.Binding.NAME, attributes, "");
+        Map<String, Object> bindingArgs = 
getMapAttribute(org.apache.qpid.server.model.Binding.ARGUMENTS, attributes, 
Collections.EMPTY_MAP);
+
+        attributes.remove(org.apache.qpid.server.model.Binding.NAME);
+        attributes.remove(org.apache.qpid.server.model.Binding.ARGUMENTS);
+
+        return createBinding(bindingKey, queue, bindingArgs, attributes);
+
+    }
+    
     public org.apache.qpid.server.model.Binding createBinding(String 
bindingKey, Queue queue,
                                                               Map<String, 
Object> bindingArguments,
                                                               Map<String, 
Object> attributes)
@@ -226,6 +240,34 @@ final class ExchangeAdapter extends Abst
         }
     }
 
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        if(childClass == org.apache.qpid.server.model.Binding.class)
+        {
+            if(otherParents != null && otherParents.length == 1 && 
otherParents[0] instanceof Queue)
+            {
+                Queue queue = (Queue) otherParents[0];
+                
if(queue.getParent(org.apache.qpid.server.model.VirtualHost.class) == 
getParent(org.apache.qpid.server.model.VirtualHost.class))
+                {
+                    return (C) createBinding(queue, attributes);
+                }
+                else
+                {
+                    throw new IllegalArgumentException("Queue and Exchange 
parents of a binding must be on same virtual host");
+                }
+            }
+            else
+            {
+                throw new IllegalArgumentException("Other parent must be a 
queue");
+            }
+        }
+        else
+        {
+            throw new IllegalArgumentException();
+        }
+    }
+
     public void bindingAdded(org.apache.qpid.server.exchange.Exchange 
exchange, Binding binding)
     {
         BindingAdapter adapter = null;

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/PortAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/PortAdapter.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/PortAdapter.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/PortAdapter.java
 Mon Apr 23 15:41:59 2012
@@ -21,6 +21,7 @@
 
 package org.apache.qpid.server.model.adapter;
 
+import java.util.Map;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.Connection;
 import org.apache.qpid.server.model.LifetimePolicy;
@@ -242,6 +243,12 @@ public class PortAdapter extends Abstrac
     }
 
     @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(ID.equals(name))

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
 Mon Apr 23 15:41:59 2012
@@ -27,15 +27,15 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
-
 import org.apache.qpid.AMQException;
 import org.apache.qpid.server.binding.Binding;
 import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.Consumer;
+import org.apache.qpid.server.model.Exchange;
 import org.apache.qpid.server.model.LifetimePolicy;
 import org.apache.qpid.server.model.Queue;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.model.Statistics;
-import org.apache.qpid.server.model.Consumer;
 import org.apache.qpid.server.queue.AMQQueue;
 import org.apache.qpid.server.queue.QueueEntryVisitor;
 import org.apache.qpid.server.subscription.Subscription;
@@ -406,6 +406,50 @@ final class QueueAdapter extends Abstrac
         }
     }
 
+    public org.apache.qpid.server.model.Binding createBinding(Exchange 
exchange, Map<String, Object> attributes)
+            throws AccessControlException, IllegalStateException
+    {
+        attributes = new HashMap<String, Object>(attributes);
+        String bindingKey = 
getStringAttribute(org.apache.qpid.server.model.Binding.NAME, attributes, "");
+        Map<String, Object> bindingArgs = 
getMapAttribute(org.apache.qpid.server.model.Binding.ARGUMENTS, attributes, 
Collections.EMPTY_MAP);
+
+        attributes.remove(org.apache.qpid.server.model.Binding.NAME);
+        attributes.remove(org.apache.qpid.server.model.Binding.ARGUMENTS);
+
+        return exchange.createBinding(bindingKey, this, bindingArgs, 
attributes);
+
+    }
+
+
+
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        if(childClass == org.apache.qpid.server.model.Binding.class)
+        {
+            if(otherParents != null && otherParents.length == 1 && 
otherParents[0] instanceof Exchange)
+            {
+                Exchange exchange = (Exchange) otherParents[0];
+                
if(exchange.getParent(org.apache.qpid.server.model.VirtualHost.class) == 
getParent(org.apache.qpid.server.model.VirtualHost.class))
+                {
+                    return (C) createBinding(exchange, attributes);
+                }
+                else
+                {
+                    throw new IllegalArgumentException("Queue and Exchange 
parents of a binding must be on same virtual host");
+                }
+            }
+            else
+            {
+                throw new IllegalArgumentException("Other parent must be an 
exchange");
+            }
+        }
+        else
+        {
+            throw new IllegalArgumentException();
+        }
+    }
+
     void bindingRegistered(Binding binding, BindingAdapter adapter)
     {
         synchronized (_bindingAdapters)

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java
 Mon Apr 23 15:41:59 2012
@@ -25,6 +25,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 
+import java.util.Map;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.LifetimePolicy;
 import org.apache.qpid.server.model.Publisher;
@@ -163,6 +164,12 @@ final class SessionAdapter extends Abstr
         }
     }
 
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        throw new  UnsupportedOperationException();
+    }
+
     private class SessionStatistics implements Statistics
     {
 

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
 Mon Apr 23 15:41:59 2012
@@ -26,12 +26,9 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.WeakHashMap;
-
 import org.apache.qpid.AMQException;
 import org.apache.qpid.framing.FieldTable;
 import org.apache.qpid.server.connection.IConnectionRegistry;
@@ -192,6 +189,30 @@ final class VirtualHostAdapter extends A
         }
     }
 
+
+    public Exchange createExchange(Map<String, Object> attributes)
+            throws AccessControlException, IllegalArgumentException
+    {
+        attributes = new HashMap<String, Object>(attributes);
+        
+        String         name     = getStringAttribute(Exchange.NAME, 
attributes, null);
+        State          state    = getEnumAttribute(State.class, 
Exchange.STATE, attributes, State.ACTIVE);
+        boolean        durable  = getBooleanAttribute(Exchange.DURABLE, 
attributes, false);        
+        LifetimePolicy lifetime = getEnumAttribute(LifetimePolicy.class, 
Exchange.LIFETIME_POLICY, attributes, LifetimePolicy.PERMANENT);
+        String         type     = getStringAttribute(Exchange.TYPE, 
attributes, null);
+        long           ttl      = getLongAttribute(Exchange.TIME_TO_LIVE, 
attributes, 0l);
+        
+        attributes.remove(Exchange.NAME);
+        attributes.remove(Exchange.STATE);
+        attributes.remove(Exchange.DURABLE);
+        attributes.remove(Exchange.LIFETIME_POLICY);
+        attributes.remove(Exchange.TYPE);
+        attributes.remove(Exchange.TIME_TO_LIVE);
+        
+        return createExchange(name, state, durable, lifetime, ttl, type, 
attributes);
+    }
+
+
     public Exchange createExchange(final String name,
                                    final State initialState,
                                    final boolean durable,
@@ -223,6 +244,27 @@ final class VirtualHostAdapter extends A
         }
     }
 
+    public Queue createQueue(Map<String, Object> attributes)
+            throws AccessControlException, IllegalArgumentException
+    {
+        attributes = new HashMap<String, Object>(attributes);
+
+        String         name     = getStringAttribute(Queue.NAME, attributes, 
null);
+        State          state    = getEnumAttribute(State.class, Queue.STATE, 
attributes, State.ACTIVE);
+        boolean        durable  = getBooleanAttribute(Queue.DURABLE, 
attributes, false);
+        LifetimePolicy lifetime = getEnumAttribute(LifetimePolicy.class, 
Queue.LIFETIME_POLICY, attributes, LifetimePolicy.PERMANENT);
+        long           ttl      = getLongAttribute(Queue.TIME_TO_LIVE, 
attributes, 0l);
+        boolean        exclusive= getBooleanAttribute(Queue.EXCLUSIVE, 
attributes, false);
+
+        attributes.remove(Queue.NAME);
+        attributes.remove(Queue.STATE);
+        attributes.remove(Queue.DURABLE);
+        attributes.remove(Queue.LIFETIME_POLICY);
+        attributes.remove(Queue.TIME_TO_LIVE);
+
+        return createQueue(name, state, durable, exclusive, lifetime, ttl, 
attributes);
+    }
+
     public Queue createQueue(final String name,
                              final State initialState,
                              final boolean durable,
@@ -346,6 +388,28 @@ final class VirtualHostAdapter extends A
         }
     }
 
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        if(childClass == Exchange.class)
+        {
+            return (C) createExchange(attributes);
+        }
+        else if(childClass == Queue.class)
+        {
+            return (C) createQueue(attributes);
+        }
+        else if(childClass == VirtualHostAlias.class)
+        {
+            throw new UnsupportedOperationException();
+        }
+        else if(childClass == Connection.class)
+        {
+            throw new UnsupportedOperationException();
+        }
+        throw new IllegalArgumentException("Cannot create a child of class " + 
childClass.getSimpleName());
+    }
+
     public void exchangeRegistered(org.apache.qpid.server.exchange.Exchange 
exchange)
     {
         ExchangeAdapter adapter = null;

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java
 Mon Apr 23 15:41:59 2012
@@ -21,6 +21,7 @@
 
 package org.apache.qpid.server.model.adapter;
 
+import java.util.Map;
 import org.apache.qpid.server.model.AuthenticationMethod;
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.LifetimePolicy;
@@ -132,4 +133,10 @@ public class VirtualHostAliasAdapter  ex
     {
         return Collections.emptySet();
     }
+
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        throw new UnsupportedOperationException();
+    }
 }

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/BrokerImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/BrokerImpl.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/BrokerImpl.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/BrokerImpl.java
 Mon Apr 23 15:41:59 2012
@@ -20,24 +20,21 @@
  */
 package org.apache.qpid.server.model.impl;
 
+import java.security.AccessControlException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+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.model.ConfiguredObject;
-import org.apache.qpid.server.model.Exchange;
 import org.apache.qpid.server.model.LifetimePolicy;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.model.Statistics;
 import org.apache.qpid.server.model.VirtualHost;
 
-import java.security.AccessControlException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
 public class BrokerImpl extends AbstractConfiguredObject implements Broker
 {
     private final Collection<VirtualHost> _virtualHosts = new 
ArrayList<VirtualHost>();
@@ -96,6 +93,12 @@ public class BrokerImpl extends Abstract
         return null;
     }
 
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        throw new UnsupportedOperationException();
+    }
+
     public VirtualHost createVirtualHost(String name, State 
initialState,boolean durable,
                                          LifetimePolicy lifetime, long ttl, 
Map<String, Object> attributes)
             throws AccessControlException, IllegalArgumentException

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/ExchangeImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/ExchangeImpl.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/ExchangeImpl.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/ExchangeImpl.java
 Mon Apr 23 15:41:59 2012
@@ -21,6 +21,7 @@
 package org.apache.qpid.server.model.impl;
 
 import org.apache.qpid.server.model.Binding;
+import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.Exchange;
 import org.apache.qpid.server.model.LifetimePolicy;
 import org.apache.qpid.server.model.Publisher;
@@ -105,4 +106,10 @@ class ExchangeImpl extends AbstractConfi
     {
         return null; // TODO
     }
+
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        throw new UnsupportedOperationException(); //TODO
+    }
 }

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/QueueImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/QueueImpl.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/QueueImpl.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/QueueImpl.java
 Mon Apr 23 15:41:59 2012
@@ -25,6 +25,7 @@ import java.util.Collections;
 import java.util.Map;
 import java.util.UUID;
 import org.apache.qpid.server.model.Binding;
+import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.LifetimePolicy;
 import org.apache.qpid.server.model.Queue;
 import org.apache.qpid.server.model.State;
@@ -90,4 +91,10 @@ class QueueImpl extends AbstractConfigur
     {
         return null;  //TODO
     }
+
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        throw new UnsupportedOperationException(); // TODO
+    }
 }

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/VirtualHostImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/VirtualHostImpl.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/VirtualHostImpl.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/VirtualHostImpl.java
 Mon Apr 23 15:41:59 2012
@@ -107,6 +107,12 @@ class VirtualHostImpl extends AbstractCo
         return null;  //TODO
     }
 
+    @Override
+    public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+    {
+        throw new UnsupportedOperationException(); // TODO
+    }
+
     public Collection<VirtualHostAlias> getAliases()
     {
         synchronized(getLock())

Modified: 
qpid/branches/java-config-and-management/qpid/java/broker/src/test/java/org/apache/qpid/server/model/impl/AbstractConfiguredObjectImplTest.java
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/test/java/org/apache/qpid/server/model/impl/AbstractConfiguredObjectImplTest.java?rev=1329291&r1=1329290&r2=1329291&view=diff
==============================================================================
--- 
qpid/branches/java-config-and-management/qpid/java/broker/src/test/java/org/apache/qpid/server/model/impl/AbstractConfiguredObjectImplTest.java
 (original)
+++ 
qpid/branches/java-config-and-management/qpid/java/broker/src/test/java/org/apache/qpid/server/model/impl/AbstractConfiguredObjectImplTest.java
 Mon Apr 23 15:41:59 2012
@@ -143,6 +143,12 @@ public class AbstractConfiguredObjectImp
         {
             return null;
         }
+
+        @Override
+        public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+        {
+            return null;
+        }
     }
 
     private final class TestChildCO extends AbstractConfiguredObject
@@ -171,6 +177,12 @@ public class AbstractConfiguredObjectImp
         {
             return null;
         }
+
+        @Override
+        public <C extends ConfiguredObject> C createChild(Class<C> childClass, 
Map<String, Object> attributes, ConfiguredObject... otherParents)
+        {
+            return null;
+        }
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to