private boolean processDrop(final DraggedComponentList dcl, final Point dropPoint, final int dropAction) {
    myEditor.getActiveDecorationLayer().removeFeedback();
    final ArrayList<RadComponent> dclComponents = dcl.getComponents();
    final int componentCount = dclComponents.size();
    ComponentDropLocation location = GridInsertProcessor.getDropLocation(myEditor.getRootContainer(), dropPoint);
    if (FormEditingUtil.isDropOnChild(dcl, location)) {
      setDraggingState(dcl, false);
      return false;
    }
    if (!location.canDrop(dcl)) {
      setDraggingState(dcl, false);
      return false;
    }

    if (!myEditor.ensureEditable()) {
      setDraggingState(dcl, false);
      return false;
    }

    List<RadComponent> droppedComponents;

    RadContainer[] originalParents = dcl.getOriginalParents();

    cancelDrag();
    if (dropAction == DnDConstants.ACTION_COPY) {
      setDraggingState(dcl, false);
      droppedComponents = myDraggedComponentsCopy;
      if (droppedComponents == null) {
        return false;
      }
    }
    else {
      for(int i=0; i<dclComponents.size(); i++) {
        LOG.info("Removing component " + dclComponents.get(i).getId() + " with constraints " + dcl.getOriginalConstraints() [i]);
        originalParents [i].removeComponent(dclComponents.get(i));
      }
      droppedComponents = dclComponents;
    }

    final RadComponent[] components = droppedComponents.toArray(new RadComponent[componentCount]);
    final GridConstraints[] originalConstraints = dcl.getOriginalConstraints();

    location.processDrop(myEditor, components, originalConstraints, dcl);

    if (dropAction == DnDConstants.ACTION_COPY) {
      for (RadComponent component : droppedComponents) {
        InsertComponentProcessor.createBindingWhenDrop(myEditor, component, false);
      }
      FormEditingUtil.selectComponents(myEditor, droppedComponents);
    }
    else {
      setDraggingState(dcl, false);
    }

    for (int i = 0; i < originalConstraints.length; i++) {
      if (originalParents[i].getLayoutManager().isGrid()) {
        FormEditingUtil.deleteEmptyGridCells(originalParents[i], originalConstraints[i]);
      }
    }
    return true;
  }
private boolean processDrop(final DraggedComponentList dcl, final Point dropPoint, final int dropAction)