Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Vosburgh2013-05-13 21:47:39 +0000
committerBrian Vosburgh2013-05-16 20:09:49 +0000
commitb35ae3636034300cbb22cf663e0050ebedf11b63 (patch)
treee6cb50e97d4711bf194d07634c5a9636484929d4 /common/plugins/org.eclipse.jpt.common.ui
parent0e80b193eca03a5a2342382c729b50967a18cb35 (diff)
downloadwebtools.dali-b35ae3636034300cbb22cf663e0050ebedf11b63.tar.gz
webtools.dali-b35ae3636034300cbb22cf663e0050ebedf11b63.tar.xz
webtools.dali-b35ae3636034300cbb22cf663e0050ebedf11b63.zip
[398218] fix problems with asynchronous events on UI thread; leavev201305171828
Structure page tree icons to be disposed by the Structure view; copy only a *specified* join table when converting orm.xml mappings; prevent "updates" from executing while modifying orm.xml from Structure view; add Structure view listener to workbench window's JPA selection model to "activate" it when there is no Details view
Diffstat (limited to 'common/plugins/org.eclipse.jpt.common.ui')
-rw-r--r--common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/jface/AbstractItemExtendedLabelProvider.java8
-rw-r--r--common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTCollectionChangeListenerWrapper.java101
-rw-r--r--common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTListChangeListenerWrapper.java149
-rw-r--r--common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTPropertyChangeListenerWrapper.java9
-rw-r--r--common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTStateChangeListenerWrapper.java9
5 files changed, 99 insertions, 177 deletions
diff --git a/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/jface/AbstractItemExtendedLabelProvider.java b/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/jface/AbstractItemExtendedLabelProvider.java
index 42b0c33e77..33fc5720cc 100644
--- a/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/jface/AbstractItemExtendedLabelProvider.java
+++ b/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/jface/AbstractItemExtendedLabelProvider.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008, 2012 Oracle. All rights reserved.
+ * Copyright (c) 2008, 2013 Oracle. 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.
@@ -120,10 +120,8 @@ public abstract class AbstractItemExtendedLabelProvider<I>
protected void disposeImageDescriptorModel() {
if (this.imageDescriptorModel != null) {
- ImageDescriptor descriptor = this.imageDescriptorModel.getValue();
- if (descriptor != null) {
- this.manager.getResourceManager().destroyImage(descriptor);
- }
+ // for now, leave the image in the resource manager cache
+ // to be disposed when the view is disposed
this.disengageImageDescriptorModel();
this.imageDescriptorModel = null;
}
diff --git a/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTCollectionChangeListenerWrapper.java b/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTCollectionChangeListenerWrapper.java
index 3f5ce0e5e1..c0589d1611 100644
--- a/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTCollectionChangeListenerWrapper.java
+++ b/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTCollectionChangeListenerWrapper.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2012 Oracle. All rights reserved.
+ * Copyright (c) 2007, 2013 Oracle. 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.
@@ -9,11 +9,14 @@
******************************************************************************/
package org.eclipse.jpt.common.ui.internal.listeners;
+import org.eclipse.jpt.common.ui.internal.plugin.JptCommonUiPlugin;
import org.eclipse.jpt.common.ui.internal.swt.widgets.DisplayTools;
import org.eclipse.jpt.common.utility.internal.RunnableAdapter;
+import org.eclipse.jpt.common.utility.internal.collection.SynchronizedQueue;
import org.eclipse.jpt.common.utility.model.event.CollectionAddEvent;
import org.eclipse.jpt.common.utility.model.event.CollectionChangeEvent;
import org.eclipse.jpt.common.utility.model.event.CollectionClearEvent;
+import org.eclipse.jpt.common.utility.model.event.CollectionEvent;
import org.eclipse.jpt.common.utility.model.event.CollectionRemoveEvent;
import org.eclipse.jpt.common.utility.model.listener.CollectionChangeListener;
@@ -27,6 +30,8 @@ public class SWTCollectionChangeListenerWrapper
implements CollectionChangeListener
{
private final CollectionChangeListener listener;
+ private final SynchronizedQueue<CollectionEvent> events = new SynchronizedQueue<CollectionEvent>();
+
public SWTCollectionChangeListenerWrapper(CollectionChangeListener listener) {
super();
@@ -37,93 +42,59 @@ public class SWTCollectionChangeListenerWrapper
}
public void itemsAdded(CollectionAddEvent event) {
- this.execute(new ItemsAddedRunnable(event));
+ this.events.enqueue(event);
+ this.execute(new ForwardEventsRunnable());
}
- /* CU private */ class ItemsAddedRunnable
- extends RunnableAdapter
- {
- private final CollectionAddEvent event;
- ItemsAddedRunnable(CollectionAddEvent event) {
- super();
- this.event = event;
- }
- @Override
- public void run() {
- SWTCollectionChangeListenerWrapper.this.itemsAdded_(this.event);
- }
+ public void itemsRemoved(CollectionRemoveEvent event) {
+ this.events.enqueue(event);
+ this.execute(new ForwardEventsRunnable());
}
- void itemsAdded_(CollectionAddEvent event) {
- this.listener.itemsAdded(event);
+ public void collectionCleared(CollectionClearEvent event) {
+ this.events.enqueue(event);
+ this.execute(new ForwardEventsRunnable());
}
- public void itemsRemoved(CollectionRemoveEvent event) {
- this.execute(new ItemsRemovedRunnable(event));
+ public void collectionChanged(CollectionChangeEvent event) {
+ this.events.enqueue(event);
+ this.execute(new ForwardEventsRunnable());
}
- /* CU private */ class ItemsRemovedRunnable
+ /* CU private */ class ForwardEventsRunnable
extends RunnableAdapter
{
- private final CollectionRemoveEvent event;
- ItemsRemovedRunnable(CollectionRemoveEvent event) {
- super();
- this.event = event;
- }
@Override
public void run() {
- SWTCollectionChangeListenerWrapper.this.itemsRemoved_(this.event);
+ SWTCollectionChangeListenerWrapper.this.forwardEvents();
}
}
- void itemsRemoved_(CollectionRemoveEvent event) {
- this.listener.itemsRemoved(event);
- }
-
- public void collectionCleared(CollectionClearEvent event) {
- this.execute(new CollectionClearedRunnable(event));
+ void forwardEvents() {
+ for (CollectionEvent event : this.events.drain()) {
+ try {
+ this.forwardEvent(event);
+ } catch (RuntimeException ex) {
+ JptCommonUiPlugin.instance().logError(ex);
+ }
+ }
}
- /* CU private */ class CollectionClearedRunnable
- extends RunnableAdapter
- {
- private final CollectionClearEvent event;
- CollectionClearedRunnable(CollectionClearEvent event) {
- super();
- this.event = event;
+ private void forwardEvent(CollectionEvent event) {
+ if (event instanceof CollectionAddEvent) {
+ this.listener.itemsAdded((CollectionAddEvent) event);
}
- @Override
- public void run() {
- SWTCollectionChangeListenerWrapper.this.collectionCleared_(this.event);
+ else if (event instanceof CollectionRemoveEvent) {
+ this.listener.itemsRemoved((CollectionRemoveEvent) event);
}
- }
-
- void collectionCleared_(CollectionClearEvent event) {
- this.listener.collectionCleared(event);
- }
-
- public void collectionChanged(CollectionChangeEvent event) {
- this.execute(new CollectionChangedRunnable(event));
- }
-
- /* CU private */ class CollectionChangedRunnable
- extends RunnableAdapter
- {
- private final CollectionChangeEvent event;
- CollectionChangedRunnable(CollectionChangeEvent event) {
- super();
- this.event = event;
+ else if (event instanceof CollectionClearEvent) {
+ this.listener.collectionCleared((CollectionClearEvent) event);
}
- @Override
- public void run() {
- SWTCollectionChangeListenerWrapper.this.collectionChanged_(this.event);
+ else if (event instanceof CollectionChangeEvent) {
+ this.listener.collectionChanged((CollectionChangeEvent) event);
}
}
- void collectionChanged_(CollectionChangeEvent event) {
- this.listener.collectionChanged(event);
- }
-
/**
* {@link DisplayTools#execute(Runnable)} seems to work OK;
* but using {@link DisplayTools#syncExec(Runnable)} can somtimes make things
diff --git a/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTListChangeListenerWrapper.java b/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTListChangeListenerWrapper.java
index 5135ee83cb..16f9ee6694 100644
--- a/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTListChangeListenerWrapper.java
+++ b/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTListChangeListenerWrapper.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2012 Oracle. All rights reserved.
+ * Copyright (c) 2007, 2013 Oracle. 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.
@@ -9,11 +9,14 @@
******************************************************************************/
package org.eclipse.jpt.common.ui.internal.listeners;
+import org.eclipse.jpt.common.ui.internal.plugin.JptCommonUiPlugin;
import org.eclipse.jpt.common.ui.internal.swt.widgets.DisplayTools;
import org.eclipse.jpt.common.utility.internal.RunnableAdapter;
+import org.eclipse.jpt.common.utility.internal.collection.SynchronizedQueue;
import org.eclipse.jpt.common.utility.model.event.ListAddEvent;
import org.eclipse.jpt.common.utility.model.event.ListChangeEvent;
import org.eclipse.jpt.common.utility.model.event.ListClearEvent;
+import org.eclipse.jpt.common.utility.model.event.ListEvent;
import org.eclipse.jpt.common.utility.model.event.ListMoveEvent;
import org.eclipse.jpt.common.utility.model.event.ListRemoveEvent;
import org.eclipse.jpt.common.utility.model.event.ListReplaceEvent;
@@ -29,6 +32,8 @@ public class SWTListChangeListenerWrapper
implements ListChangeListener
{
private final ListChangeListener listener;
+ private final SynchronizedQueue<ListEvent> events = new SynchronizedQueue<ListEvent>();
+
public SWTListChangeListenerWrapper(ListChangeListener listener) {
super();
@@ -39,135 +44,73 @@ public class SWTListChangeListenerWrapper
}
public void itemsAdded(ListAddEvent event) {
- this.execute(new ItemsAddedRunnable(event));
- }
-
- /* CU private */ class ItemsAddedRunnable
- extends RunnableAdapter
- {
- private final ListAddEvent event;
- ItemsAddedRunnable(ListAddEvent event) {
- super();
- this.event = event;
- }
- @Override
- public void run() {
- SWTListChangeListenerWrapper.this.itemsAdded_(this.event);
- }
- }
-
- void itemsAdded_(ListAddEvent event) {
- this.listener.itemsAdded(event);
+ this.events.enqueue(event);
+ this.execute(new ForwardEventsRunnable());
}
public void itemsRemoved(ListRemoveEvent event) {
- this.execute(new ItemsRemovedRunnable(event));
- }
-
- /* CU private */ class ItemsRemovedRunnable
- extends RunnableAdapter
- {
- private final ListRemoveEvent event;
- ItemsRemovedRunnable(ListRemoveEvent event) {
- super();
- this.event = event;
- }
- @Override
- public void run() {
- SWTListChangeListenerWrapper.this.itemsRemoved_(this.event);
- }
- }
-
- void itemsRemoved_(ListRemoveEvent event) {
- this.listener.itemsRemoved(event);
+ this.events.enqueue(event);
+ this.execute(new ForwardEventsRunnable());
}
public void itemsMoved(ListMoveEvent event) {
- this.execute(new ItemsMovedRunnable(event));
- }
-
- /* CU private */ class ItemsMovedRunnable
- extends RunnableAdapter
- {
- private final ListMoveEvent event;
- ItemsMovedRunnable(ListMoveEvent event) {
- super();
- this.event = event;
- }
- @Override
- public void run() {
- SWTListChangeListenerWrapper.this.itemsMoved_(this.event);
- }
- }
-
- void itemsMoved_(ListMoveEvent event) {
- this.listener.itemsMoved(event);
+ this.events.enqueue(event);
+ this.execute(new ForwardEventsRunnable());
}
public void itemsReplaced(ListReplaceEvent event) {
- this.execute(new ItemsReplacedRunnable(event));
- }
-
- /* CU private */ class ItemsReplacedRunnable
- extends RunnableAdapter
- {
- private final ListReplaceEvent event;
- ItemsReplacedRunnable(ListReplaceEvent event) {
- super();
- this.event = event;
- }
- @Override
- public void run() {
- SWTListChangeListenerWrapper.this.itemsReplaced_(this.event);
- }
+ this.events.enqueue(event);
+ this.execute(new ForwardEventsRunnable());
}
public void listCleared(ListClearEvent event) {
- this.execute(new ListClearedRunnable(event));
+ this.events.enqueue(event);
+ this.execute(new ForwardEventsRunnable());
}
- void itemsReplaced_(ListReplaceEvent event) {
- this.listener.itemsReplaced(event);
+ public void listChanged(ListChangeEvent event) {
+ this.events.enqueue(event);
+ this.execute(new ForwardEventsRunnable());
}
- /* CU private */ class ListClearedRunnable
+ /* CU private */ class ForwardEventsRunnable
extends RunnableAdapter
{
- private final ListClearEvent event;
- ListClearedRunnable(ListClearEvent event) {
- super();
- this.event = event;
- }
@Override
public void run() {
- SWTListChangeListenerWrapper.this.listCleared_(this.event);
+ SWTListChangeListenerWrapper.this.forwardEvents();
}
}
- void listCleared_(ListClearEvent event) {
- this.listener.listCleared(event);
- }
-
- public void listChanged(ListChangeEvent event) {
- this.execute(new ListChangedRunnable(event));
+ void forwardEvents() {
+ for (ListEvent event : this.events.drain()) {
+ try {
+ this.forwardEvent(event);
+ } catch (RuntimeException ex) {
+ JptCommonUiPlugin.instance().logError(ex);
+ }
+ }
}
- /* CU private */ class ListChangedRunnable
- extends RunnableAdapter
- {
- private final ListChangeEvent event;
- ListChangedRunnable(ListChangeEvent event) {
- super();
- this.event = event;
+ private void forwardEvent(ListEvent event) {
+ if (event instanceof ListAddEvent) {
+ this.listener.itemsAdded((ListAddEvent) event);
}
- @Override
- public void run() {
- SWTListChangeListenerWrapper.this.listChanged_(this.event);
+ else if (event instanceof ListRemoveEvent) {
+ this.listener.itemsRemoved((ListRemoveEvent) event);
+ }
+ else if (event instanceof ListMoveEvent) {
+ this.listener.itemsMoved((ListMoveEvent) event);
+ }
+ else if (event instanceof ListReplaceEvent) {
+ this.listener.itemsReplaced((ListReplaceEvent) event);
+ }
+ else if (event instanceof ListClearEvent) {
+ this.listener.listCleared((ListClearEvent) event);
+ }
+ else if (event instanceof ListChangeEvent) {
+ this.listener.listChanged((ListChangeEvent) event);
}
- }
-
- void listChanged_(ListChangeEvent event) {
- this.listener.listChanged(event);
}
/**
diff --git a/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTPropertyChangeListenerWrapper.java b/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTPropertyChangeListenerWrapper.java
index 9462188cb1..7c0bf5ed9e 100644
--- a/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTPropertyChangeListenerWrapper.java
+++ b/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTPropertyChangeListenerWrapper.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2012 Oracle. All rights reserved.
+ * Copyright (c) 2007, 2013 Oracle. 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.
@@ -9,6 +9,7 @@
******************************************************************************/
package org.eclipse.jpt.common.ui.internal.listeners;
+import org.eclipse.jpt.common.ui.internal.plugin.JptCommonUiPlugin;
import org.eclipse.jpt.common.ui.internal.swt.widgets.DisplayTools;
import org.eclipse.jpt.common.utility.internal.RunnableAdapter;
import org.eclipse.jpt.common.utility.internal.collection.SynchronizedQueue;
@@ -59,7 +60,11 @@ public class SWTPropertyChangeListenerWrapper
void forwardEvents() {
for (PropertyChangeEvent event : this.events.drain()) {
- this.listener.propertyChanged(event);
+ try {
+ this.listener.propertyChanged(event);
+ } catch (RuntimeException ex) {
+ JptCommonUiPlugin.instance().logError(ex);
+ }
}
}
diff --git a/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTStateChangeListenerWrapper.java b/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTStateChangeListenerWrapper.java
index f7b4ab3a30..fbfb57a432 100644
--- a/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTStateChangeListenerWrapper.java
+++ b/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/listeners/SWTStateChangeListenerWrapper.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2012 Oracle. All rights reserved.
+ * Copyright (c) 2007, 2013 Oracle. 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.
@@ -9,6 +9,7 @@
******************************************************************************/
package org.eclipse.jpt.common.ui.internal.listeners;
+import org.eclipse.jpt.common.ui.internal.plugin.JptCommonUiPlugin;
import org.eclipse.jpt.common.ui.internal.swt.widgets.DisplayTools;
import org.eclipse.jpt.common.utility.internal.RunnableAdapter;
import org.eclipse.jpt.common.utility.internal.collection.SynchronizedQueue;
@@ -54,7 +55,11 @@ public class SWTStateChangeListenerWrapper
void forwardEvents() {
for (StateChangeEvent event : this.events.drain()) {
- this.listener.stateChanged(event);
+ try {
+ this.listener.stateChanged(event);
+ } catch (RuntimeException ex) {
+ JptCommonUiPlugin.instance().logError(ex);
+ }
}
}

Back to the top