package org.sakaiproject.component.app.scheduler.events.hibernate;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.sakaiproject.scheduler.events.hibernate.TriggerEventHibernateImpl;
import org.sakaiproject.api.app.scheduler.events.TriggerEvent;
import org.sakaiproject.api.app.scheduler.events.TriggerEventManager;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import java.util.Date;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* User: duffy
* Date: Aug 26, 2010
* Time: 5:24:51 PM
* To change this template use File | Settings | File Templates.
*/
public class TriggerEventManagerHibernateImpl
extends HibernateDaoSupport
implements TriggerEventManager
{
public TriggerEvent createTriggerEvent(TriggerEvent.TRIGGER_EVENT_TYPE type, String jobName, String triggerName,
Date time, String message)
{
TriggerEventHibernateImpl
event = new TriggerEventHibernateImpl();
event.setEventType(type);
event.setJobName(jobName);
event.setTriggerName(triggerName);
event.setTime(time);
event.setMessage(message);
getHibernateTemplate().save(event);
return event;
}
public List<TriggerEvent> getTriggerEvents()
{
final Session
session = this.getSession();
final Criteria
criteria = session.createCriteria(TriggerEventHibernateImpl.class);
criteria.addOrder(Order.asc("time"));
return criteria.list();
}
public List<TriggerEvent> getTriggerEvents(Date after, Date before, List<String> jobs, String triggerName, TriggerEvent.TRIGGER_EVENT_TYPE[] types)
{
final Session
session = this.getSession();
final Criteria
criteria = session.createCriteria(TriggerEventHibernateImpl.class);
criteria.addOrder(Order.asc("time"));
if (after != null)
{
criteria.add(Restrictions.or(Restrictions.gt("time", after), Restrictions.eq("time", after)));
}
if (before != null)
{
criteria.add(Restrictions.or(Restrictions.lt("time", before), Restrictions.eq("time", before)));
}
if (jobs != null && !jobs.isEmpty())
{
criteria.add(Restrictions.in("jobName", jobs));
}
if (triggerName != null)
{
criteria.add(Restrictions.eq("triggerName", triggerName));
}
if (types != null)
{
criteria.add(Restrictions.in("eventType", types));
}
return criteria.list();
}
public void purgeEvents(Date before)
{
Query
q = getSession().getNamedQuery("purgeEventsBefore");
q.setTimestamp(0, before);
q.executeUpdate();
}
}