code: boolean isChangedPosition(I_CmsDraggable draggable, I_CmsDropTarget target, boolean strict) {
  
          // if draggable is not a sitemap item, any valid position is a changed position
          if (!((draggable instanceof CmsSitemapTreeItem) && (target instanceof CmsTree<?>))) {
              return true;
          }
  
          String placeholderPath = ((CmsTree<?>)target).getPlaceholderPath();
          if ((placeholderPath == null) && !strict) {
              // first positioning, path has not changed yet
              return false;
          }
          // if the the path differs, the position has changed
          if ((m_originalPath == null) || !m_originalPath.equals(placeholderPath)) {
              return true;
          }
          // if the new index is not next to the old one, the position has changed
          if (!((target.getPlaceholderIndex() == (m_originalIndex + 1))
              || (target.getPlaceholderIndex() == m_originalIndex)) && strict) {
              return true;
          }
          return false;
      }
docs: Checks whether the current placeholder position represents a change to the original draggable position within the tree.<p>
  
  @param draggable the draggable
  @param target the current drop target
  @param strict if <code>false</code> only the parent path is considered, the index position will be ignored
  
  @return <code>true</code> if the position changed