All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sakaiproject.component.app.scheduler.events.TriggerEventManagerImpl Maven / Gradle / Ivy

package org.sakaiproject.component.app.scheduler.events;

import org.quartz.JobKey;
import org.quartz.TriggerKey;
import org.sakaiproject.api.app.scheduler.events.TriggerEvent;
import org.sakaiproject.api.app.scheduler.events.TriggerEvent.TRIGGER_EVENT_TYPE;
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
        events = new LinkedList ();
    
    @Override
    public TriggerEvent createTriggerEvent(TRIGGER_EVENT_TYPE type, JobKey jobKey, TriggerKey triggerKey, Date time, String message) {
        return createTriggerEvent(type, jobKey, triggerKey, time, message, null);
    }

    @Override
    public TriggerEvent createTriggerEvent(TRIGGER_EVENT_TYPE type, JobKey jobKey, TriggerKey triggerKey, Date time, String message, String serverId) {
        TriggerEventImpl event = new TriggerEventImpl();

        event.setEventType(type);
        event.setJobName(jobKey.getName());
        event.setTriggerName(triggerKey.getName());
        event.setTime(time);
        event.setMessage(message);
        event.setServerId(serverId);
        events.add(0, event);

        return event;
    }

    public List getTriggerEvents()
    {
        return Collections.unmodifiableList(events);
    }

    public List getTriggerEvents(Date after, Date before, List jobs, String triggerName,
                                               TriggerEvent.TRIGGER_EVENT_TYPE[] types)
    {
        LinkedList
            results = new LinkedList ();

        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 jobs, String triggerName, TriggerEvent.TRIGGER_EVENT_TYPE[] types)
    {
    	return getTriggerEvents(after, before, jobs, triggerName, types).size();
    }

    public List getTriggerEvents (int first, int size)
    {
    	return Collections.unmodifiableList(events.subList(first, first+size));
    }
    
    public List getTriggerEvents (Date after, Date before, List 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); 
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy