package org.springframework.samples.imagedb.scheduling;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobExecutionContext;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.samples.imagedb.ImageDatabase;
import org.springframework.samples.imagedb.ImageDescriptor;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.util.StringUtils;
/**
* Quartz Job implementation that lists all images in the image database.
* Writes the list to the log at INFO level and sends a corresponding email.
*
* <p>The email recipient is defined in "WEB-INF/mail.properties", to be
* passed to this Quartz Job via a bean property with a placeholder value.
*
* <p>NOTE: This is mainly an illustration for how to implement a
* Spring-managed Quartz Job. It is normally preferable to move
* business logic to manager classes, delegating to them via
* MethodInvokingJobDetailFactoryBean.
*
* @author Juergen Hoeller
* @since 23.02.2004
* @see ListImagesTimerTask
* @see org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
*/
public class ListImagesQuartzJob extends QuartzJobBean {
private final Log logger = LogFactory.getLog(getClass());
private ImageDatabase imageDatabase;
private MailSender mailSender;
private String mailFrom;
private String mailTo;
public void setImageDatabase(ImageDatabase imageDatabase) {
this.imageDatabase = imageDatabase;
}
public void setMailSender(MailSender mailSender) {
this.mailSender = mailSender;
}
public void setMailFrom(String mailFrom) {
this.mailFrom = mailFrom;
}
public void setMailTo(String mailTo) {
this.mailTo = mailTo;
}
protected void executeInternal(JobExecutionContext context) {
logger.info("Listing images in image database, scheduled by Quartz");
List images = this.imageDatabase.getImages();
String[] imageNames = new String[images.size()];
for (int i = 0; i < images.size(); i++) {
ImageDescriptor image = (ImageDescriptor) images.get(i);
imageNames[i] = image.getName();
}
String text = "Images in image database: " + StringUtils.arrayToDelimitedString(imageNames, ", ");
logger.info(text);
if (!"".equals(this.mailTo)) {
logger.info("Sending image list mail to: " + this.mailTo);
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(this.mailFrom);
message.setTo(this.mailTo);
message.setSubject("Image list");
message.setText(text);
this.mailSender.send(message);
}
else {
logger.info("Not sending image list mail - specify mail settings in 'WEB-INF/mail.properties'");
}
logger.info("Next job execution at: " + context.getNextFireTime());
}
}