Skip to content

Commit 45e6b03

Browse files
authored
Support of ExpandLevels (#403)
Support of ExpandLevels in custom code --------- Co-authored-by: D070615 <[email protected]>
1 parent c7f50a8 commit 45e6b03

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

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

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,11 +169,13 @@ private void addIfNotNull(Set<Integer> ancestorIds, Row r, String key) {
169169
}
170170

171171
private List<GenreHierarchy> topLevels(CqnTopLevelsTransformation topLevels, CqnPredicate filter) {
172-
return topLevels.levels() < 0 || !(topLevels.expandLevels().isEmpty()) ? topLevelsAll(filter) : topLevelsLimit(topLevels.levels(), filter);
172+
return topLevels.levels() < 0 ? topLevelsAll(filter) : topLevelsLimit(topLevels, filter);
173173
}
174174

175-
private List<GenreHierarchy> topLevelsLimit(long limit, CqnPredicate filter) {
175+
private List<GenreHierarchy> topLevelsLimit(CqnTopLevelsTransformation topLevels, CqnPredicate filter) {
176+
long limit = topLevels.levels();
176177
Map <Integer, GenreHierarchy> lookup = new HashMap<>();
178+
Map<Object, Long> expandLevels = topLevels.expandLevels();
177179

178180
CqnSelect getRoots = Select.from(AdminService_.GENRE_HIERARCHY).where(gh -> gh.parent_id().eq(0).and(filter));
179181
List<GenreHierarchy> roots = db.run(getRoots).listOf(GenreHierarchy.class);
@@ -197,6 +199,23 @@ private List<GenreHierarchy> topLevelsLimit(long limit, CqnPredicate filter) {
197199
}
198200
});
199201

202+
if (!expandLevels.isEmpty()) {
203+
List<Integer> expandedIds = expandLevels.keySet().stream().map(key -> (Integer) key).toList();
204+
CqnSelect expandedCQN = Select.from(AdminService_.GENRE_HIERARCHY).where(gh ->
205+
CQL.and(filter,
206+
CQL.or(gh.node_id().in(expandedIds), gh.parent_id().in(expandedIds))));
207+
208+
List<GenreHierarchy> expanded = db.run(expandedCQN).listOf(GenreHierarchy.class);
209+
expanded.forEach(gh -> {
210+
if (!lookup.keySet().contains(gh.getNodeId())) {
211+
gh.setParent(lookup.get(gh.getParentId()));
212+
gh.setDistanceFromRoot(distanceFromRoot(gh));
213+
lookup.put(gh.getNodeId(), gh);
214+
}
215+
});
216+
217+
}
218+
200219
return lookup.values().stream().sorted(new Sorter()).toList();
201220
}
202221

0 commit comments

Comments
 (0)