protected SearchHandlerScope map()

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


  protected SearchHandlerScope map(Table table, Context context) {
    var sc = searchConditionProvider.findFor(getCutTableName(table));

    var columnToSearchTypeMap = sc.getColumnToSearchType();

    var topLevelSearchOperations = Optional.ofNullable(sc.getSearchOperationTree())
            .map(SearchConditionOperationTree::getOperations)
            .orElse(Collections.emptyList())
            .stream()
            .flatMap(op -> op.getLogicOperators().stream())
            .collect(toList());
    var innerLogicOperationColumns = getInnerLogicOperationColumns(topLevelSearchOperations);

    var topLevelSearchColumns = columnToSearchTypeMap.keySet().stream()
            .filter(searchType -> !innerLogicOperationColumns.contains(searchType))
            .collect(toList());

    Set<String> allEnums = enumProvider.findAllWithValues().keySet();
    List<String> enumSearchConditionFields = table.getColumns().stream()
        .filter(col -> allEnums.contains(col.getColumnDataType().getName()))
        .map(NamedObject::getName)
        .collect(toList());

    var nestedEntitiesMap = nestedReadProvider.findFor(getCutTableName(table));
    var simpleColumnNames =
        sc.getReturningColumns().stream()
            .filter(columnName -> !nestedEntitiesMap.containsKey(columnName))
            .collect(toList());
    var nestedColumnNames =
        sc.getReturningColumns().stream()
            .filter(columnName -> !simpleColumnNames.contains(columnName))
            .collect(toList());
    var singleElementNestedGroups =
        collectStreamToNestedGroup(
            nestedColumnNames.stream()
                .filter(columnName -> !DbUtils.isColumnOfArrayType(columnName, table))
                .collect(toList()),
            nestedEntitiesMap,
            context);
    var listElementNestedGroups =
        collectStreamToNestedGroup(
            nestedColumnNames.stream()
                .filter(columnName -> DbUtils.isColumnOfArrayType(columnName, table))
                .collect(toList()),
            nestedEntitiesMap,
            context);

    var scope = new SearchHandlerScope();
    scope.setClassName(getSchemaName(table) + "SearchHandler");
    scope.setSchemaName(getSchemaName(table));
    scope.setTableName(table.getName());
    scope.setLimit(sc.getLimit());

    var rootLogicOperator = new SearchConditionOperation.LogicOperator();
    rootLogicOperator.setColumns(topLevelSearchColumns);
    rootLogicOperator.setType(SearchOperatorType.AND);
    rootLogicOperator.setLogicOperators(topLevelSearchOperations);
    var searchOperation =
        getSearchOperation("mainCondition", columnToSearchTypeMap, rootLogicOperator, table);
    scope.setSearchLogicOperations(Collections.singletonList(searchOperation));
    scope.setEnumSearchConditionFields(enumSearchConditionFields);
    scope.setSimpleSelectableFields(getSelectableFields(table, simpleColumnNames, context));
    scope.setNestedSingleSelectableGroups(singleElementNestedGroups);
    scope.setNestedListSelectableGroups(listElementNestedGroups);
    scope.setPagination(sc.getPagination());
    scope.setRls(searchConditionProvider.getRlsMetadata(table.getName()));
    return scope;
  }