public void drop(final DropTargetDropEvent dtde) {
    if (dragHandler == null) {
      dtde.rejectDrop();
      return;
    }
    try {
      if (ElementMetaDataTransferable.ELEMENT_FLAVOR.equals(getFlavor())) {
        final ElementMetaData metaData = (ElementMetaData) getTransferData();
        dragHandler.drop(dtde, editorContext, metaData, null);
        return;
      }

      if (FieldDescriptionTransferable.ELEMENT_FLAVOR.equals(getFlavor())) {
        final String fieldName = (String) getTransferData();
        final ElementMetaData metaData = createMetaData(fieldName);
        dragHandler.drop(dtde, editorContext, metaData, fieldName);
        return;
      }
      dtde.rejectDrop();
    } finally {
      editorContext.getRepresentationContainer().revalidate();
      editorContext.getRepresentationContainer().repaint();
      dragHandler = null;
    }
  }
  protected int updateDragOver(final DropTargetDragEvent event) {
    try {
      if (ElementMetaDataTransferable.ELEMENT_FLAVOR.equals(getFlavor())) {
        final ElementMetaData data = (ElementMetaData) getTransferData();
        if (data == null) {
          return DnDConstants.ACTION_NONE;
        }

        if (dragHandler == null) {
          dragHandler = createDragHandler(data);
          if (dragHandler == null) {
            return DnDConstants.ACTION_NONE;
          }
          return dragHandler.dragStarted(event, editorContext, data, null);
        } else {
          return dragHandler.dragUpdated(event, editorContext, data, null);
        }
      }

      if (FieldDescriptionTransferable.ELEMENT_FLAVOR.equals(getFlavor())) {
        final String fieldName = (String) getTransferData();
        final ElementMetaData data = createMetaData(fieldName);
        if (data == null) {
          return DnDConstants.ACTION_NONE;
        }

        if (dragHandler == null) {
          dragHandler = createDragHandler(data);
          if (dragHandler == null) {
            return DnDConstants.ACTION_NONE;
          }
          return dragHandler.dragStarted(event, editorContext, data, fieldName);
        } else {
          return dragHandler.dragUpdated(event, editorContext, data, fieldName);
        }
      }

      return DnDConstants.ACTION_NONE;
    } finally {
      editorContext.getRepresentationContainer().revalidate();
      editorContext.getRepresentationContainer().repaint();
    }
  }