diff options
author | janeklb | 2006-05-30 20:44:17 +0000 |
---|---|---|
committer | janeklb | 2006-05-30 20:44:17 +0000 |
commit | fb4594c94a43cb8321f96bcbee8307c72aa3372d (patch) | |
tree | 7240da05278e046c522087713e658b26c4988ea9 | |
parent | de7331ccd02cef8093e69a3ac5e170f6e37207a9 (diff) | |
download | eclipse.pde.ui-post32.tar.gz eclipse.pde.ui-post32.tar.xz eclipse.pde.ui-post32.zip |
- changes done to TextChangeListeners will reduce number of TextEdit ops (eliminates ops for CHANGE events with equal old/new values)
18 files changed, 222 insertions, 6 deletions
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ibundle/IManifestHeader.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ibundle/IManifestHeader.java index 8b06bbb823..1ca49838dc 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ibundle/IManifestHeader.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ibundle/IManifestHeader.java @@ -50,4 +50,11 @@ public interface IManifestHeader extends IDocumentKey { * */ void update(); + + /** + * Forces the header to update its value based on the current components, + * attributes and directives it contains. + * @param notify if true the model will be notified of the "changes" + */ + void update(boolean notify); } diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/build/PropertiesTextChangeListener.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/build/PropertiesTextChangeListener.java index 8d407a2191..8cd4f3b5ea 100644 --- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/build/PropertiesTextChangeListener.java +++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/build/PropertiesTextChangeListener.java @@ -22,6 +22,10 @@ public class PropertiesTextChangeListener extends AbstractKeyValueTextChangeList } public void modelChanged(IModelChangedEvent event) { + Object old = event.getOldValue(); + if (event.getChangeType() == IModelChangedEvent.CHANGE && + old != null && old.equals(event.getNewValue())) + return; Object[] objects = event.getChangedObjects(); for (int i = 0; i < objects.length; i++) { Object object = objects[i]; diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/BundleTextChangeListener.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/BundleTextChangeListener.java index 551184c5dc..8694c780c0 100644 --- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/BundleTextChangeListener.java +++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/BundleTextChangeListener.java @@ -21,6 +21,10 @@ public class BundleTextChangeListener extends AbstractKeyValueTextChangeListener } public void modelChanged(IModelChangedEvent event) { + Object old = event.getOldValue(); + if (event.getChangeType() == IModelChangedEvent.CHANGE && + old != null && old.equals(event.getNewValue())) + return; Object[] objects = event.getChangedObjects(); for (int i = 0; i < objects.length; i++) { Object object = objects[i]; diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/CompositeManifestHeader.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/CompositeManifestHeader.java index cdab6ea110..7b0716b2e8 100644 --- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/CompositeManifestHeader.java +++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/CompositeManifestHeader.java @@ -61,6 +61,7 @@ public class CompositeManifestHeader extends ManifestHeader { } public void update() { + // let subclasses fire changes update(false); } diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/ManifestHeader.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/ManifestHeader.java index bfd4a369e8..773321c296 100644 --- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/ManifestHeader.java +++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/ManifestHeader.java @@ -154,7 +154,12 @@ public class ManifestHeader extends BundleObject implements IManifestHeader { } public void update() { + // TODO + // should do something for headers that don't have their own class + // (and don't override this method) } + public void update(boolean notify) { + } } diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/SingleManifestHeader.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/SingleManifestHeader.java index a8cea5b0c3..c6982f46f9 100644 --- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/SingleManifestHeader.java +++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/SingleManifestHeader.java @@ -68,9 +68,15 @@ public class SingleManifestHeader extends ManifestHeader { } public void update() { + // single headers will fire a change by default + update(true); + } + + public void update(boolean notify) { String old = fValue; fValue = fElement.write(); - fBundle.getModel().fireModelObjectChanged(this, fName, old, fValue); + if (notify) + fBundle.getModel().fireModelObjectChanged(this, fName, old, fValue); } } diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/XMLTextChangeListener.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/XMLTextChangeListener.java index 4570b23102..bec24fa795 100644 --- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/XMLTextChangeListener.java +++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/plugin/XMLTextChangeListener.java @@ -403,6 +403,10 @@ public class XMLTextChangeListener extends AbstractTextChangeListener { } public void modelChanged(IModelChangedEvent event) { + Object old = event.getOldValue(); + if (event.getChangeType() == IModelChangedEvent.CHANGE && + old != null && old.equals(event.getNewValue())) + return; Object[] objects = event.getChangedObjects(); if (objects == null) return; diff --git a/ui/org.eclipse.pde.ui/plugin.properties b/ui/org.eclipse.pde.ui/plugin.properties index ed041d4286..b0a6ac7706 100644 --- a/ui/org.eclipse.pde.ui/plugin.properties +++ b/ui/org.eclipse.pde.ui/plugin.properties @@ -436,3 +436,6 @@ fontDefinition.description.0 = The MANIFEST.MF compare text font is used by Bund convert.html.xhtml = Convert Help files to &XHTML...
pde.sourcelocator = PDE Source Lookup Director
+
+formatManifest.label.0 = Format MANIFEST.MF
+formatManifest.description.0 = Cleanup the MANIFEST.MF by formatting to a default layout
\ No newline at end of file diff --git a/ui/org.eclipse.pde.ui/plugin.xml b/ui/org.eclipse.pde.ui/plugin.xml index d30b49aa32..3be110dd19 100644 --- a/ui/org.eclipse.pde.ui/plugin.xml +++ b/ui/org.eclipse.pde.ui/plugin.xml @@ -681,6 +681,11 @@ categoryId="org.eclipse.ui.category.views"
id="org.eclipse.pde.ui.DependenciesView">
</command>
+ <command
+ name="%formatManifest.label.0"
+ description="%formatManifest.description.0"
+ id="org.eclipse.pde.ui.manifestEditor.FormatManifest">
+ </command>
<!-- launch shortcuts -->
<command
name="%EclipseApplicationShortcut.description.debug"
@@ -862,6 +867,14 @@ enablesFor="1"
id="org.eclipse.pde.ui.BuildPluginAction2">
</action>
+ <action
+ class="org.eclipse.pde.internal.ui.util.FormatManifestAction"
+ definitionId="org.eclipse.pde.ui.manifestEditor.FormatManifest"
+ enablesFor="+"
+ helpContextId="org.eclipse.pde.doc.user.format_bundle"
+ id="org.eclipse.pde.ui.FormatBundleText"
+ label="%formatManifest.label.0"
+ menubarPath="org.eclipse.pde.ui.manifest.tools/group1"/>
</objectContribution>
<objectContribution
objectClass="org.eclipse.core.resources.IFile"
@@ -1741,7 +1754,12 @@ sequence="M3+M2+X S"
commandId="org.eclipse.pde.ui.swtLaunchShortcut.run"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
- </key>
+ </key>
+ <key
+ commandId="org.eclipse.pde.ui.manifestEditor.FormatManifest"
+ schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+ sequence="M1+M2+F">
+ </key>
</extension>
<extension
point="org.eclipse.ltk.core.refactoring.renameParticipants">
@@ -1905,4 +1923,10 @@ name="%pde.sourcelocator">
</sourceLocator>
</extension>
+ <extension
+ point="org.eclipse.ui.perspectiveExtensions">
+ <perspectiveExtension targetID="org.eclipse.pde.ui.PDEPerspective">
+ <actionSet id="org.eclipse.debug.ui.breakpointActionSet"/>
+ </perspectiveExtension>
+ </extension>
</plugin>
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java index e1d2853ce9..d519268e89 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java @@ -23,6 +23,12 @@ public class PDEUIMessages extends NLS { public static String ExportOptionsTab_antReservedMessage; + public static String FormatManifestAction_actionText; + + public static String FormatManifestOperation_subtask; + + public static String FormatManifestOperation_task; + public static String HelpTemplate_sampleText; public static String ImportActionGroup_binaryWithLinkedContent; diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/IncludedFeaturesSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/IncludedFeaturesSection.java index 74b518147c..1f2ed1cacc 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/IncludedFeaturesSection.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/IncludedFeaturesSection.java @@ -162,7 +162,7 @@ public class IncludedFeaturesSection extends TableSection implements try { doAdd(models); } catch (CoreException e) { - PDECore.log(e); + PDEPlugin.log(e); } } } diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/PluginSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/PluginSection.java index 9f69ff47ef..1c77e06c5d 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/PluginSection.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/PluginSection.java @@ -168,7 +168,7 @@ public class PluginSection extends TableSection implements try { doAdd(models); } catch (CoreException e) { - PDECore.log(e); + PDEPlugin.log(e); } } } diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiresSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiresSection.java index 379b451660..e84d0b20f2 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiresSection.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiresSection.java @@ -162,7 +162,7 @@ public class RequiresSection extends TableSection implements try { doAdd(models); } catch (CoreException e) { - PDECore.log(e); + PDEPlugin.log(e); } } } diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/BundleSourcePage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/BundleSourcePage.java index cbe04bf7b9..cda2d16d1e 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/BundleSourcePage.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/BundleSourcePage.java @@ -13,6 +13,8 @@ import java.util.ArrayList; import java.util.Dictionary; import java.util.Enumeration; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.Separator; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.text.reconciler.IReconciler; @@ -22,6 +24,7 @@ import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.pde.core.plugin.IPluginLibrary; import org.eclipse.pde.core.plugin.IPluginModelBase; import org.eclipse.pde.internal.core.ibundle.IBundleModel; @@ -47,6 +50,7 @@ import org.eclipse.pde.internal.ui.editor.text.IColorManager; import org.eclipse.pde.internal.ui.editor.text.ManifestConfiguration; import org.eclipse.pde.internal.ui.editor.text.ReconcilingStrategy; import org.eclipse.pde.internal.ui.elements.DefaultContentProvider; +import org.eclipse.pde.internal.ui.util.FormatManifestAction; import org.eclipse.swt.graphics.Image; import org.osgi.framework.Constants; @@ -267,4 +271,12 @@ public class BundleSourcePage extends KeyValueSourcePage { protected boolean isSelectionListener() { return true; } + + protected void editorContextMenuAboutToShow(IMenuManager menu) { + super.editorContextMenuAboutToShow(menu); + menu.add(new Separator()); + FormatManifestAction action = new FormatManifestAction(); + action.selectionChanged(null, new StructuredSelection(getEditorInput())); + menu.add(action); + } } diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/site/CategorySection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/site/CategorySection.java index 48276e48e3..b34489e9a5 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/site/CategorySection.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/site/CategorySection.java @@ -742,7 +742,7 @@ public class CategorySection extends TreeSection implements try { doAdd(models); } catch (CoreException e) { - PDECore.log(e); + PDEPlugin.log(e); } } } diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties index c8c92572e0..ca2538ebb0 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties @@ -2491,3 +2491,6 @@ ImportPackageSection_dialogButtonLabel=&Show non-exported packages MissingResourcePage_missingResource=Missing Resource MissingResourcePage_unableToOpenFull={0}: ''{1}'' of project ''{2}'' is not available. EditorPreferencePage_folding = &Enable folding when opening a new editor +FormatManifestOperation_task=Formatting MANIFEST.MF file(s)... +FormatManifestOperation_subtask=Formatting {0}... +FormatManifestAction_actionText=Format MANIFEST.MF diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/util/FormatManifestAction.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/util/FormatManifestAction.java new file mode 100644 index 0000000000..58c4a66fd4 --- /dev/null +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/util/FormatManifestAction.java @@ -0,0 +1,69 @@ +package org.eclipse.pde.internal.ui.util; + +import java.lang.reflect.InvocationTargetException; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.pde.internal.ui.PDEPlugin; +import org.eclipse.pde.internal.ui.PDEUIMessages; +import org.eclipse.swt.widgets.Event; +import org.eclipse.ui.IObjectActionDelegate; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.IWorkbenchWindowActionDelegate; +import org.eclipse.ui.PlatformUI; + +public class FormatManifestAction extends Action implements IObjectActionDelegate, IWorkbenchWindowActionDelegate { + + private IStructuredSelection fSelection; + + public FormatManifestAction() { + setText(PDEUIMessages.FormatManifestAction_actionText); + setActionDefinitionId("org.eclipse.pde.ui.manifestEditor.FormatManifest"); //$NON-NLS-1$ + setEnabled(true); + } + + public void setActivePart(IAction action, IWorkbenchPart targetPart) { + targetPart.toString(); + } + + public void runWithEvent(Event event) { + run(this); + } + + public void run() { + run(this); + } + + public void run(IAction action) { + if (fSelection == null) + return; + + try { + PlatformUI.getWorkbench().getProgressService().busyCursorWhile( + new FormatManifestOperation(fSelection.toArray())); + } catch (InvocationTargetException e) { + PDEPlugin.log(e); + } catch (InterruptedException e) { + PDEPlugin.log(e); + } + } + + public void selectionChanged(IAction action, ISelection selection) { + if (!selection.isEmpty() && selection instanceof IStructuredSelection) + fSelection = (IStructuredSelection)selection; + else + fSelection = null; + } + + public void dispose() { + + } + + public void init(IWorkbenchWindow window) { + + } + +} diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/util/FormatManifestOperation.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/util/FormatManifestOperation.java new file mode 100644 index 0000000000..c11bb90a9d --- /dev/null +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/util/FormatManifestOperation.java @@ -0,0 +1,68 @@ +package org.eclipse.pde.internal.ui.util; + +import java.lang.reflect.InvocationTargetException; +import java.util.Enumeration; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.osgi.util.NLS; +import org.eclipse.pde.core.IBaseModel; +import org.eclipse.pde.internal.core.ibundle.IBundleModel; +import org.eclipse.pde.internal.core.ibundle.IBundlePluginModel; +import org.eclipse.pde.internal.core.ibundle.IManifestHeader; +import org.eclipse.pde.internal.core.text.bundle.Bundle; +import org.eclipse.pde.internal.core.text.bundle.BundleModel; +import org.eclipse.pde.internal.ui.PDEPlugin; +import org.eclipse.pde.internal.ui.PDEUIMessages; +import org.eclipse.ui.IFileEditorInput; + +public class FormatManifestOperation implements IRunnableWithProgress { + + private Object[] fObjects; + + public FormatManifestOperation(Object[] objects) { + fObjects = objects; + } + + public void run(IProgressMonitor mon) throws InvocationTargetException, InterruptedException { + mon.beginTask(PDEUIMessages.FormatManifestOperation_task, fObjects.length); + for (int i = 0; !mon.isCanceled() && i < fObjects.length; i++) { + Object obj = fObjects[i]; + if (obj instanceof IFileEditorInput) + obj = ((IFileEditorInput)obj).getFile(); + if (obj instanceof IFile) { + mon.subTask(NLS.bind(PDEUIMessages.FormatManifestOperation_subtask, ((IFile)obj).getFullPath().toString())); + formatManifest((IFile)obj, mon); + } + mon.worked(1); + } + } + + private static void formatManifest(Bundle bundle) { + Enumeration headers = bundle.getHeaders().elements(); + while (headers.hasMoreElements()) + ((IManifestHeader)headers.nextElement()).update(true); + BundleModel model = (BundleModel)bundle.getModel(); + model.adjustOffsets(model.getDocument()); + } + + public static void formatManifest(IFile manifestFile, IProgressMonitor mon) { + ModelModification mod = new ModelModification(manifestFile) { + protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws CoreException { + if (model instanceof IBundlePluginModel) { + IBundleModel bundleModel = ((IBundlePluginModel)model).getBundleModel(); + if (bundleModel.getBundle() instanceof Bundle) + formatManifest((Bundle)bundleModel.getBundle()); + } + } + }; + try { + PDEModelUtility.modifyModel(mod, mon); + } catch (CoreException e) { + PDEPlugin.log(e); + } + } + +} |