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.i18nsystem.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 java.util.Arrays;
42 import java.util.Iterator;
43 import java.util.List;
44
45 import javax.jcr.Node;
46 import javax.jcr.RepositoryException;
47 import javax.jcr.Session;
48
49
50
51
52
53
54
55 public abstract class AbstractRemoveHardcodedI18nPropertiesTask extends AbstractRepositoryTask {
56
57 public static final List<String> DEPRECATED_I18N_PROPERTIES = Arrays.asList(new String[] { "label", "confirmationMessage", "errorMessage", "i18nBasename", "description" });
58 private String appName;
59 private List<String> additionalDeprecatedProperties;
60
61 public AbstractRemoveHardcodedI18nPropertiesTask(final String appName, final String description) {
62 this(appName, description, null);
63 }
64
65 public AbstractRemoveHardcodedI18nPropertiesTask(final String appName, final String description, List<String> additionalDeprecatedProperties) {
66 super("Remove hardcoded i18n properties", description);
67 this.appName = appName;
68 this.additionalDeprecatedProperties = additionalDeprecatedProperties;
69 }
70
71
72
73 @Override
74 public void doExecute(InstallContext installContext) throws RepositoryException, TaskExecutionException {
75 final Session session = installContext.getConfigJCRSession();
76 final Node module = session.getNode("/modules/" + appName);
77 removeProperty(module);
78 for (String path : getAppRelativePaths()) {
79 if (module.hasNode(path)){
80 Node node = module.getNode(path);
81 final Iterator<Node> iter = NodeUtil.collectAllChildren(node).iterator();
82 while (iter.hasNext()) {
83 removeProperty(iter.next());
84 }
85 }
86 }
87
88 session.save();
89 }
90
91 abstract protected String[] getAppRelativePaths();
92
93 private void removeProperty(final Node node) throws RepositoryException {
94 for (String propertyName : DEPRECATED_I18N_PROPERTIES) {
95 if (node.hasProperty(propertyName)) {
96 node.getProperty(propertyName).remove();
97 }
98 }
99 if(additionalDeprecatedProperties!=null){
100 for (String propertyName : additionalDeprecatedProperties) {
101 if (node.hasProperty(propertyName)) {
102 node.getProperty(propertyName).remove();
103 }
104 }
105 }
106 }
107 }