package org.sakaiproject.component.app.scheduler.events;
import org.sakaiproject.api.app.scheduler.events.TriggerEvent;
import org.sakaiproject.api.app.scheduler.events.TriggerEventManager;
import java.util.Collections;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* User: duffy
* Date: Aug 26, 2010
* Time: 4:04:54 PM
* To change this template use File | Settings | File Templates.
*/
public class TriggerEventManagerImpl implements TriggerEventManager
{
private LinkedList<TriggerEvent>
events = new LinkedList<TriggerEvent> ();
/* (non-Javadoc)
* @see org.sakaiproject.api.app.scheduler.events.TriggerEventManager#createTriggerEvent(org.sakaiproject.api.app.scheduler.events.TriggerEvent.TRIGGER_EVENT_TYPE, java.lang.String, java.lang.String, java.util.Date, java.lang.String)
*/
public TriggerEvent createTriggerEvent(TriggerEvent.TRIGGER_EVENT_TYPE type, String jobName, String triggerName, Date time, String message) {
return createTriggerEvent(type, jobName, triggerName, time, message, null);
}
/* (non-Javadoc)
* @see org.sakaiproject.api.app.scheduler.events.TriggerEventManager#createTriggerEvent(org.sakaiproject.api.app.scheduler.events.TriggerEvent.TRIGGER_EVENT_TYPE, java.lang.String, java.lang.String, java.util.Date, java.lang.String, java.lang.String)
*/
public TriggerEvent createTriggerEvent(TriggerEvent.TRIGGER_EVENT_TYPE type, String jobName, String triggerName, Date time, String message, String serverId)
{
TriggerEventImpl event = new TriggerEventImpl();
event.setEventType(type);
event.setJobName(jobName);
event.setTriggerName(triggerName);
event.setTime(time);
event.setMessage(message);
event.setServerId(serverId);
events.add(0, event);
return event;
}
public List<TriggerEvent> getTriggerEvents()
{
return Collections.unmodifiableList(events);
}
public List<TriggerEvent> getTriggerEvents(Date after, Date before, List<String> jobs, String triggerName,
TriggerEvent.TRIGGER_EVENT_TYPE[] types)
{
LinkedList<TriggerEvent>
results = new LinkedList<TriggerEvent> ();
for (TriggerEvent event : events)
{
if (after != null && event.getTime().compareTo(after) == -1)
continue;
if (before != null && event.getTime().compareTo(before) == 1)
continue;
if (jobs != null && !jobs.contains(event.getJobName()))
continue;
if (triggerName != null && !triggerName.equals(event.getTriggerName()))
continue;
if (types != null && types.length > 0)
{
boolean matches = false;
for (TriggerEvent.TRIGGER_EVENT_TYPE type : types)
{
if (type.equals(event.getEventType()))
{
matches = true;
break;
}
}
if (!matches)
continue;
}
results.add(event);
}
return Collections.unmodifiableList(results);
}
public int getTriggerEventsSize()
{
return events.size();
}
public int getTriggerEventsSize (Date after, Date before, List<String> jobs, String triggerName, TriggerEvent.TRIGGER_EVENT_TYPE[] types)
{
return getTriggerEvents(after, before, jobs, triggerName, types).size();
}
public List<TriggerEvent> getTriggerEvents (int first, int size)
{
return Collections.unmodifiableList(events.subList(first, first+size));
}
public List<TriggerEvent> getTriggerEvents (Date after, Date before, List<String> jobs, String triggerName, TriggerEvent.TRIGGER_EVENT_TYPE[] types, int first, int size)
{
return Collections.unmodifiableList(getTriggerEvents(after, before, jobs, triggerName, types).subList(first, first+size));
}
public void purgeEvents(Date before)
{
int i = 0;
for (; i < events.size(); i++)
{
TriggerEvent event = events.get(i);
if (before.compareTo(event.getTime()) == -1)
break;
}
int size = events.size();
int count = size - i;
for (int x = 0; x < count; x++)
{
events.remove(i);
}
}
}