Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2010-10-18 05:23:04 +0000
committerEike Stepper2010-10-18 05:23:04 +0000
commitfc496efc6074f6be8ba0b14be5d056d3b3cfa965 (patch)
treeedc2c24ed9cc9f1fac8ca57d86d191e85f2e7413
parent89bd55d0c28776519fd64099969024510618d66f (diff)
downloadcdo-fc496efc6074f6be8ba0b14be5d056d3b3cfa965.tar.gz
cdo-fc496efc6074f6be8ba0b14be5d056d3b3cfa965.tar.xz
cdo-fc496efc6074f6be8ba0b14be5d056d3b3cfa965.zip
[327405] Provide an offline CDOWorkspace with Checkout/Update/Commit workflows
https://bugs.eclipse.org/bugs/show_bug.cgi?id=327405
-rw-r--r--plugins/org.eclipse.emf.cdo.ui.location/src/org/eclipse/emf/cdo/ui/internal/location/RepositoryLocationItemProvider.java86
-rw-r--r--plugins/org.eclipse.emf.cdo.ui.location/src/org/eclipse/emf/cdo/ui/internal/location/RepositoryLocationsView.java331
-rw-r--r--plugins/org.eclipse.emf.cdo.ui.location/src/org/eclipse/emf/cdo/ui/internal/location/RepositoryLocationsView2.java366
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java4
-rw-r--r--plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/UIActivator.java13
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/OSGiActivator.java41
6 files changed, 515 insertions, 326 deletions
diff --git a/plugins/org.eclipse.emf.cdo.ui.location/src/org/eclipse/emf/cdo/ui/internal/location/RepositoryLocationItemProvider.java b/plugins/org.eclipse.emf.cdo.ui.location/src/org/eclipse/emf/cdo/ui/internal/location/RepositoryLocationItemProvider.java
new file mode 100644
index 0000000000..d14cd7d069
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.ui.location/src/org/eclipse/emf/cdo/ui/internal/location/RepositoryLocationItemProvider.java
@@ -0,0 +1,86 @@
+/**
+ * Copyright (c) 2004 - 2010 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.ui.internal.location;
+
+import org.eclipse.emf.cdo.location.IRepositoryLocation;
+
+import org.eclipse.net4j.util.container.IContainer;
+import org.eclipse.net4j.util.ui.actions.LongRunningAction;
+import org.eclipse.net4j.util.ui.views.ContainerItemProvider;
+import org.eclipse.net4j.util.ui.views.IElementFilter;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.viewers.ITreeSelection;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author Eike Stepper
+ */
+public class RepositoryLocationItemProvider extends ContainerItemProvider<IContainer<Object>>
+{
+ public RepositoryLocationItemProvider()
+ {
+ }
+
+ public RepositoryLocationItemProvider(IElementFilter rootElementFilter)
+ {
+ super(rootElementFilter);
+ }
+
+ @Override
+ public Image getImage(Object obj)
+ {
+ // if (obj instanceof IChannel)
+ // {
+ // return SharedIcons.getImage(SharedIcons.OBJ_CHANNEL);
+ // }
+
+ return super.getImage(obj);
+ }
+
+ @Override
+ protected void fillContextMenu(IMenuManager manager, ITreeSelection selection)
+ {
+ if (selection.size() == 1)
+ {
+ Object obj = selection.getFirstElement();
+ if (obj instanceof IRepositoryLocation)
+ {
+ manager.add(new RemoveAction(obj));
+ }
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static class RemoveAction extends LongRunningAction
+ {
+ private Object object;
+
+ public RemoveAction(Object object)
+ {
+ super("Remove");
+ this.object = object;
+ }
+
+ @Override
+ protected void doRun(IProgressMonitor progressMonitor) throws Exception
+ {
+ if (object instanceof IRepositoryLocation)
+ {
+ IRepositoryLocation location = (IRepositoryLocation)object;
+ location.delete();
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.ui.location/src/org/eclipse/emf/cdo/ui/internal/location/RepositoryLocationsView.java b/plugins/org.eclipse.emf.cdo.ui.location/src/org/eclipse/emf/cdo/ui/internal/location/RepositoryLocationsView.java
index abe997caa8..f50fd84ec3 100644
--- a/plugins/org.eclipse.emf.cdo.ui.location/src/org/eclipse/emf/cdo/ui/internal/location/RepositoryLocationsView.java
+++ b/plugins/org.eclipse.emf.cdo.ui.location/src/org/eclipse/emf/cdo/ui/internal/location/RepositoryLocationsView.java
@@ -10,349 +10,76 @@
*/
package org.eclipse.emf.cdo.ui.internal.location;
-import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.emf.cdo.location.IRepositoryLocationManager;
+
+import org.eclipse.net4j.util.container.IContainer;
+import org.eclipse.net4j.util.ui.views.ContainerItemProvider;
+import org.eclipse.net4j.util.ui.views.ContainerView;
+
import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IActionBars;
+import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.part.DrillDownAdapter;
-import org.eclipse.ui.part.ViewPart;
-
-import java.util.ArrayList;
-import java.util.List;
/**
* @author Eike Stepper
*/
-public class RepositoryLocationsView extends ViewPart
+public class RepositoryLocationsView extends ContainerView
{
- public static final String ID = "org.eclipse.emf.cdo.ui.location.RepositoryLocationsView";
-
- private TreeViewer viewer;
-
- private DrillDownAdapter drillDownAdapter;
-
- private Action newAction;
-
- private Action refreshAction;
-
- private Action doubleClickAction;
+ private NewLocationAction newAction;
public RepositoryLocationsView()
{
}
@Override
- public void createPartControl(Composite parent)
+ protected IRepositoryLocationManager getContainer()
{
- viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
- viewer.setContentProvider(new ViewContentProvider());
- viewer.setLabelProvider(new ViewLabelProvider());
- viewer.setInput(getViewSite());
-
- drillDownAdapter = new DrillDownAdapter(viewer);
-
- makeActions();
- hookContextMenu();
- hookDoubleClickAction();
- contributeToActionBars();
+ return IRepositoryLocationManager.INSTANCE;
}
@Override
- public void setFocus()
+ protected ContainerItemProvider<IContainer<Object>> createContainerItemProvider()
{
- viewer.getControl().setFocus();
+ return new RepositoryLocationItemProvider();
}
- private void hookContextMenu()
- {
- MenuManager menuMgr = new MenuManager("#PopupMenu");
- menuMgr.setRemoveAllWhenShown(true);
- menuMgr.addMenuListener(new IMenuListener()
- {
- public void menuAboutToShow(IMenuManager manager)
- {
- RepositoryLocationsView.this.fillContextMenu(manager);
- }
- });
-
- Menu menu = menuMgr.createContextMenu(viewer.getControl());
- viewer.getControl().setMenu(menu);
- getSite().registerContextMenu(menuMgr, viewer);
- }
-
- private void contributeToActionBars()
- {
- IActionBars bars = getViewSite().getActionBars();
- fillLocalPullDown(bars.getMenuManager());
- fillLocalToolBar(bars.getToolBarManager());
- }
-
- private void fillLocalPullDown(IMenuManager manager)
- {
- manager.add(newAction);
- manager.add(new Separator());
- manager.add(refreshAction);
- }
-
- private void fillContextMenu(IMenuManager manager)
+ @Override
+ protected Control createUI(Composite parent)
{
- manager.add(newAction);
- manager.add(refreshAction);
- manager.add(new Separator());
- drillDownAdapter.addNavigationActions(manager);
- // Other plug-ins can contribute there actions here
- manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ newAction = new NewLocationAction();
+ return super.createUI(parent);
}
- private void fillLocalToolBar(IToolBarManager manager)
+ @Override
+ protected void fillLocalToolBar(IToolBarManager manager)
{
manager.add(newAction);
- manager.add(refreshAction);
- manager.add(new Separator());
- drillDownAdapter.addNavigationActions(manager);
- }
-
- private void makeActions()
- {
- newAction = new Action()
- {
- @Override
- public void run()
- {
- Shell shell = RepositoryLocationsView.this.getSite().getShell();
- NewRepositoryLocationDialog dialog = new NewRepositoryLocationDialog(shell);
- if (dialog.open() == NewRepositoryLocationDialog.OK)
- {
- }
- }
- };
-
- newAction.setText("New Location");
- newAction.setToolTipText("Add a new repository location");
- newAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages()
- .getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
-
- refreshAction = new Action()
- {
- @Override
- public void run()
- {
- showMessage("Action 2 executed");
- }
- };
-
- refreshAction.setText("Action 2");
- refreshAction.setToolTipText("Action 2 tooltip");
- refreshAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages()
- .getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
-
- doubleClickAction = new Action()
- {
- @Override
- public void run()
- {
- ISelection selection = viewer.getSelection();
- Object obj = ((IStructuredSelection)selection).getFirstElement();
- showMessage("Double-click detected on " + obj.toString());
- }
- };
- }
-
- private void hookDoubleClickAction()
- {
- viewer.addDoubleClickListener(new IDoubleClickListener()
- {
- public void doubleClick(DoubleClickEvent event)
- {
- doubleClickAction.run();
- }
- });
- }
-
- private void showMessage(String message)
- {
- MessageDialog.openInformation(viewer.getControl().getShell(), "CDO Repositories", message);
- }
-
- /**
- * @author Eike Stepper
- */
- public static class TreeObject extends PlatformObject
- {
- private String name;
-
- private TreeParent parent;
-
- public TreeObject(String name)
- {
- this.name = name;
- }
-
- public String getName()
- {
- return name;
- }
-
- public void setParent(TreeParent parent)
- {
- this.parent = parent;
- }
-
- public TreeParent getParent()
- {
- return parent;
- }
-
- @Override
- public String toString()
- {
- return getName();
- }
- }
-
- /**
- * @author Eike Stepper
- */
- public static class TreeParent extends TreeObject
- {
- private List<TreeObject> children = new ArrayList<TreeObject>();
-
- public TreeParent(String name)
- {
- super(name);
- }
-
- public void addChild(TreeObject child)
- {
- children.add(child);
- child.setParent(this);
- }
-
- public void removeChild(TreeObject child)
- {
- children.remove(child);
- child.setParent(null);
- }
-
- public TreeObject[] getChildren()
- {
- return children.toArray(new TreeObject[children.size()]);
- }
-
- public boolean hasChildren()
- {
- return children.size() > 0;
- }
- }
-
- /**
- * @author Eike Stepper
- */
- public class ViewContentProvider implements ITreeContentProvider
- {
- private TreeParent invisibleRoot;
-
- public ViewContentProvider()
- {
- }
-
- public void inputChanged(Viewer v, Object oldInput, Object newInput)
- {
- invisibleRoot = (TreeParent)newInput;
- }
-
- public void dispose()
- {
- invisibleRoot = null;
- }
-
- public Object[] getElements(Object parent)
- {
- return getChildren(parent);
- }
-
- public Object getParent(Object child)
- {
- if (child == invisibleRoot)
- {
- return null;
- }
-
- if (child instanceof TreeObject)
- {
- return ((TreeObject)child).getParent();
- }
-
- return null;
- }
-
- public Object[] getChildren(Object parent)
- {
- if (parent instanceof TreeParent)
- {
- return ((TreeParent)parent).getChildren();
- }
-
- return new Object[0];
- }
-
- public boolean hasChildren(Object parent)
- {
- if (parent instanceof TreeParent)
- {
- return ((TreeParent)parent).hasChildren();
- }
-
- return false;
- }
+ super.fillLocalToolBar(manager);
}
/**
* @author Eike Stepper
*/
- public class ViewLabelProvider extends LabelProvider
+ private class NewLocationAction extends Action
{
- public ViewLabelProvider()
- {
- }
-
- @Override
- public String getText(Object obj)
+ public NewLocationAction()
{
- return obj.toString();
+ setText("New Location");
+ setToolTipText("Add a new repository location");
+ setImageDescriptor(PlatformUI.getWorkbench().getSharedImages()
+ .getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
}
@Override
- public Image getImage(Object obj)
+ public void run()
{
- String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
- if (obj instanceof TreeParent)
+ NewRepositoryLocationDialog dialog = new NewRepositoryLocationDialog(getSite().getShell());
+ if (dialog.open() == NewRepositoryLocationDialog.OK)
{
- imageKey = ISharedImages.IMG_OBJ_FOLDER;
}
-
- return PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
}
}
}
diff --git a/plugins/org.eclipse.emf.cdo.ui.location/src/org/eclipse/emf/cdo/ui/internal/location/RepositoryLocationsView2.java b/plugins/org.eclipse.emf.cdo.ui.location/src/org/eclipse/emf/cdo/ui/internal/location/RepositoryLocationsView2.java
new file mode 100644
index 0000000000..1c3ad36db7
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.ui.location/src/org/eclipse/emf/cdo/ui/internal/location/RepositoryLocationsView2.java
@@ -0,0 +1,366 @@
+/**
+ * Copyright (c) 2004 - 2010 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.ui.internal.location;
+
+import org.eclipse.emf.cdo.location.IRepositoryLocationManager;
+
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.DrillDownAdapter;
+import org.eclipse.ui.part.ViewPart;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Eike Stepper
+ */
+public class RepositoryLocationsView2 extends ViewPart
+{
+ public static final String ID = "org.eclipse.emf.cdo.ui.location.RepositoryLocationsView";
+
+ private TreeViewer viewer;
+
+ private DrillDownAdapter drillDownAdapter;
+
+ private Action newAction;
+
+ private Action refreshAction;
+
+ private Action doubleClickAction;
+
+ public RepositoryLocationsView2()
+ {
+ }
+
+ @Override
+ public void createPartControl(Composite parent)
+ {
+ viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+ viewer.setContentProvider(new ViewContentProvider());
+ viewer.setLabelProvider(new ViewLabelProvider());
+ viewer.setInput(IRepositoryLocationManager.INSTANCE);
+
+ drillDownAdapter = new DrillDownAdapter(viewer);
+
+ makeActions();
+ hookContextMenu();
+ hookDoubleClickAction();
+ contributeToActionBars();
+ }
+
+ @Override
+ public void setFocus()
+ {
+ viewer.getControl().setFocus();
+ }
+
+ private void hookContextMenu()
+ {
+ MenuManager menuMgr = new MenuManager("#PopupMenu");
+ menuMgr.setRemoveAllWhenShown(true);
+ menuMgr.addMenuListener(new IMenuListener()
+ {
+ public void menuAboutToShow(IMenuManager manager)
+ {
+ RepositoryLocationsView2.this.fillContextMenu(manager);
+ }
+ });
+
+ Menu menu = menuMgr.createContextMenu(viewer.getControl());
+ viewer.getControl().setMenu(menu);
+ getSite().registerContextMenu(menuMgr, viewer);
+ }
+
+ private void contributeToActionBars()
+ {
+ IActionBars bars = getViewSite().getActionBars();
+ fillLocalPullDown(bars.getMenuManager());
+ fillLocalToolBar(bars.getToolBarManager());
+ }
+
+ private void fillLocalPullDown(IMenuManager manager)
+ {
+ manager.add(newAction);
+ manager.add(new Separator());
+ manager.add(refreshAction);
+ }
+
+ private void fillContextMenu(IMenuManager manager)
+ {
+ manager.add(newAction);
+ manager.add(refreshAction);
+ manager.add(new Separator());
+ drillDownAdapter.addNavigationActions(manager);
+ // Other plug-ins can contribute there actions here
+ manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ }
+
+ private void fillLocalToolBar(IToolBarManager manager)
+ {
+ manager.add(newAction);
+ manager.add(refreshAction);
+ manager.add(new Separator());
+ drillDownAdapter.addNavigationActions(manager);
+ }
+
+ private void makeActions()
+ {
+ newAction = new NewLocationAction();
+
+ refreshAction = new Action()
+ {
+ @Override
+ public void run()
+ {
+ showMessage("Action 2 executed");
+ }
+ };
+
+ refreshAction.setText("Action 2");
+ refreshAction.setToolTipText("Action 2 tooltip");
+ refreshAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages()
+ .getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+
+ doubleClickAction = new Action()
+ {
+ @Override
+ public void run()
+ {
+ ISelection selection = viewer.getSelection();
+ Object obj = ((IStructuredSelection)selection).getFirstElement();
+ showMessage("Double-click detected on " + obj.toString());
+ }
+ };
+ }
+
+ private void hookDoubleClickAction()
+ {
+ viewer.addDoubleClickListener(new IDoubleClickListener()
+ {
+ public void doubleClick(DoubleClickEvent event)
+ {
+ doubleClickAction.run();
+ }
+ });
+ }
+
+ private void showMessage(String message)
+ {
+ MessageDialog.openInformation(viewer.getControl().getShell(), "CDO Repositories", message);
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private class NewLocationAction extends Action
+ {
+ public NewLocationAction()
+ {
+ setText("New Location");
+ setToolTipText("Add a new repository location");
+ setImageDescriptor(PlatformUI.getWorkbench().getSharedImages()
+ .getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+ }
+
+ @Override
+ public void run()
+ {
+ NewRepositoryLocationDialog dialog = new NewRepositoryLocationDialog(getSite().getShell());
+ if (dialog.open() == NewRepositoryLocationDialog.OK)
+ {
+ }
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static class TreeObject extends PlatformObject
+ {
+ private String name;
+
+ private TreeParent parent;
+
+ public TreeObject(String name)
+ {
+ this.name = name;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setParent(TreeParent parent)
+ {
+ this.parent = parent;
+ }
+
+ public TreeParent getParent()
+ {
+ return parent;
+ }
+
+ @Override
+ public String toString()
+ {
+ return getName();
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static class TreeParent extends TreeObject
+ {
+ private List<TreeObject> children = new ArrayList<TreeObject>();
+
+ public TreeParent(String name)
+ {
+ super(name);
+ }
+
+ public void addChild(TreeObject child)
+ {
+ children.add(child);
+ child.setParent(this);
+ }
+
+ public void removeChild(TreeObject child)
+ {
+ children.remove(child);
+ child.setParent(null);
+ }
+
+ public TreeObject[] getChildren()
+ {
+ return children.toArray(new TreeObject[children.size()]);
+ }
+
+ public boolean hasChildren()
+ {
+ return children.size() > 0;
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public class ViewContentProvider implements ITreeContentProvider
+ {
+ private TreeParent invisibleRoot;
+
+ public ViewContentProvider()
+ {
+ }
+
+ public void inputChanged(Viewer v, Object oldInput, Object newInput)
+ {
+ invisibleRoot = (TreeParent)newInput;
+ }
+
+ public void dispose()
+ {
+ invisibleRoot = null;
+ }
+
+ public Object[] getElements(Object parent)
+ {
+ return getChildren(parent);
+ }
+
+ public Object getParent(Object child)
+ {
+ if (child == invisibleRoot)
+ {
+ return null;
+ }
+
+ if (child instanceof TreeObject)
+ {
+ return ((TreeObject)child).getParent();
+ }
+
+ return null;
+ }
+
+ public Object[] getChildren(Object parent)
+ {
+ if (parent instanceof TreeParent)
+ {
+ return ((TreeParent)parent).getChildren();
+ }
+
+ return new Object[0];
+ }
+
+ public boolean hasChildren(Object parent)
+ {
+ if (parent instanceof TreeParent)
+ {
+ return ((TreeParent)parent).hasChildren();
+ }
+
+ return false;
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public class ViewLabelProvider extends LabelProvider
+ {
+ public ViewLabelProvider()
+ {
+ }
+
+ @Override
+ public String getText(Object obj)
+ {
+ return obj.toString();
+ }
+
+ @Override
+ public Image getImage(Object obj)
+ {
+ String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
+ if (obj instanceof TreeParent)
+ {
+ imageKey = ISharedImages.IMG_OBJ_FOLDER;
+ }
+
+ return PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java
index bc5eed52f1..5af5733e3f 100644
--- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java
@@ -29,10 +29,10 @@ import org.eclipse.swt.widgets.Control;
public class CDOSessionsView extends ContainerView
{
- private OpenSessionAction openSessionAction;
-
public final static String ID = "org.eclipse.emf.cdo.ui.CDOSessionsView"; //$NON-NLS-1$
+ private OpenSessionAction openSessionAction;
+
public CDOSessionsView()
{
}
diff --git a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/UIActivator.java b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/UIActivator.java
index c3fc1a3bda..24dc3a6bb5 100644
--- a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/UIActivator.java
+++ b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/UIActivator.java
@@ -18,8 +18,6 @@ import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
-import java.io.File;
-
/**
* @author Eike Stepper
*/
@@ -117,7 +115,7 @@ public class UIActivator extends AbstractUIPlugin
*/
public static abstract class WithConfig extends UIActivator
{
- private ConfigHandler handler = new ConfigHandler()
+ private ConfigHandler handler = new ConfigHandler(getOMBundle())
{
@Override
protected void startWithConfig(Object config) throws Exception
@@ -140,18 +138,13 @@ public class UIActivator extends AbstractUIPlugin
@Override
protected final void doStart() throws Exception
{
- File configFile = getOMBundle().getConfigFile();
- if (configFile.exists())
- {
- handler.start(configFile);
- }
+ handler.start();
}
@Override
protected final void doStop() throws Exception
{
- File configFile = getOMBundle().getConfigFile();
- handler.stop(configFile);
+ handler.stop();
}
protected abstract void doStartWithConfig(Object config) throws Exception;
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/OSGiActivator.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/OSGiActivator.java
index 7f6055a80c..6941b78050 100644
--- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/OSGiActivator.java
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/OSGiActivator.java
@@ -12,6 +12,7 @@ package org.eclipse.net4j.util.om;
import org.eclipse.net4j.internal.util.bundle.AbstractBundle;
import org.eclipse.net4j.internal.util.bundle.OM;
+import org.eclipse.net4j.internal.util.om.OSGiBundle;
import org.eclipse.net4j.util.io.IOUtil;
import org.osgi.framework.BundleActivator;
@@ -20,8 +21,10 @@ import org.osgi.framework.BundleContext;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
+import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
/**
* @author Eike Stepper
@@ -182,18 +185,36 @@ public abstract class OSGiActivator implements BundleActivator
*/
public static abstract class ConfigHandler
{
- public ConfigHandler()
+ private OSGiBundle bundle;
+
+ public ConfigHandler(OMBundle bundle)
{
+ this.bundle = (OSGiBundle)bundle;
}
- public final void start(File configFile) throws Exception
+ public final void start() throws Exception
{
+ File configFile = bundle.getConfigFile();
+ if (!configFile.exists())
+ {
+ startWithConfig(null);
+ return;
+ }
+
FileInputStream fis = null;
try
{
fis = new FileInputStream(configFile);
- ObjectInputStream ois = new ObjectInputStream(fis);
+ ObjectInputStream ois = new ObjectInputStream(fis)
+ {
+ @Override
+ protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException
+ {
+ String className = desc.getName();
+ return bundle.getAccessor().getClassLoader().loadClass(className);
+ }
+ };
Object config = ois.readObject();
IOUtil.close(ois);
@@ -205,7 +226,7 @@ public abstract class OSGiActivator implements BundleActivator
}
}
- public final void stop(File configFile) throws Exception
+ public final void stop() throws Exception
{
FileOutputStream fos = null;
@@ -213,6 +234,7 @@ public abstract class OSGiActivator implements BundleActivator
{
Object config = stopWithConfig();
+ File configFile = bundle.getConfigFile();
fos = new FileOutputStream(configFile);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(config);
@@ -235,7 +257,7 @@ public abstract class OSGiActivator implements BundleActivator
*/
public static abstract class WithConfig extends OSGiActivator
{
- private ConfigHandler handler = new ConfigHandler()
+ private ConfigHandler handler = new ConfigHandler(getOMBundle())
{
@Override
protected void startWithConfig(Object config) throws Exception
@@ -258,18 +280,13 @@ public abstract class OSGiActivator implements BundleActivator
@Override
protected final void doStart() throws Exception
{
- File configFile = getOMBundle().getConfigFile();
- if (configFile.exists())
- {
- handler.start(configFile);
- }
+ handler.start();
}
@Override
protected final void doStop() throws Exception
{
- File configFile = getOMBundle().getConfigFile();
- handler.stop(configFile);
+ handler.stop();
}
protected abstract void doStartWithConfig(Object config) throws Exception;

Back to the top