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.mail.setup;
35
36 import info.magnolia.cms.beans.config.ContentRepository;
37 import info.magnolia.cms.core.ItemType;
38 import info.magnolia.module.DefaultModuleVersionHandler;
39 import info.magnolia.module.delta.Condition;
40 import info.magnolia.module.mail.commands.MailCommand;
41 import info.magnolia.module.delta.BootstrapConditionally;
42 import info.magnolia.module.delta.BootstrapSingleResource;
43 import info.magnolia.module.delta.CheckAndModifyPropertyValueTask;
44 import info.magnolia.module.delta.DeltaBuilder;
45 import info.magnolia.module.delta.PropertyValueDelegateTask;
46 import info.magnolia.module.delta.RegisterModuleServletsTask;
47 import info.magnolia.module.delta.RemoveNodeTask;
48 import info.magnolia.module.delta.WebXmlConditionsUtil;
49
50 import java.util.ArrayList;
51 import java.util.List;
52
53
54
55
56
57 public class MailModuleVersionHandler extends DefaultModuleVersionHandler {
58 static final String MAIL_COMMAND_CLASS_PRIOR_TO_4_0 = "info.magnolia.cms.mail.commands.MailCommand";
59 static final String COMMAND_IN_ADMININTERFACEMODULE_PATH = "/modules/adminInterface/commands/default/sendMail";
60
61 public MailModuleVersionHandler() {
62
63 register(DeltaBuilder.update("3.5", "")
64 .addTask(new RegisterModuleServletsTask())
65 .addConditions(mailServletIsWrappedSince_3_5())
66 );
67
68 final CheckAndModifyPropertyValueTask mailServletMapping = new CheckAndModifyPropertyValueTask("Mapping for mail servlet", "Fixes the mapping for the mail servlet, making it specification compliant.",
69 ContentRepository.CONFIG,
70 "/server/filters/servlets/Mail/mappings/--magnolia-mail-",
71 "pattern", "/.magnolia/mail*", "/.magnolia/mail"
72 );
73
74 register(DeltaBuilder.update("3.6.2", "")
75 .addTask(mailServletMapping)
76 );
77
78 final RemoveNodeTask removeMailServletMapping = new RemoveNodeTask("Remove mail servlet", "Removes the mail servlet.",
79 ContentRepository.CONFIG,
80 "/server/filters/servlets/Mail"
81 );
82
83 final RemoveNodeTask replaceConfigMenuMail = new RemoveNodeTask("Remove tools mail menu", "Removes the tools mail menu.",
84 ContentRepository.CONFIG,
85 "/modules/adminInterface/config/menu/tools/mails"
86 );
87
88 final MoveNodeContentTask moveTemplates = new MoveNodeContentTask("Rename templates", "Templates will be renamed to templatesConfiguration.",
89 ContentRepository.CONFIG,
90 "/modules/mail/config/templates",
91 "/modules/mail/config/templatesConfiguration",
92 ItemType.CONTENT,
93 false);
94
95 register(DeltaBuilder.update("4.0", "")
96 .addTask(removeMailServletMapping)
97 .addTask(replaceConfigMenuMail)
98 .addTask(moveTemplates)
99 .addTask(new BootstrapConditionally("Mail handlers", "Installs mail handlers.", "/mgnl-bootstrap/mail/config.modules.mail.config.handler.xml"))
100 .addTask(new BootstrapConditionally("Mail page", "Installs mail page.", "/mgnl-bootstrap/mail/config.modules.mail.pages.xml"))
101 .addTask(new BootstrapConditionally("Mail factory", "Installs mail factories.", "/mgnl-bootstrap/mail/config.modules.mail.config.factory.xml"))
102 .addTask(new BootstrapSingleResource("Mail menu", "Installs mail tools menu.", "/mgnl-bootstrap/mail/config.modules.adminInterface.config.menu.tools.sendMail.xml"))
103 .addTask(new CheckAndModifyPropertyValueTask("Mail command", "", ContentRepository.CONFIG, COMMAND_IN_ADMININTERFACEMODULE_PATH, "class", MAIL_COMMAND_CLASS_PRIOR_TO_4_0, MailCommand.class.getName()))
104 );
105
106 register(DeltaBuilder.update("4.0.3", "")
107
108
109 .addTask(fixMailCommand(MAIL_COMMAND_CLASS_PRIOR_TO_4_0, MailCommand.class.getName()))
110 );
111
112 register(DeltaBuilder.update("4.1.1", "")
113
114
115 .addTask(fixMailCommand(MAIL_COMMAND_CLASS_PRIOR_TO_4_0, MailCommand.class.getName()))
116 );
117 }
118
119 protected List<Condition> mailServletIsWrappedSince_3_5() {
120 final ArrayList<Condition> conditions = new ArrayList<Condition>();
121 final WebXmlConditionsUtil u = new WebXmlConditionsUtil(conditions);
122 u.servletIsNowWrapped("Mail");
123 return conditions;
124 }
125
126 private PropertyValueDelegateTask fixMailCommand(final String previouslyWrongValue, final String fixedValue) {
127 final String workspaceName = ContentRepository.CONFIG;
128 final CheckAndModifyPropertyValueTask fixTask = new CheckAndModifyPropertyValueTask(null, null, workspaceName, COMMAND_IN_ADMININTERFACEMODULE_PATH,
129 "class", previouslyWrongValue, fixedValue);
130
131 return new PropertyValueDelegateTask("Mail Command",
132 "Checks and updates the mail command if not correct.",
133 workspaceName, COMMAND_IN_ADMININTERFACEMODULE_PATH, "class", previouslyWrongValue, false, fixTask);
134 }
135 }