/** {@inheritDoc} */
  @Override
  public EditPart getTargetEditPart(Request request) {
    if (ERDiagramTransferDragSourceListener.REQUEST_TYPE_ADD_COLUMN_GROUP.equals(request.getType())
        || ERDiagramTransferDragSourceListener.REQUEST_TYPE_MOVE_COLUMN_GROUP.equals(
            request.getType())) {
      DirectEditRequest editRequest = (DirectEditRequest) request;

      TableView tableView = (TableView) this.getHost().getModel();
      ColumnGroup columnGroup =
          (ColumnGroup) ((Map) editRequest.getDirectEditFeature()).get("group");

      if (!tableView.getColumns().contains(columnGroup)) {
        return getHost();
      }

    } else if (ERDiagramTransferDragSourceListener.REQUEST_TYPE_ADD_WORD.equals(
        request.getType())) {
      return getHost();

    } else if (ERDiagramTransferDragSourceListener.REQUEST_TYPE_MOVE_COLUMN.equals(
        request.getType())) {
      return getHost();
    }

    return super.getTargetEditPart(request);
  }
  /** {@inheritDoc} */
  @Override
  public Command getCommand(Request request) {
    try {
      if (ERDiagramTransferDragSourceListener.REQUEST_TYPE_ADD_COLUMN_GROUP.equals(
          request.getType())) {
        DirectEditRequest editRequest = (DirectEditRequest) request;

        TableView tableView = (TableView) this.getHost().getModel();
        ColumnGroup columnGroup =
            (ColumnGroup) ((Map) editRequest.getDirectEditFeature()).get("group");

        if (!tableView.getColumns().contains(columnGroup)) {
          return new AddColumnGroupCommand(
              tableView, columnGroup, this.getColumnIndex(editRequest));
        }

      } else if (ERDiagramTransferDragSourceListener.REQUEST_TYPE_ADD_WORD.equals(
          request.getType())) {
        DirectEditRequest editRequest = (DirectEditRequest) request;

        TableView table = (TableView) this.getHost().getModel();
        Word word = (Word) editRequest.getDirectEditFeature();

        return new AddWordCommand(table, word, this.getColumnIndex(editRequest));

      } else if (ERDiagramTransferDragSourceListener.REQUEST_TYPE_MOVE_COLUMN.equals(
          request.getType())) {
        DirectEditRequest editRequest = (DirectEditRequest) request;

        return ColumnSelectionHandlesEditPolicy.createMoveColumnCommand(
            editRequest,
            this.getHost().getViewer(),
            (TableView) this.getHost().getModel(),
            this.getColumnIndex(editRequest));

      } else if (ERDiagramTransferDragSourceListener.REQUEST_TYPE_MOVE_COLUMN_GROUP.equals(
          request.getType())) {
        DirectEditRequest editRequest = (DirectEditRequest) request;

        return ColumnSelectionHandlesEditPolicy.createMoveColumnGroupCommand(
            editRequest, (TableView) this.getHost().getModel(), this.getColumnIndex(editRequest));
      }

    } catch (Exception e) {
      Activator.showExceptionDialog(e);
    }

    return super.getCommand(request);
  }