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.module.delta;
35
36 import info.magnolia.cms.core.Content;
37 import info.magnolia.cms.filters.MgnlMainFilter;
38 import info.magnolia.module.InstallContext;
39
40 import javax.jcr.RepositoryException;
41 import java.util.ArrayList;
42 import java.util.Arrays;
43 import java.util.Collection;
44 import java.util.Iterator;
45 import java.util.List;
46
47
48
49
50
51
52
53 public class FilterOrderingTask extends AbstractRepositoryTask {
54 private final String filterToBeOrderedName;
55 private final List<String> requiredFilters;
56
57
58
59
60
61 public FilterOrderingTask(String filterName, String[] requiredFiltersBefore) {
62 this(filterName, "Sets the new " + filterName + " in the proper place.", requiredFiltersBefore);
63 }
64
65 public FilterOrderingTask(String filterName, String description, String[] requiredFiltersBefore) {
66 super("Setup " + filterName + " filter", description);
67 this.filterToBeOrderedName = filterName;
68 this.requiredFilters = new ArrayList<String>(Arrays.asList(requiredFiltersBefore));
69 }
70
71 protected void doExecute(InstallContext ctx) throws RepositoryException, TaskExecutionException {
72 final Content filtersParent = ctx.getConfigHierarchyManager().getContent(MgnlMainFilter.SERVER_FILTERS);
73
74
75 if (!filtersParent.hasContent(filterToBeOrderedName)) {
76 throw new TaskExecutionException("Filter with name " + filterToBeOrderedName + " can't be found.");
77 }
78
79
80 final Collection<Content> filters = filtersParent.getChildren();
81 final Iterator<Content> it = filters.iterator();
82 while (it.hasNext()) {
83 final Content filter = (Content) it.next();
84 final String filterName = filter.getName();
85
86
87 if (requiredFilters.size() == 0) {
88 filtersParent.orderBefore(filterToBeOrderedName, filterName);
89 return;
90 }
91
92
93 requiredFilters.remove(filterName);
94 }
95 ctx.warn("Could not sort filter "+filterToBeOrderedName+". It should be positioned after " + requiredFilters);
96 }
97 }