Index: impl/logic/src/java/org/sakaiproject/emailtemplateservice/service/impl/EmailTemplateServiceImpl.java =================================================================== --- impl/logic/src/java/org/sakaiproject/emailtemplateservice/service/impl/EmailTemplateServiceImpl.java (revision 78509) +++ impl/logic/src/java/org/sakaiproject/emailtemplateservice/service/impl/EmailTemplateServiceImpl.java (working copy) @@ -31,8 +31,12 @@ import java.util.Set; import java.util.Map.Entry; +import java.io.InputStream; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.math.NumberUtils; import org.sakaiproject.component.api.ServerConfigurationService; import org.sakaiproject.email.api.EmailService; import org.sakaiproject.emailtemplateservice.dao.impl.EmailTemplateServiceDao; @@ -50,7 +54,11 @@ import org.sakaiproject.user.api.PreferencesService; import org.sakaiproject.user.api.User; import org.sakaiproject.user.api.UserDirectoryService; +import org.sakaiproject.tool.api.SessionManager; +import org.sakaiproject.tool.api.Session; +import org.simpleframework.xml.core.Persister; + public class EmailTemplateServiceImpl implements EmailTemplateService { private static Log log = LogFactory.getLog(EmailTemplateServiceImpl.class); @@ -75,6 +83,10 @@ serverConfigurationService = scs; } + private SessionManager sessionManager; + public void setSessionManager(SessionManager sm) { + sessionManager = sm; + } public EmailTemplate getEmailTemplateById(Long id) { if (id == null) { @@ -363,5 +375,58 @@ } return userDirectoryService.getUsers(ids); } + public void processEmailTemplates(List templatePaths) { + final String ADMIN = "admin"; + + Persister persister = new Persister(); + for(String templatePath : templatePaths) { + InputStream in = getClass().getClassLoader().getResourceAsStream(templatePath); + + if(in == null) { + log.warn("Could not load resource from '" + templatePath + "'. Skipping ..."); + continue; + } + + EmailTemplate template = null; + try { + template = persister.read(EmailTemplate.class,in); + } + catch(Exception e) { + continue; + } + + //check if we have an existing template of this key and locale + EmailTemplate existingTemplate = getEmailTemplate(template.getKey(), new Locale(template.getLocale())); + if(existingTemplate == null) { + //no existing, save this one + Session sakaiSession = sessionManager.getCurrentSession(); + sakaiSession.setUserId(ADMIN); + sakaiSession.setUserEid(ADMIN); + saveTemplate(template); + sakaiSession.setUserId(null); + sakaiSession.setUserId(null); + log.info("Saved email template: " + template.getKey() + " with locale: " + template.getLocale()); + return; + } + + //check version, if local one newer than persisted, update it - SAK-17679 + int existingTemplateVersion = existingTemplate.getVersion() != null ? existingTemplate.getVersion().intValue() : 0; + if(template.getVersion() > existingTemplateVersion) { + existingTemplate.setSubject(template.getSubject()); + existingTemplate.setMessage(template.getMessage()); + existingTemplate.setHtmlMessage(template.getHtmlMessage()); + existingTemplate.setVersion(template.getVersion()); + existingTemplate.setOwner(template.getOwner()); + + Session sakaiSession = sessionManager.getCurrentSession(); + sakaiSession.setUserId(ADMIN); + sakaiSession.setUserEid(ADMIN); + updateTemplate(existingTemplate); + sakaiSession.setUserId(null); + sakaiSession.setUserId(null); + log.info("Updated email template: " + template.getKey() + " with locale: " + template.getLocale()); + } + } + } } Index: impl/logic/pom.xml =================================================================== --- impl/logic/pom.xml (revision 78509) +++ impl/logic/pom.xml (working copy) @@ -104,6 +104,19 @@ freemarker 2.3.11 + + + commons-lang + commons-lang + 2.4 + provided + + + org.simpleframework + simple-xml + 2.3.5 + + @@ -144,4 +157,4 @@ - \ No newline at end of file + Index: api/src/java/org/sakaiproject/emailtemplateservice/model/EmailTemplate.java =================================================================== --- api/src/java/org/sakaiproject/emailtemplateservice/model/EmailTemplate.java (revision 78509) +++ api/src/java/org/sakaiproject/emailtemplateservice/model/EmailTemplate.java (working copy) @@ -23,10 +23,14 @@ import java.util.Date; +import org.simpleframework.xml.Root; +import org.simpleframework.xml.Element; + /** * EmailTemplate is an email template, though it could actually be used for anything, * identified by a unique key and set to be locale specific if desired */ +@Root public class EmailTemplate implements java.io.Serializable { // Fields @@ -35,18 +39,25 @@ private Date lastModified; + @Element private String key; + @Element private String locale; + @Element private String owner; + @Element private String subject; + @Element private String message; + @Element private String htmlMessage; + @Element private Integer version; Index: api/src/java/org/sakaiproject/emailtemplateservice/service/EmailTemplateService.java =================================================================== --- api/src/java/org/sakaiproject/emailtemplateservice/service/EmailTemplateService.java (revision 78509) +++ api/src/java/org/sakaiproject/emailtemplateservice/service/EmailTemplateService.java (working copy) @@ -148,6 +148,12 @@ * @param replacementValues */ public void sendRenderedMessages(String key, List userReferences, Map replacementValues, String from, String fromName); + + /** + * Takes the list of paths supplied and looks up the XML files using the services classloader. Each file is parsed + * into an EmailTemplate and saved. + * @param templatePaths A List of template path Strings + */ + public void processEmailTemplates(List templatePaths); - -} \ No newline at end of file +} Index: api/pom.xml =================================================================== --- api/pom.xml (revision 78509) +++ api/pom.xml (working copy) @@ -22,6 +22,14 @@ shared + + + org.simpleframework + simple-xml + 2.3.5 + + + @@ -33,4 +41,4 @@ - \ No newline at end of file + Index: pack/src/webapp/WEB-INF/components.xml =================================================================== --- pack/src/webapp/WEB-INF/components.xml (revision 78509) +++ pack/src/webapp/WEB-INF/components.xml (working copy) @@ -23,6 +23,7 @@ ref="org.sakaiproject.component.api.ServerConfigurationService" /> +