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;
}