/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/courier/trunk/courier-util/util/src/java/org/sakaiproject/util/ObservingCourier.java $ * $Id: ObservingCourier.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 java.util.Observable; import java.util.Observer; import org.sakaiproject.courier.api.CourierService; import org.sakaiproject.tool.cover.SessionManager; /** * <p> * ObservingCourier is an observer which uses the courier service to notify when things change. * </p> */ public abstract class ObservingCourier implements org.sakaiproject.courier.api.ObservingCourier, Observer { /** Constructor discovered injected CourierService. */ protected CourierService m_courierService = null; /** The location (id not ref). */ protected String m_location = null; /** * Construct. * * @param location * The key identifying the client window to which this courier delivers updates. * @param elementId * The key identifying the element on the Portal Page that would need a courier delivered message when things change. */ public ObservingCourier(String location, String elementId) { m_deliveryId = SessionManager.getCurrentSession().getId() + location; m_elementId = elementId; m_location = location; // "inject" a CourierService m_courierService = org.sakaiproject.courier.cover.CourierService.getInstance(); } /** The key identifying the Portal PageSession. */ protected String m_deliveryId = ""; public String getDeliveryId() { return m_deliveryId; } public void setDeliveryId(String id) { m_deliveryId = id; } /** The key identifying the element on the Portal Page. */ protected String m_elementId = ""; public String getElementId() { return m_elementId; } public void setElementId(String id) { m_elementId = id; } /** The enabled state. */ protected boolean m_enabled = true; public boolean getEnabled() { return m_enabled; } public void enable() { m_enabled = true; } public void disable() { m_enabled = false; } /** * Accept notification that the portal element has just been delivered. If there are pending requests to deliver, they can be cleared. */ public void justDelivered() { m_courierService.clear(getDeliveryId(), getElementId()); } /** * 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) { return true; } /** * Access the location this observer is observing. * * @return the location this observer is observing. */ public String getLocation() { return m_location; } /********************************************************************************************************************************************************************************************************************************************************** * Observer implementation *********************************************************************************************************************************************************************************************************************************************************/ /** * This method is called whenever the observed object is changed. An application calls an <tt>Observable</tt> object's <code>notifyObservers</code> method to have all the object's observers notified of the change. default implementation is to * cause the courier service to deliver to the interface controlled by my controller. Extensions can override. * * @param o * the observable object. * @param arg * an argument passed to the <code>notifyObservers</code> method. */ public void update(Observable o, Object arg) { // ignore changes when not enabled if (!getEnabled()) { return; } if (!check(arg)) return; m_courierService.deliver(new DirectRefreshDelivery(getDeliveryId(), getElementId())); } }