Author: rgodfrey
Date: Tue Dec 15 21:05:45 2015
New Revision: 1720249

URL: http://svn.apache.org/viewvc?rev=1720249&view=rev
Log:
QPID-6954 : Refactor to remove code duplication

Modified:
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1720249&r1=1720248&r2=1720249&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
 Tue Dec 15 21:05:45 2015
@@ -779,62 +779,30 @@ public abstract class AbstractVirtualHos
 
     private MessageSource autoCreateSource(final String name)
     {
-        for(NodeAutoCreationPolicy policy : getNodeAutoCreationPolicies())
-        {
-            String pattern = policy.getPattern();
-            if(name.matches(pattern) && policy.isCreatedOnConsume())
-            {
-                String nodeType = policy.getNodeType();
-                Class<? extends ConfiguredObject> sourceClass = null;
-                for(Class<? extends ConfiguredObject> childClass : 
getModel().getChildTypes(getCategoryClass()))
-                {
-                    
if(childClass.getSimpleName().equalsIgnoreCase(nodeType.trim()) && 
MessageSource.class.isAssignableFrom(childClass))
-                    {
-                        sourceClass = childClass;
-                    }
-                }
-                if(sourceClass != null)
-                {
-                    Map<String, Object> attributes = new 
HashMap<>(policy.getAttributes());
-                    attributes.remove(ConfiguredObject.ID);
-                    attributes.put(ConfiguredObject.NAME, name);
-
-                    try
-                    {
+        return autoCreateNode(name, MessageSource.class, false);
+    }
 
-                        final MessageSource messageSource =
-                                (MessageSource) 
doSync(addChildAsync(sourceClass, attributes));
-                        if (messageSource != null)
-                        {
-                            return messageSource;
-                        }
-                    }
-                    catch (RuntimeException e)
-                    {
-                        _logger.info("Unable to auto create a node named {} 
due to exception", name, e);
-                    }
 
-                }
-            }
+    private MessageDestination autoCreateDestination(final String name)
+    {
+        return autoCreateNode(name, MessageDestination.class, true);
 
-        }
-        return null;
     }
 
-
-    private MessageDestination autoCreateDestination(final String name)
+    private <T> T autoCreateNode(final String name, final Class<T> clazz, 
boolean publish)
     {
         for (NodeAutoCreationPolicy policy : getNodeAutoCreationPolicies())
         {
             String pattern = policy.getPattern();
-            if (name.matches(pattern) && policy.isCreatedOnPublish())
+            if (name.matches(pattern) &&
+                ((publish && policy.isCreatedOnPublish()) || (!publish && 
policy.isCreatedOnConsume())))
             {
                 String nodeType = policy.getNodeType();
                 Class<? extends ConfiguredObject> sourceClass = null;
                 for (Class<? extends ConfiguredObject> childClass : 
getModel().getChildTypes(getCategoryClass()))
                 {
                     if 
(childClass.getSimpleName().equalsIgnoreCase(nodeType.trim())
-                        && 
MessageDestination.class.isAssignableFrom(childClass))
+                        && clazz.isAssignableFrom(childClass))
                     {
                         sourceClass = childClass;
                     }
@@ -848,11 +816,11 @@ public abstract class AbstractVirtualHos
                     try
                     {
 
-                        final MessageDestination messageDestination =
-                                (MessageDestination) 
doSync(addChildAsync(sourceClass, attributes));
-                        if (messageDestination != null)
+                        final T node =
+                                (T) doSync(addChildAsync(sourceClass, 
attributes));
+                        if (node != null)
                         {
-                            return messageDestination;
+                            return node;
                         }
                     }
                     catch (RuntimeException e)



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

Reply via email to