You can subclass openutils' SimpleModuleVersionHandler in order to get a fully functional module version handler ready.
SimpleModuleVersionHandler will by default take care of (read carefully!):
In addition to this, you can override the getStartupTasks() method and, by using the standard tasks provided by magnolia itself or openutils-mgnltasks, perform all the sorts of initialization/configuration/checks you may need.
See the example below for an inspiration on how you could setup your content modules:
public class MymoduleModuleVersionHandler extends SimpleModuleVersionHandler
{
public List<Task> getStartupTasks(InstallContext installContext)
{
boolean admin = SystemProperty.getBooleanProperty("magnolia.bootstrap.authorInstance");
boolean develop = SystemProperty.getBooleanProperty("magnolia.develop");
List<Task> tasks = new ArrayList<Task>();
// allow access for public or development instances only
tasks.add(new AnonymousUserSetupTask(!admin || develop));
// configure the smtp from magnolia.properties
String smtp = SystemProperty.getProperty("mail.host");
if (StringUtils.isNotEmpty(smtp))
{
tasks.add(new SetPropertyTask("config", "/modules/mail/config/smtp", "smtpServer", smtp));
}
// sort dialogs and paragraphs by name, templates by title
tasks.add(new NodeSortTask("config", "/modules/mymodule/dialogs"));
tasks.add(new NodeSortTask("config", "/modules/mymodule/paragraphs"));
tasks.add(new NodeSortTask("config", "/modules/mymodule/templates", "title"));
// don't use COS
tasks.add(new SetPropertyTask(
"config",
"/server/filters/multipartRequest",
"class",
"info.magnolia.cms.filters.MultipartRequestFilter"));
// we want to be able to set a different default page in magnolia.properties
String defaultpage = !admin || develop
? "redirect:" + SystemProperty.getProperty("magnolia.defaultpage")
: "redirect:/.magnolia/pages/adminCentral.html";
tasks.add(new SetPropertyTask(
"config",
"/modules/adminInterface/virtualURIMapping/default",
"toURI",
defaultpage));
// adds a new admin user if missing
tasks.add(new CheckAndCreateUserTask("/admin/admin", "/mgnl-bootstrap/users/users.admin.admin.xml"));
// disable any subscriber during development
if (develop || !admin)
{
tasks.add(new DisableSubscribersTask());
}
return tasks;
}
}