Skip to content

Commit 4b5892d

Browse files
committed
Merge remote-tracking branch 'origin/feature-tree-table' into avoidRename
2 parents 7bf5397 + 45e6b03 commit 4b5892d

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

srv/src/main/java/my/bookshop/handlers/HierarchyHandler.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,12 +197,13 @@ private void addIfNotNull(Set<Integer> ancestorIds, Row r, String key) {
197197
}
198198

199199
private List<GenreHierarchy> topLevels(CqnTopLevelsTransformation topLevels, CqnPredicate filter) {
200-
return topLevels.levels() < 0 || !(topLevels.expandLevels().isEmpty()) ? topLevelsAll(filter)
201-
: topLevelsLimit(topLevels.levels(), filter);
200+
return topLevels.levels() < 0 ? topLevelsAll(filter) : topLevelsLimit(topLevels, filter);
202201
}
203202

204-
private List<GenreHierarchy> topLevelsLimit(long limit, CqnPredicate filter) {
205-
Map<Integer, GenreHierarchy> lookup = new HashMap<>();
203+
private List<GenreHierarchy> topLevelsLimit(CqnTopLevelsTransformation topLevels, CqnPredicate filter) {
204+
long limit = topLevels.levels();
205+
Map <Integer, GenreHierarchy> lookup = new HashMap<>();
206+
Map<Object, Long> expandLevels = topLevels.expandLevels();
206207

207208
CqnSelect getRoots = Select.from(GENRE_HIERARCHY).where(gh -> gh.parnt_ID().isNull().and(filter));
208209
List<GenreHierarchy> roots = db.run(getRoots).listOf(GenreHierarchy.class);
@@ -227,6 +228,23 @@ private List<GenreHierarchy> topLevelsLimit(long limit, CqnPredicate filter) {
227228
}
228229
});
229230

231+
if (!expandLevels.isEmpty()) {
232+
List<Integer> expandedIds = expandLevels.keySet().stream().map(key -> (Integer) key).toList();
233+
CqnSelect expandedCQN = Select.from(AdminService_.GENRE_HIERARCHY).where(gh ->
234+
CQL.and(filter,
235+
CQL.or(gh.ID().in(expandedIds), gh.parnt_ID().in(expandedIds))));
236+
237+
List<GenreHierarchy> expanded = db.run(expandedCQN).listOf(GenreHierarchy.class);
238+
expanded.forEach(gh -> {
239+
if (!lookup.keySet().contains(gh.getId())) {
240+
gh.setParnt(lookup.get(gh.getParntId()));
241+
gh.setDistanceFromRoot(distanceFromRoot(gh));
242+
lookup.put(gh.getId(), gh);
243+
}
244+
});
245+
246+
}
247+
230248
return lookup.values().stream().sorted(new Sorter()).toList();
231249
}
232250

0 commit comments

Comments
 (0)