diff options
author | Eike Stepper | 2015-03-03 10:13:43 +0000 |
---|---|---|
committer | Eike Stepper | 2015-03-03 10:22:45 +0000 |
commit | 92d3ccab1760fa9d0942c7f92b5f5de8f907c5b6 (patch) | |
tree | db7eb462f25acc33038cd94072998a5cec1a013e /plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal | |
parent | 7d5e61c1d3adac069099c2cf3a18a887cf3557f9 (diff) | |
download | cdo-92d3ccab1760fa9d0942c7f92b5f5de8f907c5b6.tar.gz cdo-92d3ccab1760fa9d0942c7f92b5f5de8f907c5b6.tar.xz cdo-92d3ccab1760fa9d0942c7f92b5f5de8f907c5b6.zip |
[458349] Consolidate UI
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=458349
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java index 0e656266d7..a1f6586a9d 100644 --- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java +++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java @@ -35,6 +35,8 @@ import org.eclipse.net4j.util.container.IPluginContainer; import org.eclipse.net4j.util.event.IEvent; import org.eclipse.net4j.util.event.IListener; import org.eclipse.net4j.util.lifecycle.ILifecycle; +import org.eclipse.net4j.util.lifecycle.ILifecycleEvent; +import org.eclipse.net4j.util.lifecycle.ILifecycleEvent.Kind; import org.eclipse.net4j.util.lifecycle.LifecycleEventAdapter; import org.eclipse.emf.ecore.EObject; @@ -44,9 +46,11 @@ import org.eclipse.emf.spi.cdo.InternalCDOView; import java.io.File; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.Set; import java.util.WeakHashMap; /** @@ -80,6 +84,8 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec private static final String BRANCH_AND_POINT_SEPARATOR = "_"; + private final Set<CDOView> views = new HashSet<CDOView>(); + private final Map<CDOID, String> editorIDs = new WeakHashMap<CDOID, String>(); private CDORepository repository; @@ -352,6 +358,7 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec @Override protected void onDeactivated(ILifecycle lifecycle) { + removeView(view); close(); } }); @@ -411,6 +418,12 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec { rootObject.eAdapters().remove(this); closeView(); + + CDOView[] remainingViews = getViews(); + for (CDOView remainingView : remainingViews) + { + remainingView.close(); + } } finally { @@ -438,6 +451,30 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec } } + private void addView(CDOView view) + { + synchronized (this) + { + views.add(view); + } + } + + private void removeView(CDOView view) + { + synchronized (this) + { + views.remove(view); + } + } + + public CDOView[] getViews() + { + synchronized (this) + { + return views.toArray(new CDOView[views.size()]); + } + } + public final CDOView getView() { return view; @@ -496,7 +533,12 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec private CDOView openAndConfigureView(boolean readOnly, ResourceSet resourceSet) { CDOView view = doOpenView(readOnly, resourceSet); - return configureView(view); + view = configureView(view); + + EObject object = view.getObject(rootObject); + object.eAdapters().add(this); + + return view; } protected CDOView doOpenView(boolean readOnly, ResourceSet resourceSet) @@ -543,9 +585,18 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec getManager().fireElementsChangedEvent(elements); } } + else if (event instanceof ILifecycleEvent) + { + ILifecycleEvent e = (ILifecycleEvent)event; + if (e.getKind() == Kind.DEACTIVATED) + { + removeView(view); + } + } } }); + addView(view); return view; } |