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/04/20 13:50:13 UTC
svn commit: r1740122 - in /qpid/java/trunk:
broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java
common/src/main/java/org/apache/qpid/filter/UnaryExpression.java
Author: kwall
Date: Wed Apr 20 11:50:13 2016
New Revision: 1740122
URL: http://svn.apache.org/viewvc?rev=1740122&view=rev
Log:
QPID-7206: [Java Broker] Query API - allow enums to appear in the set of an IN expression too
Modified:
qpid/java/trunk/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java
qpid/java/trunk/common/src/main/java/org/apache/qpid/filter/UnaryExpression.java
Modified: qpid/java/trunk/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java?rev=1740122&r1=1740121&r2=1740122&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/query/ConfiguredObjectQueryTest.java Wed Apr 20 11:50:13 2016
@@ -393,30 +393,54 @@ public class ConfiguredObjectQueryTest e
_query = new ConfiguredObjectQuery(_objects,
String.format("%s", ConfiguredObject.ID),
+ String.format("%s <> '%s'", ENUM_ATTR, "toad"));
+
+ results = _query.getResults();
+ assertEquals("Unexpected number of results - enumAttr not equal enum constant", 1, results.size());
+
+ _query = new ConfiguredObjectQuery(_objects,
+ String.format("%s", ConfiguredObject.ID),
+ String.format("%s = %s", ENUM_ATTR, ENUM2_ATTR));
+
+ results = _query.getResults();
+ assertEquals("Unexpected number of results - two attributes of type enum", 1, results.size());
+
+ }
+ public void testQuery_EnumEquality_InExpresssions() throws Exception
+ {
+ final UUID objectUuid = UUID.randomUUID();
+
+ ConfiguredObject obj = createCO(new HashMap<String, Object>()
+ {{
+ put(ConfiguredObject.ID, objectUuid);
+ put(ENUM_ATTR, Snakes.PYTHON);
+ put(ENUM2_ATTR, Snakes.PYTHON);
+ }});
+
+ _objects.add(obj);
+
+ _query = new ConfiguredObjectQuery(_objects,
+ String.format("%s", ConfiguredObject.ID),
String.format("%s in ('%s', '%s', '%s')",
ENUM_ATTR,
"toad", Snakes.VIPER, Snakes.PYTHON));
- results = _query.getResults();
- assertEquals("Unexpected number of results - emumAttr with set", 1, results.size());
-
- row = _query.getResults().iterator().next();
- assertEquals("Unexpected row", objectUuid, row.get(0));
+ List<List<Object>> results = _query.getResults();
+ assertEquals("Unexpected number of results - emumAttr with set including the enum's constants", 1, results.size());
_query = new ConfiguredObjectQuery(_objects,
String.format("%s", ConfiguredObject.ID),
- String.format("%s <> '%s'", ENUM_ATTR, "toad"));
+ String.format("%s in (%s)", ENUM_ATTR, ENUM2_ATTR));
results = _query.getResults();
- assertEquals("Unexpected number of results - enumAttr not equal enum constant", 1, results.size());
+ assertEquals("Unexpected number of results - enumAttr with set including enum2Attr", 1, results.size());
_query = new ConfiguredObjectQuery(_objects,
String.format("%s", ConfiguredObject.ID),
- String.format("%s = %s", ENUM_ATTR, ENUM2_ATTR));
+ String.format("'%s' in (%s)", Snakes.PYTHON, ENUM_ATTR));
results = _query.getResults();
- assertEquals("Unexpected number of results - two attributes of type enum", 1, results.size());
-
+ assertEquals("Unexpected number of results - attribute within the set", 1, results.size());
}
public void testFunctionActualParameterMismatch() throws Exception
Modified: qpid/java/trunk/common/src/main/java/org/apache/qpid/filter/UnaryExpression.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/common/src/main/java/org/apache/qpid/filter/UnaryExpression.java?rev=1740122&r1=1740121&r2=1740122&view=diff
==============================================================================
--- qpid/java/trunk/common/src/main/java/org/apache/qpid/filter/UnaryExpression.java (original)
+++ qpid/java/trunk/common/src/main/java/org/apache/qpid/filter/UnaryExpression.java Wed Apr 20 11:50:13 2016
@@ -226,16 +226,16 @@ public abstract class UnaryExpression<T>
_allowNonJms = allowNonJms;
}
- public Object evaluate(E message)
+ public Object evaluate(E expression)
{
- Object rvalue = getRight().evaluate(message);
+ Object rvalue = getRight().evaluate(expression);
if (rvalue == null || !(_allowNonJms || rvalue instanceof String))
{
return null;
}
- if (((_inList != null) && isInList(rvalue, message)) ^ _not)
+ if (((_inList != null) && isInList(rvalue, expression)) ^ _not)
{
return Boolean.TRUE;
}
@@ -246,36 +246,49 @@ public abstract class UnaryExpression<T>
}
- private boolean isInList(final Object rvalue, final E message)
+ private boolean isInList(final Object rvalue, final E expression)
{
for(Object entry : _inList)
{
- Object value = entry instanceof Expression ? ((Expression<E>)entry).evaluate(message) : entry;
- if (rvalue instanceof Enum && value instanceof String)
+ Object currentRvalue = rvalue;
+ Object listItemValue = entry instanceof Expression ? ((Expression<E>)entry).evaluate(expression) : entry;
+ if (currentRvalue instanceof Enum && listItemValue instanceof String)
{
- try
- {
- Class rclazz = rvalue.getClass();
- value = Enum.valueOf(rclazz, (String)value);
- }
- catch (IllegalArgumentException iae)
- {
- }
+ listItemValue = convertStringToEnumValue(currentRvalue.getClass(), (String) listItemValue);
}
- if((rvalue == null && value == null) || (rvalue != null && rvalue.equals(value)))
+ if (listItemValue instanceof Enum && currentRvalue instanceof String)
+ {
+ currentRvalue = convertStringToEnumValue(listItemValue.getClass(), (String) currentRvalue);
+ }
+
+ if((currentRvalue == null && listItemValue == null) || (currentRvalue != null && currentRvalue.equals(listItemValue)))
{
return true;
}
- if(rvalue instanceof Number && value instanceof Number)
+ if(currentRvalue instanceof Number && listItemValue instanceof Number)
{
- Number num1 = (Number) rvalue;
- Number num2 = (Number) value;
+ Number num1 = (Number) currentRvalue;
+ Number num2 = (Number) listItemValue;
return num1.doubleValue() == num2.doubleValue() && num1.longValue() == num2.longValue();
}
}
return false;
}
+ private Object convertStringToEnumValue(final Class<?> enumType, String candidateValue)
+ {
+ try
+ {
+ Class rclazz = enumType;
+ return Enum.valueOf(rclazz, candidateValue);
+ }
+ catch (IllegalArgumentException iae)
+ {
+ return candidateValue;
+ }
+ }
+
+ @Override
public String toString()
{
StringBuilder answer = new StringBuilder(String.valueOf(getRight()));
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org