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.setup;
35
36 import info.magnolia.cms.beans.config.ContentRepository;
37 import info.magnolia.cms.core.ItemType;
38 import info.magnolia.module.AbstractModuleVersionHandler;
39 import info.magnolia.module.InstallContext;
40 import info.magnolia.module.delta.AddMimeMappingTask;
41 import info.magnolia.module.delta.ArrayDelegateTask;
42 import info.magnolia.module.delta.BootstrapConditionally;
43 import info.magnolia.module.delta.BootstrapSingleResource;
44 import info.magnolia.module.delta.CheckAndModifyPropertyValueTask;
45 import info.magnolia.module.delta.Condition;
46 import info.magnolia.module.delta.CreateNodeTask;
47 import info.magnolia.module.delta.DeltaBuilder;
48 import info.magnolia.module.delta.FilterOrderingTask;
49 import info.magnolia.module.delta.MoveNodeTask;
50 import info.magnolia.module.delta.NewPropertyTask;
51 import info.magnolia.module.delta.NodeExistsDelegateTask;
52 import info.magnolia.module.delta.PropertyExistsDelegateTask;
53 import info.magnolia.module.delta.PropertyValueDelegateTask;
54 import info.magnolia.module.delta.Task;
55 import info.magnolia.module.delta.WarnTask;
56 import info.magnolia.module.delta.WebXmlConditionsUtil;
57 import info.magnolia.module.delta.WorkspaceXmlConditionsUtil;
58 import info.magnolia.setup.for3_5.GenericTasks;
59 import info.magnolia.setup.for3_6.CheckMagnoliaDevelopProperty;
60 import info.magnolia.setup.for3_6.CheckNodeTypesDefinition;
61 import info.magnolia.setup.for3_6.CheckNodesForMixVersionable;
62 import info.magnolia.setup.for3_6_2.UpdateGroups;
63 import info.magnolia.setup.for3_6_2.UpdateRoles;
64 import info.magnolia.setup.for3_6_2.UpdateUsers;
65 import info.magnolia.setup.for4_3.UpdateUserPermissions;
66
67 import java.util.ArrayList;
68 import java.util.List;
69
70
71
72
73
74
75
76
77
78
79
80 public class CoreModuleVersionHandler extends AbstractModuleVersionHandler {
81 public static final String BOOTSTRAP_AUTHOR_INSTANCE_PROPERTY = "magnolia.bootstrap.authorInstance";
82
83
84 private final BootstrapConditionally auditTrailManagerTask = new BootstrapConditionally("New auditory log configuration", "Install new configuration for auditory log manager.", "/mgnl-bootstrap/core/config.server.auditLogging.xml");
85 private final BootstrapSingleResource bootstrapFreemarker = new BootstrapSingleResource("Freemarker configuration", "Freemarker template loaders can now be configured in Magnolia. Adds default configuration", "/mgnl-bootstrap/core/config.server.rendering.freemarker.xml");
86 private final CreateNodeTask addFreemarkerSharedVariables = new CreateNodeTask("Freemarker configuration", "Adds sharedVariables node to the Freemarker configuration",
87 ContentRepository.CONFIG, "/server/rendering/freemarker", "sharedVariables", ItemType.CONTENTNODE.getSystemName());
88
89 public CoreModuleVersionHandler() {
90 super();
91
92 register(DeltaBuilder.update("3.5", "")
93 .addTasks(GenericTasks.genericTasksFor35())
94 );
95
96 register(DeltaBuilder.update("3.6", "")
97 .addCondition(new CheckNodeTypesDefinition())
98 .addTask(new CheckMagnoliaDevelopProperty())
99 .addTask(new CheckNodesForMixVersionable())
100 );
101
102 final CheckAndModifyPropertyValueTask log4jServletMapping = new CheckAndModifyPropertyValueTask("Mapping for log4j configuration servlet", "Fixes the mapping for the log4j configuration servlet, making it specification compliant.",
103 ContentRepository.CONFIG,
104 "/server/filters/servlets/log4j/mappings/--magnolia-log4j-",
105 "pattern", "/.magnolia/log4j*", "/.magnolia/log4j"
106 );
107
108 register(DeltaBuilder.update("3.6.2", "")
109 .addTask(new UpdateUsers())
110 .addTask(new UpdateRoles())
111 .addTask(new UpdateGroups())
112 .addTask(log4jServletMapping)
113 );
114
115 register(DeltaBuilder.update("3.6.4", "")
116 .addTask(new AddMimeMappingTask("flv", "video/x-flv", "/.resources/file-icons/flv.png"))
117 .addTask(new AddMimeMappingTask("svg", "image/svg+xml", "/.resources/file-icons/svg.png"))
118 .addTask(new CheckAndModifyPropertyValueTask("PNG MIME mapping", "Checks and updates PNG MIME mapping if not correct.", ContentRepository.CONFIG, "/server/MIMEMapping/png", "mime-type", "application/octet-stream", "image/png"))
119 .addTask(new CheckAndModifyPropertyValueTask("SWF MIME mapping", "Checks and updates SWF MIME mapping if not correct.", ContentRepository.CONFIG, "/server/MIMEMapping/swf", "mime-type", "application/octet-stream", "application/x-shockwave-flash"))
120 );
121
122 register(DeltaBuilder.update("3.6.7", "")
123
124
125
126 .addTask(fixMimetype("png", "image/png;", "image/png"))
127 .addTask(fixMimetype("swf", "application/x-shockwave-flash;", "application/x-shockwave-flash"))
128 );
129
130 final Task updateLinkResolverClass = new CheckAndModifyPropertyValueTask("Link rendering", "Updates the link rendering implementation class.", ContentRepository.CONFIG, "/server/rendering/linkResolver", "class", "info.magnolia.cms.link.LinkResolverImpl", "info.magnolia.link.LinkTransformerManager");
131 final Task renameLinkResolver = new MoveNodeTask("Link management configuration", "Updates the link management configuration.", ContentRepository.CONFIG, "/server/rendering/linkResolver", "/server/rendering/linkManagement", true);
132 register(DeltaBuilder.update("4.0", "")
133 .addTask(auditTrailManagerTask)
134 .addTask(bootstrapFreemarker)
135 .addTask(updateLinkResolverClass)
136 .addTask(renameLinkResolver)
137 .addTask(new ChangeNodeTypesInUserWorkspace())
138 );
139
140 register(DeltaBuilder.update("4.0.2", "")
141
142 .addTask(new UpdateUsers())
143 .addTask(new CheckAndModifyPropertyValueTask("Fix for anonymous user permissions", "Fix previously incorrect path for anonymous user permissions.", ContentRepository.USERS, "/system/anonymous/acl_users/0", "path", "/anonymous/*", "/system/anonymous/*"))
144
145
146
147
148 );
149
150 register(DeltaBuilder.update("4.0.3", "")
151
152
153
154
155 .addTask(fixMimetype("png", "image/png;", "image/png"))
156 .addTask(fixMimetype("swf", "application/x-shockwave-flash;", "application/x-shockwave-flash"))
157 );
158
159 register(DeltaBuilder.update("4.1.1", "")
160
161
162
163 .addTask(fixMimetype("png", "image/png;", "image/png"))
164 .addTask(fixMimetype("swf", "application/x-shockwave-flash;", "application/x-shockwave-flash"))
165 );
166
167 register(DeltaBuilder.update("4.3", "")
168 .addTask(addFreemarkerSharedVariables)
169 .addTask(
170 new ArrayDelegateTask("New unicode normalization filter", "Add the new unicode normalization filter.",
171 new BootstrapSingleResource("Unicode Normalization filter ", "Add new Unicode Normalization filter.", "/mgnl-bootstrap/core/config.server.filters.unicodeNormalization.xml"),
172 new FilterOrderingTask("multipartRequest", "New filter ordering : context, contentType, multipart, unicodeNormalization, login.", new String[]{"contentType"}),
173 new FilterOrderingTask("unicodeNormalization", "New filter ordering : context, contentType, multipart, unicodeNormalization, login.", new String[]{"multipartRequest"})
174 ))
175 .addTask(new UpdateUserPermissions())
176 );
177
178 register(DeltaBuilder.update("4.3.6", "")
179 .addTask(new NodeExistsDelegateTask("TemplateExceptionHandler", "Checks if templateExceptionHandler node exists", ContentRepository.CONFIG, "/server/rendering/freemarker/templateExceptionHandler", new WarnTask("TemplateExceptionHandler", "Unable to set node templateExceptionHandler because it already exists"), new CreateNodeTask("TemplateExceptionHandler", "Creates node templateExceptionHandler", ContentRepository.CONFIG, "/server/rendering/freemarker", "templateExceptionHandler", ItemType.CONTENTNODE.getSystemName())))
180 .addTask(new PropertyExistsDelegateTask("Class", "Checks if class property exists", ContentRepository.CONFIG, "/server/rendering/freemarker/templateExceptionHandler", "class", new WarnTask("class","Unable to set property class because it already exists"), new NewPropertyTask("Class", "Creates property class and sets it to class path", ContentRepository.CONFIG, "/server/rendering/freemarker/templateExceptionHandler", "class", "info.magnolia.freemarker.ModeDependentTemplateExceptionHandler"))));
181 }
182
183 private PropertyValueDelegateTask fixMimetype(String mimeType, final String previouslyWrongValue, final String fixedValue) {
184 final String workspaceName = ContentRepository.CONFIG;
185 final String nodePath = "/server/MIMEMapping/" + mimeType;
186 final CheckAndModifyPropertyValueTask fixTask = new CheckAndModifyPropertyValueTask(null, null, workspaceName, nodePath,
187 "mime-type", previouslyWrongValue, fixedValue);
188
189 return new PropertyValueDelegateTask(mimeType.toUpperCase() + " MIME mapping",
190 "Checks and updates " + mimeType.toUpperCase() + "MIME mapping if not correct.",
191 workspaceName, nodePath, "mime-type", previouslyWrongValue, false, fixTask);
192 }
193
194 protected List<Task> getBasicInstallTasks(InstallContext ctx) {
195 final List<Task> l = new ArrayList<Task>();
196 l.addAll(GenericTasks.genericTasksFor35());
197 l.add(new CheckMagnoliaDevelopProperty());
198 l.add(new CheckNodesForMixVersionable());
199 l.add(auditTrailManagerTask);
200 l.add(bootstrapFreemarker);
201 l.add(addFreemarkerSharedVariables);
202 return l;
203 }
204
205 protected List<Condition> getInstallConditions() {
206 final ArrayList<Condition> conditions = new ArrayList<Condition>();
207 final WebXmlConditionsUtil u = new WebXmlConditionsUtil(conditions);
208 u.servletIsNowWrapped("ActivationHandler");
209 u.servletIsNowWrapped("AdminTreeServlet");
210 u.servletIsNowWrapped("classpathspool");
211 u.servletIsNowWrapped("DialogServlet");
212 u.servletIsNowWrapped("PageServlet");
213 u.servletIsNowWrapped("log4j");
214 u.servletIsNowWrapped("FCKEditorSimpleUploadServlet");
215 u.servletIsDeprecated("uuidRequestDispatcher");
216 u.filterIsDeprecated("info.magnolia.cms.filters.MagnoliaManagedFilter", "info.magnolia.cms.filters.MgnlMainFilter");
217 u.filterMustBeRegisteredWithCorrectDispatchers("info.magnolia.cms.filters.MgnlMainFilter");
218 u.listenerIsDeprecated("info.magnolia.cms.servlets.PropertyInitializer", "info.magnolia.cms.servlets.MgnlServletContextListener");
219 u.listenerIsDeprecated("info.magnolia.cms.beans.config.ShutdownManager", "info.magnolia.cms.servlets.MgnlServletContextListener");
220 final WorkspaceXmlConditionsUtil u2 = new WorkspaceXmlConditionsUtil(conditions);
221 u2.workspaceHasOldIndexer();
222
223 conditions.add(new CheckNodeTypesDefinition());
224 return conditions;
225 }
226 }