package org.sakaiproject.tool.app.scheduler; import org.sakaiproject.api.app.scheduler.events.TriggerEvent; import org.sakaiproject.api.app.scheduler.events.TriggerEventManager; import javax.faces.event.PhaseId; import javax.faces.event.ValueChangeEvent; import java.text.DateFormat; import java.text.ParseException; import java.util.Date; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; /** * Created by IntelliJ IDEA. * User: duffy * Date: Aug 27, 2010 * Time: 12:07:34 PM * To change this template use File | Settings | File Templates. */ public class EventPager { private static String[] EVENT_TYPE_STRINGS = {"FIRED", "COMPLETE", "INFO", "DEBUG", "ERROR"}; private TriggerEventManager evtManager = null; private Date after = null, before = null; private List<String> jobs = new LinkedList<String>(); private String triggerName = null; private int first = 0, numRows = 100; private boolean filterEnabled = false; private HashMap<String, Boolean> selectedEventTypes = new HashMap<String, Boolean>(); public EventPager() { setAllEventTypes(true); } public Map<String, Boolean> getSelectedEventTypes() { return selectedEventTypes; } public List<String> getJobs() { return jobs; } public void setJobs(List<String> jobs) { this.jobs.clear(); this.jobs.addAll(jobs); } public String getTriggerName() { return triggerName; } public void setTriggerName(String triggerName) { this.triggerName = triggerName; } public void setFilterEnabled (boolean filter) { filterEnabled = filter; if (!filterEnabled) { after = null; before = null; jobs.clear(); triggerName = null; setAllEventTypes(true); } first = 0; } public boolean isFilterEnabled() { return filterEnabled; } public String[] getEventTypes() { return EVENT_TYPE_STRINGS; } public TriggerEvent.TRIGGER_EVENT_TYPE[] getTypes() { LinkedList<TriggerEvent.TRIGGER_EVENT_TYPE> evtList = new LinkedList<TriggerEvent.TRIGGER_EVENT_TYPE>(); for (String type : selectedEventTypes.keySet()) { Boolean selected = selectedEventTypes.get(type); if (selected != null && selected.booleanValue()) { if ("FIRED".equals(type)) evtList.add(TriggerEvent.TRIGGER_EVENT_TYPE.FIRED); else if ("COMPLETE".equals(type)) evtList.add(TriggerEvent.TRIGGER_EVENT_TYPE.COMPLETE); else if ("INFO".equals(type)) evtList.add(TriggerEvent.TRIGGER_EVENT_TYPE.INFO); else if ("ERROR".equals(type)) evtList.add(TriggerEvent.TRIGGER_EVENT_TYPE.ERROR); else if ("DEBUG".equals(type)) evtList.add(TriggerEvent.TRIGGER_EVENT_TYPE.DEBUG); } } TriggerEvent.TRIGGER_EVENT_TYPE[] typeArr = new TriggerEvent.TRIGGER_EVENT_TYPE[evtList.size()]; evtList.toArray(typeArr); return typeArr; } private void setAllEventTypes(boolean b) { selectedEventTypes.put("FIRED", new Boolean(b)); selectedEventTypes.put("COMPLETE", new Boolean(b)); selectedEventTypes.put("INFO", new Boolean(b)); selectedEventTypes.put("DEBUG", new Boolean(b)); selectedEventTypes.put("ERROR", new Boolean(b)); } public void setTypes(TriggerEvent.TRIGGER_EVENT_TYPE[] types) { setAllEventTypes(false); for (TriggerEvent.TRIGGER_EVENT_TYPE type : types) { switch (type) { case FIRED: selectedEventTypes.put("FIRED", Boolean.TRUE); break; case COMPLETE: selectedEventTypes.put("COMPLETE", Boolean.TRUE); break; case INFO: selectedEventTypes.put("INFO", Boolean.TRUE); break; case ERROR: selectedEventTypes.put("ERROR", Boolean.TRUE); break; case DEBUG: selectedEventTypes.put("DEBUG", Boolean.TRUE); break; } } } public Date getAfter() { return after; } public void setAfter(Date after) { this.after = after; } public Date getBefore() { return before; } public void setBefore(Date before) { this.before = before; } public void setTriggerEventManager(TriggerEventManager mgr) { evtManager = mgr; } public TriggerEventManager getTriggerEventManager() { return evtManager; } public int getTotalItems() { if (isFilterEnabled()) { return getTriggerEventManager().getTriggerEventsSize(after, before, jobs, triggerName, getTypes()); } else { return getTriggerEventManager().getTriggerEventsSize(); } } public int getFirstItem() { return first; } public void setFirstItem(int f) { first = f; } public int getPageSize() { return numRows; } public void setPageSize(int p) { numRows = p; } public void handleValueChange (ValueChangeEvent event) { PhaseId phaseId = event.getPhaseId(); String oldValue = (String) event.getOldValue(), newValue = (String) event.getNewValue(); if (phaseId.equals(PhaseId.ANY_PHASE)) { event.setPhaseId(PhaseId.UPDATE_MODEL_VALUES); event.queue(); } else if (phaseId.equals(PhaseId.UPDATE_MODEL_VALUES)) { // do you method here } } public List<TriggerEvent> getEvents() { if (isFilterEnabled()) { return getTriggerEventManager().getTriggerEvents(after, before, jobs, triggerName, getTypes(), first, numRows); } else { return getTriggerEventManager().getTriggerEvents(first, numRows); } } }