protected void addVariables( ExecutionQuery processInstanceQuery, List<QueryVariable> variables, boolean process) { for (QueryVariable variable : variables) { if (variable.getVariableOperation() == null) { throw new ActivitiIllegalArgumentException( "Variable operation is missing for variable: " + variable.getName()); } if (variable.getValue() == null) { throw new ActivitiIllegalArgumentException( "Variable value is missing for variable: " + variable.getName()); } boolean nameLess = variable.getName() == null; Object actualValue = new RestResponseFactory().getVariableValue(variable); // A value-only query is only possible using equals-operator if (nameLess && variable.getVariableOperation() != QueryVariable.QueryVariableOperation.EQUALS) { throw new ActivitiIllegalArgumentException( "Value-only query (without a variable-name) is only supported when using 'equals' operation."); } switch (variable.getVariableOperation()) { case EQUALS: if (nameLess) { if (process) { processInstanceQuery.processVariableValueEquals(actualValue); } else { processInstanceQuery.variableValueEquals(actualValue); } } else { if (process) { processInstanceQuery.processVariableValueEquals(variable.getName(), actualValue); } else { processInstanceQuery.variableValueEquals(variable.getName(), actualValue); } } break; case EQUALS_IGNORE_CASE: if (actualValue instanceof String) { if (process) { processInstanceQuery.processVariableValueEqualsIgnoreCase( variable.getName(), (String) actualValue); } else { processInstanceQuery.variableValueEqualsIgnoreCase( variable.getName(), (String) actualValue); } } else { throw new ActivitiIllegalArgumentException( "Only string variable values are supported when ignoring casing, but was: " + actualValue.getClass().getName()); } break; case NOT_EQUALS: if (process) { processInstanceQuery.processVariableValueNotEquals(variable.getName(), actualValue); } else { processInstanceQuery.variableValueNotEquals(variable.getName(), actualValue); } break; case NOT_EQUALS_IGNORE_CASE: if (actualValue instanceof String) { if (process) { processInstanceQuery.processVariableValueNotEqualsIgnoreCase( variable.getName(), (String) actualValue); } else { processInstanceQuery.variableValueNotEqualsIgnoreCase( variable.getName(), (String) actualValue); } } else { throw new ActivitiIllegalArgumentException( "Only string variable values are supported when ignoring casing, but was: " + actualValue.getClass().getName()); } break; default: throw new ActivitiIllegalArgumentException( "Unsupported variable query operation: " + variable.getVariableOperation()); } } }