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]