private void addFilter( int i, Query query, Map env, Map<String, String> fieldNameIdMap, Filter filter, ArrayList<ExpressionNode> expressionNodes) { logger.debug("IN"); ExpressionNode node = query.getWhereClauseStructure(); ExpressionNode nodeToInsert = new ExpressionNode("NODE_OP", "AND"); // in case it is a driver if (filter .getPresentationType() .equals(RegistryConfigurationXMLParser.PRESENTATION_TYPE_DRIVER)) { String driverName = filter.getDriverName(); String fieldName = filter.getField(); Object value = env.get(driverName); if (value != null && !value.toString().equals("")) { // TODO, change this behaviour if (value.toString().contains(",")) { value = "{,{" + value + "}}"; } List valuesList = new ParametersDecoder().decode(value.toString()); String[] valuesArr = new String[valuesList.size()]; for (int j = 0; j < valuesList.size(); j++) { String val = valuesList.get(j).toString(); valuesArr[j] = val; } logger.debug( "Set filter from analytical deriver " + driverName + ": " + filter.getField() + "=" + value); String fieldId = fieldNameIdMap.get(fieldName); String[] fields = new String[] {fieldId}; WhereField.Operand left = new WhereField.Operand( fields, "driverName", AbstractStatement.OPERAND_TYPE_SIMPLE_FIELD, null, null); WhereField.Operand right = new WhereField.Operand( valuesArr, "value", AbstractStatement.OPERAND_TYPE_STATIC, null, null); if (valuesArr.length > 1) { query.addWhereField( "Driver_" + i, driverName, false, left, CriteriaConstants.IN, right, "AND"); } else { query.addWhereField( "Driver_" + i, driverName, false, left, CriteriaConstants.EQUALS_TO, right, "AND"); } ExpressionNode newFilterNode = new ExpressionNode("NODE_CONST", "$F{" + "Driver_" + i + "}"); // query.setWhereClauseStructure(newFilterNode); expressionNodes.add(newFilterNode); } // query.setWhereClauseStructure(whereClauseStructure) } // in case it is a filter and has a value setted else if (requestContainsAttribute(filter.getField())) { String value = getAttribute(filter.getField()).toString(); if (value != null && !value.equalsIgnoreCase("")) { logger.debug("Set filter " + filter.getField() + "=" + value); String fieldId = fieldNameIdMap.get(filter.getField()); String[] fields = new String[] {fieldId}; String[] values = new String[] {value}; WhereField.Operand left = new WhereField.Operand( fields, "filterName", AbstractStatement.OPERAND_TYPE_SIMPLE_FIELD, null, null); WhereField.Operand right = new WhereField.Operand( values, "value", AbstractStatement.OPERAND_TYPE_STATIC, null, null); // if filter type is manual use it as string starting, else as equals if (filter .getPresentationType() .equals(RegistryConfigurationXMLParser.PRESENTATION_TYPE_COMBO)) { query.addWhereField( "Filter_" + i, filter.getField(), false, left, CriteriaConstants.EQUALS_TO, right, "AND"); } else { query.addWhereField( "Filter_" + i, filter.getField(), false, left, CriteriaConstants.STARTS_WITH, right, "AND"); } ExpressionNode newFilterNode = new ExpressionNode("NODE_CONST", "$F{" + "Filter_" + i + "}"); // query.setWhereClauseStructure(newFilterNode); expressionNodes.add(newFilterNode); } } logger.debug("OUT"); }