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 2016/12/04 11:00:10 UTC
svn commit: r1772521 - 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/hierarchy/
broker-plugins/management-http/src/main/java/org/apache/qpid/server/managem...
Author: kwall
Date: Sun Dec 4 11:00:10 2016
New Revision: 1772521
URL: http://svn.apache.org/viewvc?rev=1772521&view=rev
Log:
QPID-7571: [Java Broker] Allow model to designate a operation parameter as not nullable
Invoking a configured model op without a parameter (without default) designated as not nullable with cause a clear error. Parameters that are of type primitive
are always considered not nullable. Default values respected.
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerAttributeInjector.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedOperation.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodOperation.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameter.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameterFromAnnotation.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameterFromInjection.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Param.java
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/ConfiguredObjectTypeRegistryTest.java
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestCar.java
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestKitCarImpl.java
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestStandardCarImpl.java
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/apidocs.css
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerAttributeInjector.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerAttributeInjector.java?rev=1772521&r1=1772520&r2=1772521&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerAttributeInjector.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/BrokerAttributeInjector.java Sun Dec 4 11:00:10 2016
@@ -248,13 +248,14 @@ public class BrokerAttributeInjector imp
String.class,
"",
"the system-dependent filename",
- new String[0]);
+ new String[0], true);
params[1] = new OperationParameterFromInjection("live",
boolean.class,
boolean.class,
"true",
"if true dump only live objects i.e. objects that are reachable from others",
- new String[]{Boolean.TRUE.toString(), Boolean.FALSE.toString()});
+ new String[]{Boolean.TRUE.toString(), Boolean.FALSE.toString()},
+ true);
ConfiguredObjectInjectedOperation<?> setVMOptionOperation = new ConfiguredObjectInjectedOperation(
"dumpHeap",
"Dumps the heap to the outputFile file in the same format as the hprof heap dump.",
@@ -286,7 +287,7 @@ public class BrokerAttributeInjector imp
ParameterizedTypes.MAP_OF_STRING_STRING,
"",
"JVM options map",
- new String[0])};
+ new String[0], true)};
ConfiguredObjectInjectedOperation<?> setVMOptionOperation = new ConfiguredObjectInjectedOperation(
"setJVMOptions",
"Sets given JVM options",
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedOperation.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedOperation.java?rev=1772521&r1=1772520&r2=1772521&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedOperation.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectInjectedOperation.java Sun Dec 4 11:00:10 2016
@@ -196,6 +196,14 @@ public class ConfiguredObjectInjectedOpe
{
providedVal = null;
}
+ if (providedVal == null && !param.isNullable())
+ {
+ throw new IllegalArgumentException(String.format("Parameter %s of operation %s in %s requires a non-null value",
+ param.getName(),
+ _operation.getName(),
+ _operation.getDeclaringClass().getSimpleName()));
+ }
+
final AttributeValueConverter<?> converter =
AttributeValueConverter.getConverter(AttributeValueConverter.convertPrimitiveToBoxed(param.getType()),
param.getGenericType());
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodOperation.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodOperation.java?rev=1772521&r1=1772520&r2=1772521&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodOperation.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectMethodOperation.java Sun Dec 4 11:00:10 2016
@@ -167,6 +167,14 @@ public class ConfiguredObjectMethodOpera
{
providedVal = null;
}
+ if (providedVal == null && !param.isNullable())
+ {
+ throw new IllegalArgumentException(String.format("Parameter %s of operation %s in %s requires a non-null value",
+ param.getName(),
+ _operation.getName(),
+ _objectType));
+ }
+
final AttributeValueConverter<?> converter =
AttributeValueConverter.getConverter(AttributeValueConverter.convertPrimitiveToBoxed(param.getType()),
param.getGenericType());
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameter.java?rev=1772521&r1=1772520&r2=1772521&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameter.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameter.java Sun Dec 4 11:00:10 2016
@@ -38,4 +38,6 @@ public interface OperationParameter
Type getGenericType();
boolean isCompatible(OperationParameter that);
+
+ boolean isNullable();
}
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameterFromAnnotation.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameterFromAnnotation.java?rev=1772521&r1=1772520&r2=1772521&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameterFromAnnotation.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameterFromAnnotation.java Sun Dec 4 11:00:10 2016
@@ -74,6 +74,11 @@ public class OperationParameterFromAnnot
return _genericType;
}
+ @Override
+ public boolean isNullable()
+ {
+ return _param.nullable() && !_type.isPrimitive();
+ }
@Override
public boolean isCompatible(final OperationParameter that)
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameterFromInjection.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameterFromInjection.java?rev=1772521&r1=1772520&r2=1772521&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameterFromInjection.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/OperationParameterFromInjection.java Sun Dec 4 11:00:10 2016
@@ -33,19 +33,22 @@ public class OperationParameterFromInjec
private final String _defaultValue;
private final String _description;
private final List<String> _validValues;
+ private final boolean _nullable;
public OperationParameterFromInjection(final String name,
final Class<?> type,
final Type genericType,
final String defaultValue,
final String description,
- final String[] validValues)
+ final String[] validValues,
+ final boolean nullable)
{
_type = type;
_genericType = genericType;
_name = name;
_defaultValue = defaultValue;
_description = description;
+ _nullable = nullable;
_validValues = validValues == null ? Collections.<String>emptyList() : Collections.unmodifiableList(Arrays.asList(validValues));
}
@@ -85,6 +88,11 @@ public class OperationParameterFromInjec
return _genericType;
}
+ @Override
+ public boolean isNullable()
+ {
+ return _nullable && !_type.isPrimitive();
+ }
@Override
public boolean isCompatible(final OperationParameter that)
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Param.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Param.java?rev=1772521&r1=1772520&r2=1772521&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Param.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Param.java Sun Dec 4 11:00:10 2016
@@ -32,4 +32,5 @@ public @interface Param
String defaultValue() default "";
String description() default "";
String[] validValues() default {};
+ boolean nullable() default true;
}
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/ConfiguredObjectTypeRegistryTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/ConfiguredObjectTypeRegistryTest.java?rev=1772521&r1=1772520&r2=1772521&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/ConfiguredObjectTypeRegistryTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/ConfiguredObjectTypeRegistryTest.java Sun Dec 4 11:00:10 2016
@@ -69,12 +69,12 @@ public class ConfiguredObjectTypeRegistr
public void testManagedInterfaces()
{
- // The electric engine is recharable
+ // The electric engine is rechargable
Set<Class<? extends ManagedInterface>> elecEngIntfcs = _typeRegistry.getManagedInterfaces(TestElecEngine.class);
assertThat(elecEngIntfcs, hasItem(TestRechargeable.class));
assertThat(elecEngIntfcs.size(), is(1));
- // The pertrol engine implements no additional interfaces
+ // The petrol engine implements no additional interfaces
Set<Class<? extends ManagedInterface>> stdCarIntfcs = _typeRegistry.getManagedInterfaces(TestPetrolEngine.class);
assertThat(stdCarIntfcs.size(), is(0));
}
@@ -92,7 +92,6 @@ public class ConfiguredObjectTypeRegistr
final Map<String, ConfiguredObjectOperation<?>> kitCarOperations =
_typeRegistry.getOperations(object.getClass());
- assertEquals(2, kitCarOperations.size());
assertTrue(kitCarOperations.containsKey("openDoor"));
final ConfiguredObjectOperation<TestCar<?>> operation =
(ConfiguredObjectOperation<TestCar<?>>) kitCarOperations.get("openDoor");
@@ -126,6 +125,39 @@ public class ConfiguredObjectTypeRegistr
}
}
+ public void testOperationsRejectsNullParameter()
+ {
+ final String objectName = "testKitCar";
+ Map<String, Object> attributes = new HashMap<>();
+ attributes.put(ConfiguredObject.NAME, objectName);
+ attributes.put(ConfiguredObject.TYPE, TestKitCarImpl.TEST_KITCAR_TYPE);
+
+ TestCar object = TestModel.getInstance().getObjectFactory().create(TestCar.class, attributes);
+ Map<String, ConfiguredObjectOperation<?>> operations = _typeRegistry.getOperations(object.getClass());
+
+ ConfiguredObjectOperation<TestCar<?>> operation = (ConfiguredObjectOperation<TestCar<?>>) operations.get("startEngine");
+
+ try
+ {
+ operation.perform(object, Collections.<String, Object>emptyMap());
+ fail("Exception not thrown");
+ }
+ catch (IllegalArgumentException e)
+ {
+ // PASS
+ }
+
+ try
+ {
+ operation.perform(object, Collections.singletonMap("keyCode", null));
+ fail("Exception not thrown");
+ }
+ catch (IllegalArgumentException e)
+ {
+ // PASS
+ }
+ }
+
public void testEnumValidValues_UnrestrictedSet() throws Exception
{
Map<String, ConfiguredObjectAttribute<?, ?>> attributeTypes = _typeRegistry.getAttributeTypes(TestCar.class);
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java?rev=1772521&r1=1772520&r2=1772521&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java Sun Dec 4 11:00:10 2016
@@ -368,7 +368,8 @@ public class InjectedAttributeTest exten
};
final OperationParameter[] params = new OperationParameter[1];
- params[0] = new OperationParameterFromInjection("height", Integer.TYPE, Integer.TYPE, "", "", new String[0]);
+ params[0] = new OperationParameterFromInjection("height", Integer.TYPE, Integer.TYPE, "", "", new String[0],
+ true);
final ConfiguredObjectInjectedOperation<?> operationInjector =
new ConfiguredObjectInjectedOperation<TestCar<?>>("fly", "", true,
false,
@@ -409,7 +410,8 @@ public class InjectedAttributeTest exten
};
final OperationParameter[] params = new OperationParameter[1];
- params[0] = new OperationParameterFromInjection("count", Integer.TYPE, Integer.TYPE, "", "", new String[0]);
+ params[0] = new OperationParameterFromInjection("count", Integer.TYPE, Integer.TYPE, "", "", new String[0],
+ true);
final ConfiguredObjectInjectedOperation<?> hello =
new ConfiguredObjectInjectedOperation<TestCar<?>>("sayHello", "", true,
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestCar.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestCar.java?rev=1772521&r1=1772520&r2=1772521&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestCar.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestCar.java Sun Dec 4 11:00:10 2016
@@ -47,4 +47,7 @@ public interface TestCar<X extends TestC
@ManagedOperation(changesConfiguredObjectState = false)
Door openDoor(@Param(name = "door") Door door);
+
+ @ManagedOperation(changesConfiguredObjectState = false)
+ void startEngine(@Param(name = "keyCode", nullable = false) String keyCode);
}
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestKitCarImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestKitCarImpl.java?rev=1772521&r1=1772520&r2=1772521&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestKitCarImpl.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestKitCarImpl.java Sun Dec 4 11:00:10 2016
@@ -82,6 +82,11 @@ public class TestKitCarImpl extends Abst
}
@Override
+ public void startEngine(final String keyCode)
+ {
+ }
+
+ @Override
public Map<String, Object> getParameters()
{
return _parameters;
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestStandardCarImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestStandardCarImpl.java?rev=1772521&r1=1772520&r2=1772521&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestStandardCarImpl.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/TestStandardCarImpl.java Sun Dec 4 11:00:10 2016
@@ -103,6 +103,11 @@ public class TestStandardCarImpl extends
}
@Override
+ public void startEngine(final String keyCode)
+ {
+ }
+
+ @Override
public Colour getBodyColour()
{
return _bodyColour;
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.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/ApiDocsServlet.java?rev=1772521&r1=1772520&r2=1772521&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java Sun Dec 4 11:00:10 2016
@@ -418,7 +418,7 @@ public class ApiDocsServlet extends Abst
writer.append("<table class=\"parameters\">");
writer.append("<thead>");
writer.append(
- "<tr><th class=\"name\">Parameter Name</th><th class=\"type\">Type</th><th class=\"description\">Description</th></tr>");
+ "<tr><th class=\"name\">Parameter Name</th><th>Type</th><th>Default</th><th>Nullable?</th><th>Description</th></tr>");
writer.append("</thead>");
writer.append("<tbody>");
@@ -428,6 +428,10 @@ public class ApiDocsServlet extends Abst
+ param.getName()
+ "</td><td class=\"type\">"
+ renderType(param)
+ + "</td><td class=\"default\">"
+ + param.getDefaultValue()
+ + "</td><td class=\"nullable\">"
+ + param.isNullable()
+ "</td><td class=\"description\">"
+ param.getDescription()
+ "</td></tr>");
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=1772521&r1=1772520&r2=1772521&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 Dec 4 11:00:10 2016
@@ -263,6 +263,7 @@ public class MetaDataServlet extends Abs
Map<String, Object> paramAttrs = new LinkedHashMap<>();
paramAttrs.put("type", param.getType().getSimpleName());
+ paramAttrs.put("nullable", param.isNullable());
if (!"".equals(param.getDefaultValue()))
{
paramAttrs.put("defaultValue", param.getDefaultValue());
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/apidocs.css
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/apidocs.css?rev=1772521&r1=1772520&r2=1772521&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/apidocs.css (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/css/apidocs.css Sun Dec 4 11:00:10 2016
@@ -68,6 +68,14 @@ table.parameters td.type {
width: 20em;
}
+table.parameters td.default {
+ width: 20em;
+}
+
+table.parameters td.nullable {
+ width: 15em;
+}
+
table.api td,th {
vertical-align: top;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org