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