private SearchOperation getSearchOperation()

in src/main/java/com/epam/digital/data/platform/generator/factory/impl/SearchHandlerScopeFactory.java [179:279]


  private SearchOperation getSearchOperation(
      String operationName,
      Map<String, SearchType> columnToSearchTypeMap,
      SearchConditionOperation.LogicOperator currentCondition,
      Table table) {
    var equalFields =
        currentCondition.getColumns().stream()
            .filter(column -> SearchType.EQUAL.equals(columnToSearchTypeMap.get(column)))
            .map(
                column ->
                    new SearchConditionField(
                        getPropertyName(column), column, isIgnoreCase(column, table)))
            .collect(toList());
    var notEqualFields =
            currentCondition.getColumns()
                    .stream()
                    .filter(column -> SearchType.NOT_EQUAL.equals(columnToSearchTypeMap.get(column)))
                    .map(
                            column ->
                                    new SearchConditionField(
                                            getPropertyName(column), column, isIgnoreCase(column, table)))
                    .collect(toList());
    var containsFields =
            currentCondition.getColumns()
                    .stream()
                    .filter(column -> SearchType.CONTAINS.equals(columnToSearchTypeMap.get(column)))
                    .map(column -> new SearchConditionField(getPropertyName(column), column, true))
                    .collect(toList());
    var startsWithFields =
            currentCondition.getColumns()
                    .stream()
                    .filter(column -> SearchType.STARTS_WITH.equals(columnToSearchTypeMap.get(column)))
                    .map(column -> new SearchConditionField(getPropertyName(column), column, true))
                    .collect(toList());
    var startsWithArrayFields =
            currentCondition.getColumns()
                    .stream()
                    .filter(column -> SearchType.STARTS_WITH_ARRAY.equals(columnToSearchTypeMap.get(column)))
                    .map(column -> new SearchConditionField(getPropertyName(column), column, true))
                    .collect(toList());
    var inFields =
            currentCondition.getColumns()
                    .stream()
                    .filter(column -> SearchType.IN.equals(columnToSearchTypeMap.get(column)))
                    .map(
                            column ->
                                    new SearchConditionField(
                                            getPropertyName(column), column, isIgnoreCase(column, table)))
                    .collect(toList());
    var notInFields =
            currentCondition.getColumns()
                    .stream()
                    .filter(column -> SearchType.NOT_IN.equals(columnToSearchTypeMap.get(column)))
                    .map(
                            column ->
                                    new SearchConditionField(
                                            getPropertyName(column), column, isIgnoreCase(column, table)))
                    .collect(toList());
    var betweenFields =
            currentCondition.getColumns()
                    .stream()
                    .filter(column -> SearchType.BETWEEN.equals(columnToSearchTypeMap.get(column)))
                    .map(
                            column ->
                                    new SearchConditionField(
                                            getPropertyName(column), column, isIgnoreCase(column, table)))
                    .collect(toList());

    var nestedSearchOperations =
        Optional.ofNullable(currentCondition.getLogicOperators())
            .orElse(Collections.emptyList())
            .stream()
            .map(
                innerLogicOperator -> {
                  var columnsAppendix =
                      innerLogicOperator.getColumns().stream()
                          .map(this::getSchemaName)
                          .collect(Collectors.joining());
                  var randomSuffixAppendix = RandomStringUtils.randomNumeric(5);
                  var name =
                      innerLogicOperator.getType().toString().toLowerCase()
                          + columnsAppendix
                          + randomSuffixAppendix;
                  return getSearchOperation(name, columnToSearchTypeMap, innerLogicOperator, table);
                })
            .collect(toList());

    var searchOperation = new SearchOperation();
    searchOperation.setOperator(currentCondition.getType());
    searchOperation.setOperationName(operationName);
    searchOperation.setEqualFields(equalFields);
    searchOperation.setNotEqualFields(notEqualFields);
    searchOperation.setContainsFields(containsFields);
    searchOperation.setStartsWithFields(startsWithFields);
    searchOperation.setStartsWithArrayFields(startsWithArrayFields);
    searchOperation.setInFields(inFields);
    searchOperation.setNotInFields(notInFields);
    searchOperation.setBetweenFields(betweenFields);
    searchOperation.setNestedSearchOperations(nestedSearchOperations);
    return searchOperation;
  }