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.setup;
35
36 import info.magnolia.jcr.util.NodeUtil;
37 import info.magnolia.module.InstallContext;
38 import info.magnolia.module.delta.AbstractRepositoryTask;
39 import info.magnolia.module.delta.TaskExecutionException;
40
41 import javax.jcr.Node;
42 import javax.jcr.RepositoryException;
43 import javax.jcr.Session;
44
45 import org.slf4j.Logger;
46 import org.slf4j.LoggerFactory;
47
48
49
50
51 public class AppLauncherReorderingTask extends AbstractRepositoryTask {
52
53 private static final Logger log = LoggerFactory.getLogger(AppLauncherReorderingTask.class);
54
55 private final String appName;
56 private final String groupName;
57 private final Order order;
58 private final String relativeAppName;
59
60 public AppLauncherReorderingTask(String appName, String groupName, Order order, String relativeAppName) {
61 super("Reorder applauncher", String.format("This task reorders the %s app in the %s group of the app-launcher.", appName, groupName));
62
63 this.appName = appName;
64 this.groupName = groupName;
65 this.order = order;
66 this.relativeAppName = relativeAppName;
67 }
68
69 @Override
70 protected void doExecute(InstallContext ctx) throws RepositoryException, TaskExecutionException {
71
72 Session session = ctx.getConfigJCRSession();
73
74 if (!session.nodeExists(String.format("/modules/ui-admincentral/config/appLauncherLayout/groups/%s/apps/%s", groupName, appName))) {
75 log.warn("Not reordering the {} app in the {} group because either the group or the app doesn't exist.", appName, groupName);
76 return;
77 }
78
79 Node apps = session.getNode(String.format("/modules/ui-admincentral/config/appLauncherLayout/groups/%s/apps", groupName));
80 Node app = apps.getNode(appName);
81
82 switch (order) {
83 case FIRST:
84 NodeUtil.orderFirst(app);
85 break;
86
87 case BEFORE:
88 if (apps.hasNode(relativeAppName)) {
89 NodeUtil.orderBefore(app, relativeAppName);
90 } else {
91 log.warn("Not reordering the {} app in the {} group because the relative app {} does not exist.", appName, groupName, relativeAppName);
92 }
93 break;
94
95 case AFTER:
96 if (apps.hasNode(relativeAppName)) {
97 NodeUtil.orderAfter(app, relativeAppName);
98 } else {
99 log.warn("Not reordering the {} app in the {} group because the relative app {} does not exist.", appName, groupName, relativeAppName);
100 }
101 break;
102
103 case LAST:
104 NodeUtil.orderLast(app);
105 break;
106
107 }
108 }
109
110
111
112
113 public static enum Order {
114 FIRST, BEFORE, AFTER, LAST
115 }
116
117 }