Author: scabanovich
Date: 2008-08-18 08:08:22 -0400 (Mon, 18 Aug 2008)
New Revision: 9769
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/util/XModelTreeListenerSWTASync.java
Log:
Fixed problem caused by the previous commit:
Tree views would not update on adding/removing model objects.
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/util/XModelTreeListenerSWTASync.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/util/XModelTreeListenerSWTASync.java 2008-08-18
12:08:00 UTC (rev 9768)
+++
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/util/XModelTreeListenerSWTASync.java 2008-08-18
12:08:22 UTC (rev 9769)
@@ -16,12 +16,10 @@
import org.eclipse.swt.widgets.Display;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.event.*;
-import org.jboss.tools.common.model.ui.ModelUIPlugin;
public class XModelTreeListenerSWTASync implements XModelTreeListener {
private XModelTreeListener listener;
-
Queue<XModelTreeEvent> queue = new
ConcurrentLinkedQueue<XModelTreeEvent>();
private Set<XModelObject> nodes = new HashSet<XModelObject>();
@@ -30,12 +28,15 @@
private synchronized void add(XModelTreeEvent event) {
if(event.kind() == XModelTreeEvent.NODE_CHANGED) {
+ //If event has other kind than NODE_CHANGED, it should never be filtered out!
if(nodes.contains(event.getModelObject())) {
return;
}
- queue.add(event);
+ //Add to filter
+ nodes.add(event.getModelObject());
}
-
+ //Add event to queue.
+ queue.add(event);
}
private void run(XModelTreeEvent event) {
@@ -72,12 +73,16 @@
public void run() {
XModelTreeListener listener = getListener();
if (listener != null) {
- for (XModelTreeEvent event : queue) {
- if(event.kind() == XModelTreeEvent.NODE_CHANGED) {
- listener.nodeChanged(event);
- } else {
- listener.structureChanged(event);
+ try {
+ for (XModelTreeEvent event : queue) {
+ if (event.kind() == XModelTreeEvent.NODE_CHANGED) {
+ listener.nodeChanged(event);
+ } else {
+ listener.structureChanged(event);
+ }
}
+ } finally {
+ runnable = null;
}
}
}
Show replies by date