diff options
author | Michael Valenta | 2007-05-24 20:21:58 +0000 |
---|---|---|
committer | Michael Valenta | 2007-05-24 20:21:58 +0000 |
commit | 96ea8021420ee5e1e2e99c188aa6ed245fa9bf25 (patch) | |
tree | 1eec5b6020b3c454ade87e99f73ca876e7ef9642 /examples | |
parent | da1cc28dbfa8b8b05bb74753ee81b419d69e93e0 (diff) | |
download | eclipse.platform.team-96ea8021420ee5e1e2e99c188aa6ed245fa9bf25.tar.gz eclipse.platform.team-96ea8021420ee5e1e2e99c188aa6ed245fa9bf25.tar.xz eclipse.platform.team-96ea8021420ee5e1e2e99c188aa6ed245fa9bf25.zip |
Updated model exampel to use Saveables
Diffstat (limited to 'examples')
6 files changed, 183 insertions, 7 deletions
diff --git a/examples/org.eclipse.team.examples.filesystem/plugin.xml b/examples/org.eclipse.team.examples.filesystem/plugin.xml index e28cd42df..72cb81da6 100644 --- a/examples/org.eclipse.team.examples.filesystem/plugin.xml +++ b/examples/org.eclipse.team.examples.filesystem/plugin.xml @@ -430,7 +430,8 @@ icon="$nl$/icons/full/obj/root_obj.gif" id="org.eclipse.team.examples.model.navigator" labelProvider="org.eclipse.team.examples.model.ui.ModelNavigatorLabelProvider" - name="Example Model"> + name="Example Model" + providesSaveables="true"> <triggerPoints> <or> <instanceof value="org.eclipse.team.examples.model.ModelObject"/> diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelNavigatorActionProvider.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelNavigatorActionProvider.java index 234eb8914..618926cc5 100644 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelNavigatorActionProvider.java +++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelNavigatorActionProvider.java @@ -21,11 +21,12 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.examples.model.*; -import org.eclipse.ui.navigator.CommonActionProvider; -import org.eclipse.ui.navigator.ICommonActionExtensionSite; +import org.eclipse.team.internal.ui.Utils; +import org.eclipse.ui.navigator.*; /** * Model action provider for use with the Common Navigator framework. The @@ -39,6 +40,7 @@ public class ModelNavigatorActionProvider extends CommonActionProvider { private Action newFolderAction; private Action newMoeAction; private Action deleteAction; + private Action makeDirty; public ModelNavigatorActionProvider() { super(); @@ -147,6 +149,24 @@ public class ModelNavigatorActionProvider extends CommonActionProvider { return null; } }; + makeDirty = new Action("Make Dirty") { + public void run() { + IStructuredSelection selection = (IStructuredSelection)getContext().getSelection(); + for (Iterator iter = selection.iterator(); iter.hasNext();) { + Object element = iter.next(); + if (element instanceof ModelObjectDefinitionFile) { + ModelObjectDefinitionFile mo = (ModelObjectDefinitionFile) element; + ModelSaveablesProvider provider = getSaveablesProvider(); + provider.makeDirty(mo); + } + } + } + + private ModelSaveablesProvider getSaveablesProvider() { + ITreeContentProvider provider = getActionSite().getContentService().getContentExtensionById("org.eclipse.team.examples.model.navigator").getContentProvider(); + return (ModelSaveablesProvider)Utils.getAdapter(provider, SaveablesProvider.class); + } + }; } protected Shell getShell() { @@ -164,6 +184,7 @@ public class ModelNavigatorActionProvider extends CommonActionProvider { ModelObjectDefinitionFile modFile = getSelectedModFile(); if (modFile != null) { menu.add(newMoeAction); + menu.add(makeDirty); } } diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelNavigatorContentProvider.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelNavigatorContentProvider.java index 6dbe77cbc..11cb1e093 100644 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelNavigatorContentProvider.java +++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelNavigatorContentProvider.java @@ -13,7 +13,7 @@ package org.eclipse.team.examples.model.ui; import java.util.*; import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.*; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.Display; @@ -32,13 +32,14 @@ import org.eclipse.ui.navigator.*; * replace the corresponding resource project in the Project Explorer. */ public class ModelNavigatorContentProvider extends BaseWorkbenchContentProvider - implements ICommonContentProvider, IResourceChangeListener, IPipelinedTreeContentProvider, ITeamStateChangeListener { + implements ICommonContentProvider, IResourceChangeListener, IPipelinedTreeContentProvider, ITeamStateChangeListener, IAdaptable { private ICommonContentExtensionSite extensionSite; private boolean isWorkspaceRoot; private Viewer viewer; private final boolean updateViewer; private SynchronizationStateTester syncStateTester; + private Object saveablesProvider = new ModelSaveablesProvider(); public ModelNavigatorContentProvider() { super(); @@ -319,4 +320,11 @@ public class ModelNavigatorContentProvider extends BaseWorkbenchContentProvider return false; } + public Object getAdapter(Class adapter) { + if (adapter == SaveablesProvider.class) { + return saveablesProvider; + } + return Platform.getAdapterManager().getAdapter(this, adapter); + } + } diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelSaveable.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelSaveable.java new file mode 100644 index 000000000..4e73bb90a --- /dev/null +++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelSaveable.java @@ -0,0 +1,83 @@ +/******************************************************************************* + * Copyright (c) 2007 IBM Corporation 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: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.team.examples.model.ui; + +import org.eclipse.core.resources.mapping.ResourceMapping; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.team.examples.model.ModelObject; +import org.eclipse.team.examples.model.ModelObjectDefinitionFile; +import org.eclipse.team.internal.ui.Utils; +import org.eclipse.ui.Saveable; + +/** + * A Saveable that represents a modified model object definition file. + */ +public class ModelSaveable extends Saveable { + + private ModelObject modelObject; + private boolean dirty; + private final ModelSaveablesProvider modelSaveablesProvider; + + public ModelSaveable(ModelSaveablesProvider modelSaveablesProvider, ModelObjectDefinitionFile mo) { + this.modelSaveablesProvider = modelSaveablesProvider; + modelObject = mo; + } + + public boolean equals(Object object) { + if (object instanceof ModelSaveable) { + ModelSaveable other = (ModelSaveable) object; + return (other.getModelObject().equals(getModelObject())); + } + return false; + } + + public ModelObject getModelObject() { + return modelObject; + } + + public ImageDescriptor getImageDescriptor() { + return ModelWorkbenchAdapter.createImageDescriptor("obj/mod_obj.gif"); + } + + public String getName() { + return modelObject.getName(); + } + + public String getToolTipText() { + return "Saveable for " + getName(); + } + + public int hashCode() { + return modelObject.hashCode(); + } + + public boolean isDirty() { + return dirty; + } + + public void doSave(IProgressMonitor monitor) throws CoreException { + dirty = false; + modelSaveablesProvider.saved(this); + } + + public void makeDirty() { + dirty = true; + } + + public Object getAdapter(Class adapter) { + if (adapter == ResourceMapping.class) { + return Utils.getAdapter(getModelObject(), ResourceMapping.class); + } + return super.getAdapter(adapter); + } +} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelSaveablesProvider.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelSaveablesProvider.java new file mode 100644 index 000000000..442c4e425 --- /dev/null +++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelSaveablesProvider.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2007 IBM Corporation 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: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.team.examples.model.ui; + +import java.util.*; + +import org.eclipse.team.examples.model.ModelObjectDefinitionFile; +import org.eclipse.ui.Saveable; +import org.eclipse.ui.navigator.SaveablesProvider; + +/** + * Provider used by the Common Navigator framework to link saveables to + * model elements. + */ +public class ModelSaveablesProvider extends SaveablesProvider { + + private List saveables = new ArrayList(); + + public Object[] getElements(Saveable saveable) { + if (saveable instanceof ModelSaveable) { + ModelSaveable ms = (ModelSaveable) saveable; + return new Object[] { ms.getModelObject() }; + } + return new Object[0]; + } + + public Saveable getSaveable(Object element) { + for (Iterator iterator = saveables.iterator(); iterator.hasNext();) { + ModelSaveable saveable = (ModelSaveable) iterator.next(); + if (saveable.getModelObject().equals(element)) + return saveable; + } + return null; + } + + public Saveable[] getSaveables() { + return (Saveable[]) saveables.toArray(new Saveable[saveables.size()]); + } + + public void makeDirty(ModelObjectDefinitionFile mo) { + Saveable saveable = getSaveable(mo); + if (saveable == null) { + saveable = new ModelSaveable(this, mo); + saveables.add(saveable); + fireSaveablesOpened(new Saveable[] { saveable }); + } + ((ModelSaveable)saveable).makeDirty(); + fireSaveablesDirtyChanged(new Saveable[] { saveable }); + } + + public void saved(ModelSaveable saveable) { + fireSaveablesDirtyChanged(new Saveable[] { saveable }); + } + +} diff --git a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelWorkbenchAdapter.java b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelWorkbenchAdapter.java index 1e72f4afa..f0d5ad39a 100644 --- a/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelWorkbenchAdapter.java +++ b/examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/model/ui/ModelWorkbenchAdapter.java @@ -24,7 +24,7 @@ import org.eclipse.ui.model.IWorkbenchAdapter; public class ModelWorkbenchAdapter implements IWorkbenchAdapter { // image path - private final String ICON_PATH = "$nl$/icons/full/"; //$NON-NLS-1$ + private static final String ICON_PATH = "$nl$/icons/full/"; //$NON-NLS-1$ /* (non-Javadoc) * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object) @@ -88,7 +88,7 @@ public class ModelWorkbenchAdapter implements IWorkbenchAdapter { /** * Creates an image descriptor. */ - private ImageDescriptor createImageDescriptor(String id) { + public static ImageDescriptor createImageDescriptor(String id) { URL url = FileLocator.find(FileSystemPlugin.getPlugin().getBundle(), new Path(ICON_PATH + id), null); return ImageDescriptor.createFromURL(url); } |