public EntryContentProposal(MapperManager mapperManager, AbstractNode entry) {
   this.mapperManager = mapperManager;
   this.entry = entry;
   if (entry instanceof TreeNode) {
     content = XmlMapUtil.convertToExpression(((TreeNode) entry).getXpath());
   } else if (entry instanceof VarNode) {
     VarNode varNode = (VarNode) entry;
     VarTable varTabel = (VarTable) varNode.eContainer();
     content = varTabel.getName() + XmlMapUtil.EXPRESSION_SEPARATOR + varNode.getName();
   }
 }
  /**
   * DOC talend Comment method "getTemplate".
   *
   * @param event
   * @return the validate drag able node list
   */
  @Override
  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<TableEntityPart> partList = new ArrayList<TableEntityPart>();
    EditPart lastSelection = filtedSelection.get(filtedSelection.size() - 1);
    if (lastSelection instanceof TreeNodeEditPart
        && !(lastSelection instanceof OutputTreeNodeEditPart)) {
      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) {
          for (EditPart treePart : filtedSelection) {
            if (!XmlMapUtil.isDragable((TreeNode) treePart.getModel())) {
              return null;
            }
          }

          MapperTablePart abstractInOutTreePart =
              MapperUtils.getMapperTablePart((TableEntityPart) lastSelection);
          if (abstractInOutTreePart != null) {
            partList = MapperUtils.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 {
        if (lastSelection.getModel() instanceof TreeNode
            && !XmlMapUtil.isDragable((TreeNode) lastSelection.getModel())) {
          return null;
        }
        toTransfer.add(lastSelection);
      }
      return new TransferedObject(toTransfer, type);
    }
    return null;
  }