Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVikas Chandra2014-04-09 08:58:41 +0000
committerCurtis Windatt2014-05-13 21:46:51 +0000
commit6c1974e401c328481d97f6218e678f9a8a00c117 (patch)
tree33b4039cf29b8dab262e798bde6e8d21112f086e
parent1d613ffb9366f3deb4c6444fcd1769916fe97c10 (diff)
downloadeclipse.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.java6
-rw-r--r--ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/PluginUndoManager.java64
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) {

Back to the top