diff options
author | Eike Stepper | 2010-10-18 05:23:04 +0000 |
---|---|---|
committer | Eike Stepper | 2010-10-18 05:23:04 +0000 |
commit | fc496efc6074f6be8ba0b14be5d056d3b3cfa965 (patch) | |
tree | edc2c24ed9cc9f1fac8ca57d86d191e85f2e7413 | |
parent | 89bd55d0c28776519fd64099969024510618d66f (diff) | |
download | cdo-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
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; |