/**
  * Returns a list of the allowed siblings with their occurrence for a given {@link OverlayWidget}
  * <tt>overlayWidget</tt>. This implementation returns all allowed siblings according to this
  * overlay widget's parent's {@link
  * org.nsesa.editor.gwt.core.client.ui.overlay.document.OverlayWidget#getStructureIndicator()}.
  *
  * @param documentController the document controller
  * @param overlayWidget the overlay widget to get the allowed siblings for
  * @return the allowed siblings
  */
 @Override
 public List<OverlayWidget> getAllowedSiblings(
     final DocumentController documentController, final OverlayWidget overlayWidget) {
   if (overlayWidget.getParentOverlayWidget() != null) {
     return getAllowedChildren(documentController, overlayWidget.getParentOverlayWidget());
   } else {
     // probably dealing with a root node
     return new ArrayList<OverlayWidget>();
   }
 }
 /**
  * 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;
 }