Example usage for org.springframework.ide.eclipse.boot.dash.model ModifiableModel add

List of usage examples for org.springframework.ide.eclipse.boot.dash.model ModifiableModel add

Introduction

In this page you can find the example usage for org.springframework.ide.eclipse.boot.dash.model ModifiableModel add.

Prototype

void add(List<Object> sources, UserInteractions ui) throws Exception;

Source Link

Usage

From source file:org.springframework.ide.eclipse.boot.dash.views.sections.BootDashUnifiedTreeSection.java

private void addDropSupport(final TreeViewer tv) {
    int ops = DND.DROP_COPY;
    final LocalSelectionTransfer transfer = LocalSelectionTransfer.getTransfer();
    Transfer[] transfers = new Transfer[] { LocalSelectionTransfer.getTransfer() };
    DropTarget dropTarget = new DropTarget(tv.getTree(), ops);
    dropTarget.setTransfer(transfers);//from   w w w.  j  a va 2 s. c  o m
    dropTarget.addDropListener(new DropTargetAdapter() {
        @Override
        public void dragEnter(DropTargetEvent event) {
            checkDropable(event);
        }

        @Override
        public void dragOver(DropTargetEvent event) {
            checkDropable(event);
            event.feedback = DND.FEEDBACK_SELECT | DND.FEEDBACK_SCROLL;
        }

        @Override
        public void dropAccept(DropTargetEvent event) {
            checkDropable(event);
        }

        private void checkDropable(DropTargetEvent event) {
            if (canDrop(event)) {
                event.detail = DND.DROP_COPY & event.operations;
            } else {
                event.detail = DND.DROP_NONE;
            }
        }

        private boolean canDrop(DropTargetEvent event) {
            BootDashModel droppedOn = getDropTarget(event);
            if (droppedOn != null && droppedOn instanceof ModifiableModel) {
                ModifiableModel target = (ModifiableModel) droppedOn;
                if (transfer.isSupportedType(event.currentDataType)) {
                    Object[] elements = getDraggedElements();
                    if (ArrayUtils.isNotEmpty(elements) && target.canBeAdded(Arrays.asList(elements))) {
                        return true;
                    }
                }
            }
            return false;
        }

        /**
         * Determines which BootDashModel a droptarget event represents (i.e. what thing
         * are we dropping or dragging onto?
         */
        private BootDashModel getDropTarget(DropTargetEvent event) {
            Point loc = tv.getTree().toControl(new Point(event.x, event.y));
            ViewerCell cell = tv.getCell(loc);
            if (cell != null) {
                Object el = cell.getElement();
                if (el instanceof BootDashModel) {
                    return (BootDashModel) el;
                }
            }
            //Not a valid place to drop
            return null;
        }

        @Override
        public void drop(DropTargetEvent event) {
            if (canDrop(event)) {
                BootDashModel model = getDropTarget(event);
                final Object[] elements = getDraggedElements();
                if (model instanceof ModifiableModel) {
                    final ModifiableModel modifiableModel = (ModifiableModel) model;
                    Job job = new Job("Performing deployment to " + model.getRunTarget().getName()) {

                        @Override
                        protected IStatus run(IProgressMonitor monitor) {
                            if (modifiableModel != null && selection != null) {
                                try {
                                    modifiableModel.add(Arrays.asList(elements), ui);

                                } catch (Exception e) {
                                    ui.errorPopup("Failed to Add Element", e.getMessage());
                                }
                            }
                            return Status.OK_STATUS;
                        }

                    };
                    job.schedule();
                }
            }
            super.drop(event);
        }

        private Object[] getDraggedElements() {
            ISelection sel = transfer.getSelection();
            if (sel instanceof IStructuredSelection) {
                return ((IStructuredSelection) sel).toArray();
            }
            return NO_OBJECTS;
        }

    });
}