Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2015-03-03 10:13:43 +0000
committerEike Stepper2015-03-03 10:22:45 +0000
commit92d3ccab1760fa9d0942c7f92b5f5de8f907c5b6 (patch)
treedb7eb462f25acc33038cd94072998a5cec1a013e /plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal
parent7d5e61c1d3adac069099c2cf3a18a887cf3557f9 (diff)
downloadcdo-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.java53
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;
}

Back to the top