package org.simantics.interop.issues; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.widgets.Display; public abstract class AbstractIssue implements Issue{ private String description; private List listeners = new ArrayList(); @Override public String getDescription() { return description; } public void setDescription(String description) { this.description = description; fireUpdated(); } protected void fireUpdated() { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { synchronized (listeners) { for (IssueListener l : listeners) { l.updated(AbstractIssue.this); } } } }); } protected void fireDisposed() { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { List list = new ArrayList(); list.addAll(listeners); for (IssueListener l : list) { l.disposed(AbstractIssue.this); } listeners.clear(); } }); } @Override public void addListener(IssueListener listener) { synchronized(listeners) { listeners.add(listener); } } @Override public void removeListener(IssueListener listener) { synchronized(listeners) { listeners.remove(listener); } } @Override public void dispose() { fireDisposed(); } }