package de.flower.rmt.task;
import de.flower.rmt.model.db.entity.Club;
import de.flower.rmt.model.db.entity.User;
import de.flower.rmt.security.UserDetailsBean;
import de.flower.rmt.service.IClubManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.security.access.intercept.RunAsUserToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolderStrategy;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author flowerrrr
*/
@Component
public class TaskScheduler {
private final static Logger log = LoggerFactory.getLogger(TaskScheduler.class);
/**
* Run scheduled task every 12 hours.
*/
private final static long rate = 12 * 60 * 60 * 1000;
@Autowired
private SecurityContextHolderStrategy schs;
@Autowired
private IClubManager clubManager;
@Autowired
private ReminderTask reminderTask;
@Scheduled(fixedRate = rate)
public void sendReminderMails() throws InterruptedException {
// delay execution for some seconds so that wicket app startup is fully finished.
// this is not required but makes reading the log-files easier.
Thread.sleep(3000);
log.info("Running job [sendReminderMails]");
List<Club> clubs = clubManager.findAllClubs();
for (Club club : clubs) {
log.info("Checking reminders for [{}]", club);
// must set security context with current club, so that dao-calls get filtered by correct club
schs.getContext().setAuthentication(newAuthentication(club));
// NOTE (flowerrrr - 23.05.12) setup locale to use for message lookup (currently no-need, only have one language)
// LocaleContextHolder.setLocale(club.getLocale()).
reminderTask.sendNoResponseReminder();
reminderTask.sendUnsureReminder();
}
log.info("Finished job");
}
private Authentication newAuthentication(final Club club) {
User user = new User(club);
user.setEmail("systemUser");
user.setEncryptedPassword("");
Object principal = new UserDetailsBean(user);
return new RunAsUserToken("", principal, null, null, null);
}
}