Author: kwall
Date: Mon Oct 20 16:14:14 2014
New Revision: 1633184

URL: http://svn.apache.org/r1633184
Log:
QPID-6168: [Java Broker] Enforce that an attribute's value falls within the 
domain of values described by valid value set

Modified:
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPort.java
    
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPortImpl.java
    
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AbstractConfiguredObjectTest.java
    
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/testmodel/TestRootCategory.java

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java?rev=1633184&r1=1633183&r2=1633184&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
 Mon Oct 20 16:14:14 2014
@@ -382,7 +382,23 @@ public abstract class AbstractConfigured
             {
                 field.getPreSettingAction().invoke(this);
             }
-            field.getField().set(this, attribute.convert(value, this));
+
+            Object desiredValue = attribute.convert(value, this);
+
+            if (attribute.hasValidValues())
+            {
+                if (!checkValidValues(attribute, desiredValue))
+                {
+                    throw new IllegalConfigurationException("Attribute '" + 
attribute.getName()
+                                                       + "' of instance of "+ 
getClass().getName()
+                                                       + " named '" + 
getName() + "'"
+                                                       + " cannot have value 
'" + desiredValue + "'"
+                                                       + ". Valid values are: "
+                                                       + 
attribute.validValues());
+                }
+            }
+
+            field.getField().set(this, desiredValue);
 
             if(field.getPostSettingAction() != null)
             {
@@ -403,6 +419,21 @@ public abstract class AbstractConfigured
         }
     }
 
+    private boolean checkValidValues(final ConfiguredAutomatedAttribute 
attribute, final Object desiredValue)
+    {
+        for (Object validValue : attribute.validValues())
+        {
+            Object convertedValidValue = 
attribute.getConverter().convert(validValue, this);
+
+            if (convertedValidValue.equals(desiredValue))
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
     @Override
     public final void open()
     {

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java?rev=1633184&r1=1633183&r2=1633184&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java
 Mon Oct 20 16:14:14 2014
@@ -142,7 +142,15 @@ public class ConfiguredAutomatedAttribut
                 return Collections.emptySet();
             }
         }
-        return Arrays.asList(_annotation.validValues());
+        else
+        {
+            return Arrays.asList(_annotation.validValues());
+        }
     }
 
+    /** Returns true iff this attribute has valid values defined */
+    public boolean hasValidValues()
+    {
+        return validValues() != null && validValues().size() > 0;
+    }
 }

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPort.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPort.java?rev=1633184&r1=1633183&r2=1633184&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPort.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPort.java
 Mon Oct 20 16:14:14 2014
@@ -32,7 +32,7 @@ import org.apache.qpid.server.model.Tran
 public interface RmiPort<X extends RmiPort<X>> extends Port<X>
 {
 
-    @ManagedAttribute( defaultValue = "RMI", validValues = { "[ \"RMI\"]"} )
+    @ManagedAttribute( defaultValue = "RMI", validValues = { "[ \"RMI\" ]" } )
     Set<Protocol> getProtocols();
 
     @ManagedAttribute( defaultValue = "TCP",

Modified: 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPortImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPortImpl.java?rev=1633184&r1=1633183&r2=1633184&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPortImpl.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/port/RmiPortImpl.java
 Mon Oct 20 16:14:14 2014
@@ -48,12 +48,6 @@ public class RmiPortImpl extends Abstrac
         super.onValidate();
 
         validateOnlyOneInstance();
-
-        if (getTransports().contains(Transport.SSL))
-        {
-            throw new IllegalConfigurationException("Can't create RMI registry 
port which requires SSL");
-        }
-
     }
 
     public void setPortManager(PortManager manager)

Modified: 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AbstractConfiguredObjectTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AbstractConfiguredObjectTest.java?rev=1633184&r1=1633183&r2=1633184&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AbstractConfiguredObjectTest.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/AbstractConfiguredObjectTest.java
 Mon Oct 20 16:14:14 2014
@@ -464,4 +464,58 @@ public class AbstractConfiguredObjectTes
         assertFalse("Child1 should not be opened", child1.isOpened());
         assertEquals("Unexpected child1 state", State.ERRORED, 
child1.getState());
     }
+
+    public void testConstructionEnforcesAttributeValidValues() throws Exception
+    {
+        final String objectName = getName();
+        Map<String, Object> illegalCreateAttributes = new HashMap<>();
+        illegalCreateAttributes.put(ConfiguredObject.NAME, objectName);
+        illegalCreateAttributes.put(TestRootCategory.VALID_VALUE, "illegal");
+
+        try
+        {
+            _model.getObjectFactory().create(TestRootCategory.class, 
illegalCreateAttributes);
+            fail("Exception not thrown");
+        }
+        catch (IllegalConfigurationException ice)
+        {
+            // PASS
+        }
+
+        Map<String, Object> legalCreateAttributes = new HashMap<>();
+        legalCreateAttributes.put(ConfiguredObject.NAME, objectName);
+        legalCreateAttributes.put(TestRootCategory.VALID_VALUE, 
TestRootCategory.VALID_VALUE1);
+
+        _model.getObjectFactory().create(TestRootCategory.class, 
legalCreateAttributes);
+        // PASS
+
+    }
+
+    public void testChangeEnforcesAttributeValidValues() throws Exception
+    {
+        final String objectName = getName();
+        Map<String, Object> legalCreateAttributes = new HashMap<>();
+        legalCreateAttributes.put(ConfiguredObject.NAME, objectName);
+        legalCreateAttributes.put(TestRootCategory.VALID_VALUE, 
TestRootCategory.VALID_VALUE1);
+
+        TestRootCategory object = 
_model.getObjectFactory().create(TestRootCategory.class, legalCreateAttributes);
+        assertEquals(TestRootCategory.VALID_VALUE1, object.getValidValue());
+
+        object.setAttribute(TestRootCategory.VALID_VALUE, 
TestRootCategory.VALID_VALUE1, TestRootCategory.VALID_VALUE2);
+        assertEquals(TestRootCategory.VALID_VALUE2, object.getValidValue());
+
+        try
+        {
+            object.setAttribute(TestRootCategory.VALID_VALUE, 
TestRootCategory.VALID_VALUE2, "illegal");
+            fail("Exception not thrown");
+        }
+        catch (IllegalConfigurationException iae)
+        {
+            // PASS
+        }
+
+        assertEquals(TestRootCategory.VALID_VALUE2, object.getValidValue());
+
+    }
+
 }

Modified: 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/testmodel/TestRootCategory.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/testmodel/TestRootCategory.java?rev=1633184&r1=1633183&r2=1633184&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/testmodel/TestRootCategory.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/testmodel/TestRootCategory.java
 Mon Oct 20 16:14:14 2014
@@ -35,6 +35,7 @@ public interface TestRootCategory<X exte
     String DEFAULTED_VALUE = "defaultedValue";
     String STRING_VALUE = "stringValue";
     String MAP_VALUE = "mapValue";
+    String VALID_VALUE = "validValue";
 
 
     String TEST_CONTEXT_DEFAULT = "TEST_CONTEXT_DEFAULT";



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

Reply via email to