package org.theospi.portfolio.admin.service;
import org.quartz.*;
import org.sakaiproject.api.app.scheduler.SchedulerManager;
import org.sakaiproject.component.cover.ComponentManager;
import org.sakaiproject.tool.api.Session;
import org.sakaiproject.tool.cover.SessionManager;
import org.theospi.portfolio.admin.intf.SakaiIntegrationPlugin;
import org.theospi.portfolio.admin.model.IntegrationOption;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
/**
* Created by IntelliJ IDEA.
* User: John Ellis
* Date: Mar 2, 2006
* Time: 10:52:35 PM
* To change this template use File | Settings | File Templates.
*/
public class PluginOptionJob implements Job {
public final static String PLUGIN = "org.theospi.portfolio.admin.service.PluginOptionJob.job";
public final static String INTERVAL = "org.theospi.portfolio.admin.service.PluginOptionJob.interval";
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
Session sakaiSession = SessionManager.getCurrentSession();
String userId = sakaiSession.getUserId();
try {
sakaiSession.setUserId("admin");
sakaiSession.setUserEid("admin");
Map details = jobExecutionContext.getJobDetail().getJobDataMap();
SchedulerManager manager = (SchedulerManager) ComponentManager.get(SchedulerManager.class);
String pluginId = (String) details.get(PLUGIN);
SakaiIntegrationPlugin plugin = (SakaiIntegrationPlugin) ComponentManager.get(pluginId);
long millis = Long.parseLong((String) details.get(INTERVAL));
boolean done = true;
for (Iterator i=plugin.getPotentialIntegrations().iterator();i.hasNext();) {
if (!plugin.executeOption((IntegrationOption) i.next())) {
done = false;
break;
}
}
if (!done) {
try {
schedule(manager, pluginId, millis);
} catch (SchedulerException e) {
throw new JobExecutionException(e);
}
}
} finally {
sakaiSession.setUserEid(userId);
sakaiSession.setUserId(userId);
}
}
public static void schedule(SchedulerManager manager, String pluginId, long millis) throws SchedulerException {
JobDetail detail = new JobDetail(truncateTriggerName(pluginId + "." + System.currentTimeMillis()),
truncateTriggerName(PluginOptionJob.class.toString()), PluginOptionJob.class);
detail.getJobDataMap().put(PLUGIN, pluginId);
detail.getJobDataMap().put(INTERVAL, millis + "");
manager.getScheduler().scheduleJob(detail, new SimpleTrigger(
truncateTriggerName(pluginId + ".trigger." + System.currentTimeMillis()),
PluginOptionJob.class.toString(), new Date(System.currentTimeMillis() + millis)));
}
protected static String truncateTriggerName(String s) {
if (s.length() > 80) {
return s.substring(s.length() - 80);
}
return s;
}
}