List of usage examples for com.vaadin.ui Tree expand
public void expand(Collection<T> items)
From source file:com.haulmont.cuba.web.gui.components.WebFilterHelper.java
License:Apache License
@Override public void initConditionsDragAndDrop(final Tree tree, final ConditionsTree conditions) { final com.vaadin.ui.Tree vTree = tree.unwrap(com.vaadin.ui.Tree.class); vTree.setDragMode(com.vaadin.ui.Tree.TreeDragMode.NODE); vTree.setDropHandler(new DropHandler() { @Override//ww w. ja v a 2s .c o m public void drop(DragAndDropEvent event) { Transferable t = event.getTransferable(); if (t.getSourceComponent() != vTree) return; com.vaadin.ui.Tree.TreeTargetDetails target = (com.vaadin.ui.Tree.TreeTargetDetails) event .getTargetDetails(); VerticalDropLocation location = target.getDropLocation(); Object sourceItemId = t.getData("itemId"); Object targetItemId = target.getItemIdOver(); if (targetItemId == null) return; CollectionDatasource datasource = tree.getDatasource(); AbstractCondition sourceCondition = (AbstractCondition) datasource.getItem(sourceItemId); AbstractCondition targetCondition = (AbstractCondition) datasource.getItem(targetItemId); Node<AbstractCondition> sourceNode = conditions.getNode(sourceCondition); Node<AbstractCondition> targetNode = conditions.getNode(targetCondition); if (isAncestorOf(targetNode, sourceNode)) return; boolean moveToTheSameParent = Objects.equals(sourceNode.getParent(), targetNode.getParent()); if (location == VerticalDropLocation.MIDDLE) { if (sourceNode.getParent() == null) { conditions.getRootNodes().remove(sourceNode); } else { sourceNode.getParent().getChildren().remove(sourceNode); } targetNode.addChild(sourceNode); refreshConditionsDs(); tree.expand(targetCondition.getId()); } else { List<Node<AbstractCondition>> siblings; if (targetNode.getParent() == null) siblings = conditions.getRootNodes(); else siblings = targetNode.getParent().getChildren(); int targetIndex = siblings.indexOf(targetNode); if (location == VerticalDropLocation.BOTTOM) targetIndex++; int sourceNodeIndex; if (sourceNode.getParent() == null) { sourceNodeIndex = conditions.getRootNodes().indexOf(sourceNode); conditions.getRootNodes().remove(sourceNode); } else { sourceNodeIndex = sourceNode.getParent().getChildren().indexOf(sourceNode); sourceNode.getParent().getChildren().remove(sourceNode); } //decrease drop position index if dragging from top to bottom inside the same parent node if (moveToTheSameParent && (sourceNodeIndex < targetIndex)) targetIndex--; if (targetNode.getParent() == null) { sourceNode.parent = null; conditions.getRootNodes().add(targetIndex, sourceNode); } else { targetNode.getParent().insertChildAt(targetIndex, sourceNode); } refreshConditionsDs(); } } protected boolean isAncestorOf(Node childNode, Node possibleParentNode) { while (childNode.getParent() != null) { if (childNode.getParent().equals(possibleParentNode)) return true; childNode = childNode.getParent(); } return false; } protected void refreshConditionsDs() { tree.getDatasource().refresh(Collections.singletonMap("conditions", conditions)); } @Override public AcceptCriterion getAcceptCriterion() { return new Or(new AbstractSelect.TargetItemIs(vTree, getGroupConditionIds().toArray()), new Not(AbstractSelect.VerticalLocationIs.MIDDLE)); } protected List<UUID> getGroupConditionIds() { List<UUID> groupConditions = new ArrayList<>(); List<AbstractCondition> list = conditions.toConditionsList(); for (AbstractCondition condition : list) { if (condition instanceof GroupCondition) groupConditions.add(condition.getId()); } return groupConditions; } }); }