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.pages.app.action;
35
36 import info.magnolia.context.MgnlContext;
37 import info.magnolia.event.EventBus;
38 import info.magnolia.jcr.util.NodeUtil;
39 import info.magnolia.ui.api.action.AbstractAction;
40 import info.magnolia.ui.api.action.ActionExecutionException;
41 import info.magnolia.ui.api.app.SubAppEventBus;
42 import info.magnolia.ui.api.event.ContentChangedEvent;
43 import info.magnolia.ui.vaadin.gwt.client.shared.AreaElement;
44
45 import javax.inject.Inject;
46 import javax.inject.Named;
47 import javax.jcr.Node;
48 import javax.jcr.RepositoryException;
49 import javax.jcr.Session;
50
51 import org.apache.commons.lang3.StringUtils;
52
53
54
55
56 public class SortComponentAction extends AbstractAction<SortComponentActionDefinition> {
57
58 private AreaElement areaElement;
59 private EventBus eventBus;
60
61 @Inject
62 public SortComponentAction(SortComponentActionDefinition definition, AreaElement areaElement, @Named(SubAppEventBus.NAME) EventBus eventBus) {
63 super(definition);
64 this.areaElement = areaElement;
65 this.eventBus = eventBus;
66 }
67
68 @Override
69 public void execute() throws ActionExecutionException {
70 try {
71 String order = "before";
72 if (StringUtils.isNotBlank(areaElement.getSortOrder())) {
73 order = areaElement.getSortOrder();
74 }
75
76 Session session = MgnlContext.getJCRSession(areaElement.getWorkspace());
77
78 Node parent = session.getNode(areaElement.getPath());
79 Node sourceComponent = session.getNode(areaElement.getSourceComponent().getPath());
80 Node targetComponent = session.getNode(areaElement.getTargetComponent().getPath());
81
82 if ("before".equals(order)) {
83 NodeUtil.orderBefore(sourceComponent, targetComponent.getName());
84 } else {
85 NodeUtil.orderAfter(sourceComponent, targetComponent.getName());
86 }
87
88 session.save();
89 eventBus.fireEvent(new ContentChangedEvent(areaElement.getPath()));
90 } catch (RepositoryException e) {
91 throw new ActionExecutionException(e);
92 }
93
94 }
95 }