Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2012-11-08 18:28:58 +0000
committerEike Stepper2012-11-08 18:36:57 +0000
commit9b6392f3ffa6e68e3076b5a43300e5a1bebae1aa (patch)
tree40b1dcc2311bba613a47a7ae1080ab0a210b76ff /plugins/org.eclipse.emf.cdo.examples.client.offline
parent36a064c02556267eafbc4cb57ecb99533d553035 (diff)
downloadcdo-9b6392f3ffa6e68e3076b5a43300e5a1bebae1aa.tar.gz
cdo-9b6392f3ffa6e68e3076b5a43300e5a1bebae1aa.tar.xz
cdo-9b6392f3ffa6e68e3076b5a43300e5a1bebae1aa.zip
[393910] Stabilize state management in SynchronizableRepositories
https://bugs.eclipse.org/bugs/show_bug.cgi?id=393910
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.examples.client.offline')
-rw-r--r--plugins/org.eclipse.emf.cdo.examples.client.offline/plugin.xml4
-rw-r--r--plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/AbstractView.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/ClientPerspective.java9
-rw-r--r--plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/ClientView.java141
-rw-r--r--plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/NormalRepositoryView.java15
-rw-r--r--plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/Node.java11
-rw-r--r--plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/NodeManager.java11
-rw-r--r--plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/NodeType.java66
8 files changed, 228 insertions, 34 deletions
diff --git a/plugins/org.eclipse.emf.cdo.examples.client.offline/plugin.xml b/plugins/org.eclipse.emf.cdo.examples.client.offline/plugin.xml
index b1ebac6968..fd19181fb4 100644
--- a/plugins/org.eclipse.emf.cdo.examples.client.offline/plugin.xml
+++ b/plugins/org.eclipse.emf.cdo.examples.client.offline/plugin.xml
@@ -46,6 +46,10 @@
<extension
point="org.eclipse.ui.views">
<view
+ class="org.eclipse.emf.cdo.examples.client.offline.ClientView"
+ id="org.eclipse.emf.cdo.examples.client.offline.ClientView"
+ name="Client"/>
+ <view
class="org.eclipse.emf.cdo.examples.client.offline.CloneRepositoryView"
id="org.eclipse.emf.cdo.examples.client.offline.CloneRepositoryView"
name="Clone Repository"/>
diff --git a/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/AbstractView.java b/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/AbstractView.java
index cddad8ec48..3f5b46b771 100644
--- a/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/AbstractView.java
+++ b/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/AbstractView.java
@@ -78,11 +78,6 @@ public abstract class AbstractView<T extends IContainer<?>> extends ViewPart
public void run()
{
String text = events.getText();
- // if (text.length() != 0)
- // {
- // text += StringUtil.NL;
- // }
- //
events.setText(event + StringUtil.NL + text);
}
});
diff --git a/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/ClientPerspective.java b/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/ClientPerspective.java
index 40503b9a6d..61a102709f 100644
--- a/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/ClientPerspective.java
+++ b/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/ClientPerspective.java
@@ -21,9 +21,10 @@ public class ClientPerspective implements IPerspectiveFactory
public void createInitialLayout(IPageLayout layout)
{
layout.setFixed(true);
- layout.addView("org.eclipse.emf.cdo.ui.CDOSessionsView", IPageLayout.LEFT, 0.5f, IPageLayout.ID_EDITOR_AREA);
- layout.addView("org.eclipse.emf.cdo.examples.client.offline.CloneRepositoryView", IPageLayout.BOTTOM, 0.37f,
- "org.eclipse.emf.cdo.ui.CDOSessionsView");
- layout.addView("org.eclipse.ui.views.PropertySheet", IPageLayout.BOTTOM, 0.61f, IPageLayout.ID_EDITOR_AREA);
+ layout.addView("org.eclipse.emf.cdo.examples.client.offline.ClientView", IPageLayout.LEFT, 0.5f,
+ IPageLayout.ID_EDITOR_AREA);
+ layout.addView("org.eclipse.emf.cdo.examples.client.offline.CloneRepositoryView", IPageLayout.BOTTOM, 0.46f,
+ "org.eclipse.emf.cdo.examples.client.offline.ClientView");
+ layout.addView("org.eclipse.ui.views.PropertySheet", IPageLayout.BOTTOM, 0.67f, IPageLayout.ID_EDITOR_AREA);
}
}
diff --git a/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/ClientView.java b/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/ClientView.java
new file mode 100644
index 0000000000..85749e4a6a
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/ClientView.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * 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
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.examples.client.offline;
+
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.ui.CDOItemProvider;
+
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.ui.UIUtil;
+import org.eclipse.net4j.util.ui.views.ContainerItemProvider;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ITreeSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * @author Eike Stepper
+ */
+public class ClientView extends AbstractView<CDOSession>
+{
+ public static final String ID = "org.eclipse.emf.cdo.examples.client.offline.ClientView"; //$NON-NLS-1$
+
+ private CDOItemProvider itemProvider;
+
+ private TreeViewer treeViewer;
+
+ public ClientView()
+ {
+ super(CDOSession.class);
+ }
+
+ @Override
+ protected void createPane(Composite parent, CDOSession session)
+ {
+ itemProvider = new CDOItemProvider(getSite().getPage())
+ {
+ @Override
+ protected void handleElementEvent(final IEvent event)
+ {
+ addEvent(event);
+ }
+ };
+
+ treeViewer = new TreeViewer(parent, SWT.BORDER);
+ treeViewer.setLabelProvider(itemProvider);
+ treeViewer.setContentProvider(itemProvider);
+ treeViewer.setInput(session);
+
+ hookDoubleClick();
+ hookContextMenu();
+ }
+
+ protected void hookDoubleClick()
+ {
+ treeViewer.addDoubleClickListener(new IDoubleClickListener()
+ {
+ public void doubleClick(DoubleClickEvent event)
+ {
+ ITreeSelection selection = (ITreeSelection)treeViewer.getSelection();
+ Object object = selection.getFirstElement();
+ if (object instanceof ContainerItemProvider.ErrorElement)
+ {
+ try
+ {
+ UIUtil.getActiveWorkbenchPage().showView(UIUtil.ERROR_LOG_ID);
+ }
+ catch (PartInitException ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+ else if (object != null && treeViewer.isExpandable(object))
+ {
+ if (treeViewer.getExpandedState(object))
+ {
+ treeViewer.collapseToLevel(object, TreeViewer.ALL_LEVELS);
+ }
+ else
+ {
+ treeViewer.expandToLevel(object, 1);
+ }
+ }
+ }
+ });
+ }
+
+ protected void hookContextMenu()
+ {
+ MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
+ menuMgr.setRemoveAllWhenShown(true);
+ menuMgr.addMenuListener(new IMenuListener()
+ {
+ public void menuAboutToShow(IMenuManager manager)
+ {
+ ITreeSelection selection = (ITreeSelection)treeViewer.getSelection();
+ fillContextMenu(manager, selection);
+ }
+ });
+
+ Menu menu = menuMgr.createContextMenu(treeViewer.getControl());
+ treeViewer.getControl().setMenu(menu);
+ getSite().registerContextMenu(menuMgr, treeViewer);
+ }
+
+ protected void fillContextMenu(IMenuManager manager, ITreeSelection selection)
+ {
+ itemProvider.fillContextMenu(manager, selection);
+ manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ }
+
+ @Override
+ public void setFocus()
+ {
+ treeViewer.getTree().setFocus();
+ }
+
+ @Override
+ public void dispose()
+ {
+ itemProvider.dispose();
+ super.dispose();
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/NormalRepositoryView.java b/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/NormalRepositoryView.java
index e6ea12b1fd..70daafc1fc 100644
--- a/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/NormalRepositoryView.java
+++ b/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/NormalRepositoryView.java
@@ -23,8 +23,6 @@ import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.wb.swt.ExampleResourceManager;
-import java.util.concurrent.ExecutorService;
-
/**
* @author Eike Stepper
*/
@@ -49,17 +47,6 @@ public class NormalRepositoryView extends AbstractView<IRepository>
private Image bean = ExampleResourceManager.getPluginImage(Application.PLUGIN_ID, "icons/Bean.gif");
@Override
- public String getText(Object obj)
- {
- if (obj instanceof ExecutorService)
- {
- return "ExecutorService";
- }
-
- return super.getText(obj);
- }
-
- @Override
public Image getImage(Object obj)
{
return bean;
@@ -79,8 +66,6 @@ public class NormalRepositoryView extends AbstractView<IRepository>
treeViewer.setContentProvider(itemProvider);
treeViewer.setInput(repository);
- // ScrolledComposite scrolledComposite = new ScrolledComposite(sash, SWT.NONE);
- // scrolledComposite.setContent(new RepositoryDetails(scrolledComposite, repository));
new RepositoryDetails(sash, repository);
sash.setWeights(new int[] { 1, 1 });
diff --git a/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/Node.java b/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/Node.java
index a3e42743d7..6e33e230f0 100644
--- a/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/Node.java
+++ b/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/Node.java
@@ -96,6 +96,17 @@ public final class Node implements IElement, Comparable<Node>
return (T)objects.get(type);
}
+ @SuppressWarnings("unchecked")
+ public <T> T setObject(Class<T> type, T object)
+ {
+ if (object == null)
+ {
+ return (T)objects.remove(type);
+ }
+
+ return (T)objects.put(type, object);
+ }
+
public void start()
{
type.start(this);
diff --git a/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/NodeManager.java b/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/NodeManager.java
index aa1422768a..debfda1739 100644
--- a/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/NodeManager.java
+++ b/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/NodeManager.java
@@ -153,9 +153,16 @@ public class NodeManager extends Container<Object>
return elements;
}
- public Node createNode(NodeType nodeType)
+ Node createNode(NodeType nodeType)
{
Node node = new Node(nodeType);
+ saveNode(node);
+
+ return addNode(node);
+ }
+
+ void saveNode(Node node)
+ {
OutputStream out = null;
try
@@ -175,8 +182,6 @@ public class NodeManager extends Container<Object>
{
IOUtil.close(out);
}
-
- return addNode(node);
}
private Node addNode(Node node)
diff --git a/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/NodeType.java b/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/NodeType.java
index 96076aca50..1820dc0df6 100644
--- a/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/NodeType.java
+++ b/plugins/org.eclipse.emf.cdo.examples.client.offline/src/org/eclipse/emf/cdo/examples/client/offline/nodes/NodeType.java
@@ -10,6 +10,8 @@
*/
package org.eclipse.emf.cdo.examples.client.offline.nodes;
+import org.eclipse.emf.cdo.common.CDOCommonRepository.State;
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.model.CDOPackageRegistryPopulator;
import org.eclipse.emf.cdo.common.revision.CDORevisionCache;
import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
@@ -26,6 +28,8 @@ import org.eclipse.emf.cdo.server.db.mapping.IMappingStrategy;
import org.eclipse.emf.cdo.server.net4j.FailoverAgent;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.session.CDOSessionConfigurationFactory;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.view.CDOViewTargetChangedEvent;
import org.eclipse.net4j.Net4jUtil;
import org.eclipse.net4j.acceptor.IAcceptor;
@@ -36,6 +40,8 @@ import org.eclipse.net4j.db.IDBConnectionProvider;
import org.eclipse.net4j.db.h2.H2Adapter;
import org.eclipse.net4j.util.container.IPluginContainer;
import org.eclipse.net4j.util.container.SetContainer;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
import org.eclipse.jface.viewers.ComboViewer;
@@ -89,6 +95,8 @@ public abstract class NodeType extends SetContainer<Node> implements IElement
public static final String MONITOR_PROPERTY = "Monitor";
+ public static final String BRANCH_PROPERTY = "branch";
+
private static final String REPOSITORY_NAME = "repository";
private final NodeManager manager;
@@ -208,10 +216,10 @@ public abstract class NodeType extends SetContainer<Node> implements IElement
public void start(Node node)
{
IRepository repository = createRepository(node);
- node.getObjects().put(IRepository.class, repository);
+ node.setObject(IRepository.class, repository);
IAcceptor acceptor = createAcceptor(node);
- node.getObjects().put(IAcceptor.class, acceptor);
+ node.setObject(IAcceptor.class, acceptor);
}
public void stop(Node node)
@@ -510,15 +518,34 @@ public abstract class NodeType extends SetContainer<Node> implements IElement
}
@Override
- public void start(Node node)
+ public void start(final Node node)
{
super.start(node);
- CDOSession session = (CDOSession)IPluginContainer.INSTANCE.getElement("org.eclipse.emf.cdo.sessions", "cdo",
- "jvm://example?repositoryName=" + REPOSITORY_NAME);
+ final CDOSession session = (CDOSession)IPluginContainer.INSTANCE.getElement("org.eclipse.emf.cdo.sessions",
+ "cdo", "jvm://example?repositoryName=" + REPOSITORY_NAME);
CDOPackageRegistryPopulator.populate(session.getPackageRegistry());
- node.getObjects().put(CDOSession.class, session);
+ node.setObject(CDOSession.class, session);
+
+ if (session.getRepositoryInfo().getState() == State.INITIAL)
+ {
+ session.addListener(new IListener()
+ {
+ public void notifyEvent(IEvent event)
+ {
+ if (session.getRepositoryInfo().getState() != State.INITIAL)
+ {
+ session.removeListener(this);
+ createTransaction(node);
+ }
+ }
+ });
+ }
+ else
+ {
+ createTransaction(node);
+ }
}
@Override
@@ -579,6 +606,31 @@ public abstract class NodeType extends SetContainer<Node> implements IElement
return (IAcceptor)IPluginContainer.INSTANCE.getElement("org.eclipse.net4j.acceptors", "jvm", "example");
}
+ protected void createTransaction(final Node node)
+ {
+ CDOSession session = node.getObject(CDOSession.class);
+
+ int branchID = Integer.parseInt(node.getSettings().getProperty(BRANCH_PROPERTY, "0"));
+ CDOBranch branch = session.getBranchManager().getBranch(branchID);
+
+ CDOTransaction transaction = session.openTransaction(branch);
+ transaction.addListener(new IListener()
+ {
+ public void notifyEvent(IEvent event)
+ {
+ if (event instanceof CDOViewTargetChangedEvent)
+ {
+ CDOViewTargetChangedEvent e = (CDOViewTargetChangedEvent)event;
+ int branchID = e.getBranchPoint().getBranch().getID();
+ node.getSettings().setProperty(BRANCH_PROPERTY, Integer.toString(branchID));
+ getManager().saveNode(node);
+ }
+ }
+ });
+
+ node.setObject(CDOTransaction.class, transaction);
+ }
+
@Override
public String toString()
{
@@ -718,7 +770,7 @@ public abstract class NodeType extends SetContainer<Node> implements IElement
org.eclipse.emf.cdo.server.net4j.FailoverMonitor monitor = (org.eclipse.emf.cdo.server.net4j.FailoverMonitor)IPluginContainer.INSTANCE
.getElement(org.eclipse.emf.cdo.server.net4j.FailoverMonitor.PRODUCT_GROUP,
org.eclipse.emf.cdo.server.net4j.FailoverMonitor.Factory.TYPE, node.getName());
- node.getObjects().put(org.eclipse.emf.cdo.server.net4j.FailoverMonitor.class, monitor);
+ node.setObject(org.eclipse.emf.cdo.server.net4j.FailoverMonitor.class, monitor);
}
@Override

Back to the top