Program: 121772
Project: 121772
Buggy source:
/** 
 * DOC talend Comment method "getTemplate".
 * @param event
 * @return the validate drag able node list
 */
protected Object getTemplate(DragSourceEvent event){
  final RootEditPart rootEditPart=getViewer().getRootEditPart();
  if (rootEditPart instanceof AbstractGraphicalEditPart) {
    AbstractGraphicalEditPart graphicPart=(AbstractGraphicalEditPart)rootEditPart;
    final IFigure figure=graphicPart.getFigure();
    final IFigure findFigureAt=figure.findFigureAt(new Point(event.x,event.y));
    if (findFigureAt instanceof ISash) {
      return findFigureAt;
    }
  }
  List selection=getViewer().getSelectedEditParts();
  if (selection == null || selection.isEmpty()) {
    return null;
  }
  TransferedObject object=null;
  Object lastSelection=getViewer().getSelectedEditParts().get(getViewer().getSelectedEditParts().size() - 1);
  TransferdType type=null;
  List toTransfer=new ArrayList();
  for (  Object o : selection) {
    if (lastSelection instanceof OutputTreeNodeEditPart) {
      toTransfer.clear();
      break;
    }
 else     if (lastSelection instanceof TreeNodeEditPart) {
      type=TransferdType.INPUT;
      if (o instanceof InputXmlTreeEditPart) {
        toTransfer.clear();
        break;
      }
      if (o instanceof TreeNodeEditPart) {
        TreeNodeEditPart nodePart=(TreeNodeEditPart)o;
        if (XmlMapUtil.isDragable((TreeNode)nodePart.getModel())) {
          toTransfer.add(o);
        }
 else {
          toTransfer.clear();
          break;
        }
      }
    }
 else     if (lastSelection instanceof VarNodeEditPart) {
      type=TransferdType.VAR;
      if (o instanceof VarNodeEditPart) {
        toTransfer.add(o);
      }
    }
  }
  if (toTransfer.isEmpty()) {
    object=null;
  }
 else {
    object=new TransferedObject(toTransfer,type);
  }
  return object;
}

Fixed version (ground truth):
/** 
 * DOC talend Comment method "getTemplate".
 * @param event
 * @return the validate drag able node list
 */
protected Object getTemplate(DragSourceEvent event){
  final RootEditPart rootEditPart=getViewer().getRootEditPart();
  if (rootEditPart instanceof AbstractGraphicalEditPart) {
    AbstractGraphicalEditPart graphicPart=(AbstractGraphicalEditPart)rootEditPart;
    final IFigure figure=graphicPart.getFigure();
    final IFigure findFigureAt=figure.findFigureAt(new Point(event.x,event.y));
    if (findFigureAt instanceof ISash) {
      return findFigureAt;
    }
  }
  List<EditPart> filtedSelection=new ArrayList<EditPart>();
  for (  Object part : getViewer().getSelectedEditParts()) {
    if (part instanceof TreeNodeEditPart || part instanceof VarNodeEditPart) {
      filtedSelection.add((EditPart)part);
    }
  }
  if (filtedSelection == null || filtedSelection.isEmpty()) {
    return null;
  }
  List toTransfer=new ArrayList();
  TransferdType type=null;
  List<EditPart> partList=new ArrayList<EditPart>();
  EditPart lastSelection=filtedSelection.get(filtedSelection.size() - 1);
  if (lastSelection instanceof TreeNodeEditPart) {
    type=TransferdType.INPUT;
  }
 else   if (lastSelection instanceof VarNodeEditPart) {
    type=TransferdType.VAR;
  }
  if (type != null) {
    if (filtedSelection.size() > 1) {
      partList.addAll(lastSelection.getParent().getChildren());
      Map<EditPart,Integer> partAndIndex=new HashMap<EditPart,Integer>();
      if (type == TransferdType.INPUT) {
        AbstractInOutTreeEditPart abstractInOutTreePart=XmlMapUtil.getAbstractInOutTreePart((TreeNodeEditPart)lastSelection);
        if (abstractInOutTreePart != null) {
          partList=XmlMapUtil.getFlatChildrenPartList(abstractInOutTreePart);
        }
      }
 else {
        partList.addAll(lastSelection.getParent().getChildren());
      }
      for (      EditPart selected : filtedSelection) {
        int indexOf=partList.indexOf(selected);
        if (indexOf != -1) {
          partAndIndex.put(selected,indexOf);
          int index=0;
          for (int i=0; i < toTransfer.size(); i++) {
            if (indexOf > partAndIndex.get(toTransfer.get(i))) {
              index=i + 1;
            }
          }
          toTransfer.add(index,selected);
        }
      }
    }
 else {
      toTransfer.add(lastSelection);
    }
    return new TransferedObject(toTransfer,type);
  }
  return null;
}