diff options
author | Brian Vosburgh | 2013-05-13 21:47:39 +0000 |
---|---|---|
committer | Brian Vosburgh | 2013-05-16 20:09:49 +0000 |
commit | b35ae3636034300cbb22cf663e0050ebedf11b63 (patch) | |
tree | e6cb50e97d4711bf194d07634c5a9636484929d4 /common/plugins/org.eclipse.jpt.common.ui | |
parent | 0e80b193eca03a5a2342382c729b50967a18cb35 (diff) | |
download | webtools.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')
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); + } } } |