You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2015/06/22 00:27:34 UTC
svn commit: r1686759 - in /qpid/java/trunk:
broker-core/src/main/java/org/apache/qpid/server/model/
broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/
broker-plugins/management-http/src/main/java/org/apache/qpid/server/managem...
Author: kwall
Date: Sun Jun 21 22:27:33 2015
New Revision: 1686759
URL: http://svn.apache.org/r1686759
Log:
QPID-6603: [Java Broker] Allow model to express attribute immutability.
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingleton.java
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingletonImpl.java
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java?rev=1686759&r1=1686758&r2=1686759&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java Sun Jun 21 22:27:33 2015
@@ -40,6 +40,7 @@ import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Callable;
@@ -2236,10 +2237,15 @@ public abstract class AbstractConfigured
if (attr.isAutomated() && changedAttributes.contains(attr.getName()))
{
ConfiguredAutomatedAttribute autoAttr = (ConfiguredAutomatedAttribute) attr;
+
+ if (autoAttr.isImmutable() && !Objects.equals(autoAttr.getValue(this), autoAttr.getValue(proxyForValidation)))
+ {
+ throw new IllegalConfigurationException("Attribute '" + autoAttr.getName() + "' cannot be changed.");
+ }
+
if (autoAttr.hasValidValues())
{
Object desiredValue = autoAttr.getValue(proxyForValidation);
-
if ((autoAttr.isMandatory() || desiredValue != null)
&& !checkValidValues(autoAttr, desiredValue))
{
@@ -2252,7 +2258,9 @@ public abstract class AbstractConfigured
}
}
+
}
+
}
}
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java?rev=1686759&r1=1686758&r2=1686759&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java Sun Jun 21 22:27:33 2015
@@ -131,6 +131,11 @@ public class ConfiguredAutomatedAttribut
return _annotation.mandatory();
}
+ public boolean isImmutable()
+ {
+ return _annotation.immutable();
+ }
+
public boolean isPersisted()
{
return _annotation.persist();
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java?rev=1686759&r1=1686758&r2=1686759&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java Sun Jun 21 22:27:33 2015
@@ -38,4 +38,7 @@ public @interface ManagedAttribute
boolean oversize() default false;
String oversizedAltText() default "";
String secureValueFilter() default "";
+ /** If true, the model attribute value cannot be mutated after construction. */
+ boolean immutable() default false;
+
}
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java?rev=1686759&r1=1686758&r2=1686759&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java Sun Jun 21 22:27:33 2015
@@ -499,6 +499,71 @@ public class AbstractConfiguredObjectTes
}
+ public void testImmutableAttribute()
+ {
+ final String value = "myvalue";
+
+ Map<String, Object> attributes = new HashMap<>();
+ attributes.put(ConfiguredObject.NAME, "myName");
+ attributes.put(TestSingleton.IMMUTABLE_VALUE, value);
+
+ final TestSingleton object = _model.getObjectFactory().create(TestSingleton.class, attributes);
+
+ assertEquals(value, object.getImmutableValue());
+
+ // Update to the same value is allowed
+ object.setAttributes(Collections.singletonMap(TestSingleton.IMMUTABLE_VALUE, value));
+
+ try
+ {
+ object.setAttributes(Collections.singletonMap(TestSingleton.IMMUTABLE_VALUE, "newvalue"));
+ fail("Exception not thrown");
+ }
+ catch(IllegalConfigurationException e)
+ {
+ // PASS
+ }
+ assertEquals(value, object.getImmutableValue());
+
+ try
+ {
+ object.setAttributes(Collections.singletonMap(TestSingleton.IMMUTABLE_VALUE, null));
+ fail("Exception not thrown");
+ }
+ catch(IllegalConfigurationException e)
+ {
+ // PASS
+ }
+
+ assertEquals(value, object.getImmutableValue());
+ }
+
+ public void testImmutableAttributeNullValue()
+ {
+
+ Map<String, Object> attributes = new HashMap<>();
+ attributes.put(ConfiguredObject.NAME, "myName");
+ attributes.put(TestSingleton.IMMUTABLE_VALUE, null);
+
+ final TestSingleton object = _model.getObjectFactory().create(TestSingleton.class, attributes);
+
+ assertNull(object.getImmutableValue());
+
+ // Update to the same value is allowed
+ object.setAttributes(Collections.singletonMap(TestSingleton.IMMUTABLE_VALUE, null));
+
+ try
+ {
+ object.setAttributes(Collections.singletonMap(TestSingleton.IMMUTABLE_VALUE, "newvalue"));
+ fail("Exception not thrown");
+ }
+ catch(IllegalConfigurationException e)
+ {
+ // PASS
+ }
+ assertNull(object.getImmutableValue());
+ }
+
public void testAttributeSetListenerFiring()
{
final String objectName = "listenerFiring";
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingleton.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingleton.java?rev=1686759&r1=1686758&r2=1686759&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingleton.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingleton.java Sun Jun 21 22:27:33 2015
@@ -41,6 +41,7 @@ public interface TestSingleton<X extends
String VALID_VALUE = "validValue";
String SECURE_VALUE = "secureValue";
String ENUMSET_VALUES = "enumSetValues";
+ String IMMUTABLE_VALUE = "immutableValue";
String TEST_CONTEXT_DEFAULT = "TEST_CONTEXT_DEFAULT";
@ManagedContextDefault(name = TEST_CONTEXT_DEFAULT)
@@ -87,4 +88,7 @@ public interface TestSingleton<X extends
@ManagedAttribute(secure = true)
String getSecureValue();
+ @ManagedAttribute(immutable = true)
+ String getImmutableValue();
+
}
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingletonImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingletonImpl.java?rev=1686759&r1=1686758&r2=1686759&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingletonImpl.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingletonImpl.java Sun Jun 21 22:27:33 2015
@@ -69,6 +69,8 @@ public class TestSingletonImpl extends A
@ManagedAttributeField
private String _secureValue;
+ @ManagedAttributeField
+ private String _immutableValue;
@ManagedObjectFactoryConstructor
public TestSingletonImpl(final Map<String, Object> attributes)
@@ -159,6 +161,12 @@ public class TestSingletonImpl extends A
}
@Override
+ public String getImmutableValue()
+ {
+ return _immutableValue;
+ }
+
+ @Override
protected SecurityManager getSecurityManager()
{
return _securityManager;
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java?rev=1686759&r1=1686758&r2=1686759&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java Sun Jun 21 22:27:33 2015
@@ -165,15 +165,20 @@ public class MetaDataServlet extends Abs
}
if(attribute.isAutomated())
{
- if(!"".equals(((ConfiguredAutomatedAttribute)attribute).defaultValue()))
+ ConfiguredAutomatedAttribute automatedAttribute = (ConfiguredAutomatedAttribute) attribute;
+ if(!"".equals(automatedAttribute.defaultValue()))
{
- attrDetails.put("defaultValue",((ConfiguredAutomatedAttribute)attribute).defaultValue());
+ attrDetails.put("defaultValue", automatedAttribute.defaultValue());
}
- if(((ConfiguredAutomatedAttribute)attribute).isMandatory())
+ if(automatedAttribute.isMandatory())
{
- attrDetails.put("mandatory",((ConfiguredAutomatedAttribute)attribute).isMandatory());
+ attrDetails.put("mandatory", automatedAttribute.isMandatory());
}
- if(!(((ConfiguredAutomatedAttribute)attribute).validValues()).isEmpty())
+ if(automatedAttribute.isImmutable())
+ {
+ attrDetails.put("immutable", automatedAttribute.isImmutable());
+ }
+ if(!(automatedAttribute.validValues()).isEmpty())
{
Collection<String> validValues = ((ConfiguredAutomatedAttribute<?,?>) attribute).validValues();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org