package com.constellio.app.modules.rm.ui.components.tree; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.app.ui.application.ConstellioUI; import com.constellio.app.ui.pages.base.SessionContext; import com.vaadin.event.Transferable; import com.vaadin.event.dd.DragAndDropEvent; import com.vaadin.event.dd.DropHandler; import com.vaadin.event.dd.acceptcriteria.AcceptAll; import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails; import com.vaadin.ui.Tree; public abstract class RMTreeDropHandlerImpl implements DropHandler, RMTreeDropHander { private RMTreeDropPresenter presenter; public RMTreeDropHandlerImpl() { this.presenter = new RMTreeDropPresenter(this); } @Override public void drop(DragAndDropEvent dragEvent) { AbstractSelectTargetDetails dropTargetData = (AbstractSelectTargetDetails) dragEvent.getTargetDetails(); Tree tree = (Tree) dragEvent.getTargetDetails().getTarget(); Transferable transferable = dragEvent.getTransferable(); Object sourceItemId = transferable.getData("itemId"); Object targetItemId = dropTargetData.getItemIdOver(); if ((sourceItemId instanceof String) && (targetItemId instanceof String)) { String newParentId = presenter.recordDropped((String) sourceItemId, (String) targetItemId); if (newParentId != null) { if (tree.isExpanded(newParentId)) { tree.setParent(sourceItemId, newParentId); } else { tree.removeItem(sourceItemId); } } } } @Override public AcceptCriterion getAcceptCriterion() { return AcceptAll.get(); } @Override public SessionContext getSessionContext() { return ConstellioUI.getCurrentSessionContext(); } @Override public ConstellioFactories getConstellioFactories() { return ConstellioUI.getCurrent().getConstellioFactories(); } }