@Override public void drop(DnDEvent aEvent) { final Object object = aEvent.getAttachedObject(); if (object instanceof PackagingElementDraggingObject) { final PackagingElementDraggingObject draggingObject = (PackagingElementDraggingObject) object; final PackagingElementNode<?> targetNode = draggingObject.getTargetNode(); final CompositePackagingElement<?> targetElement = draggingObject.getTargetElement(); if (targetElement == null || targetNode == null || !draggingObject.checkCanDrop()) return; if (!checkCanAdd(targetElement, targetNode)) { return; } final List<PackagingElement<?>> toSelect = new ArrayList<PackagingElement<?>>(); editLayout( new Runnable() { @Override public void run() { draggingObject.beforeDrop(); final CompositePackagingElement<?> parent = getOrCreateModifiableParent(targetElement, targetNode); for (PackagingElement<?> element : draggingObject.createPackagingElements(myContext)) { toSelect.add(element); parent.addOrFindChild(element); } } }); updateAndSelect(targetNode, toSelect); myArtifactsEditor.getSourceItemsTree().rebuildTree(); } }