Exemplo n.º 1
0
  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");
  }