@Override public Collection<K> getGroupItemIds(GroupInfo groupId) { if (containsGroup(groupId)) { List<K> itemIds; if ((itemIds = groupItems.get(groupId)) == null) { itemIds = new ArrayList<>(); List<GroupInfo> children = getChildrenInternal(groupId); for (GroupInfo child : children) { itemIds.addAll(getGroupItemIds(child)); } } return ImmutableList.copyOf(itemIds); } return Collections.emptyList(); }
@Override public int getGroupItemsCount(GroupInfo groupId) { if (containsGroup(groupId)) { List<K> itemIds; if ((itemIds = groupItems.get(groupId)) == null) { int count = 0; List<GroupInfo> children = getChildrenInternal(groupId); for (GroupInfo child : children) { count += getGroupItemsCount(child); } return count; } else { return itemIds.size(); } } return 0; }
@Override public List<E> getChildItems(GroupInfo groupId) { if (groupItems == null) { return Collections.emptyList(); } if (containsGroup(groupId)) { List<E> entities = new ArrayList<>(); // if current group contains other groups if (hasChildren(groupId)) { List<GroupInfo> children = getChildrenInternal(groupId); for (GroupInfo childGroup : children) { entities.addAll(getChildItems(childGroup)); } } for (K id : groupItems.getOrDefault(groupId, Collections.emptyList())) { E item = container.getItem(id); entities.add(item); } return entities; } return Collections.emptyList(); }