svn commit: r15881 - trunk/src/argouml-app/src/org/argouml/cognitive: . ui
[email protected] 4 Oct 2008 13:06:21 -0000
Newsgroups
gmane.comp.lang.uml.argouml.cvs
Message-ID
<[email protected] >
Author: bobtarling
Date: 2008-10-04 06:06:21-0700
New Revision: 15881
Modified:
trunk/src/argouml-app/src/org/argouml/cognitive/ToDoList.java
trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByDecision.java
trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByGoal.java
trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByOffender.java
trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByPoster.java
trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByPriority.java
trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByType.java
trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPane.java
trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPerspective.java
Log:
Defect 5420: Reduce the processing of todo items within the AWT thread. Required for 0.26.1 branch also.
Modified: trunk/src/argouml-app/src/org/argouml/cognitive/ToDoList.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/cognitive/ToDoList.java?view=diff&rev=15881&p1=trunk/src/argouml-app/src/org/argouml/cognitive/ToDoList.java&p2=trunk/src/argouml-app/src/org/argouml/cognitive/ToDoList.java&r1=15880&r2=15881
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/cognitive/ToDoList.java (original)
+++ trunk/src/argouml-app/src/org/argouml/cognitive/ToDoList.java 2008-10-04 06:06:21-0700
@@ -765,6 +765,9 @@
* @param theItems the todo items
*/
protected void fireToDoItemsAdded(List<ToDoItem> theItems) {
+ if (theItems.isEmpty()) {
+ return;
+ }
// Guaranteed to return a non-null array
Object[] listeners = listenerList.getListenerList();
ToDoListEvent e = null;
@@ -794,6 +797,9 @@
* @param theItems the todo items
*/
protected void fireToDoItemsRemoved(List<ToDoItem> theItems) {
+ if (theItems.isEmpty()) {
+ return;
+ }
// Guaranteed to return a non-null array
Object[] listeners = listenerList.getListenerList();
ToDoListEvent e = null;
Modified: trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByDecision.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByDecision.java?view=diff&rev=15881&p1=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByDecision.java&p2=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByDecision.java&r1=15880&r2=15881
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByDecision.java (original)
+++ trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByDecision.java 2008-10-04 06:06:21-0700
@@ -87,7 +87,7 @@
children[nMatchingItems] = item;
nMatchingItems++;
}
- fireTreeNodesChanged(this, path, childIndices, children);
+ fireNodesChanged(path, childIndices, children);
}
}
@@ -124,7 +124,7 @@
children[nMatchingItems] = item;
nMatchingItems++;
}
- fireTreeNodesInserted(this, path, childIndices, children);
+ fireNodesInserted(path, childIndices, children);
}
}
@@ -151,7 +151,7 @@
}
path[1] = dec;
//fireTreeNodesChanged(this, path, childIndices, children);
- fireTreeStructureChanged(path);
+ fireStructureChanged(path);
}
}
Modified: trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByGoal.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByGoal.java?view=diff&rev=15881&p1=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByGoal.java&p2=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByGoal.java&r1=15880&r2=15881
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByGoal.java (original)
+++ trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByGoal.java 2008-10-04 06:06:21-0700
@@ -70,7 +70,9 @@
}
nMatchingItems++;
}
- if (nMatchingItems == 0) continue;
+ if (nMatchingItems == 0) {
+ continue;
+ }
int[] childIndices = new int[nMatchingItems];
Object[] children = new Object[nMatchingItems];
nMatchingItems = 0;
@@ -82,7 +84,7 @@
children[nMatchingItems] = item;
nMatchingItems++;
}
- fireTreeNodesChanged(this, path, childIndices, children);
+ fireNodesChanged(path, childIndices, children);
}
}
@@ -118,7 +120,7 @@
children[nMatchingItems] = item;
nMatchingItems++;
}
- fireTreeNodesInserted(this, path, childIndices, children);
+ fireNodesInserted(path, childIndices, children);
}
}
@@ -134,12 +136,16 @@
LOG.debug("toDoItemRemoved updating decision node!");
boolean anyInGoal = false;
for (ToDoItem item : tde.getToDoItemList()) {
- if (item.supports(g)) anyInGoal = true;
+ if (item.supports(g)) {
+ anyInGoal = true;
+ }
+ }
+ if (!anyInGoal) {
+ continue;
}
- if (!anyInGoal) continue;
path[1] = g;
//fireTreeNodesChanged(this, path, childIndices, children);
- fireTreeStructureChanged(path);
+ fireStructureChanged(path);
}
}
Modified: trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByOffender.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByOffender.java?view=diff&rev=15881&p1=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByOffender.java&p2=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByOffender.java&r1=15880&r2=15881
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByOffender.java (original)
+++ trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByOffender.java 2008-10-04 06:06:21-0700
@@ -96,7 +96,7 @@
nMatchingItems++;
}
}
- fireTreeNodesChanged(this, path, childIndices, children);
+ fireNodesChanged(path, childIndices, children);
}
}
}
@@ -145,7 +145,7 @@
nMatchingItems++;
}
}
- fireTreeNodesInserted(this, path, childIndices, children);
+ fireNodesInserted(path, childIndices, children);
}
}
}
@@ -181,7 +181,7 @@
LOG.debug("toDoItemRemoved updating PriorityNode");
path[1] = off;
// fireTreeNodesChanged(this, path, childIndices, children);
- fireTreeStructureChanged(path);
+ fireStructureChanged(path);
}
}
}
Modified: trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByPoster.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByPoster.java?view=diff&rev=15881&p1=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByPoster.java&p2=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByPoster.java&r1=15880&r2=15881
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByPoster.java (original)
+++ trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByPoster.java 2008-10-04 06:06:21-0700
@@ -92,7 +92,7 @@
children[nMatchingItems] = item;
nMatchingItems++;
}
- fireTreeNodesChanged(this, path, childIndices, children);
+ fireNodesChanged(path, childIndices, children);
}
}
}
@@ -134,7 +134,7 @@
children[nMatchingItems] = item;
nMatchingItems++;
}
- fireTreeNodesInserted(this, path, childIndices, children);
+ fireNodesInserted(path, childIndices, children);
}
}
}
@@ -165,7 +165,7 @@
continue;
}
path[1] = p;
- fireTreeStructureChanged(path);
+ fireStructureChanged(path);
}
}
}
Modified: trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByPriority.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByPriority.java?view=diff&rev=15881&p1=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByPriority.java&p2=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByPriority.java&r1=15880&r2=15881
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByPriority.java (original)
+++ trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByPriority.java 2008-10-04 06:06:21-0700
@@ -59,7 +59,7 @@
public void toDoItemsChanged(ToDoListEvent tde) {
LOG.debug("toDoItemChanged");
List<ToDoItem> items = tde.getToDoItemList();
- Object[] path = new Object[2];
+ final Object[] path = new Object[2];
path[0] = Designer.theDesigner().getToDoList();
for (PriorityNode pn : PriorityNode.getPriorityList()) {
@@ -76,8 +76,8 @@
if (nMatchingItems == 0) {
continue;
}
- int[] childIndices = new int[nMatchingItems];
- Object[] children = new Object[nMatchingItems];
+ final int[] childIndices = new int[nMatchingItems];
+ final Object[] children = new Object[nMatchingItems];
nMatchingItems = 0;
synchronized (items) {
for (ToDoItem item : items) {
@@ -89,7 +89,7 @@
nMatchingItems++;
}
}
- fireTreeNodesChanged(this, path, childIndices, children);
+ fireTreeNodesChanged(this, path, childIndices, children);
}
}
@@ -99,7 +99,7 @@
public void toDoItemsAdded(ToDoListEvent tde) {
LOG.debug("toDoItemAdded");
List<ToDoItem> items = tde.getToDoItemList();
- Object[] path = new Object[2];
+ final Object[] path = new Object[2];
path[0] = Designer.theDesigner().getToDoList();
for (PriorityNode pn : PriorityNode.getPriorityList()) {
@@ -116,8 +116,8 @@
if (nMatchingItems == 0) {
continue;
}
- int[] childIndices = new int[nMatchingItems];
- Object[] children = new Object[nMatchingItems];
+ final int[] childIndices = new int[nMatchingItems];
+ final Object[] children = new Object[nMatchingItems];
nMatchingItems = 0;
synchronized (items) {
for (ToDoItem item : items) {
@@ -129,7 +129,7 @@
nMatchingItems++;
}
}
- fireTreeNodesInserted(this, path, childIndices, children);
+ fireNodesInserted(path, childIndices, children);
}
}
@@ -139,7 +139,7 @@
public void toDoItemsRemoved(ToDoListEvent tde) {
LOG.debug("toDoItemRemoved");
List<ToDoItem> items = tde.getToDoItemList();
- Object[] path = new Object[2];
+ final Object[] path = new Object[2];
path[0] = Designer.theDesigner().getToDoList();
for (PriorityNode pn : PriorityNode.getPriorityList()) {
@@ -159,7 +159,7 @@
LOG.debug("toDoItemRemoved updating PriorityNode");
path[1] = pn;
//fireTreeNodesChanged(this, path, childIndices, children);
- fireTreeStructureChanged(path);
+ fireStructureChanged(path);
}
}
Modified: trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByType.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByType.java?view=diff&rev=15881&p1=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByType.java&p2=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByType.java&r1=15880&r2=15881
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByType.java (original)
+++ trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoByType.java 2008-10-04 06:06:21-0700
@@ -87,7 +87,7 @@
children[nMatchingItems] = item;
nMatchingItems++;
}
- fireTreeNodesChanged(this, path, childIndices, children);
+ fireNodesChanged(path, childIndices, children);
}
}
@@ -124,7 +124,7 @@
children[nMatchingItems] = item;
nMatchingItems++;
}
- fireTreeNodesInserted(this, path, childIndices, children);
+ fireNodesInserted(path, childIndices, children);
}
}
@@ -151,7 +151,7 @@
LOG.debug("toDoItemRemoved updating PriorityNode");
path[1] = ktn;
//fireTreeNodesChanged(this, path, childIndices, children);
- fireTreeStructureChanged(path);
+ fireStructureChanged(path);
}
}
Modified: trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPane.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPane.java?view=diff&rev=15881&p1=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPane.java&p2=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPane.java&r1=15880&r2=15881
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPane.java (original)
+++ trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPane.java 2008-10-04 06:06:21-0700
@@ -383,13 +383,13 @@
* @see org.argouml.cognitive.ToDoListListener#toDoItemsChanged(org.argouml.cognitive.ToDoListEvent)
*/
public void toDoItemsChanged(final ToDoListEvent tde) {
- swingInvoke(new Runnable() {
- public void run() {
+// swingInvoke(new Runnable() {
+// public void run() {
if (curPerspective instanceof ToDoListListener) {
((ToDoListListener) curPerspective).toDoItemsChanged(tde);
}
- }
- });
+// }
+// });
}
@@ -397,8 +397,8 @@
* @see org.argouml.cognitive.ToDoListListener#toDoItemsAdded(org.argouml.cognitive.ToDoListEvent)
*/
public void toDoItemsAdded(final ToDoListEvent tde) {
- swingInvoke(new Runnable() {
- public void run() {
+// swingInvoke(new Runnable() {
+// public void run() {
if (curPerspective instanceof ToDoListListener) {
((ToDoListListener) curPerspective).toDoItemsAdded(tde);
}
@@ -413,36 +413,37 @@
}
}
updateCountLabel();
- }
- });
+// }
+// });
}
/*
* @see org.argouml.cognitive.ToDoListListener#toDoItemsRemoved(org.argouml.cognitive.ToDoListEvent)
*/
public void toDoItemsRemoved(final ToDoListEvent tde) {
- swingInvoke(new Runnable() {
- public void run() {
+// swingInvoke(new Runnable() {
+// public void run() {
if (curPerspective instanceof ToDoListListener) {
+ LOG.warn("todo removed " + tde.getToDoItemList().size());
((ToDoListListener) curPerspective).toDoItemsRemoved(tde);
}
updateCountLabel();
- }
- });
+// }
+// });
}
/*
* @see org.argouml.cognitive.ToDoListListener#toDoListChanged(org.argouml.cognitive.ToDoListEvent)
*/
public void toDoListChanged(final ToDoListEvent tde) {
- swingInvoke(new Runnable() {
- public void run() {
+// swingInvoke(new Runnable() {
+// public void run() {
if (curPerspective instanceof ToDoListListener) {
((ToDoListListener) curPerspective).toDoListChanged(tde);
}
updateCountLabel();
- }
- });
+// }
+// });
}
/* TODO: Indicate the direction! */
Modified: trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPerspective.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPerspective.java?view=diff&rev=15881&p1=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPerspective.java&p2=trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPerspective.java&r1=15880&r2=15881
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPerspective.java (original)
+++ trunk/src/argouml-app/src/org/argouml/cognitive/ui/ToDoPerspective.java 2008-10-04 06:06:21-0700
@@ -27,6 +27,8 @@
import java.util.ArrayList;
import java.util.List;
+import javax.swing.SwingUtilities;
+
import org.apache.log4j.Logger;
import org.argouml.cognitive.ToDoItem;
import org.argouml.ui.TreeModelComposite;
@@ -161,5 +163,55 @@
addFlatChildren(getChild(node, i));
}
}
-
+
+ /**
+ * Invoke a task on the Swing thread. If we are running on the Swing thread,
+ * this happens immediately. Otherwise the task is queued for later
+ * execution using SwingUtilities.invokeLater.
+ * <p>
+ * This is necessary because event notification of ToDoListener events is
+ * likely to be coming from the ToDo Validity Checker thread running in the
+ * background.
+ *
+ * @param task a Runnable task who's run() method will be invoked
+ */
+ protected void swingInvoke(Runnable task) {
+ if (SwingUtilities.isEventDispatchThread()) {
+ task.run();
+ } else {
+ SwingUtilities.invokeLater(task);
+ }
+ }
+
+ protected void fireNodesInserted(
+ final Object[] path,
+ final int[] childIndices,
+ final Object[] children) {
+ swingInvoke(new Runnable() {
+ public void run() {
+ fireTreeNodesInserted(this, path, childIndices, children);
+ }
+ });
+ }
+
+ protected void fireStructureChanged(
+ final Object[] path) {
+ swingInvoke(new Runnable() {
+ public void run() {
+
+ fireTreeStructureChanged(path);
+ }
+ });
+ }
+
+ protected void fireNodesChanged(
+ final Object[] path,
+ final int[] childIndices,
+ final Object[] children) {
+ swingInvoke(new Runnable() {
+ public void run() {
+ fireTreeNodesChanged(this, path, childIndices, children);
+ }
+ });
+ }
}