blob: cf67853dab55fb0c5793ddf6074e07cfc66eabb5 [file] [log] [blame]
package org.taverna.server.master.worker;
import java.io.StringWriter;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.springframework.beans.factory.annotation.Required;
import org.taverna.server.master.common.version.Version;
import org.taverna.server.master.exceptions.NoListenerException;
import org.taverna.server.master.interfaces.Listener;
import org.taverna.server.master.interfaces.UriBuilderFactory;
public class VelocityCompletionNotifier implements CompletionNotifier {
private String subject;
private VelocityEngine engine;
private Template template;
private String name;
private String templateName;
private UriBuilderFactory ubf;
@Override
public String getName() {
return name;
}
/**
* @param subject
* The subject of the notification email.
*/
@Required
public void setSubject(String subject) {
this.subject = subject;
}
/**
* @param engine
* The configured Apache Velocity engine.
*/
@Required
public void setVelocityEngine(VelocityEngine engine) {
this.engine = engine;
}
/**
* @param uriBuilderFactory
* The configured URI builder factory.
*/
@Required
public void setUriBuilderFactory(UriBuilderFactory uriBuilderFactory) {
this.ubf = uriBuilderFactory;
}
/**
* @param name
* The name of the template.
*/
@Required
public void setName(String name) {
this.name = name;
this.templateName = getClass().getName() + "_" + name + ".vtmpl";
}
private Template getTemplate() {
if (template == null)
synchronized(this) {
if (template == null)
template = engine.getTemplate(templateName);
}
return template;
}
@Override
public String makeCompletionMessage(String name, RemoteRunDelegate run,
int code) {
VelocityContext ctxt = new VelocityContext();
ctxt.put("id", name);
ctxt.put("uriBuilder", ubf.getRunUriBuilder(run));
ctxt.put("name", run.getName());
ctxt.put("creationTime", run.getCreationTimestamp());
ctxt.put("startTime", run.getStartTimestamp());
ctxt.put("finishTime", run.getFinishTimestamp());
ctxt.put("expiryTime", run.getExpiry());
ctxt.put("serverVersion", Version.JAVA);
for (Listener l : run.getListeners())
if (l.getName().equals("io")) {
for (String p : l.listProperties())
try {
ctxt.put("prop_" + p, l.getProperty(p));
} catch (NoListenerException e) {
// Ignore...
}
break;
}
StringWriter sw = new StringWriter();
getTemplate().merge(ctxt, sw);
return sw.toString();
}
@Override
public String makeMessageSubject(String name, RemoteRunDelegate run,
int code) {
return subject;
}
}