package org.sakaiproject.emailtemplateservice.tool.producers;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
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 org.sakaiproject.emailtemplateservice.service.external.ExternalLogic;
import org.sakaiproject.emailtemplateservice.tool.params.EmailTemplateViewParams;
import uk.org.ponder.messageutil.TargettedMessage;
import uk.org.ponder.messageutil.TargettedMessageList;
import uk.org.ponder.rsf.components.UIBranchContainer;
import uk.org.ponder.rsf.components.UIContainer;
import uk.org.ponder.rsf.components.UIInternalLink;
import uk.org.ponder.rsf.components.UIOutput;
import uk.org.ponder.rsf.components.UIMessage;
import uk.org.ponder.rsf.view.ComponentChecker;
import uk.org.ponder.rsf.view.DefaultView;
import uk.org.ponder.rsf.view.ViewComponentProducer;
import uk.org.ponder.rsf.viewstate.ViewParameters;
public class MainViewProducer implements ViewComponentProducer, DefaultView {
public static final String VIEW_ID = "main";
public String getViewID() {
// TODO Auto-generated method stub
return VIEW_ID;
}
private static Log log = LogFactory.getLog(MainViewProducer.class);
private EmailTemplateService emailTemplateService;
public void setEmailTemplateService(EmailTemplateService ets) {
emailTemplateService = ets;
}
private ExternalLogic externalLogic;
public void setExternalLogic(ExternalLogic externalLogic) {
this.externalLogic = externalLogic;
}
private TargettedMessageList messages;
public void setMessages(TargettedMessageList messages) {
this.messages = messages;
}
public void fillComponents(UIContainer tofill, ViewParameters viewparams,
ComponentChecker checker) {
//is this user admin?
if (!externalLogic.isSuperUser()) {
messages.addMessage(new TargettedMessage("tool.notAdmin", new Object[]{}, TargettedMessage.SEVERITY_ERROR));
return;
}
UIBranchContainer navIntra = UIBranchContainer.make(tofill, "navintra:");
UIInternalLink.make(navIntra,"actions-add", UIMessage.make("mainview.new") , new EmailTemplateViewParams(ModifyEmailProducer.VIEW_ID, null));
UIBranchContainer table = UIBranchContainer.make(tofill, "table:");
List<EmailTemplate> templates = emailTemplateService.getEmailTemplates(0, 0);
Collections.sort(templates, new EmailTemplateComaparator());
for (int i =0; i < templates.size(); i++) {
EmailTemplate template = templates.get(i);
log.debug("got template: " + template.getKey());
UIBranchContainer row = UIBranchContainer.make(table, "template-row:", template.getId().toString());
UIOutput.make(row, "template-key", template.getKey());
String locale = template.getLocale();
if (locale == null )
locale = "";
UIOutput.make(row, "template-locale", locale);
UIInternalLink.make(row,"template-edit" , UIMessage.make("mainview.edit"), new EmailTemplateViewParams(ModifyEmailProducer.VIEW_ID, template.getId().toString()));
//UIInternalLink.make(row,"template-delete" , UIMessage.make("mainview.delete"), new EmailTemplateViewParams(ModifyEmailProducer.VIEW_ID, template.getId().toString()));
}
}
private class EmailTemplateComaparator implements Comparator<EmailTemplate> {
public int compare(EmailTemplate o1, EmailTemplate o2) {
if (o1 == null && o2 != null) {
return 1;
} else if (o1 != null && o2 == null) {
return -1;
}
String key1 = o1.getKey();
String key2 = o2.getKey();
String locale1 = o1.getLocale();
String locale2 = o2.getLocale();
int keyDiff = key1.compareTo(key2);
if (keyDiff != 0) {
return keyDiff;
}
//keys are equal compare the locale
return locale1.compareTo(locale2);
}
}
}