docs: public int repositionPlaceholder(int x, int y, Element placeholder, Orientation orientation) {
  
          I_CmsDraggable draggable = null;
          if (getTree().getDnDHandler() != null) {
              draggable = getTree().getDnDHandler().getDraggable();
          }
          Element itemElement = getListItemWidget().getElement();
          // check if the mouse pointer is within the height of the element
          int top = CmsDomUtil.getRelativeY(y, itemElement);
          int height = itemElement.getOffsetHeight();
          int index;
          String parentPath;
          boolean isParentDndEnabled;
          CmsTreeItem parentItem = getParentItem();
          if (parentItem == null) {
              index = getTree().getItemPosition(this);
              parentPath = "/";
              isParentDndEnabled = getTree().isRootDropEnabled();
          } else {
              index = parentItem.getItemPosition(this);
              parentPath = getParentItem().getPath();
              isParentDndEnabled = getParentItem().isDropEnabled();
          }
  
          if (top < height) {
              // the mouse pointer is within the widget
              int diff = x - getListItemWidget().getAbsoluteLeft();
              if ((draggable != this) && isDropEnabled() && (diff > 0) && (diff < 32)) {
                  // over icon
                  getTree().setOpenTimer(this);
                  m_children.getElement().insertBefore(placeholder, m_children.getElement().getFirstChild());
                  getTree().setPlaceholderPath(getPath());
                  return 0;
              }
              getTree().cancelOpenTimer();
  
              // In this case try to drop on the parent
              if (!isParentDndEnabled) {
                  // we are not allowed to drop here
                  // keeping old position
                  return getTree().getPlaceholderIndex();
              }
              int originalPathLevel = -1;
              if (draggable instanceof CmsTreeItem) {
                  originalPathLevel = getPathLevel(((CmsTreeItem)draggable).getPath()) - 1;
              }
              if (shouldInsertIntoSiblingList(originalPathLevel, parentItem, index)) {
                  @SuppressWarnings("null")
                  CmsTreeItem previousSibling = parentItem.getChild(index - 1);
                  if (previousSibling.isOpen()) {
                      // insert as last into the last opened of the siblings tree fragment
                      return CmsTreeItem.getLastOpenedItem(
                          previousSibling,
                          originalPathLevel,
                          true).insertPlaceholderAsLastChild(placeholder);
                  }
              }
              // insert place holder at the parent before the current item
              getElement().getParentElement().insertBefore(placeholder, getElement());
              getTree().setPlaceholderPath(parentPath);
              return index;
          } else if ((draggable != this) && isOpen()) {
              getTree().cancelOpenTimer();
              // the mouse pointer is on children
              for (int childIndex = 0; childIndex < getChildCount(); childIndex++) {
                  CmsTreeItem child = getChild(childIndex);
                  Element childElement = child.getElement();
  
                  boolean over = false;
                  switch (orientation) {
                      case HORIZONTAL:
                          over = CmsDomUtil.checkPositionInside(childElement, x, -1);
                          break;
                      case VERTICAL:
                          over = CmsDomUtil.checkPositionInside(childElement, -1, y);
                          break;
                      case ALL:
                      default:
                          over = CmsDomUtil.checkPositionInside(childElement, x, y);
                  }
                  if (over) {
                      return child.repositionPlaceholder(x, y, placeholder, orientation);
                  }
              }
          }
          getTree().cancelOpenTimer();
          // keeping old position
          return getTree().getPlaceholderIndex();
      }