mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
REPO-484: [REST API] 400 error for unsupported NOT operator in the 'where' predicate.
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@130610 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -27,7 +27,6 @@ package org.alfresco.rest.framework.resource.parameters.where;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -67,7 +66,7 @@ public abstract class QueryHelper
|
||||
/**
|
||||
* One of EQUALS LESSTHAN GREATERTHAN LESSTHANOREQUALS GREATERTHANOREQUALS;
|
||||
*/
|
||||
void comparison(int type, String propertyName, String propertyValue);
|
||||
void comparison(int type, String propertyName, String propertyValue, boolean negated);
|
||||
|
||||
/**
|
||||
* Called any time an IN clause is encountered.
|
||||
@@ -110,7 +109,7 @@ public abstract class QueryHelper
|
||||
@Override
|
||||
public void between(String propertyName, String firstValue, String secondValue, boolean negated) { throw UNSUPPORTED;}
|
||||
@Override
|
||||
public void comparison(int type, String propertyName, String propertyValue) { throw UNSUPPORTED;}
|
||||
public void comparison(int type, String propertyName, String propertyValue, boolean negated) { throw UNSUPPORTED;}
|
||||
@Override
|
||||
public void in(String propertyName, boolean negated, String... propertyValues) { throw UNSUPPORTED;}
|
||||
@Override
|
||||
@@ -191,7 +190,7 @@ public abstract class QueryHelper
|
||||
if (WhereClauseParser.PROPERTYNAME == tree.getChild(0).getType() &&
|
||||
WhereClauseParser.PROPERTYVALUE == tree.getChild(1).getType())
|
||||
{
|
||||
callback.comparison(tree.getType(), tree.getChild(0).getText(), stripQuotes(tree.getChild(1).getText()));
|
||||
callback.comparison(tree.getType(), tree.getChild(0).getText(), stripQuotes(tree.getChild(1).getText()), negated);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
@@ -175,91 +175,94 @@ public class MapBasedQueryWalker extends WalkerCallbackAdapter
|
||||
}
|
||||
|
||||
@Override
|
||||
public void comparison(int type, String propertyName, String propertyValue)
|
||||
public void comparison(int type, String propertyName, String propertyValue, boolean negated)
|
||||
{
|
||||
boolean throwError = false;
|
||||
|
||||
if (variablesEnabled && propertyName.startsWith("variables/"))
|
||||
{
|
||||
processVariable(propertyName, propertyValue, type);
|
||||
}
|
||||
else
|
||||
processVariable(propertyName, propertyValue, type);
|
||||
return;
|
||||
}
|
||||
|
||||
boolean throwError = false;
|
||||
if (type == WhereClauseParser.EQUALS)
|
||||
{
|
||||
if (type == WhereClauseParser.EQUALS)
|
||||
if (supportedEqualsParameters != null && supportedEqualsParameters.contains(propertyName))
|
||||
{
|
||||
if (supportedEqualsParameters != null && supportedEqualsParameters.contains(propertyName))
|
||||
{
|
||||
equalsProperties.put(propertyName, propertyValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
throwError = !handleUnmatchedComparison(type, propertyName, propertyValue);
|
||||
}
|
||||
}
|
||||
else if (type == WhereClauseParser.MATCHES)
|
||||
{
|
||||
if (supportedMatchesParameters != null && supportedMatchesParameters.contains(propertyName))
|
||||
{
|
||||
matchesProperties.put(propertyName, propertyValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
throwError = !handleUnmatchedComparison(type, propertyName, propertyValue);
|
||||
}
|
||||
}
|
||||
else if (type == WhereClauseParser.GREATERTHAN)
|
||||
{
|
||||
if (supportedGreaterThanParameters != null && supportedGreaterThanParameters.contains(propertyName))
|
||||
{
|
||||
greaterThanProperties.put(propertyName, propertyValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
throwError = !handleUnmatchedComparison(type, propertyName, propertyValue);
|
||||
}
|
||||
}
|
||||
else if (type == WhereClauseParser.GREATERTHANOREQUALS)
|
||||
{
|
||||
if (supportedGreaterThanOrEqualParameters != null && supportedGreaterThanOrEqualParameters.contains(propertyName))
|
||||
{
|
||||
greaterThanOrEqualProperties.put(propertyName, propertyValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
throwError = !handleUnmatchedComparison(type, propertyName, propertyValue);
|
||||
}
|
||||
}
|
||||
else if (type == WhereClauseParser.LESSTHAN)
|
||||
{
|
||||
if (supportedLessThanParameters != null && supportedLessThanParameters.contains(propertyName))
|
||||
{
|
||||
lessThanProperties.put(propertyName, propertyValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
throwError = !handleUnmatchedComparison(type, propertyName, propertyValue);
|
||||
}
|
||||
}
|
||||
else if (type == WhereClauseParser.LESSTHANOREQUALS)
|
||||
{
|
||||
if (supportedLessThanOrEqualParameters != null && supportedLessThanOrEqualParameters.contains(propertyName))
|
||||
{
|
||||
lessThanOrEqualProperties.put(propertyName, propertyValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
throwError = !handleUnmatchedComparison(type, propertyName, propertyValue);
|
||||
}
|
||||
equalsProperties.put(propertyName, propertyValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
throwError = !handleUnmatchedComparison(type, propertyName, propertyValue);
|
||||
throwError = !handleUnmatchedComparison(type, propertyName, propertyValue);
|
||||
}
|
||||
}
|
||||
else if (type == WhereClauseParser.MATCHES)
|
||||
{
|
||||
if (supportedMatchesParameters != null && supportedMatchesParameters.contains(propertyName))
|
||||
{
|
||||
matchesProperties.put(propertyName, propertyValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
throwError = !handleUnmatchedComparison(type, propertyName, propertyValue);
|
||||
}
|
||||
}
|
||||
else if (type == WhereClauseParser.GREATERTHAN)
|
||||
{
|
||||
if (supportedGreaterThanParameters != null && supportedGreaterThanParameters.contains(propertyName))
|
||||
{
|
||||
greaterThanProperties.put(propertyName, propertyValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
throwError = !handleUnmatchedComparison(type, propertyName, propertyValue);
|
||||
}
|
||||
}
|
||||
else if (type == WhereClauseParser.GREATERTHANOREQUALS)
|
||||
{
|
||||
if (supportedGreaterThanOrEqualParameters != null && supportedGreaterThanOrEqualParameters.contains(propertyName))
|
||||
{
|
||||
greaterThanOrEqualProperties.put(propertyName, propertyValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
throwError = !handleUnmatchedComparison(type, propertyName, propertyValue);
|
||||
}
|
||||
}
|
||||
else if (type == WhereClauseParser.LESSTHAN)
|
||||
{
|
||||
if (supportedLessThanParameters != null && supportedLessThanParameters.contains(propertyName))
|
||||
{
|
||||
lessThanProperties.put(propertyName, propertyValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
throwError = !handleUnmatchedComparison(type, propertyName, propertyValue);
|
||||
}
|
||||
}
|
||||
else if (type == WhereClauseParser.LESSTHANOREQUALS)
|
||||
{
|
||||
if (supportedLessThanOrEqualParameters != null && supportedLessThanOrEqualParameters.contains(propertyName))
|
||||
{
|
||||
lessThanOrEqualProperties.put(propertyName, propertyValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
throwError = !handleUnmatchedComparison(type, propertyName, propertyValue);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throwError = !handleUnmatchedComparison(type, propertyName, propertyValue);
|
||||
}
|
||||
|
||||
if (throwError)
|
||||
{
|
||||
throw new InvalidArgumentException("framework.exception.InvalidProperty", new Object[] {propertyName, propertyValue, WhereClauseParser.tokenNames[type]});
|
||||
}
|
||||
else if (negated)
|
||||
{
|
||||
// Throw error for the unsupported NOT operator only if the property was valid for comparison, show the more meaningful error first.
|
||||
throw new InvalidArgumentException("NOT operator is not supported for " + WhereClauseParser.tokenNames[type] + " comparison.");
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -37,7 +37,7 @@ public class TaskVariablesWalkerCallback extends WalkerCallbackAdapter
|
||||
private VariableScope scope = VariableScope.ANY;
|
||||
|
||||
@Override
|
||||
public void comparison(int type, String propertyName, String propertyValue)
|
||||
public void comparison(int type, String propertyName, String propertyValue, boolean negated)
|
||||
{
|
||||
if (PROPERTY_SCOPE.equals(propertyName))
|
||||
{
|
||||
|
Reference in New Issue
Block a user