/** * Returns the list of the allowed child types as they are coming from {@link StructureIndicator} * structure * * @return the list of the allowed child types */ private List<OverlayWidget> getAllowedChildTypes(OverlayWidget overlayWidget) { List<OverlayWidget> allowedChildren = new ArrayList<OverlayWidget>(); List<StructureIndicator> stack = new ArrayList<StructureIndicator>(); stack.add(overlayWidget.getStructureIndicator()); while (!stack.isEmpty()) { StructureIndicator structureIndicator = stack.remove(0); if (structureIndicator instanceof StructureIndicator.Element) { StructureIndicator.Element elemIndicator = (StructureIndicator.Element) structureIndicator; OverlayWidget candidate = elemIndicator.asWidget(); allowedChildren.add(candidate); } else { if (structureIndicator.getIndicators() != null) { stack.addAll(structureIndicator.getIndicators()); } } } return allowedChildren; }