blob: 4874fc7e1a6638639c36c5cbd119cdf83352ec30 [file] [log] [blame]
/**
* Copyright (c) 2006 Ecliptical Software Inc. 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:
* Ecliptical Software Inc. - initial API and implementation
*/
package org.eclipse.ecf.example.pubsub;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.core.runtime.SafeRunner;
public class AppendableList implements Serializable {
private static final long serialVersionUID = -5447897626712251185L;
private transient ListenerList listeners;
protected final List values = new ArrayList();
public void addListener(IAppendableListListener listener) {
getListenerList().add(listener);
}
public void removeListener(IAppendableListListener listener) {
getListenerList().remove(listener);
}
protected void fireAppended(final Object value) {
Object[] l = getListenerList().getListeners();
for (int i = 0; i < l.length; ++i) {
final IAppendableListListener listener = (IAppendableListListener) l[i];
SafeRunner.run(new ISafeRunnable() {
public void run() throws Exception {
listener.appended(AppendableList.this, value);
}
public void handleException(Throwable exception) {
// TODO Auto-generated method stub
exception.printStackTrace();
}
});
}
}
protected synchronized ListenerList getListenerList() {
if (listeners == null)
listeners = new ListenerList();
return listeners;
}
public synchronized Object[] getValues() {
return values.toArray();
}
public synchronized boolean add(Object value) {
boolean result = values.add(value);
fireAppended(value);
return result;
}
public synchronized String toString() {
return values.toString();
}
}