/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/courier/trunk/courier-util/util/src/java/org/sakaiproject/util/EventObservingCourier.java $ * $Id: EventObservingCourier.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2003, 2004, 2005, 2006, 2008 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **********************************************************************************/ package org.sakaiproject.util; import org.sakaiproject.event.api.Event; import org.sakaiproject.event.api.EventTrackingService; import org.sakaiproject.tool.api.SessionBindingEvent; import org.sakaiproject.tool.api.SessionBindingListener; /** * <p> * EventObservingCourier is an ObservingCourier that watches Events, of a particular reference root. It automatically registers / un-registers as an observer with the event service. * </p> */ public class EventObservingCourier extends org.sakaiproject.util.ObservingCourier implements SessionBindingListener { /** Constructor discovered injected EventTrackingService. */ protected EventTrackingService m_eventTrackingService = null; /** * Construct. * * @param location * The key identifying the Portal Page Instance. * @param elementId * The key identifying the element on the Portal Page that would need a courier delivered message when things change. * @param The * event resource pattern - we watch for only events whose ref start with this. */ public EventObservingCourier(String location, String elementId, String resourcePattern) { super(location, elementId); m_resourcePattern = resourcePattern; // "inject" a eventTrackingService m_eventTrackingService = org.sakaiproject.event.cover.EventTrackingService.getInstance(); // register to listen to events m_eventTrackingService.addObserver(this); // %%% add the pattern to have it filtered there? } /** The event resource pattern - we watch for only events that start with this */ protected String m_resourcePattern = null; public String getResourcePattern() { return m_resourcePattern; } public void setResourcePattern(String pattern) { m_resourcePattern = pattern; } // %%% re-register? add the pattern to have it filtered there? /** * Check to see if we want to process or ignore this update. * * @param arg * The arg from the update. * @return true to continue, false to quit. */ public boolean check(Object arg) { // arg is Event if (!(arg instanceof Event)) return false; Event event = (Event) arg; // if this is just a read, not a modify event, we can ignore it if (!event.getModify()) return false; String key = null; // filter out events not for us if (m_resourcePattern != null) { key = event.getResource(); // if this resource is not in my pattern of resources, we can ignore it if (!key.startsWith(m_resourcePattern)) return false; } return true; } /********************************************************************************************************************************************************************************************************************************************************** * SessionBindingListener implementation *********************************************************************************************************************************************************************************************************************************************************/ public void valueBound(SessionBindingEvent event) { } public void valueUnbound(SessionBindingEvent event) { // stop observing the presence location m_eventTrackingService.deleteObserver(this); } }