diff options
| author | Vikas Chandra | 2014-04-09 08:58:41 +0000 |
|---|---|---|
| committer | Curtis Windatt | 2014-05-13 21:46:51 +0000 |
| commit | 6c1974e401c328481d97f6218e678f9a8a00c117 (patch) | |
| tree | 33b4039cf29b8dab262e798bde6e8d21112f086e | |
| parent | 1d613ffb9366f3deb4c6444fcd1769916fe97c10 (diff) | |
| download | eclipse.pde.ui-6c1974e401c328481d97f6218e678f9a8a00c117.tar.gz eclipse.pde.ui-6c1974e401c328481d97f6218e678f9a8a00c117.tar.xz eclipse.pde.ui-6c1974e401c328481d97f6218e678f9a8a00c117.zip | |
Bug 432403 - Undo redo doesnt happen for adding/removing dependencyI20140514-2000I20140513-2000
Change-Id: Ib147d8e17c6be96948375ede051d75027a7bb5a2
Signed-off-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
| -rw-r--r-- | ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/ModelUndoManager.java | 6 | ||||
| -rw-r--r-- | ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/PluginUndoManager.java | 64 |
2 files changed, 64 insertions, 6 deletions
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/ModelUndoManager.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/ModelUndoManager.java index c5fb5c8e9b..c46ab09703 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/ModelUndoManager.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/ModelUndoManager.java @@ -10,8 +10,6 @@ *******************************************************************************/ package org.eclipse.pde.internal.ui.editor; -import org.eclipse.pde.core.IModelChangedEvent; - import java.util.List; import java.util.Vector; import org.eclipse.jface.action.IAction; @@ -212,4 +210,8 @@ public abstract class ModelUndoManager implements IModelUndoManager, IModelChang public void setIgnoreChanges(boolean ignore) { this.ignoreChanges = ignore; } + + public PDEFormEditor getEditor() { + return editor; + } } diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/PluginUndoManager.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/PluginUndoManager.java index ea931e2898..f2ebe6a09d 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/PluginUndoManager.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/PluginUndoManager.java @@ -11,13 +11,13 @@ package org.eclipse.pde.internal.ui.editor.plugin; import org.eclipse.core.runtime.CoreException; -import org.eclipse.pde.core.IModelChangeProvider; -import org.eclipse.pde.core.IModelChangedEvent; +import org.eclipse.pde.core.*; import org.eclipse.pde.core.build.*; import org.eclipse.pde.core.plugin.*; +import org.eclipse.pde.internal.core.ICoreConstants; import org.eclipse.pde.internal.core.build.BuildObject; import org.eclipse.pde.internal.core.build.IBuildObject; -import org.eclipse.pde.internal.core.bundle.BundleObject; +import org.eclipse.pde.internal.core.bundle.*; import org.eclipse.pde.internal.core.ibundle.IBundleModel; import org.eclipse.pde.internal.core.ibundle.IManifestHeader; import org.eclipse.pde.internal.core.plugin.*; @@ -123,7 +123,37 @@ public class PluginUndoManager extends ModelUndoManager { ((ImportPackageHeader) header).addPackage((PackageObject) element); } } - } + if (element instanceof RequireBundleObject) { + IBaseModel aggModel = getEditor().getAggregateModel(); + if (aggModel instanceof BundlePluginModel) { + BundlePluginModel pluginModel = (BundlePluginModel) aggModel; + RequireBundleObject requireBundle = (RequireBundleObject) element; + pluginBase = pluginModel.getPluginBase(); + String elementValue = requireBundle.getValue(); + IPluginImport importNode = null; + if (pluginModel.getPluginFactory() instanceof BundlePluginModelBase) + importNode = ((BundlePluginModelBase) pluginModel.getPluginFactory()).createImport(elementValue); + String version = ((RequireBundleObject) element).getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE); + IManifestHeader header = bundleModel.getBundle().getManifestHeader(Constants.REQUIRE_BUNDLE); + int bundleManifestVersion = BundlePluginBase.getBundleManifestVersion(((RequireBundleHeader) header).getBundle()); + boolean option = (bundleManifestVersion > 1) ? Constants.RESOLUTION_OPTIONAL.equals(requireBundle.getDirective(Constants.RESOLUTION_DIRECTIVE)) : "true".equals(requireBundle.getAttribute(ICoreConstants.OPTIONAL_ATTRIBUTE)); //$NON-NLS-1$; + boolean exported = (bundleManifestVersion > 1) ? Constants.VISIBILITY_REEXPORT.equals(requireBundle.getDirective(Constants.VISIBILITY_DIRECTIVE)) : "true".equals(requireBundle.getAttribute(ICoreConstants.REPROVIDE_ATTRIBUTE)); //$NON-NLS-1$; + if (importNode != null) { + importNode.setVersion(version); + importNode.setOptional(option); + importNode.setReexported(exported); + } + if (pluginBase instanceof BundlePluginBase && importNode != null) + ((BundlePluginBase) pluginBase).add(importNode); + } + } + if (element instanceof ExportPackageObject) { + IManifestHeader header = bundleModel.getBundle().getManifestHeader(Constants.EXPORT_PACKAGE); + if (header != null && header instanceof ExportPackageHeader) { + ((ExportPackageHeader) header).addPackage((PackageObject) element); + } + } + } } } catch (CoreException e) { PDEPlugin.logException(e); @@ -172,6 +202,32 @@ public class PluginUndoManager extends ModelUndoManager { ((ImportPackageHeader) header).removePackage((PackageObject) element); } } + if (element instanceof RequireBundleObject) { + IBaseModel aggModel = getEditor().getAggregateModel(); + if (aggModel instanceof BundlePluginModel) { + BundlePluginModel mod = (BundlePluginModel) aggModel; + pluginBase = mod.getPluginBase(); + IPluginImport[] imports = pluginBase.getImports(); + IPluginImport currentImport = null; + for (int j = 0; j < imports.length; j++) { + IPluginImport iPluginImport = imports[j]; + String elementValue = ((RequireBundleObject) element).getValue(); + if (iPluginImport.getId().equals(elementValue)) { + currentImport = iPluginImport; + break; + } + } + IPluginImport[] plugins = {currentImport}; + if (pluginBase instanceof BundlePluginBase && currentImport != null) + ((BundlePluginBase) pluginBase).remove(plugins); + } + } + if (element instanceof ExportPackageObject) { + IManifestHeader header = bundleModel.getBundle().getManifestHeader(Constants.EXPORT_PACKAGE); + if (header != null && header instanceof ExportPackageHeader) { + ((ExportPackageHeader) header).removePackage((PackageObject) element); + } + } } } } catch (CoreException e) { |
