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.googlesitemap.setup.migration;
35
36 import info.magnolia.jcr.util.NodeUtil;
37 import info.magnolia.jcr.util.NodeVisitor;
38 import info.magnolia.module.InstallContext;
39 import info.magnolia.module.delta.AbstractRepositoryTask;
40 import info.magnolia.module.delta.TaskExecutionException;
41 import info.magnolia.repository.RepositoryConstants;
42
43 import java.util.Arrays;
44
45 import javax.jcr.Node;
46 import javax.jcr.Property;
47 import javax.jcr.PropertyIterator;
48 import javax.jcr.RepositoryException;
49 import javax.jcr.Session;
50
51 import org.slf4j.Logger;
52 import org.slf4j.LoggerFactory;
53
54
55
56
57
58 public class Removei18nKeysInSiteMapMigrationTask extends AbstractRepositoryTask {
59 private static final Logger log = LoggerFactory.getLogger(Removei18nKeysInSiteMapMigrationTask.class);
60
61 private String[] properties = { "label", "description", "i18nBasename", "buttonLabel" };
62
63 public Removei18nKeysInSiteMapMigrationTask(String name, String description) {
64 super(name, description);
65 }
66
67 @Override
68 protected void doExecute(InstallContext installContext) throws RepositoryException, TaskExecutionException {
69 try {
70 Session configSession = installContext.getJCRSession(RepositoryConstants.CONFIG);
71 Node rootNode = configSession.getNode("/modules/google-sitemap/dialogs");
72 NodeUtil.visit(rootNode, createI18NVisitor());
73
74 } catch (RepositoryException re) {
75 installContext.error("Unable to perform Migration task " + getName(), re);
76 throw new TaskExecutionException(re.getMessage());
77 }
78 }
79
80 private NodeVisitor createI18NVisitor() {
81 NodeVisitor visitor = new NodeVisitor() {
82
83 @Override
84 public void visit(Node node) throws RepositoryException {
85 if (hasI18NKeys(node)) {
86 handleNode(node);
87 }
88 }
89 };
90 return visitor;
91 }
92
93 private boolean hasI18NKeys(Node node) {
94 try {
95 return node.getProperties(this.properties).hasNext();
96 } catch (RepositoryException re) {
97 log.warn("Got exception by checking if '{}' has i18n properties", NodeUtil.getName(node), re);
98 return false;
99 }
100 }
101
102 private void handleNode(Node node) throws RepositoryException {
103 PropertyIterator propertyIterator = node.getProperties(this.properties);
104 while (propertyIterator.hasNext()) {
105 Property property = propertyIterator.nextProperty();
106 if (Arrays.asList(this.properties).contains(property.getName())) {
107 log.info("SiteMap i18n property removed: '{}' ", property.getPath());
108 property.remove();
109 }
110 }
111 }
112 }