| /******************************************************************************* |
| * Copyright (c) 2004, 2005 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jface.viewers.deferred; |
| |
| |
| /** |
| * Interface for a set of unordered elements that can fire change notifications. |
| * IConcurrentModel returns its contents asynchronous. Rather than implementing |
| * "get" methods, listeners can request an update and the model fires back |
| * information at its earliest convenience. |
| * |
| * <p> |
| * The model is allowed to send back notifications to its listeners in any thread, |
| * and the listeners must not assume that the notifications will arrive in the UI |
| * thread. |
| * </p> |
| * |
| * <p> |
| * Not intended to be implemented by clients. Clients should subclass |
| * <code>AbstractConcurrentModel</code> instead. |
| * </p> |
| * |
| * @since 3.1 |
| */ |
| public interface IConcurrentModel { |
| |
| /** |
| * Requests that the receiver to call the given listener's setContents(...) |
| * method at its earliest convenience. The receiver is allowed to compute the |
| * elements asynchronously. That is, it can compute the result in a background |
| * thread and call setContents(...) once the result is ready. If the result is |
| * too large to return in one batch, it can call setContents with an empty array |
| * followed by a sequence of adds. |
| * <p> |
| * Has no effect if an update is already queued for an identical listener. |
| * </p> |
| * |
| * @param listener listener whose setContents method should be called. The |
| * listener must have been previously registered with addListener. |
| */ |
| public void requestUpdate(IConcurrentModelListener listener); |
| |
| /** |
| * Adds a listener to this model. The listener should be given the model's |
| * current contents (either through setContents or a sequence of adds) at the |
| * receiver's earliest convenience. The receiver will notify the listener |
| * about any changes in state until the listener is removed. |
| * |
| * <p> |
| * Has no effect if an identical listener is already registered. |
| * </p> |
| * |
| * @param listener listener to add |
| */ |
| public void addListener(IConcurrentModelListener listener); |
| |
| /** |
| * Removes a listener from this model. The receiver will stop sending |
| * notifications to the given listener as soon as possible (although |
| * some additional notifications may still if arrive if the receiver |
| * was in the process of sending notifications in another thread). |
| * Any pending updates for this listener will be cancelled. |
| * <p> |
| * Has no effect if the given listener is not known to this model. |
| * </p> |
| * |
| * @param listener listener to remove |
| */ |
| public void removeListener(IConcurrentModelListener listener); |
| } |