@@ -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