package org.sakaiproject.emailtemplateservice.tool.locators; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.emailtemplateservice.model.EmailTemplate; import org.sakaiproject.emailtemplateservice.service.EmailTemplateService; import uk.org.ponder.beanutil.WriteableBeanLocator; import uk.org.ponder.messageutil.TargettedMessage; import uk.org.ponder.messageutil.TargettedMessageList; public class EmailTemplateLocator implements WriteableBeanLocator { private static Log log = LogFactory.getLog(EmailTemplateLocator.class); public static final String NEW_PREFIX = "new "; public static final String NEW_1 = NEW_PREFIX + "1"; private Map delivered = new HashMap(); private EmailTemplateService emailTemplateService; public void setEmailTemplateService(EmailTemplateService ets) { emailTemplateService = ets; } private TargettedMessageList messages; public void setMessages(TargettedMessageList messages) { this.messages = messages; } public Object locateBean(String name) { Object togo=delivered.get(name); if (togo == null){ if(name.startsWith(NEW_PREFIX)){ togo = new EmailTemplate(); } else { log.info("looking for template: " + name); Long emailTemplateId = Long.valueOf(name); togo = emailTemplateService.getEmailTemplateById(emailTemplateId); } delivered.put(name, togo); } return togo; } public boolean remove(String beanname) { throw new UnsupportedOperationException("Not implemented"); } public void set(String beanname, Object toset) { throw new UnsupportedOperationException("Not implemented"); } public String saveAll() { log.debug("Saving all!"); for (Iterator<String> it = delivered.keySet().iterator(); it.hasNext();) { String key = it.next(); log.debug("got key: " + key); EmailTemplate emailTemplate = (EmailTemplate) delivered.get(key); if (key.startsWith(NEW_PREFIX)) { // add in extra logic needed for new items here if (emailTemplate.getLocale() == null) emailTemplate.setLocale(""); } //key can't be null if (emailTemplate.getKey() == null) { messages.addMessage(new TargettedMessage("error.nokey", new Object[]{}, TargettedMessage.SEVERITY_ERROR)); } if (emailTemplate.getSubject() == null) { messages.addMessage(new TargettedMessage("error.nosubject", new Object[]{}, TargettedMessage.SEVERITY_ERROR)); } if (emailTemplate.getMessage() == null) { messages.addMessage(new TargettedMessage("error.nomessage", new Object[]{}, TargettedMessage.SEVERITY_ERROR)); } if (messages.isError()) { return "failure"; } emailTemplateService.saveTemplate(emailTemplate); messages.addMessage( new TargettedMessage("template.saved.message", new Object[] { emailTemplate.getKey(), emailTemplate.getLocale() }, TargettedMessage.SEVERITY_INFO)); } return "success"; } }