@Override public boolean hasChildren(GroupInfo groupId) { boolean groupExists = containsGroup(groupId); List<GroupInfo> groupChildren = this.children.get(groupId); return groupExists && CollectionUtils.isNotEmpty(groupChildren); }
@Override public Object getGroupPropertyValue(GroupInfo groupId) { if (containsGroup(groupId)) { return groupId.getValue(); } return null; }
@Override public Object getGroupProperty(GroupInfo groupId) { if (containsGroup(groupId)) { return groupId.getProperty(); } return null; }
@Override public List<E> getOwnChildItems(GroupInfo groupId) { if (groupItems == null) { return Collections.emptyList(); } List<K> idsList = groupItems.get(groupId); if (containsGroup(groupId) && CollectionUtils.isNotEmpty(idsList)) { return idsList.stream() .map(id -> container.getItem(id)) .collect(Collectors.toList()); } return Collections.emptyList(); }
@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(); }