1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.admincentral.shellapp.favorites;
35
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
38
39 import com.vaadin.event.dd.DragAndDropEvent;
40 import com.vaadin.event.dd.DropHandler;
41 import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
42 import com.vaadin.event.dd.acceptcriteria.And;
43 import com.vaadin.event.dd.acceptcriteria.TargetDetailIs;
44 import com.vaadin.shared.ui.dd.HorizontalDropLocation;
45 import com.vaadin.shared.ui.dd.VerticalDropLocation;
46 import com.vaadin.ui.Component;
47
48
49
50
51 public class GroupDragAndDropWrapper extends AbstractFavoritesDragAndDropWrapper {
52
53 private final Logger log = LoggerFactory.getLogger(GroupDragAndDropWrapper.class);
54
55 private final FavoritesGroup group;
56
57 public GroupDragAndDropWrapper(Component root, FavoritesView.Listener listener, FavoritesGroup group) {
58 super(root, listener);
59 this.group = group;
60 }
61
62 @Override
63 public Component getWrappedComponent() {
64 return this.group;
65 }
66
67 @Override
68 protected void init() {
69 setDragStartMode(DragStartMode.WRAPPER);
70 setSizeUndefined();
71
72 setDropHandler(new DropHandler() {
73
74 @Override
75 public void drop(DragAndDropEvent event) {
76 AbstractFavoritesDragAndDropWrapper droppedComponent = (AbstractFavoritesDragAndDropWrapper) event.getTransferable().getSourceComponent();
77 if (droppedComponent.getWrappedComponent() instanceof FavoritesEntry) {
78 String favoritePath = ((FavoritesEntry) ((EntryDragAndDropWrapper) event.getTransferable().getSourceComponent()).getWrappedComponent()).getRelPath();
79 getListener().moveFavorite(favoritePath, group.getRelPath());
80 } else if (droppedComponent.getWrappedComponent() instanceof FavoritesGroup) {
81
82 String groupToMove = ((FavoritesGroup) droppedComponent.getWrappedComponent()).getRelPath();
83 WrapperTransferable transferable = (WrapperTransferable) event.getTransferable();
84 WrapperTargetDetails details = (WrapperTargetDetails) event.getTargetDetails();
85 String verticalDropLocation = (String) details.getData("verticalLocation");
86
87 boolean isDragDown = (details.getMouseEvent().getClientY() - transferable.getMouseDownEvent().getClientY()) > 0;
88
89 if (isDragDown && (verticalDropLocation.equals(VerticalDropLocation.BOTTOM.name()) || verticalDropLocation.equals(VerticalDropLocation.MIDDLE.name()))) {
90 getListener().orderGroupAfter(groupToMove, group.getRelPath());
91 } else if (!isDragDown && (verticalDropLocation.equals(VerticalDropLocation.TOP.name()) || verticalDropLocation.equals(VerticalDropLocation.MIDDLE.name()))) {
92 getListener().orderGroupBefore(groupToMove, group.getRelPath());
93 }
94
95 } else {
96 log.warn("Trying to drop neither entry nor group on a group.");
97 }
98
99 }
100
101 @Override
102 public AcceptCriterion getAcceptCriterion() {
103 return new And(
104 new TargetDetailIs("verticalLocation", VerticalDropLocation.MIDDLE.name()),
105 new TargetDetailIs("horizontalLocation", HorizontalDropLocation.CENTER.name()));
106 }
107 });
108
109 }
110 }