This commit was manufactured by cvs2svn to create branch 'Bug_38048'.

Sprout from master 2003-07-03 19:57:18 UTC Jean Michel-Lemieux <jlemieux> 'updating for changes to IJobChangeEvent'
Delete:
    bundles/org.eclipse.compare/.classpath
    bundles/org.eclipse.compare/.cvsignore
    bundles/org.eclipse.compare/.project
    bundles/org.eclipse.compare/about.html
    bundles/org.eclipse.compare/build.properties
    bundles/org.eclipse.compare/buildnotes_compare.html
    bundles/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties
    bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IOpenable.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/package.html
    bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/DifferencesIterator.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/IRangeComparator.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/LinkedRangeDifference.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifference.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifferencer.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/package.html
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffElement.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewerResources.properties
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
    bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/package.html
    bundles/org.eclipse.compare/icons/full/clcl16/ancestorpane_co.gif
    bundles/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif
    bundles/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif
    bundles/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif
    bundles/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif
    bundles/org.eclipse.compare/icons/full/clcl16/next_nav.gif
    bundles/org.eclipse.compare/icons/full/clcl16/prev_nav.gif
    bundles/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif
    bundles/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif
    bundles/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif
    bundles/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif
    bundles/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif
    bundles/org.eclipse.compare/icons/full/cview16/compare_view.gif
    bundles/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif
    bundles/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif
    bundles/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif
    bundles/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif
    bundles/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif
    bundles/org.eclipse.compare/icons/full/dlcl16/next_nav.gif
    bundles/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif
    bundles/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif
    bundles/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif
    bundles/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif
    bundles/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif
    bundles/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif
    bundles/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif
    bundles/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif
    bundles/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif
    bundles/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif
    bundles/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif
    bundles/org.eclipse.compare/icons/full/elcl16/next_nav.gif
    bundles/org.eclipse.compare/icons/full/elcl16/prev_nav.gif
    bundles/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif
    bundles/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif
    bundles/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif
    bundles/org.eclipse.compare/icons/full/etool16/conflict_edit.gif
    bundles/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif
    bundles/org.eclipse.compare/icons/full/eview16/compare_view.gif
    bundles/org.eclipse.compare/icons/full/obj16/day_obj.gif
    bundles/org.eclipse.compare/icons/full/obj16/resource_obj.gif
    bundles/org.eclipse.compare/icons/full/ovr16/add_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/chg_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/del_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/error_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/indel_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif
    bundles/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif
    bundles/org.eclipse.compare/icons/full/wizban/applypatch_wizban.gif
    bundles/org.eclipse.compare/plugin.properties
    bundles/org.eclipse.compare/plugin.xml
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/.classpath
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/.cvsignore
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/.project
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/about.html
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/build.properties
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/buildnotes_compare.html
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IOpenable.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Attic/LineReader.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/package.html
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/DifferencesIterator.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/IRangeComparator.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/LinkedRangeDifference.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifference.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifferencer.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/package.html
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffElement.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewerResources.properties
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/package.html
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/ancestorpane_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/next_nav.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/prev_nav.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/cview16/compare_view.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/next_nav.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/next_nav.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/prev_nav.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/etool16/conflict_edit.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/eview16/compare_view.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/obj16/day_obj.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/obj16/resource_obj.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/add_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/chg_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/del_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/error_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/indel_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/wizban/applypatch_wizban.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.properties
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.xml
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/contentMergeViewers.exsd
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/contentViewers.exsd
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/structureCreators.exsd
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/schema/structureMergeViewers.exsd
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/scripts/exportplugin.xml
    bundles/org.eclipse.compare/schema/contentMergeViewers.exsd
    bundles/org.eclipse.compare/schema/contentViewers.exsd
    bundles/org.eclipse.compare/schema/structureCreators.exsd
    bundles/org.eclipse.compare/schema/structureMergeViewers.exsd
    bundles/org.eclipse.compare/scripts/exportplugin.xml
    bundles/org.eclipse.team.cvs.ssh/.classpath
    bundles/org.eclipse.team.cvs.ssh/.cvsignore
    bundles/org.eclipse.team.cvs.ssh/.options
    bundles/org.eclipse.team.cvs.ssh/.project
    bundles/org.eclipse.team.cvs.ssh/about.html
    bundles/org.eclipse.team.cvs.ssh/build.properties
    bundles/org.eclipse.team.cvs.ssh/plugin.properties
    bundles/org.eclipse.team.cvs.ssh/plugin.xml
    bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Blowfish.java
    bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Cipher.java
    bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Client.java
    bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/ClientPacket.java
    bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/KnownHosts.java
    bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Misc.java
    bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Packet.java
    bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Policy.java
    bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHMethod.java
    bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHPlugin.java
    bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHServerConnection.java
    bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/ServerPacket.java
    bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/messages.properties
    examples/org.eclipse.compare.examples/.cvsignore
    examples/org.eclipse.compare.examples/.project
    examples/org.eclipse.compare.examples/about.html
    examples/org.eclipse.compare.examples/build.properties
    examples/org.eclipse.compare.examples/doc-html/hglegal.htm
    examples/org.eclipse.compare.examples/doc-html/ngibmcpy.gif
    examples/org.eclipse.compare.examples/doc-html/ui_structurecreator_ex.html
    examples/org.eclipse.compare.examples/plugin.properties
    examples/org.eclipse.compare.examples/plugin.xml
    examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/CompareExampleMessages.properties
    examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/KeyValuePairStructureCreator.java
    examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/TextMergeViewerCreator.java
    examples/org.eclipse.compare.examples/src/org/eclipse/compare/examples/structurecreator/Util.java
    examples/org.eclipse.team.examples.filesystem/.classpath
    examples/org.eclipse.team.examples.filesystem/.cvsignore
    examples/org.eclipse.team.examples.filesystem/.project
    examples/org.eclipse.team.examples.filesystem/about.html
    examples/org.eclipse.team.examples.filesystem/build.properties
    examples/org.eclipse.team.examples.filesystem/doc-html/hglegal.htm
    examples/org.eclipse.team.examples.filesystem/doc-html/ngibmcpy.gif
    examples/org.eclipse.team.examples.filesystem/doc-html/team_filesystem_ex.html
    examples/org.eclipse.team.examples.filesystem/icons/full/wizards/fsicon_wiz.gif
    examples/org.eclipse.team.examples.filesystem/icons/full/wizban/newconnect_wizban.gif
    examples/org.eclipse.team.examples.filesystem/plugin.properties
    examples/org.eclipse.team.examples.filesystem/plugin.xml
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileModificationValidator.java
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemPlugin.java
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemProvider.java
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemRemoteResource.java
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/FileSystemSimpleAccessOperations.java
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/Policy.java
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/StreamUtil.java
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/messages.properties
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ConfigurationWizard.java
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/DisconnectAction.java
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemAction.java
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemMainPage.java
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/FileSystemPropertiesPage.java
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/GetAction.java
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/PutAction.java
    examples/org.eclipse.team.examples.filesystem/src/org/eclipse/team/examples/filesystem/ui/ReplaceAction.java
    tests/org.eclipse.compare.tests/.classpath
    tests/org.eclipse.compare.tests/.cvsignore
    tests/org.eclipse.compare.tests/.project
    tests/org.eclipse.compare.tests/JUnit Tests/org/eclipse/compare/tests/AllTests.java
    tests/org.eclipse.compare.tests/JUnit Tests/org/eclipse/compare/tests/DocLineComparatorTest.java
    tests/org.eclipse.compare.tests/about.html
    tests/org.eclipse.compare.tests/build.properties
    tests/org.eclipse.compare.tests/plugin.properties
    tests/org.eclipse.compare.tests/plugin.xml
    tests/org.eclipse.compare.tests/test.xml
    tests/org.eclipse.team.tests.core/.classpath
    tests/org.eclipse.team.tests.core/.cvsignore
    tests/org.eclipse.team.tests.core/.project
    tests/org.eclipse.team.tests.core/about.html
    tests/org.eclipse.team.tests.core/build-tests.xml
    tests/org.eclipse.team.tests.core/build.properties
    tests/org.eclipse.team.tests.core/ftp.properties
    tests/org.eclipse.team.tests.core/plugin.xml
    tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/AllTargetTests.java
    tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/AllTeamTests.java
    tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RemoteResourceTests.java
    tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderBic.java
    tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderNaish.java
    tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderOtherSport.java
    tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTests.java
    tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderTypeBic.java
    tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RepositoryProviderWithLinking.java
    tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/StreamTests.java
    tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/SyncElementTest.java
    tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TargetProviderTests.java
    tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TargetTestSetup.java
    tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java
    tests/org.eclipse.team.tests.core/test.xml
    tests/org.eclipse.team.tests.core/webdav.properties
    tests/org.eclipse.team.tests.cvs.core/.classpath
    tests/org.eclipse.team.tests.cvs.core/.cvsignore
    tests/org.eclipse.team.tests.cvs.core/.project
    tests/org.eclipse.team.tests.cvs.core/about.html
    tests/org.eclipse.team.tests.cvs.core/benchmark/cvsui_benchmark.bat
    tests/org.eclipse.team.tests.cvs.core/benchmark/readme.txt
    tests/org.eclipse.team.tests.cvs.core/benchmark/team2.0/2002_02_26.integration.all.xml
    tests/org.eclipse.team.tests.cvs.core/benchmark/team2.0/2002_03_19.integration.all.xml
    tests/org.eclipse.team.tests.cvs.core/benchmark/team2.0/2002_04_24.milestone5.all.xml
    tests/org.eclipse.team.tests.cvs.core/benchmark/team2.0/2002_04_25.integration.commandline.xml
    tests/org.eclipse.team.tests.cvs.core/benchmark/team2.0/2002_07_10.release2_0.commandline.xml
    tests/org.eclipse.team.tests.cvs.core/benchmark/team2.0/2002_07_11.release2_0.all.xml
    tests/org.eclipse.team.tests.cvs.core/benchmark/team2.1/I20021127.all.xml
    tests/org.eclipse.team.tests.cvs.core/benchmark/team2.1/I20030129.all.xml
    tests/org.eclipse.team.tests.cvs.core/benchmark/team2.1/RC1.all.xml
    tests/org.eclipse.team.tests.cvs.core/benchmark/teamui_benchmark.bat
    tests/org.eclipse.team.tests.cvs.core/benchmark/vcm1.0/2002_02_26.integration.all.xml
    tests/org.eclipse.team.tests.cvs.core/benchmark/vcmui_benchmark.bat
    tests/org.eclipse.team.tests.cvs.core/build-tests.xml
    tests/org.eclipse.team.tests.cvs.core/build.properties
    tests/org.eclipse.team.tests.cvs.core/launchConfigurations/CVS One Test.launch
    tests/org.eclipse.team.tests.cvs.core/launchConfigurations/CVS Provider Tests.launch
    tests/org.eclipse.team.tests.cvs.core/launchConfigurations/CVS Tests.launch
    tests/org.eclipse.team.tests.cvs.core/launchConfigurations/Test using Ant application.launch
    tests/org.eclipse.team.tests.cvs.core/launchConfigurations/benchmark/Benchmark Test.launch
    tests/org.eclipse.team.tests.cvs.core/launchConfigurations/benchmark/PrintDiffMain.launch
    tests/org.eclipse.team.tests.cvs.core/plugin.xml
    tests/org.eclipse.team.tests.cvs.core/readme.html
    tests/org.eclipse.team.tests.cvs.core/repository.properties
    tests/org.eclipse.team.tests.cvs.core/resources/BenchmarkTest/benchmarkBig.zip
    tests/org.eclipse.team.tests.cvs.core/resources/BenchmarkTest/benchmarkSmall.zip
    tests/org.eclipse.team.tests.cvs.core/resources/BenchmarkTest/benchmarkTiny.zip
    tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/CVSROOT/modules
    tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/common/docs/readme.html
    tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/common/macros/macro1
    tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project1/f1/file-in-p1.txt
    tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project2/file-p2.txt
    tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project3/src/file.c
    tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project3/src/file.h
    tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project3/sub/file-sub.txt
    tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project7/common/common.txt
    tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project7/linux/linux.txt
    tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project7/pc/pc.txt
    tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project8/file-p8.txt
    tests/org.eclipse.team.tests.cvs.core/self-host.xml
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/AllTeamAndCVSTests.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/AllTests.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CVSClientException.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CVSTestSetup.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CommandLineCVSClient.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/EclipseCVSClient.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/EclipseTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/ICVSClient.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/JUnitTestCase.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/TestConnection.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/TestConnectionMethod.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/AllTestsCompatibility.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/BasicTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/CompatibleTestSetup.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/ConflictTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/ModuleTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/SameResultEnv.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/AllTestsCVSResources.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/BatchedTestSetup.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/EclipseFolderTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/EclipseSynchronizerTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/ResourceSyncBytesTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/ResourceSyncInfoTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/AllTestsProvider.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/CVSProviderTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ImportTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/IsModifiedTests.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/LinkResourcesTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ModuleTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/RemoteResourceTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ResourceDeltaTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/SyncElementTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/WatchEditTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/AllTestsTeamSubscriber.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSMergeSubscriberTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSSyncSubscriberTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/subscriber/CVSWorkspaceSubscriberTest.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/CVSUITestCase.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/DummyPromptCondition.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/EclipseUITestHarnessApplication.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/EmptyPerspective.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/FakeSelectionProvider.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/ICriteria.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestCase.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestResult.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestRunner.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/PerformanceTimer.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/SequenceGenerator.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/Util.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/Waiter.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/AllTests.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/BenchmarkTestSetup.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/CommandTests.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/SyncTests.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/WorkflowTests.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/ArgumentParser.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/CaseEntry.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/DelimitedValuesWriter.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/GroupEntry.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/ILogEntryVisitor.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogEntry.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogEntryContainer.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogFormatterUIMain.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/MergeRunsVisitor.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintCSVDiffVisitor.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintCSVSummaryVisitor.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintDiffMain.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintDiffVisitor.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintSummaryMain.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintTextDiffVisitor.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintTextSummaryVisitor.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/Result.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/RootEntry.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/TaskEntry.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/Util.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/unit/CheckoutOperationTests.java
    tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/unit/MenuEnablementTest.java
    tests/org.eclipse.team.tests.cvs.core/test.xml
diff --git a/bundles/org.eclipse.compare/.classpath b/bundles/org.eclipse.compare/.classpath
deleted file mode 100644
index 8a49fb9..0000000
--- a/bundles/org.eclipse.compare/.classpath
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="src" path="compare"/>
-    <classpathentry kind="src" path="/org.eclipse.core.boot"/>
-    <classpathentry kind="src" path="/org.eclipse.core.runtime"/>
-    <classpathentry kind="src" path="/org.eclipse.ui"/>
-    <classpathentry kind="src" path="/org.eclipse.core.resources"/>
-    <classpathentry kind="src" path="/org.eclipse.swt"/>
-    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-    <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/bundles/org.eclipse.compare/.cvsignore b/bundles/org.eclipse.compare/.cvsignore
deleted file mode 100644
index ba077a4..0000000
--- a/bundles/org.eclipse.compare/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin
diff --git a/bundles/org.eclipse.compare/.project b/bundles/org.eclipse.compare/.project
deleted file mode 100644
index bf7d0f5..0000000
--- a/bundles/org.eclipse.compare/.project
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.compare</name>
-	<comment></comment>
-	<projects>
-		<project>org.eclipse.core.boot</project>
-		<project>org.eclipse.ui</project>
-		<project>org.eclipse.core.runtime</project>
-		<project>org.eclipse.core.resources</project>
-		<project>org.eclipse.swt</project>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/bundles/org.eclipse.compare/about.html b/bundles/org.eclipse.compare/about.html
deleted file mode 100644
index 9db411a..0000000
--- a/bundles/org.eclipse.compare/about.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>20th June, 2002</p>	
-<h3>License</h3>
-<p>Eclipse.org makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Common Public License Version 1.0 (&quot;CPL&quot;).  A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>.
-For purposes of the CPL, &quot;Program&quot; will mean the Content.</p>
-
-<h3>Contributions</h3>
-
-<p>If this Content is licensed to you under the terms and conditions of the CPL, any Contributions, as defined in the CPL, uploaded, submitted, or otherwise
-made available to Eclipse.org, members of Eclipse.org and/or the host of Eclipse.org web site, by you that relate to such
-Content are provided under the terms and conditions of the CPL and can be made available to others under the terms of the CPL.</p>
-
-<p>If this Content is licensed to you under license terms and conditions other than the CPL (&quot;Other License&quot;), any modifications, enhancements and/or
-other code and/or documentation (&quot;Modifications&quot;) uploaded, submitted, or otherwise made available to Eclipse.org, members of Eclipse.org and/or the
-host of Eclipse.org, by you that relate to such Content are provided under terms and conditions of the Other License and can be made available
-to others under the terms of the Other License.  In addition, with regard to Modifications for which you are the copyright holder, you are also
-providing the Modifications under the terms and conditions of the CPL and such Modifications can be made available to others under the terms of
-the CPL.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/build.properties b/bundles/org.eclipse.compare/build.properties
deleted file mode 100644
index f9934a8..0000000
--- a/bundles/org.eclipse.compare/build.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials 
-# are made available under the terms of the Common Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/cpl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-source.compare.jar = compare/
-bin.includes = icons/,\
-               plugin.xml,\
-               *.jar,\
-               plugin.properties,\
-               about.html
-src.includes = about.html,\
-               schema/
diff --git a/bundles/org.eclipse.compare/buildnotes_compare.html b/bundles/org.eclipse.compare/buildnotes_compare.html
deleted file mode 100644
index 00fe8e2..0000000
--- a/bundles/org.eclipse.compare/buildnotes_compare.html
+++ /dev/null
@@ -1,1352 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <meta name="Author" content="IBM">
-   <title>Eclipse Platform Release Notes - Desktop</title>
-</head>
-<body> 
-
-<h1>
-Eclipse Platform Build Notes<br>
-Compare</h1>
-Eclipse Build Input July 1st 2003
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=38808">#38808</a>: NPE in log file when restoring files from history.<br>
-fixed minor error in schema files
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input June 24th 2003
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=38770">#38770</a>: CompareEditor should implement IReusableEditor<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input June 10th 2003
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=38713">#38713</a>: Compare with -> Each other is not enabled<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input June 3rd 2003
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=37531">#37531</a>: the javadoc of CompareViewerPane.setImage(Image)<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=38262">#38262</a>: Apply patch applies unchecked changes<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=36399">#36399</a>: Compare did retrieve entire remote ZIP contents on selection change<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=38198">#38198</a>: TVT21:  Strings are not externalized<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input Mai 27th 2003
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=37849">#37849</a>: "Ignore whitespace" ignores also closing brackets?!?<br>
-
-Problem reports closed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=37582">#37582</a>: Ignore whitespace option should be a button in the compare editor<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input March 27th 2003
-
-<h2>
-Problem reports fixed</h2>
-Fixed 5 Javadoc warnings
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input March 24th 2003
-
-<h2>
-Problem reports fixed</h2>
-Updated schema copyright notices<br>
-updated javadoc
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input March 19th 2003
-
-<h2>
-Problem reports fixed</h2>
-Fixed wording in properties files<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=35130">#35130</a>: Dialogs do not set the dialog font<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input March 14th 2003
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=34732">#34732</a>: Compare/Patch preference page mnemonic<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=34696">#34696</a>: Title casing issues<br>
-
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input March 6th 2003
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=27405">#27405</a>: Should consider using the new font propogation support<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=24255">#24255</a>: Internal error when invoking "Restore from Local History" in Outline view<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=32737">#32737</a>: NegativeArraySizeException: Compare/patch preference page<br>
-
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input March 4th 2003
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=32769">#32769</a>: Missing mneumonic in compare preference page<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=32798">#32798</a>: No mnemonic for ComparePreferencePage.useSingleLine.label<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=32207">#32207</a>: Wording: "Open with Compare Editor" action in sync view<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28190">#28190</a>: Middle area should act like sash<br>
-added required IDs for compare viewers in plugin.xml<br>
-
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input February 20th 2003
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=20248">#20248</a>: [Compare] Have to perform two actions to see diff<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=24165">#24165</a>: Should have menu action for showing compare contents<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13332">#13332</a>: autosave before patching: can i undo?<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=24077">#24077</a>: Comparing file named 'platformOption' does not use text editor<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=23958">#23958</a>: NPE in compare with patch<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28402">#28402</a>: CompareConfiguration leaks Images<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13844">#13844</a>: TextMergeViewer should keep track of its posted runnables<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14353">#14353</a>: Cannot perform merge with keyboard accelerators/mnemonics<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input February 18th 2003
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5323">#5323</a>: Compare does not handle correctly conflicts at same location<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=26035">#26035</a>: Local history uses wrong character encoding<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=15654">#15654</a>: Can't maximize Compare with Local History window<br>
-
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input February 13th 2003
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=31136">#31136</a>: Red icon too intrusive<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=31357">#31357</a>: Compare View -- Compare-style option required.<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=31633">#31633</a>: Cannot apply patch successfully<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10754">#10754</a>: Compare actions should target source window<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input February 11th 2003
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=25507">#25507</a>: Compare view prevents Ctrl + F6 working<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18571">#18571</a>: patch: scary error dialog when no patch in clipboard<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28840">#28840</a>: Strange behavious applying patch<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input February 6th 2003 (M5 aka RC0)
-
-<h2>
-API Additions</h2>
-Added new method EditionSelectionDialog.getSelection()
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=30525">#30525</a>: "Team" menu item missing accelerator<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28202">#28202</a>: contentmergeviewers do not work with mixed-case extensions<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=19114">#19114</a>: Restore Java Element from Local History should also provide check boxes [compare]<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28436">#28436</a>: Overview rule green only after focus change<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=29793">#29793</a>: Automatically suggest a fuzz factor when applying a patch<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input January 28th 2003
-
-<h2>
-API Additions</h2>
-Added new method CompareUI.findContentViewer(..., Object input, ...)
-
-<h2>
-Problem reports fixed</h2>
-Remoced doc folder.<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=24597">#24597</a>: Compare UI API issues<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=23883">#23883</a>: CompareDialog.commitAction.label string resource name is wrong<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=29791">#29791</a>: Rename 'Compare to Patch' to 'Apply Patch'<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input January 14th 2003
-
-<h2>
-Problem reports fixed</h2>
-Extension point schema files added.<br>
-Resolve status indicator is only shown if there are incoming changes.
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input January 7th 2003
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28278">#28278</a>: TextMergeViewer leaks Color objects<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=27864">#27864</a>: Load of CompareUI fails when not triggered in UI thread<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28388">#28388</a>: Illegal Argument Exceptions in compare viewer<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input December 17th 2002
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28388">#28388</a>: Illegal Argument Exceptions in compare viewer<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input December 16th 2002
-
-<h2>
-Problem reports fixed</h2>
-Fixed a problem with trim in compare viewer on Mac OS X.<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28278">#28278</a>: TextMergeViewer leaks Color objects<br>
-
-<hr WIDTH="100%"></h1>
-Eclipse Build Input December 13th 2002
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=28012">#28012</a>: Double-click behaving strangely in Synchronize View<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input December 10th 2002
-
-<h2>
-What's new in this drop</h2>
-The Textmergeviewer sports a first cut of a new UI for left/right copying,
-showing the 'resolved' status of a change, and uses smooth lines to
-connect the differing ranges in the left and right panes.
-The new UI options are off by default. You can turn them on
-with the three 'experimental' options on the Compare preference page.
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=27993">#27993</a>: Incorrect structure comparison<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input December 3rd 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API Additions</h3>
-Made internal class Splitter public API.
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18807">#24597</a>: Compare UI API issues<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input November 26th 2002
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18807">#20975</a>: Compare preference page has no F1 help<br>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input June 27th 2002
-
-<h2>
-What's new in this drop</h2>
-Updated JavaDoc package.html files
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input June 25th 2002
-
-<h2>
-What's new in this drop</h2>
-Updated JavaDoc
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input June 12th 2002
-
-<h2>
-What's new in this drop</h2>
-
-There were several complains that clicking on a zip file in the left pane (structure input pane) feeds all other
-compare panes (see bug 13730). There are cases where this is expensive (for example a large zip file that has 
-to be read from a repository). To avoid those situations the left pane now honors single or double click mode as 
-set in Preferences->Workbench. So if this preference is set to double click the user has to double click on a file
-in the left pane to actually feed all other compare panes.
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input June 8th 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18807">#18807</a>: Compare with patch fails due to missing LF<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13730">#13730</a>: Entire zipfiles content sent prior when computing synchronization view content<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input June 7th 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13730">#13730</a>: Entire zipfiles content sent prior when computing synchronization view content<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14952">#14952</a>: Diff Browser Opens Too Small / Not Easily Resizable<br>
-
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input June 6th 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-New constant CompareUI.PLUGIN_ID
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13949">#13949</a>: DBCS: bogus at text compare<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=19013">#19013</a>: backgronud color: is it honored?<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=19216">#19216</a>: Accessibility in Workbench > Compare > Text Compare<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=19371">#19371</a>: Java & Compare editor's Next/Previous toolbar buttons shouldn't be retargetable<br>
-
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input June 1st 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-Made class NavigationAction public.
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8004">#8004</a>: Ctrl+E beeps every time<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14800">#14800</a>: Compare View eats tabs<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18200">#18200</a>: Both sets of arrows say "Select Next Change"<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18206">#18206</a>: Casing, wording issue on "Last Resource reached" prompt<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16285">#16285</a>: Add from Local History needs a description label<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17431">#17431</a>: Accessibility issues<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18148">#18148</a>: Using combinations of No and Next file button break wrapping<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18151">#18151</a>: Next File button does not ding when on last file<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16570">#16570</a>: Compare refuses to show further differences if not ignoring whitespaces<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10790">#10790</a>: Patch does not apply if file not found locally<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=12643">#12643</a>: Expand all does not disable when there is no selection<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input May 31st 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=18116">#18116</a>: Compare view does not inherit Java editor background color<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13190">#13190</a>: Compare with Patch does not apply Patch, if single file selected<br>
-
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input May 30th 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17699">#17699</a>: Java Editor: Local Histroy menu entries are enabled for read-only files<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16283">#16283</a>: Add from Local History items are unsorted<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16288">#16288</a>: Add from Local History: list of available editions flashes<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17664">#17664</a>: Applying a patch with deleted package fails<br>
-
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input May 29th 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14040">#14040</a>: Platform interoperability issue w.r.t. Compare With Patch<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17790">#17790</a>: Missing mnemonics in patch selection dialog<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10917">#10917</a>: Patch support does not use mnemonics<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input May 28th 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17889">#17889</a>: Should not assume type of PropertyChangeEvent values<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17678">#17678</a>: Applying a patch does many compiles<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17536">#17536</a>: NPE in compare<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17121">#17121</a>: Casing of message when end of changes needs to be sentence style<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=17648">#17648</a>: Can't apply patch w/o ignoring whitespace<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=16936">#16936</a>: Compare with patch requires "Ignore Whitespace" to be turned off<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input May 18th 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14371">#14371</a>: TextMergeViewer.sameDoc() is broken<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14378">#14378</a>: CompareEditorInput never resets dirtyness flag (detailed)<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14680">#14680</a>: Compare unreadable in high contrast black<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14952">#14952</a>: Diff Browser Opens Too Small / Not Easily Resizable<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14742">#14742</a>: Ignore whitespace preference<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14624">#14624</a>: No visual cue when compared file wraps<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13606">#13606</a>: Support multiple selection in Add from local history<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input May 16th 2002
-
-<h2>
-What's new in this drop</h2>
-Bumped plugin version number to 2.0.0<br>
-Adapted to new findEditor methods<br>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8373">#8373</a>: Compare With->Patch... missing mnemonic<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=12719">#12719</a>: "Show Pseudo-Conflicts" setting is problematic<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input April 30th 2002
-
-<h2>
-What's new in this drop</h2>
-All strings NLSed.
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14515">#14515</a>: java compare uses internal jcore scanner<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=14782">#14782</a>: Add from Local History missing mnemonic<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input April 18th 2002
-
-<h2>
-What's new in this drop</h2>
-All strings NLSed.
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=13152">#13152</a>: Internal error in "Add from Local History..." on packages<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input April 9th 2002
-
-<h2>
-What's new in this drop</h2>
-New context menu action 'Add From Local History'. Just select any resource container and
-'Add From Local History' presents all files that were deleted from the workspace but are
-still in the local history. 
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-The new 'Add From Local History' suffers from #12915. It works if the files were deleted
-within the same session. However if you shut down and restart a workspace some deleted
-files are nor listed.
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11578">#11578</a>: Patch: Missing resource on dialog<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11579">#11579</a>: Compare with Patch should be disabled on closed projects<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11907">#11907</a>: clicking in bird's eye view spots does nothing if panes not synched<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11536">#11536</a>: Option to turn off structured comparison<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10682">#10682</a>: Need better UI for recovering deletions from local history<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11446">#11446</a>: provide "add from local history" for compilation units<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8615">#8615</a>: Styled Text widget does not respond to system color change<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9673">#9673</a>: editor background color - no effect on other viewers<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11642">#11642</a>: Compare editors not using default background colors<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10434">#10434</a>: Compare browser fails silently and does not give result<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input March 18th 2002
-
-<h2>
-What's new in this drop</h2>
-First cut of a birdseyeview for the text compare viewer.<br>
-'Compare which Each other' for Java elements.
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=3641">#3641</a>: DCR: Can't compare from outliner (1GDHJKK)<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input March 14th 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=11305">#11305</a>: Can't compare a "C" file<br>
-
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input March 12th 2002
-
-<h2>
-What's new in this drop</h2>
-Structure Compare viewers are enabled by default.<br>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=10379">#10379</a>: Compare with Local History Dialog: lower pane is missing a bordeer<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9768">#9768</a>: (empty-menu) in compare view<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9842">#9842</a>: Expand All action needed in structure compare view<br>
-
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input March 5th 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9869">#9869</a>: Need more support for creating/deleting resources<br>
-
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input February 26th 2002
-
-<h2>
-What's new in this drop</h2>
-Patch: for every rejected file a task marker is added<br>
-Compare preference page shows options in a preview<br>
-New preference option for additional compare status line information
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9540">#9540</a>: Compare with patch: it should not be possible to check items that could not be applied<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9532">#9532</a>: Compare with patch: next disabled although clipboard specified<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7681">#7681</a>: Structured results expands import statements<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9572">#9572</a>: Debugging trace left in status bar<br>
-
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input February 12th 2002
-
-<h2>
-What's new in this drop</h2>
-The patch wizard no longer opens a Compare Editor but applies the
-patch directly to the workspace. This will be the default.
-In the future the old behavior of opening the Compare Editor will be
-an additional option when finishing the wizard.
-<br>
-Patch wizard has a 'Reverse' option for applying a "reversed" patch.
-This option can be used to 'undo' a patch.
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9153">#9153</a>: NPE when closing synchronize view<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9331">#9331</a>: NPE during compare with stream version<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6346">#6346</a>: Problems with Patch<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6727">#6727</a>: Patch: *.rej file must be saved in workspace<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7358">#7358</a>: Internal Error in Compare with Patch with new files<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input February 5th 2002
-
-<h2>
-What's new in this drop</h2>
-The structure compare pane opens when a resource is selected.
-In previous version a double click was required.
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5063">#5063</a>: Should not have to double-click to open Structure Compare<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2602">#2602</a>: Compare FW accessibility issues (1GK79UB)<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2707">#2707</a>: Merge viewer should ask for save before releasing (1GI9JXS)<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2772">#2772</a>: DCR: Automatic structure compare (1GJ6EUY)<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=3829">#3829</a>: Smart rename button enabled when no smartness is available (1GEUVHN)<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=9089">#9089</a>: Local history - Selecting item in structured compare has no effect<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input January 29th 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6271">#6271</a>: Can't tell which file is which in Compare browser<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2519">#2519</a>: next/prev arrows active when only one difference in compare (1GFIQX3)<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8363">#8363</a>: NPE comparing two resources in the navigator.<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2501">#2501</a>: Empty menu in compare browser (1GFBQKE)<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2854">#2854</a>: Compare: Save code path problematic (1GJYGAX)<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8574">#8574</a>: Not structure compare in compare with local history<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input January 23th 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=8089">#8089</a>: Replace from local history: parse error<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input January 22th 2002
-
-<h2>
-What's new in this drop</h2>
-Fixed an inconsistency in the binary compare viewer:
-info message didn't match +/-icon in the resource compare pane.
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=3859">#3859</a>: replace from history does not work for elements with error (1GEYIZ6)<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6177">#6177</a>: Double click action dangerous in 'Restore from Local History'<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7821">#7821</a>: Team 2.0 CVS synchronze bug 'no-name' dirs..<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2773">#2773</a>: Java structure compare should give better indication when no changes (1GJ6ENE)<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input January 15th 2002
-
-<h2>
-What's new in this drop</h2>
-Fixed a problem in DiffNode.getName()and the DiffTreeViewer's label provider
-where the left and right half of a DiffNode label would be reversed because
-the "leftIsLocal" property of a CompareConfiguration wasn't obeyed.
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=1893">#1893</a>: Compare Viewer doesn't scroll to last line (1GBB34N)<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5839">#5839</a>: Usability: Initial diff is sometimes not horizontally aligned<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5325">#5325</a>: Compare always scroll the text pane to the extreme limit<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7048">#7048</a>: First element not selected<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2548">#2548</a>: Project compare should open viewing selected file (1GFMRP6)<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2938">#2938</a>: Replace from local history should show busy cursor (1GKU0P3)<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7594">#7594</a>: Menu entry "Replace with Previous" shouldn't have a "..."<br>
-Workaround added for:<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=7320">#7320</a>: Next diff scrolls when going into current diff<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input January 8th 2002
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-Added methods to CompareUI plugin for adding and removing aliases
-for the file extension to StructureCompareViewer mapping
-(addStructureViewerAlias, removeStructureViewerAlias).
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6828">#6828</a>: Support with replace with previous<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=2396">#2396</a>: Save in compare editors needs progress bar (1GEYF58)<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5271">#5271</a>: JARs compared as source in release browser<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5121">#5121</a>: Replace with Previous (from local history)<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input December 11th 2001
-
-<h2>
-What's new in this drop</h2>
-Keyboard shortcuts for 'Goto next Difference' and 'Goto previous Difference'
-changed to Control-E and Control-Shift-E.<br>
-Better NLS support.<br>
-Updated file "about.html".
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input December 4th 2001
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=4381">#4381</a>: Replace from local histroy - workspace element included <br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse Build Input November 27th 2001
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=6298">#6298</a>: Replace with Local History: Workbench -> Workspace<br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5238">#5238</a>: Compare fails if takes more than 20 seconds<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse SDK Build 210, November 12th, 2001
-
-<h2>
-What's new in this drop</h2>
-First cut for 'rejected hunk' support.
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-new classes CompareViewerPane and CompareViewerSwitchingPane<br>
-
-<h3>
-Other highlights</h3>
-Improved Patch wizard.<br>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5723">#5723</a>: Apply Patch dialog has no radio selection<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse SDK Build 207, November 1st, 2001
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5334">#5334: Internal errors using patch tool</a><br>
-<a href="http://dev.eclipse.org/bugs/show_bug.cgi?id=5150">#5150: Compare with patch cannot read VCM's CVS patch file</a><br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse SDK Build 204, October 12th, 2001
-
-<h2>
-What's new in this drop</h2>
-First cut of patch support.
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse SDK Build 202, September 27th, 2001
-
-<h2>
-What's new in this drop</h2>
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-1GKKUA5: ITPUI:WINNT - Severe: memory leak in sync view<br>
-1GKKGGS: ITPJUI:WIN2000 - (136) compares zips as source<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse SDK Build 201, September 21st, 2001
-
-<h2>
-What's new in this drop</h2>
-removed direction icon in TextMergeViewer for two-way compare
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-1GJURWJ: ITPUI:WIN2000 - Hebrew + Japanese: compare view defaults to binary<br>
-1GK0388: ITPJCORE:WIN2000 - replace with local history: selecting (workspace) deletes source<br>
-1GITG2V: ITPUI:WIN2000 - Comparing html files uses binary compare<br>
-1GJW2TP: ITPJUI:WIN2000 - java compare: why beep every time?<br>
-
-<h2>
-Problem reports closed</h2>
-
-<h1>
-<hr WIDTH="100%"></h1>
-Eclipse SDK Build 200, September 13th, 2001
-
-<h2>
-What's new in this drop</h2>
-If not specified otherwise Compare viewer font is taken from workbench text font<br>
-The shortcut for "Goto Next/Previous Difference" is Ctrl-D/Ctrl-Shift-D
-to avoid a clash with Ctrl-P of the Print command.
-
-<h3>
-API changes</h3>
-
-<h3>
-API Additions</h3>
-new method EditionSelectionDialog.setHideIdenticalEntries(boolean)<br>
-new method EditionSelectionDialog.setTargetIsRight(boolean)<br>
-new method EditionSelectionDialog.setAddMode(boolean)<br>
-new method CompareEditorInput.saveChanges(...)<br>
-new method TextMergeViewer.createLineComparator(IDocument document, IRegion region, boolean ignoreWhiteSpace)<br>
-
-<h3>
-Other highlights</h3>
-
-<h2>
-Known deficiencies</h2>
-
-<h2>
-Problem reports fixed</h2>
-1GFMLFB: ITPUI:WIN2000 - files that are out of sync with the file system appear as empty<br>
-1GG0ELM: ITPVCM:ALL - Local history displayed some of Today's items as Yesterday<br>
-1GGNKHN: ITPJUI:ALL - No progress during replace with local history<br>
-1GF2JNI: ITPUI:ALL - (minor)Compare failed title should be title case<br>
-1GHBPA1: ITPVCM:WINNT - Compare - next change arrow switches to wrong file<br>
-1GGQQH3: ITPJUI:WINNT - Compare hightlights a non-change instead of the change<br>
-1GI5DN9: ITPUI:WIN2000 - Conflicting token deletions don't show up in text compare viewer<br>
-1GI3KUR: ITPJUI:WIN2000 - Compare: double-click in versions list closes view<br>
-1GFFR4B: ITPUI:WIN98 - local history is misleading<br>
-1GBM0IL: ITPUI:WINNT - CompareEditorInput#save should throw CoreException<br>
-1GI99LE: ITPUI:ALL - Compare viewer does not show last line when horizontal scroll bar is present<br>
-1GBB34N: ITPJUI:WIN2000 - Compare Viewer doesn't scroll to last line<br>
-1GGZ8DO: ITPJUI:WIN - MergeViewer invalid selection range<br>
-1GIIBHM: ITPUI:WIN2000 - Problems when comparing zip files<br>
-1GIKKOZ: ITPUI:ALL - alt copyright text in html doc needs update<br>
-1GIURNB: ITPUI:ALL - property file of EditionSelectionDialog contains configuration options<br>
-1GIUS6L: ITPUI:ALL - TextMergeViewer uses deprecated Thread.stop()<br>
-1GI3HDZ: ITPJUI:ALL - Compare: conflicts with no ancestor does not show differences<br>
-1GEUX0D: ITPJUI:ALL - not state aware toolbar button in compare<br>
-
-<h2>
-Problem reports closed</h2>
-1GF9Y9C: ITPUI:WIN2000 - DCR: only get ancestor pane contents if pane is visible<br>
-
-</body>
-</html>
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java
deleted file mode 100644
index 2f87cb1..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import java.io.*;
-import org.eclipse.jface.util.ListenerList;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.compare.internal.Utilities;
-
-/**
- * Abstract implementation for a buffered <code>IStreamContentAccessor</code>.
- * <p>
- * Subclasses must implement the <code>createStream</code> method
- * to connect the buffered content with a streamable source (e.g., a file).
- * <p>
- * As long as the contents of <code>BufferedContent</code> is only retrieved as an input stream
- * (by means of <code>getContents</code>) and the <code>BufferedContent</code> is not modified (with
- * <code>setContent</code>) no buffering takes place.
- * Buffering starts when either method <code>getContent</code> or <code>setContent</code> is called.
- * 
- * @see IContentChangeNotifier
- * @see IStreamContentAccessor
- */
-public abstract class BufferedContent implements IContentChangeNotifier, IStreamContentAccessor {
-	
-	byte[] fContent;
-	private ListenerList fListenerList;
-	
-	/**
-	 * Creates a buffered stream content accessor.
-	 */
-	protected BufferedContent() {
-	}
-		
-	/* (non-Javadoc)
-	 * see IStreamContentAccessor.getContents
-	 */
-	public InputStream getContents() throws CoreException {
-		if (fContent != null)
-			return new ByteArrayInputStream(fContent);
-		return createStream();
-	}
-
-	/**
-	 * Creates and returns a stream for reading the contents.
-	 * <p>
-	 * Subclasses must implement this method.
-	 * </p>
-	 *
-	 * @return the stream from which the content is read
-	 * @exception CoreException if the contents could not be accessed
-	 */
-	protected abstract InputStream createStream() throws CoreException;
-	
-	/**
-	 * Sets the contents. Registered content change listeners are notified.
-	 *
-	 * @param contents the new contents
-	 */
-	public void setContent(byte[] contents) {
-		fContent= contents;
-		fireContentChanged();
-	}
-	
-	/**
-	 * Returns the contents as an array of bytes.
-	 *
-	 * @return the contents as an array of bytes, or <code>null</code> if
-	 *   the contents could not be accessed
-	 */
-	public byte[] getContent() {
-		if (fContent == null) {
-			try {
-				InputStream is= createStream();
-				fContent= Utilities.readBytes(is);
-			} catch(CoreException ex) {
-			}
-		}
-		return fContent;
-	}
-
-	/**
-	 * Discards the buffered content.
-	 */
-	public void discardBuffer() {
-		fContent= null;
-	}
-	
-	/* (non-Javadoc)
-	 * see IContentChangeNotifier.addChangeListener
-	 */
-	public void addContentChangeListener(IContentChangeListener listener) {
-		if (fListenerList == null)
-			fListenerList= new ListenerList();
-		fListenerList.add(listener);
-	}
-	
-	/* (non-Javadoc)
-	 * see IContentChangeNotifier.removeChangeListener
-	 */
-	public void removeContentChangeListener(IContentChangeListener listener) {
-		if (fListenerList != null) {
-			fListenerList.remove(listener);
-			if (fListenerList.isEmpty())
-				fListenerList= null;
-		}
-	}
-	
-	/**
-	 * Notifies all registered <code>IContentChangeListener</code>s of a content change.
-	 */
-	protected void fireContentChanged() {
-		if (fListenerList != null) {
-			Object[] listeners= fListenerList.getListeners();
-			for (int i= 0; i < listeners.length; i++)
-				((IContentChangeListener)listeners[i]).contentChanged(this);
-		}
-	}
-}
-
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java
deleted file mode 100644
index 4fe3a8a..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java
+++ /dev/null
@@ -1,445 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import java.util.HashMap;
-
-import org.eclipse.swt.graphics.*;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.util.*;
-import org.eclipse.jface.preference.IPreferenceStore;
-
-import org.eclipse.compare.internal.*;
-import org.eclipse.compare.structuremergeviewer.Differencer;
-
-/**
- * A <code>CompareConfiguration</code> object
- * controls various UI aspects of compare/merge viewers like
- * title labels and images, or whether a side of a merge viewer is editable.
- * In addition to these fixed properties <code>ICompareConfiguration</code> provides
- * API for an open ended set of properties. Different viewers which share the same
- * configuration can communicate via this mechanism. E.g. if a compare editor
- * has a button for controlling whether compare viewers ignore white space,
- * the button would trigger a change of the boolean <code>IGNORE_WHITESPACE</code> property
- * and all interested viewers would receive notification.
- * <p>
- * Suitable default labels are provided (without images); both the left and right sides
- * are editable.
- * </p>
- * <p>
- * Clients may use this class as is, or subclass to add new state and behavior.
- * </p>
- */
-public class CompareConfiguration {
-
-	/**
-	 * Name of the ignore whitespace property (value <code>"IGNORE_WHITESPACE"</code>).
-	 */
-	public static final String IGNORE_WHITESPACE= "IGNORE_WHITESPACE"; //$NON-NLS-1$
-	/**
-	 * Name of the show pseudo conflicts property (value <code>"SHOW_PSEUDO_CONFLICTS"</code>).
-	 */
-	public static final String SHOW_PSEUDO_CONFLICTS= "SHOW_PSEUDO_CONFLICTS"; //$NON-NLS-1$
-
-
-	private static final int WIDTH= 22;
-	
-	private static ImageDescriptor[] fgImages= new ImageDescriptor[16];
-	private static Object fgDummy= new Object();
-	private static HashMap fgMap= new HashMap(20);
-	private static boolean fLeftIsLocal= true;
-
-	static {
-		if (fLeftIsLocal) {
-			fgImages[Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/del_ov.gif"); //$NON-NLS-1$
-			fgImages[Differencer.LEFT + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/r_inadd_ov.gif"); //$NON-NLS-1$
-			fgImages[Differencer.RIGHT + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/r_outadd_ov.gif"); //$NON-NLS-1$
-
-			fgImages[Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/add_ov.gif"); //$NON-NLS-1$
-			fgImages[Differencer.LEFT + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/r_indel_ov.gif"); //$NON-NLS-1$
-			fgImages[Differencer.RIGHT + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/r_outdel_ov.gif"); //$NON-NLS-1$
-
-			fgImages[Differencer.LEFT + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/r_inchg_ov.gif"); //$NON-NLS-1$
-			fgImages[Differencer.RIGHT + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/r_outchg_ov.gif"); //$NON-NLS-1$
-		} else {
-			fgImages[Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/add_ov.gif"); //$NON-NLS-1$
-			fgImages[Differencer.LEFT + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/inadd_ov.gif"); //$NON-NLS-1$
-			fgImages[Differencer.RIGHT + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/outadd_ov.gif"); //$NON-NLS-1$
-
-			fgImages[Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/del_ov.gif"); //$NON-NLS-1$
-			fgImages[Differencer.LEFT + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/indel_ov.gif"); //$NON-NLS-1$
-			fgImages[Differencer.RIGHT + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/outdel_ov.gif"); //$NON-NLS-1$
-
-			fgImages[Differencer.LEFT + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/inchg_ov.gif"); //$NON-NLS-1$
-			fgImages[Differencer.RIGHT + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/outchg_ov.gif"); //$NON-NLS-1$
-		}
-
-		fgImages[Differencer.CONFLICTING + Differencer.ADDITION]= CompareUIPlugin.getImageDescriptor("ovr16/confadd_ov.gif"); //$NON-NLS-1$
-		fgImages[Differencer.CONFLICTING + Differencer.DELETION]= CompareUIPlugin.getImageDescriptor("ovr16/confdel_ov.gif"); //$NON-NLS-1$
-		fgImages[Differencer.CONFLICTING + Differencer.CHANGE]= CompareUIPlugin.getImageDescriptor("ovr16/confchg_ov.gif"); //$NON-NLS-1$
-	}
-
-	private IPreferenceStore fPreferenceStore;
-	private ListenerList fListeners= new ListenerList();
-	private HashMap fProperties= new HashMap();
-	private boolean fLeftEditable= true;
-	private boolean fRightEditable= true;
-	private String fAncestorLabel;
-	private String fLeftLabel;
-	private String fRightLabel;
-	private Image fAncestorImage;
-	private Image fRightImage;
-	private Image fLeftImage;
-	private Image[] fImages= new Image[16];
-	
-	/**
-	 * Creates a new configuration with editable left and right sides,
-	 * suitable default labels, and no images.
-	 * The given preference store is used to connect this configuration
-	 * with the Compare preference page properties <code>ComparePreferencePage.INITIALLY_SHOW_ANCESTOR_PANE</code>,
-	 * and <code>CompareConfiguration.IGNORE_WHITESPACE</code>.
-	 * 
-	 * @param prefStore the preference store which this configuration holds onto.
-	 * @since 2.0
-	 */
-	public CompareConfiguration(IPreferenceStore prefStore) {
-		
-		setProperty("LEFT_IS_LOCAL", new Boolean(fLeftIsLocal)); //$NON-NLS-1$
-		
-		fPreferenceStore= prefStore;
-		if (fPreferenceStore != null) {
-			boolean b= fPreferenceStore.getBoolean(ComparePreferencePage.INITIALLY_SHOW_ANCESTOR_PANE);
-			setProperty(ComparePreferencePage.INITIALLY_SHOW_ANCESTOR_PANE, new Boolean(b));
-			
-			b= fPreferenceStore.getBoolean(ComparePreferencePage.IGNORE_WHITESPACE);
-			setProperty(CompareConfiguration.IGNORE_WHITESPACE, new Boolean(b));
-		}
-	}	
-	
-	/**
-	 * Creates a new configuration with editable left and right sides,
-	 * suitable default labels, and no images.
-	 * This configuration uses the preference store of the Compare plugin
-	 * (<code>CompareUIPlugin.getDefault().getPreferenceStore()</code>).
-	 */
-	public CompareConfiguration() {
-		this(CompareUIPlugin.getDefault().getPreferenceStore());
-	}
-	
-	/**
-	 * Returns the preference store of this configuration.
-	 * @return the preference store of this configuration.
-	 * @since 2.0
-	 */
-	public IPreferenceStore getPreferenceStore() {
-		return fPreferenceStore;
-	}
-	
-	/**
-	 * Returns an image showing the specified change kind.
-	 * The different kind of changes are defined in the <code>Differencer</code>.
-	 * Newly created images are remembered by this class and
-	 * disposed when the <code>dispose</code> method is called.
-	 *
-	 * @param kind the kind of change as defined in <code>Differencer</code>.
-	 * @return an modification of the base image reflecting the kind of change.
-	 * @see org.eclipse.compare.structuremergeviewer.Differencer
-	 * @since 2.0
-	 */
-	public Image getImage(int kind) {
-		Image image= fImages[kind & 15];
-		if (image == null) {
-			ImageDescriptor id= fgImages[kind & 15];
-			if (id != null)				
-				image= id.createImage();
-			fImages[kind & 15]= image;
-		}
-		return image;
-	}
-	
-	/**
-	 * Returns an image showing the specified change kind applied to a
-	 * given base image. The different kind of changes are defined in the <code>Differencer</code>.
-	 * Typically an implementation would build a composite image 
-	 * from the given base image and an image representing the change kind.
-	 * Newly created images are remembered by this class and
-	 * disposed when the <code>dispose</code> method is called.
-	 *
-	 * @param base the image which is modified to reflect the kind of change
-	 * @param kind the kind of change as defined in <code>Differencer</code>.
-	 * @return an modification of the base image reflecting the kind of change.
-	 * @see org.eclipse.compare.structuremergeviewer.Differencer
-	 */
-	public Image getImage(Image base, int kind) {
-
-		Object key= base;
-		if (key == null)
-			key= fgDummy;
-
-		kind &= 15;
-
-		Image[] a= (Image[]) fgMap.get(key);
-		if (a == null) {
-			a= new Image[16];
-			fgMap.put(key, a);
-		}
-		Image b= a[kind];
-		if (b == null) {
-			b= new DiffImage(base, fgImages[kind], WIDTH, !fLeftIsLocal).createImage();
-			CompareUI.disposeOnShutdown(b);
-			a[kind]= b;
-		}
-		return b;
-	}
-	
-	/**
-	 * Dispose of this compare configuration.
-	 * This method is called if the compare configuration is no longer used.
-	 * An implementation must dispose of all resources.
-	 */
-	public void dispose() {
-		if (fImages != null) {
-			for (int i= 0; i < fImages.length; i++){
-				Image image= fImages[i];
-				if (image != null && !image.isDisposed())
-					image.dispose();
-			}
-		}
-		fImages= null;
-	}
-
-	/**
-	 * Fires a <code>PropertyChangeEvent</code> to registered listeners.
-	 *
-	 * @param propertyName the name of the property that has changed
-	 * @param oldValue the property's old value
-	 * @param newValue the property's new value
-	 */
-	private void fireChange(String propertyName, Object oldValue, Object newValue) {
-		PropertyChangeEvent event= null;
-		Object[] listeners= fListeners.getListeners();
-		if (listeners != null) {
-			for (int i= 0; i < listeners.length; i++) {
-				IPropertyChangeListener l= (IPropertyChangeListener) listeners[i];
-				if (event == null)
-					event= new PropertyChangeEvent(this, propertyName, oldValue, newValue);
-				l.propertyChange(event);
-			}
-		}
-	}
-
-	/* (non javadoc)
-	 * see IPropertyChangeNotifier.addListener
-	 */
-	public void addPropertyChangeListener(IPropertyChangeListener listener) {
-		fListeners.add(listener);
-	}
-
-	/* (non javadoc)
-	 * see IPropertyChangeNotifier.removeListener
-	 */
-	public void removePropertyChangeListener(IPropertyChangeListener listener) {
-		fListeners.remove(listener);
-	}
-
-	/**
-	 * Sets the property with the given name.
-	 * If the new value differs from the old a <code>PropertyChangeEvent</code>
-	 * is sent to registered listeners.
-	 *
-	 * @param propertyName the name of the property to set
-	 * @param value the new value of the property
-	 */
-	public void setProperty(String key, Object newValue) {
-		Object oldValue= fProperties.get(key);
-		fProperties.put(key, newValue);
-		if (oldValue == null || !oldValue.equals(newValue))
-			fireChange(key, oldValue, newValue);
-	}
-
-	/**
-	 * Returns the property with the given name, or <code>null</code>
-	 * if no such property exists.
-	 *
-	 * @param propertyName the name of the property to retrieve
-	 * @return the property with the given name, or <code>null</code> if not found
-	 */
-	public Object getProperty(String key) {
-		return fProperties.get(key);
-	}
-
-	//---- ancestor
-	
-	/**
-	 * Sets the label to use for the ancestor of compare/merge viewers.
-	 *
-	 * @param label the new label for the ancestor of compare/merge viewers
-	 */
-	public void setAncestorLabel(String label) {
-		fAncestorLabel= label;
-	}
-
-	/**
-	 * Returns the label for the ancestor side of compare/merge viewers.
-	 * This label is typically shown in the title of the ancestor area in a compare viewer.
-	 *
-	 * @param element the input object of a compare/merge viewer or <code>null</code>
-	 * @return the label for the ancestor side or <code>null</code>
-	 */
-	public String getAncestorLabel(Object element) {
-		return fAncestorLabel;
-	}
-	
-	/**
-	 * Sets the image to use for the ancestor of compare/merge viewers.
-	 * The CompareConfiguration does not automatically dispose the old image.
-	 *
-	 * @param image the new image for the ancestor of compare/merge viewers
-	 */
-	public void setAncestorImage(Image image) {
-		fAncestorImage= image;
-	}
-
-	/**
-	 * Returns the image for the ancestor side of compare/merge viewers.
-	 * This image is typically shown in the title of the ancestor area in a compare viewer.
-	 *
-	 * @param element the input object of a compare/merge viewer or <code>null</code>
-	 * @return the image for the ancestor side or <code>null</code>
-	 */	
-	public Image getAncestorImage(Object element) {
-		return fAncestorImage;
-	}
-
-	//---- left side
-	
-	/**
-	 * Controls whether the left side of a merge viewer is editable.
-	 *
-	 * @param editable if the value is <code>true</code> left side is editable
-	 */
-	public void setLeftEditable(boolean editable) {
-		fLeftEditable= editable;
-	}
-	
-	/**
-	 * Returns whether the left hand side of a merge viewer is editable.
-	 * 
-	 * @return <code>true</code> if the left hand side is editable
-	 */
-	public boolean isLeftEditable() {
-		return fLeftEditable;
-	}
-
-	/**
-	 * Sets the label to use for the left side of compare/merge viewers.
-	 *
-	 * @param label the new label for the left side of compare/merge viewers
-	 */
-	public void setLeftLabel(String label) {
-		fLeftLabel= label;
-	}
-	
-	/**
-	 * Returns the label for the left hand side of compare/merge viewers.
-	 * This label is typically shown in the title of the left side of a compare viewer.
-	 *
-	 * @param element the input object of a compare/merge viewer or <code>null</code>
-	 * @return the label for the left hand side or <code>null</code>
-	 */
-	public String getLeftLabel(Object element) {
-		return fLeftLabel;
-	}
-
-	/**
-	 * Sets the image to use for the left side of compare/merge viewers.
-	 * The compare configuration does not automatically dispose the old image.
-	 *
-	 * @param image the new image for the left side of compare/merge viewers
-	 */
-	public void setLeftImage(Image image) {
-		fLeftImage= image;
-	}
-
-	/**
-	 * Returns the image for the left hand side of compare/merge viewers.
-	 * This image is typically shown in the title of the left side of a compare viewer.
-	 *
-	 * @param element the input object of a compare/merge viewer or <code>null</code>
-	 * @return the image for the left hand side or <code>null</code>
-	 */	
-	public Image getLeftImage(Object element) {
-		return fLeftImage;
-	}
-	
-	//---- right side
-
-	/**
-	 * Controls whether the right side of a merge viewer is editable.
-	 *
-	 * @param editable if the value is <code>true</code> right side is editable
-	 */
-	public void setRightEditable(boolean editable) {
-		fRightEditable= editable;
-	}
-	
-	/**
-	 * Returns whether the right hand side of a merge viewer is editable.
-	 * 
-	 * @return <code>true</code> if the right hand side is editable
-	 */
-	public boolean isRightEditable() {
-		return fRightEditable;
-	}
-
-	/**
-	 * Sets the label to use for the right side of compare/merge viewers.
-	 *
-	 * @param label the new label for the right side of compare/merge viewers
-	 */
-	public void setRightLabel(String label) {
-		fRightLabel= label;
-	}
-
-	/**
-	 * Returns the label for the right hand side of compare/merge viewers.
-	 * This label is typically shown in the title of the right side of a compare viewer.
-	 *
-	 * @param element the input object of a compare/merge viewer or <code>null</code>
-	 * @return the label for the right hand side or <code>null</code>
-	 */
-	public String getRightLabel(Object element) {
-		return fRightLabel;
-	}
-
-	/**
-	 * Sets the image to use for the right side of compare/merge viewers.
-	 * The compare configuration does not automatically dispose the old image.
-	 *
-	 * @param image the new image for the right side of compare/merge viewers
-	 */
-	public void setRightImage(Image image) {
-		fRightImage= image;
-	}
-
-	/**
-	 * Returns the image for the right hand side of compare/merge viewers.
-	 * This image is typically shown in the title of the right side of a compare viewer.
-	 *
-	 * @param element the input object of a compare/merge viewer or <code>null</code>
-	 * @return the image for the right hand side or <code>null</code>
-	 */
-	public Image getRightImage(Object element) {
-		return fRightImage;
-	}
-}
-
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
deleted file mode 100644
index 76724e7..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
+++ /dev/null
@@ -1,749 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare; 
-
-import java.lang.reflect.InvocationTargetException;
-
-import java.util.ArrayList;
-import java.util.ResourceBundle;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.custom.BusyIndicator;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.ui.IPersistableElement;
-import org.eclipse.ui.IEditorInput;
-
-import org.eclipse.jface.util.*;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.action.ToolBarManager;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.resource.ImageDescriptor;
-
-import org.eclipse.compare.internal.*;
-import org.eclipse.compare.structuremergeviewer.*;
-
-
-/**
- * A compare operation which can present its results in a special editor.
- * Running the compare operation and presentating the results in a compare editor
- * are combined in one interface because it allows a client to keep the implementation
- * all in one place while separating it from the innards of a specific UI implementation of compare/merge.
- * <p> 
- * A <code>CompareEditorInput</code> defines methods for the following sequence steps:
- * <UL>
- * <LI>running a lengthy compare operation under progress monitor control,
- * <LI>creating a UI for displaying the model and initializing the some widgets with the compare result,
- * <LI>tracking the dirty state of the model in case of merge,
- * <LI>saving the model.
- * </UL>
- * The Compare plug-in's <code>openCompareEditor</code> method takes an <code>ICompareEditorInput</code>
- * and starts sequencing through the above steps. If the compare result is not empty a new compare editor
- * is opened and takes over the sequence until eventually closed.
- * <p>
- * The <code>prepareInput</code> method should contain the
- * code of the compare operation. It is executed under control of a progress monitor
- * and can be canceled. If the result of the compare is not empty, that is if there are differences
- * that needs to be presented, the <code>ICompareEditorInput</code> should hold onto them and return them with
- * the <code>getCompareResult</code> method.
- * If the value returned from <code>getCompareResult</code> is not <code>null</code>
- * a compare editor is opened on the <code>ICompareEditorInput</code> with title and title image initialized by the
- * corresponding methods of the <code>ICompareEditorInput</code>.
- * <p>
- * Creation of the editor's SWT controls is delegated to the <code>createContents</code> method.
- * Here the SWT controls must be created and initialized  with the result of the compare operation.
- * <p>
- * If merging is allowed, the modification state of the compared constituents must be tracked and the dirty
- * state returned from method <code>isSaveNeeded</code>. The value <code>true</code> triggers a subsequent call
- * to <code>save</code> where the modified resources can be saved.
- * <p>
- * The most important part of this implementation is the setup of the compare/merge UI.
- * The UI uses a simple browser metaphor to present compare results.
- * The top half of the layout shows the structural compare results (e.g. added, deleted, and changed files),
- * the bottom half the content compare results (e.g. textual differences between two files).
- * A selection in the top pane is fed to the bottom pane. If a content viewer is registered
- * for the type of the selected object, this viewer is installed in the pane.
- * In addition if a structure viewer is registered for the selection type the top pane
- * is split horizontally to make room for another pane and the structure viewer is installed
- * in it. When comparing Java files this second structure viewer would show the structural
- * differences within a Java file, e.g. added, deleted or changed methods and fields.
- * <p>
- * Subclasses provide custom setups, e.g. for a Catchup/Release operation
- * by passing a subclass of <code>CompareConfiguration</code> and by implementing the <code>prepareInput</code> method.
- * If a subclass cannot use the <code>DiffTreeViewer</code> which is installed by default in the
- * top left pane, method <code>createDiffViewer</code> can be overridden.
- * 
- * @see CompareUI
- * @see CompareEditorInput
- */
-public abstract class CompareEditorInput implements IEditorInput, IPropertyChangeNotifier, IRunnableWithProgress {
-	
-	private static final boolean DEBUG= false;
-
-	/**
-	 * The name of the "dirty" property (value <code>"DIRTY_STATE"</code>).
-	 */
-	public static final String DIRTY_STATE= "DIRTY_STATE"; //$NON-NLS-1$
-		
-	private static final String COMPARE_EDITOR_IMAGE_NAME= "cview16/compare_view.gif"; //$NON-NLS-1$
-	private static Image fgTitleImage;
-	
-	private Splitter fComposite;
-	private CompareConfiguration fCompareConfiguration;
-	private CompareViewerSwitchingPane fStructureInputPane;
-	private CompareViewerSwitchingPane fStructurePane1;
-	private CompareViewerSwitchingPane fStructurePane2;
-	private CompareViewerSwitchingPane fContentInputPane;
-	private CompareViewerSwitchingPane fFocusPane;
-	private String fMessage;
-	private Object fInput;
-	private String fTitle;
-	private ListenerList fListenerList= new ListenerList();
-	private CompareNavigator fNavigator;
-	private boolean fDirty= false;
-	private ArrayList fDirtyViewers= new ArrayList();
-	private IPropertyChangeListener fDirtyStateListener;
-
-	private IgnoreWhiteSpaceAction fIgnoreWhitespace;
-	private ShowPseudoConflicts fShowPseudoConflicts;
-	
-	boolean fStructureCompareOnSingleClick= true;
-
-	/**
-	 * Creates a <code>CompareEditorInput</code> which is initialized with the given
-	 * compare configuration.
-	 * The compare configuration is passed to subsequently created viewers.
-	 *
-	 * @param configuration the compare configuration 
-	 */
-	public CompareEditorInput(CompareConfiguration configuration) {
-		fCompareConfiguration= configuration;
-		Assert.isNotNull(configuration);
-		
-		ResourceBundle bundle= CompareUIPlugin.getResourceBundle();
-		fIgnoreWhitespace= new IgnoreWhiteSpaceAction(bundle, configuration);
-		fShowPseudoConflicts= new ShowPseudoConflicts(bundle, configuration);
-		
-		fDirtyStateListener= new IPropertyChangeListener() {
-			public void propertyChange(PropertyChangeEvent e) {
-				String propertyName= e.getProperty();
-				if (CompareEditorInput.DIRTY_STATE.equals(propertyName)) {
-					boolean changed= false;
-					Object newValue= e.getNewValue();
-					if (newValue instanceof Boolean)
-						changed= ((Boolean)newValue).booleanValue();
-					setDirty(e.getSource(), changed);
-				}			
-			}
-		};
-
-		IPreferenceStore ps= configuration.getPreferenceStore();
-		if (ps != null)
-			fStructureCompareOnSingleClick= ps.getBoolean(ComparePreferencePage.OPEN_STRUCTURE_COMPARE);
-	}
-	
-	private boolean structureCompareOnSingleClick() {
-		return fStructureCompareOnSingleClick;
-	}
-		
-	/* (non Javadoc)
-	 * see IAdaptable.getAdapter
-	 */
-	public Object getAdapter(Class adapter) {
-		if (CompareNavigator.class.equals(adapter)) {
-			if (fNavigator == null)
-				fNavigator= new CompareNavigator(
-					new CompareViewerSwitchingPane[] {
-						fStructureInputPane,
-						fStructurePane1,
-						fStructurePane2,
-						fContentInputPane
-					}
-				);
-			return fNavigator;
-		}
-		return null;
-	}
-	
-	/* (non Javadoc)
-	 * see IEditorInput.getImageDescriptor
-	 */
-	public ImageDescriptor getImageDescriptor() {
-		return null;
-	}
-	
-	/* (non Javadoc)
-	 * see IEditorInput.getToolTipText
-	 */
-	public String getToolTipText() {
-		return getTitle();
-	}
-	
-	/* (non Javadoc)
-	 * see IEditorInput.getName
-	 */
-	public String getName() {
-		return getTitle();
-	}
-			
-	/**
-	 * Returns <code>null</code> since this editor cannot be persisted.
-	 *
-	 * @return <code>null</code> because this editor cannot be persisted
-	 */
-	public IPersistableElement getPersistable() {
-		return null;
-	}
-		
-	/**
-	 * Returns <code>false</code> to indicate that this input
-	 * should not appear in the "File Most Recently Used" menu.
-	 *
-	 * @return <code>false</code>
-	 */
-	public boolean exists() {
-		return false;
-	}
-	
-	/*
-	 * FIXME!
- 	 */
-	protected void setMessage(String message) {
-		fMessage= message;
-	}
-	
-	/*
-	 * FIXME!
- 	 */
-	public String getMessage() {
-		return fMessage;
-	}
-				
-	/**
-	 * Returns the title which will be used in the compare editor's title bar.
-	 * It can be set with <code>setTitle</code>.
-	 *
-	 * @return the title
-	 */
-	public String getTitle() {
-		if (fTitle == null)
-			return Utilities.getString("CompareEditorInput.defaultTitle"); //$NON-NLS-1$
-		return fTitle;
-	}
-	
-	/**
-	 * Sets the title which will be used when presenting the compare result.
-	 * This method must be called before the editor is opened.
-	 * 
-	 * @param title the title to use for the CompareEditor
-	 */
-	public void setTitle(String title) {
-		fTitle= title;
-	}
-	
-	/**
-	 * Returns the title image which will be used in the compare editor's title bar.
-	 * Returns the title image which will be used when presenting the compare result.
-	 * This implementation returns a generic compare icon.
-	 * Subclasses can override.
-	 *
-	 * @return the title image, or <code>null</code> if none
-	 */
-	public Image getTitleImage() {
-		if (fgTitleImage == null) {
-			fgTitleImage= CompareUIPlugin.getImageDescriptor(COMPARE_EDITOR_IMAGE_NAME).createImage();
-			CompareUI.disposeOnShutdown(fgTitleImage);
-		}
-		return fgTitleImage;
-	}
-	
-	/**
-	 * Returns the configuration object for the viewers within the compare editor.
-	 * Returns the configuration which was passed to the constructor.
-	 *
-	 * @return the compare configuration
-	 */
-	public CompareConfiguration getCompareConfiguration() {
-		return fCompareConfiguration;
-	}
-
-	/**
-	 * Adds standard actions to the given <code>ToolBarManager</code>.
-	 * <p>
-	 * Subclasses may override to add their own actions.
-	 * </p>
-	 *
-	 * @param toolBarManager the <code>ToolBarManager</code> to which to contribute
-	 */
-	public void contributeToToolBar(ToolBarManager toolBarManager) {
-		
-		toolBarManager.add(new Separator());
-		toolBarManager.add(fIgnoreWhitespace);
-		toolBarManager.add(fShowPseudoConflicts);
-	}
-	
-	/**
-	 * Runs the compare operation and stores the compare result.
-	 *
-	 * @param monitor the progress monitor to use to display progress and receive
-	 *   requests for cancelation
-	 * @exception InvocationTargetException if the <code>prepareInput</code> method must propagate a checked exception,
-	 * 	it should wrap it inside an <code>InvocationTargetException</code>; runtime exceptions are automatically
-	 *  wrapped in an <code>InvocationTargetException</code> by the calling context
-	 * @exception InterruptedException if the operation detects a request to cancel, 
-	 *  using <code>IProgressMonitor.isCanceled()</code>, it should exit by throwing 
-	 *  <code>InterruptedException</code>
-	 */
-	public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException {
-		fInput= prepareInput(monitor);
-	}
-
-	/**
-	 * Runs the compare operation and returns the compare result.
-	 * If <code>null</code> is returned no differences were found and no compare editor needs to be opened.
-	 * Progress should be reported to the given progress monitor.
-	 * A request to cancel the operation should be honored and acknowledged 
-	 * by throwing <code>InterruptedException</code>.
-	 * <p>
-	 * Note: this method is typically called in a modal context thread which doesn't have a Display assigned.
-	 * Implementors of this method shouldn't therefore allocated any SWT resources in this method.
-	 * </p>
-	 *
-	 * @param monitor the progress monitor to use to display progress and receive
-	 *   requests for cancelation
-	 * @return the result of the compare operation, or <code>null</code> if there are no differences
-	 * @exception InvocationTargetException if the <code>prepareInput</code> method must propagate a checked exception,
-	 * 	it should wrap it inside an <code>InvocationTargetException</code>; runtime exceptions are automatically
-	 *  wrapped in an <code>InvocationTargetException</code> by the calling context
-	 * @exception InterruptedException if the operation detects a request to cancel, 
-	 *  using <code>IProgressMonitor.isCanceled()</code>, it should exit by throwing 
-	 *  <code>InterruptedException</code>
-	 */
-	protected abstract Object prepareInput(IProgressMonitor monitor)
-				throws InvocationTargetException, InterruptedException;
-	 
-	/**
-	 * Returns the compare result computed by the most recent call to the
-	 * <code>run</code> method. Returns <code>null</code> if no
-	 * differences were found.
-	 *
-	 * @return the compare result prepared in method <code>prepareInput</code>
-	 *   or <code>null</code> if there were no differences
-	 */
-	public Object getCompareResult() {
-		return fInput;
-	}
-	
-	/**
-	 * Create the SWT controls that are used to display the result of the compare operation.
-	 * Creates the SWT Controls and sets up the wiring between the individual panes.
-	 * This implementation creates all four panes but makes only the necessary ones visible.
-	 * Finally it feeds the compare result into the top left structure viewer
-	 * and the content viewer.
-	 * <p>
-	 * Subclasses may override if they need to change the layout or wiring between panes.
-	 *
-	 * @param parent the parent control under which the control must be created
-	 * @return the SWT control hierarchy for the compare editor
-	 */
-	public Control createContents(Composite parent) {
-
-		fComposite= new Splitter(parent, SWT.VERTICAL);
-		fComposite.setData(this);
-			
-		final Splitter h= new Splitter(fComposite, SWT.HORIZONTAL);
-
-		fStructureInputPane= new CompareViewerSwitchingPane(h, SWT.BORDER | SWT.FLAT, true) {
-			protected Viewer getViewer(Viewer oldViewer, Object input) {
-				if (input instanceof DiffNode) {
-					DiffNode dn= (DiffNode) input;
-					if (dn.hasChildren())
-						return createDiffViewer(this);
-				}
-				if (input instanceof ICompareInput)
-					return findStructureViewer(oldViewer, (ICompareInput)input, this);
-				return null;
-			}
-		};
-		fFocusPane= fStructureInputPane;
-		
-		fStructurePane1= new CompareViewerSwitchingPane(h, SWT.BORDER | SWT.FLAT, true) {
-			protected Viewer getViewer(Viewer oldViewer, Object input) {
-				if (input instanceof ICompareInput)
-					return findStructureViewer(oldViewer, (ICompareInput)input, this);
-				return null;
-			}
-		};
-		h.setVisible(fStructurePane1, false);
-		
-		fStructurePane2= new CompareViewerSwitchingPane(h, SWT.BORDER | SWT.FLAT, true) {
-			protected Viewer getViewer(Viewer oldViewer, Object input) {
-				if (input instanceof ICompareInput)
-					return findStructureViewer(oldViewer, (ICompareInput)input, this);
-				return null;
-			}
-		};
-		h.setVisible(fStructurePane2, false);
-				
-		fContentInputPane= new CompareViewerSwitchingPane(fComposite, SWT.BORDER | SWT.FLAT) {
-			protected Viewer getViewer(Viewer oldViewer, Object input) {
-				if (input instanceof ICompareInput)
-					return findContentViewer(oldViewer, (ICompareInput)input, this);
-				return null;
-			}
-		};
-		fComposite.setVisible(h, false);
-		fComposite.setVisible(fContentInputPane, true);
-		
-		fComposite.setWeights(new int[] { 30, 70 });
-		
-		fComposite.layout();
-
-		// setup the wiring for top left pane
-		fStructureInputPane.addOpenListener(
-			new IOpenListener() {
-				public void open(OpenEvent oe) {
-					feed1(oe.getSelection());
-				}
-			}
-		);
-		fStructureInputPane.addSelectionChangedListener(
-			new ISelectionChangedListener() {
-				public void selectionChanged(SelectionChangedEvent e) {
-					ISelection s= e.getSelection();
-					if (s == null || s.isEmpty())
-						feed1(s);
-				}
-			}
-		);
-		fStructureInputPane.addDoubleClickListener(
-			new IDoubleClickListener() {
-				public void doubleClick(DoubleClickEvent event) {
-					feedDefault1(event.getSelection());
-				}
-			}
-		);
-		
-		fStructurePane1.addSelectionChangedListener(
-			new ISelectionChangedListener() {
-				public void selectionChanged(SelectionChangedEvent e) {
-					feed2(e.getSelection());
-				}
-			}
-		);
-
-		fStructurePane2.addSelectionChangedListener(
-			new ISelectionChangedListener() {
-				public void selectionChanged(SelectionChangedEvent e) {
-					feed3(e.getSelection());
-				}
-			}
-		);		
-
-		if (fInput instanceof ICompareInput) {
-			fStructureInputPane.setInput((ICompareInput) fInput);
-			ISelection sel= fStructureInputPane.getSelection();
-			if (sel == null || sel.isEmpty())
-				feed1(sel);	// we only feed downstream viewers if the top left pane is empty
-		}
-		
-		fComposite.setData("Nav", //$NON-NLS-1$
-			new CompareViewerSwitchingPane[] {
-				fStructureInputPane,
-				fStructurePane1,
-				fStructurePane2,
-				fContentInputPane
-			}
-		);
-	
-		return fComposite;
-	}
-	
-	private void feed1(final ISelection selection) {
-		BusyIndicator.showWhile(fComposite.getDisplay(),
-			new Runnable() {
-				public void run() {
-					if (selection == null || selection.isEmpty()) {
-						Object input= fStructureInputPane.getInput();
-						fContentInputPane.setInput(input);
-						fStructurePane2.setInput(null); // clear downstream pane
-						fStructurePane1.setInput(null);
-					} else {
-						Object input= getElement(selection);
-						fContentInputPane.setInput(input);
-						if (structureCompareOnSingleClick())
-							fStructurePane1.setInput(input);
-						fStructurePane2.setInput(null); // clear downstream pane
-						if (fStructurePane1.getInput() != input)
-							fStructurePane1.setInput(null);
-					}
-				}
-			}
-		);
-	}
-	
-	private void feedDefault1(final ISelection selection) {
-		BusyIndicator.showWhile(fComposite.getDisplay(),
-			new Runnable() {
-				public void run() {
-					if (!selection.isEmpty())
-						fStructurePane1.setInput(getElement(selection));
-				}
-			}
-		);
-	}
-	
-	private void feed2(final ISelection selection) {
-		BusyIndicator.showWhile(fComposite.getDisplay(),
-			new Runnable() {
-				public void run() {
-					if (selection.isEmpty()) {
-						Object input= fStructurePane1.getInput();
-						fContentInputPane.setInput(input);
-						fStructurePane2.setInput(null);
-					} else {
-						Object input= getElement(selection);
-						fContentInputPane.setInput(input);
-						fStructurePane2.setInput(input);
-					}
-				}
-			}
-		);
-	}
-	
-	private void feed3(final ISelection selection) {
-		BusyIndicator.showWhile(fComposite.getDisplay(),
-			new Runnable() {
-				public void run() {
-					if (selection.isEmpty())
-						fContentInputPane.setInput(fStructurePane2.getInput());
-					else
-						fContentInputPane.setInput(getElement(selection));
-				}
-			}
-		);
-		
-	}
-	
-	/**
-	 * Returns the first element of the given selection if the selection 
-	 * is a <code>IStructuredSelection</code> with exactly one element. Returns
-	 * <code>null</code> otherwise.
-	 *
-	 * @param selection the selection
-	 * @return the first element of the selection, or <code>null</code>
-	 */
-	private static Object getElement(ISelection selection) {
-		if (selection instanceof IStructuredSelection) {
-			IStructuredSelection ss= (IStructuredSelection) selection;
-			if (ss.size() == 1)
-				return ss.getFirstElement();
-		}
-		return null;
-	}
-	
-	/**
-	 * Asks this input to take focus within its container (editor).
-	 * <p>
-	 * Clients should not call this method but they may
-	 * override if they implement a different layout with different visual
-	 * components. Clients are free to call the inherited method.
-	 * </p>
-	 */
-	public void setFocus() {
-		if (fFocusPane != null) {
-			Viewer v= fFocusPane.getViewer();
-			if (v != null) {
-				Control c= v.getControl();
-				if (c != null)
-					c.setFocus();
-			}
-		} else if (fComposite != null)
-			fComposite.setFocus();
-	}
-	
-	/**
-	 * Factory method for creating a differences viewer for the top left pane.
-	 * It is called from <code>createContents</code> and returns a <code>DiffTreeViewer</code>.
-	 * <p>
-	 * Subclasses may override if they need a different viewer.
-	 * </p>
-	 *
-	 * @param parent the SWT parent control under which to create the viewer's SWT controls
-	 * @return a compare viewer for the top left pane
-	 */
-	public Viewer createDiffViewer(Composite parent) {
-		return new DiffTreeViewer(parent, fCompareConfiguration);
-	}
-
-	/**
-	 * Implements the dynamic viewer switching for structure viewers.
-	 * The method must return a compare viewer based on the old (or current) viewer
-	 * and a new input object. If the old viewer is suitable for showing the new input the old viewer
-	 * can be returned. Otherwise a new viewer must be created under the given parent composite or
-	 * <code>null</code> can be returned to indicate that no viewer could be found.
-	 * <p>
-	 * This implementation forwards the request to <code>CompareUI.findStructureViewer</code>.
-	 * <p>
-	 * Subclasses may override to implement a different strategy.
-	 * </p>
-	 *
-	 * @return a compare viewer which is suitable for the given input object or <code>null</code>
-	 */
-	public Viewer findStructureViewer(Viewer oldViewer, ICompareInput input, Composite parent) {
-		return CompareUIPlugin.findStructureViewer(oldViewer, input, parent, fCompareConfiguration);
-	}
-
-	/**
-	 * Implements the dynamic viewer switching for content viewers.
-	 * The method must return a compare viewer based on the old (or current) viewer
-	 * and a new input object. If the old viewer is suitable for showing the new input the old viewer
-	 * can be returned. Otherwise a new viewer must be created under the given parent composite or
-	 * <code>null</code> can be returned to indicate that no viewer could be found.
-	 * <p>
-	 * This implementation forwards the request to <code>CompareUI.findContentViewer</code>.
-	 * <p>
-	 * Subclasses may override to implement a different strategy.
-	 * </p>
-	 *
-	 * @return a compare viewer which is suitable for the given input object or <code>null</code>
-	 */
-	public Viewer findContentViewer(Viewer oldViewer, ICompareInput input, Composite parent) {
-
-		Viewer newViewer= CompareUIPlugin.findContentViewer(oldViewer, input, parent, fCompareConfiguration);
-		
-		boolean isNewViewer= newViewer != oldViewer;
-		if (DEBUG) System.out.println("CompareEditorInput.findContentViewer: " + isNewViewer); //$NON-NLS-1$
-		
-		if (isNewViewer && newViewer instanceof IPropertyChangeNotifier) {
-			final IPropertyChangeNotifier dsp= (IPropertyChangeNotifier) newViewer;
-			dsp.addPropertyChangeListener(fDirtyStateListener);
-			
-			Control c= newViewer.getControl();
-			c.addDisposeListener(
-				new DisposeListener() {
-					public void widgetDisposed(DisposeEvent e) {
-						dsp.removePropertyChangeListener(fDirtyStateListener);
-					}
-				}
-			);
-		}
-		
-		return newViewer;
-	}
-	
-	/**
-	 * Returns <code>true</code> if there are unsaved changes.
-	 * The value returned is the value of the <code>DIRTY_STATE</code> property of this input object.
-	 
-	 * Returns <code>true</code> if this input has unsaved changes,
-	 * that is if <code>setDirty(true)</code> has been called.
-	 * Subclasses don't have to override if the functionality provided by <doce>setDirty</code>
-	 * is sufficient.
-	 *
-	 * @return <code>true</code> if there are changes that need to be saved
-	 */
-	public boolean isSaveNeeded() {
-		return fDirty || fDirtyViewers.size() > 0;
-	}
-		
-	/**
-	 * Sets the dirty state of this input to the given
-	 * value and sends out a <code>PropertyChangeEvent</code> if the new value differs from the old value.
-	 *
-	 * @param dirty the dirty state for this compare input
-	 */
-	public void setDirty(boolean dirty) {
-
-		boolean confirmSave= true;
-		Object o= fCompareConfiguration.getProperty(CompareEditor.CONFIRM_SAVE_PROPERTY);
-		if (o instanceof Boolean)
-			confirmSave= ((Boolean)o).booleanValue();
-
-		if (!confirmSave) {
-			fDirty= dirty;
-			if (!fDirty)
-				fDirtyViewers.clear();
-		}
-	}
-	
-	private void setDirty(Object source, boolean dirty) {
-		Assert.isNotNull(source);
-		boolean oldDirty= fDirtyViewers.size() > 0;
-		if (dirty)
-			fDirtyViewers.add(source);
-		else
-			fDirtyViewers.remove(source);
-		boolean newDirty= fDirtyViewers.size() > 0;
-		if (DEBUG) System.out.println("setDirty("+source+", "+dirty+"): " + newDirty); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		if (oldDirty != newDirty)
-			Utilities.firePropertyChange(fListenerList, this, DIRTY_STATE, new Boolean(oldDirty), new Boolean(newDirty));
-	}	
-	
-	/* (non Javadoc)
-	 * see IPropertyChangeNotifier.addListener
-	 */
-	public void addPropertyChangeListener(IPropertyChangeListener listener) {
-		fListenerList.add(listener);
-	}
-
-	/* (non Javadoc)
-	 * see IPropertyChangeNotifier.removeListener
-	 */
-	public void removePropertyChangeListener(IPropertyChangeListener listener) {
-		fListenerList.remove(listener);
-	}
-
-	/**
-	 * Save any unsaved changes.
-	 * Empty implementation.
-	 * Subclasses must override to save any changes.
-	 *
-	 * @param progressMonitor an <code>IProgressMonitor</code> that the implementation of save may use to show progress
-	 * @deprecated Override method saveChanges instead.
-	 */
-	public void save(IProgressMonitor pm) {
-	}
-	
-	/**
-	 * Save any unsaved changes.
-	 * Subclasses must override to save any changes.
-	 * This implementation tries to flush changes in all viewers by
-	 * calling <code>ISavable.save</code> on them.
-	 *
-	 * @param progressMonitor an <code>IProgressMonitor</code> that the implementation of save may use to show progress
-	 * @since 2.0
-	 */
-	public void saveChanges(IProgressMonitor pm) throws CoreException {
-		
-		// flush changes in any dirty viewer
-		flushViewer(fStructureInputPane, pm);
-		flushViewer(fStructurePane1, pm);
-		flushViewer(fStructurePane2, pm);
-		flushViewer(fContentInputPane, pm);
-
-		save(pm);
-	}
-	
-	private static void flushViewer(CompareViewerSwitchingPane pane, IProgressMonitor pm) throws CoreException {
-		if (pane != null) {
-			Viewer v= pane.getViewer();
-			if (v instanceof ISavable)
-				((ISavable)v).save(pm);
-		}
-	}
-}
-
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java
deleted file mode 100644
index 0c150c1..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import java.util.ResourceBundle;
-
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.Viewer;
-
-import org.eclipse.core.runtime.IAdaptable;
-
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-
-import org.eclipse.compare.internal.CompareUIPlugin;
-import org.eclipse.compare.structuremergeviewer.ICompareInput;
-
-
-/**
- * The class <code>CompareUI</code> defines the entry point to initiate a configurable
- * compare operation on arbitrary resources. The result of the compare
- * is opened into a compare editor where the details can be browsed and
- * edited in dynamically selected structure and content viewers.
- * <p>
- * The Compare UI provides a registry for content and structure compare viewers,
- * which is initialized from extensions contributed to extension points
- * declared by this plug-in.
- */
-public final class CompareUI {
-	
-	/**
-	 * Compare Plug-in ID (value <code>"org.eclipse.compare"</code>).
-	 * @since 2.0
-	 */
-	public static final String PLUGIN_ID= "org.eclipse.compare"; //$NON-NLS-1$
-
-	/**
-	 * Image descriptor for the disabled icon of the 'Next' tool bar button.
-	 * @since 2.0
-	 */
-	public static final ImageDescriptor DESC_DTOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.DTOOL_NEXT);
-	/**
-	 * Image descriptor for the normal icon of the 'Next' tool bar button.
-	 * @since 2.0
-	 */
-	public static final ImageDescriptor DESC_CTOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.CTOOL_NEXT);
-	/**
-	 * Image descriptor for the roll-over icon of the 'Next' tool bar button.
-	 * @since 2.0
-	 */
-	public static final ImageDescriptor DESC_ETOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.ETOOL_NEXT);
-	
-	/**
-	 * Image descriptor for the disabled icon of the 'Previous' tool bar button.
-	 * @since 2.0
-	 */
-	public static final ImageDescriptor DESC_DTOOL_PREV= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.DTOOL_PREV);
-	/**
-	 * Image descriptor for the normal icon of the 'Previous' tool bar button.
-	 * @since 2.0
-	 */
-	public static final ImageDescriptor DESC_CTOOL_PREV= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.CTOOL_PREV);
-	/**
-	 * Image descriptor for the roll-over icon of the 'Previous' tool bar button.
-	 * @since 2.0
-	 */
-	public static final ImageDescriptor DESC_ETOOL_PREV= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.ETOOL_PREV);
-
-	/**
-	 * Name of the title property of a compare viewer.
- 	 * If a property with this name is set
- 	 * on the top level SWT control of a viewer, it is used as a title in the pane's
- 	 * title bar.
- 	 */
-	public static final String COMPARE_VIEWER_TITLE= "org.eclipse.compare.CompareUI.CompareViewerTitle"; //$NON-NLS-1$
-	
-	private CompareUI() {
-	}
-	
-	public static AbstractUIPlugin getPlugin() {
-		return CompareUIPlugin.getDefault();
-	}
-	
-	/**
-	 * Returns this plug-in's resource bundle.
-	 *
-	 * @return the plugin's resource bundle
-	 */
-	public static ResourceBundle getResourceBundle() {
-		return CompareUIPlugin.getResourceBundle();
-	}
-	
-	/**
-	 * Performs the comparison described by the given input and opens a
-	 * compare editor on the result in the currently active workbench page.
-	 *
-	 * @param input the input on which to open the compare editor
-	 */
-	public static void openCompareEditor(CompareEditorInput input) {
-		openCompareEditorOnPage(input, null);
-	}
-			
-	/**
-	 * Performs the comparison described by the given input and opens a
-	 * compare editor on the result in the given workbench page.
-	 *
-	 * @param input the input on which to open the compare editor
-	 * @param page the workbench page in which to open the compare editor
-	 * @since 2.1
-	 */
-	public static void openCompareEditorOnPage(CompareEditorInput input, IWorkbenchPage page) {
-		CompareUIPlugin plugin= CompareUIPlugin.getDefault();
-		if (plugin != null)
-			plugin.openCompareEditor(input, page);
-	}
-			
-	/**
-	 * Performs the comparison described by the given input and opens a
-	 * modal compare dialog on the result.
-	 *
-	 * @param input the input on which to open the compare dialog
-	 */
-	public static void openCompareDialog(CompareEditorInput input) {
-		CompareUIPlugin plugin= CompareUIPlugin.getDefault();
-		if (plugin != null)
-			plugin.openCompareDialog(input);
-	}
-			
-	/**
-	 * Registers an image descriptor for the given type.
-	 *
-	 * @param type the type
-	 * @param descriptor the image descriptor
-	 */
-	public static void registerImageDescriptor(String type, ImageDescriptor descriptor) {
-		CompareUIPlugin.registerImageDescriptor(type, descriptor);
-	}
-	
-	/**
-	 * Returns a shared image for the given type, or a generic image if none
-	 * has been registered for the given type.
-	 * <p>
-	 * Note: Images returned from this method will be automatically disposed
-	 * of when this plug-in shuts down. Callers must not dispose of these
-	 * images themselves.
-	 * </p>
-	 *
-	 * @param type the type
-	 * @return the image
-	 */
-	public static Image getImage(String type) {
-		return CompareUIPlugin.getImage(type);
-	}
-		
-	/**
-	 * Registers the given image for being disposed when this plug-in is shutdown.
-	 *
-	 * @param image the image to register for disposal
-	 */
-	public static void disposeOnShutdown(Image image) {
-		CompareUIPlugin.disposeOnShutdown(image);
-	}
-	
-	/**
-	 * Returns a shared image for the given adaptable.
-	 * This convenience method queries the given adaptable
-	 * for its <code>IWorkbenchAdapter.getImageDescriptor</code>, which it
-	 * uses to create an image if it does not already have one.
-	 * <p>
-	 * Note: Images returned from this method will be automatically disposed
-	 * of when this plug-in shuts down. Callers must not dispose of these
-	 * images themselves.
-	 * </p>
-	 *
-	 * @param adaptable the adaptable for which to find an image
-	 * @return an image
-	 */
-	public static Image getImage(IAdaptable adaptable) {
-		return CompareUIPlugin.getImage(adaptable);
-	}
-		
-	/**
-	 * Returns a structure compare viewer based on an old viewer and an input object.
-	 * If the old viewer is suitable for showing the input, the old viewer
-	 * is returned. Otherwise, the input's type is used to find a viewer descriptor in the registry
-	 * which in turn is used to create a structure compare viewer under the given parent composite.
-	 * If no viewer descriptor can be found <code>null</code> is returned.
-	 *
-	 * @param oldViewer a new viewer is only created if this old viewer cannot show the given input
-	 * @param input the input object for which to find a structure viewer
-	 * @param parent the SWT parent composite under which the new viewer is created
-	 * @param configuration a configuration which is passed to a newly created viewer
-	 * @return the compare viewer which is suitable for the given input object or <code>null</code>
-	 */
-	public static Viewer findStructureViewer(Viewer oldViewer, ICompareInput input, Composite parent,
-				CompareConfiguration configuration) {
-
-		return CompareUIPlugin.findStructureViewer(oldViewer, input, parent, configuration);
-	}
-	
-	/**
-	 * Returns a content compare viewer based on an old viewer and an input object.
-	 * If the old viewer is suitable for showing the input the old viewer
-	 * is returned. Otherwise the input's type is used to find a viewer descriptor in the registry
-	 * which in turn is used to create a content compare viewer under the given parent composite.
-	 * If no viewer descriptor can be found <code>null</code> is returned.
-	 *
-	 * @param oldViewer a new viewer is only created if this old viewer cannot show the given input
-	 * @param input the input object for which to find a content viewer
-	 * @param parent the SWT parent composite under which the new viewer is created
-	 * @param configuration a configuration which is passed to a newly created viewer
-	 * @return the compare viewer which is suitable for the given input object or <code>null</code>
-	 */
-	public static Viewer findContentViewer(Viewer oldViewer, ICompareInput input, Composite parent,
-			CompareConfiguration configuration) {
-		return CompareUIPlugin.findContentViewer(oldViewer, input, parent, configuration);
-	}
-	
-	/**
-	 * Returns a content compare viewer based on an old viewer and an input
-	 * object. If the old viewer is suitable for showing the input the old
-	 * viewer is returned. Otherwise the input's type is used to find a viewer
-	 * descriptor in the registry which in turn is used to create a content
-	 * compare viewer under the given parent composite. In order to determine
-	 * the input's type, the input must either implement IStreamContentAccessor
-	 * and ITypedElement or ICompareInput. If no viewer descriptor can be found
-	 * <code>null</code> is returned.
-	 *
-	 * @param oldViewer a new viewer is only created if this old viewer cannot show the given input
-	 * @param input the input object for which to find a content viewer. Must
-	 * implement either <code>IStreamContentAccessor</code> and<code>
-	 * ITypedElement</code> or <code>ICompareInput</code>.
-	 * @param parent the SWT parent composite under which the new viewer is created
-	 * @param configuration a configuration which is passed to a newly created viewer
-	 * @return the compare viewer which is suitable for the given input object or <code>null</code>
-	 */
-	public static Viewer findContentViewer(Viewer oldViewer, Object input, Composite parent,
-			CompareConfiguration configuration) {
-		
-		return CompareUIPlugin.findContentViewer(oldViewer, input, parent, configuration);
-	}
-
-	/**
-	 * Adds an alias for the given type.
-	 * Subsequent calls to <code>findStructureViewer</code>
-	 * treat alias as a synonym for type and return the same viewer.
-	 * <p>
-	 * Note: this method is for internal use only. Clients should not call this method. 
-	 * @param type a type name for which a viewer has been registered
-	 * @param alias a type name which should be treated as a synonym of type
-	 * @since 2.0
-	 */
-	public static void addStructureViewerAlias(String type, String alias) {
-		CompareUIPlugin.addStructureViewerAlias(type, alias);
-	}
-	
-	/**
-	 * Remove all aliases for the given type. This method does not affect
-	 * the initial binding between type and viewer. If no aliases exist for the
-	 * given type this method does nothing.
-	 * <p>
-	 * Note: this method is for internal use only. Clients should not call this method. 
-	 * @param type the type name for which all synonymes are removed.
-	 * @since 2.0
-	 */
-	public static void removeAllStructureViewerAliases(String type) {
-		CompareUIPlugin.removeAllStructureViewerAliases(type);
-	}
-}
-
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java
deleted file mode 100644
index be2e177..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.*;
-
-import org.eclipse.jface.action.ToolBarManager;
-
-/**
- * A <code>CompareViewerPane</code> is a convenience class which installs a
- * <code>CLabel</code> and a <code>Toolbar</code> in a <code>ViewForm</code>.
- * <P>
- * Double clicking onto the <code>CompareViewerPane</code>'s title bar maximizes
- * the <code>CompareViewerPane</code> to the size of an enclosing <code>Splitter</code>
- * (if there is one).
- * If more <code>Splitters</code> are nested maximizing walks up and
- * maximizes to the outermost <code>Splitter</code>.
- * 
- * @since 2.0
- */
-public class CompareViewerPane extends ViewForm {
-	
-	private ToolBarManager fToolBarManager;
-
-	/**
-	 * Constructs a new instance of this class given its parent
-	 * and a style value describing its behavior and appearance.
-	 *
-	 * @param parent a widget which will be the parent of the new instance (cannot be null)
-	 * @param style the style of widget to construct
-	 *
-	 * @exception IllegalArgumentException <ul>
-	 *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
-	 * </ul>
-	 * @exception SWTException <ul>
-	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
-	 * </ul>
-	 */		
-	public CompareViewerPane(Composite container, int style) {
-		super(container, style);
-		
-		marginWidth= 0;
-		marginHeight= 0;
-		
-		CLabel label= new CLabel(this, SWT.NONE) {
-			public Point computeSize(int wHint, int hHint, boolean changed) {
-				return super.computeSize(wHint, Math.max(24, hHint), changed);
-			}
-		};
-		setTopLeft(label);
-		
-		MouseAdapter ml= new MouseAdapter() {
-			public void mouseDoubleClick(MouseEvent e) {
-				Control content= getContent();
-				if (content != null && content.getBounds().contains(e.x, e.y))
-					return;
-				Control parent= getParent();
-				if (parent instanceof Splitter)
-					((Splitter)parent).setMaximizedControl(CompareViewerPane.this);
-			}
-		};	
-				
-		addMouseListener(ml);
-		label.addMouseListener(ml);	
-	}
-	
-	/**
-	 * Set the pane's title text.
-	 * The value <code>null</code> clears it.
-	 * 
-	 * @param text the text to be displayed in the pane or null
-	 */
-	public void setText(String label) {
-		CLabel cl= (CLabel) getTopLeft();
-		cl.setText(label);		
-	}
-	
-	/**
-	 * Set the pane's title Image.
-	 * The value <code>null</code> clears it.
-	 * 
-	 * @param image the image to be displayed in the pane or null
-	 */
-	public void setImage(Image image) {
-		CLabel cl= (CLabel) getTopLeft();
-		cl.setImage(image);
-	}
-	
-	/**
-	 * Returns a <code>ToolBarManager</code> if the given parent is a
-	 * <code>CompareViewerPane</code> or <code>null</code> otherwise.
-	 * 
-	 * @param parent a <code>Composite</code> or <code>null</code>
-	 * @return a <code>ToolBarManager</code> if the given parent is a <code>CompareViewerPane</code> otherwise <code>null</code>
-	 */
-	public static ToolBarManager getToolBarManager(Composite parent) {
-		if (parent instanceof CompareViewerPane) {
-			CompareViewerPane pane= (CompareViewerPane) parent;
-			return pane.getToolBarManager();
-		}
-		return null;
-	}
-
-	/**
-	 * Clears tool items in the <code>CompareViewerPane</code>'s control bar.
-	 * 
-	 * @param parent a <code>Composite</code> or <code>null</code>
-	 */
-	public static void clearToolBar(Composite parent) {
-		ToolBarManager tbm= getToolBarManager(parent);
-		if (tbm != null) {
-			tbm.removeAll();
-			tbm.update(true);
-		}
-	}
-	
-	//---- private stuff
-	
-	private ToolBarManager getToolBarManager() {
-		if (fToolBarManager == null) {
-			ToolBar tb= new ToolBar(this, SWT.FLAT);
-			setTopCenter(tb);
-			fToolBarManager= new ToolBarManager(tb);
-		}
-		return fToolBarManager;
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
deleted file mode 100644
index 5568251..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
+++ /dev/null
@@ -1,371 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import java.text.MessageFormat;
-
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.*;
-
-import org.eclipse.jface.util.ListenerList;
-import org.eclipse.jface.viewers.*;
-
-import org.eclipse.compare.internal.*;
-import org.eclipse.compare.structuremergeviewer.ICompareInput;
-
-
-/**
- * A custom <code>CompareViewerPane</code> that supports dynamic viewer switching.
- * 
- * <p>
- * Clients must implement the viewer switching strategy by implementing
- * the <code>getViewer(Viewer, Object)</code> method.
- * <p>
- * If a property with the name <code>CompareUI.COMPARE_VIEWER_TITLE</code> is set
- * on the top level SWT control of a viewer, it is used as a title in the <code>CompareViewerPane</code>'s
- * title bar.
- * 
- * @since 2.0
- */
-public abstract class CompareViewerSwitchingPane extends CompareViewerPane
-				implements ISelectionChangedListener, ISelectionProvider, IDoubleClickListener {
-	
-	private Viewer fViewer;
-	private Object fInput;
-	private ListenerList fSelectionListeners= new ListenerList();
-	private ListenerList fDoubleClickListener= new ListenerList();
-	private ListenerList fOpenListener= new ListenerList();
-	private boolean fControlVisibility= false;
-	private String fTitle;
-	private String fTitleArgument;
-	
-	private IOpenListener fOpenHandler= new IOpenListener() {
-		public void open(OpenEvent event) {
-			Object[] listeners= fOpenListener.getListeners();
-			for (int i= 0; i < listeners.length; i++)
-				((IOpenListener) listeners[i]).open(event);
-		}
-	};
-	
-	/**
-	 * Creates a <code>CompareViewerSwitchingPane</code> as a child of the given parent and with the
-	 * specified SWT style bits.
-	 *
-	 * @param parent a widget which will be the parent of the new instance (cannot be null)
-	 * @param style the style of widget to construct
-	 *
-	 * @exception IllegalArgumentException <ul>
-	 *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
-	 * </ul>
-	 * @exception SWTException <ul>
-	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
-	 * </ul>
-	 */		
-	public CompareViewerSwitchingPane(Composite parent, int style) {
-		this(parent, style, false);
-	}
-	
-	/**
-	 * Creates a <code>CompareViewerSwitchingPane</code> as a child of the given parent and with the
-	 * specified SWT style bits.
-	 *
-	 * @param parent a widget which will be the parent of the new instance (cannot be null)
-	 * @param style the style of widget to construct
-	 * @param visibility the initial visibility of the CompareViewerSwitchingPane
-	 *
-	 * @exception IllegalArgumentException <ul>
-	 *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
-	 * </ul>
-	 * @exception SWTException <ul>
-	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
-	 * </ul>
-	 */		
-	public CompareViewerSwitchingPane(Composite parent, int style, boolean visibility) {
-		super(parent, style);
-
-		fControlVisibility= visibility;
-		
-		setViewer(new NullViewer(this));
-		
-		addDisposeListener(
-			new DisposeListener() {
-				public void widgetDisposed(DisposeEvent e) {
-					if (fViewer instanceof ISelectionProvider)
-						((ISelectionProvider) fViewer).removeSelectionChangedListener(CompareViewerSwitchingPane.this);
-					if (fViewer instanceof StructuredViewer) {
-						StructuredViewer sv= (StructuredViewer) fViewer;
-						sv.removeDoubleClickListener(CompareViewerSwitchingPane.this);
-						sv.removeOpenListener(fOpenHandler);
-					}
-					fViewer= null;
-					fInput= null;
-					fSelectionListeners= null;
-				}
-			}
-		);
-	}
-	
-	/**
-	 * Returns the current viewer.
-	 * 
-	 * @return the current viewer
-	 */
-	public Viewer getViewer() {
-		return fViewer;
-	}
-	
-	private void setViewer(Viewer newViewer) {
-		
-		if (newViewer == fViewer)
-			return;
-				
-		boolean oldEmpty= isEmpty();
-
-		if (fViewer != null) {
-			
-			if (fViewer instanceof ISelectionProvider)
-				 ((ISelectionProvider) fViewer).removeSelectionChangedListener(this);
-				 
-			if (fViewer instanceof StructuredViewer) {
-				StructuredViewer sv= (StructuredViewer) fViewer;
-				sv.removeDoubleClickListener(this);
-				sv.removeOpenListener(fOpenHandler);
-			}
-
-			Control content= getContent();
-			setContent(null);
-			
-			fViewer.setInput(null);
-								
-			if (content != null && !content.isDisposed())
-				content.dispose();
-
-		} else
-			oldEmpty= false;			
-		setContent(null);
-
-		fViewer= newViewer;
-
-		if (fViewer != null) {
-			// we have to remember and restore the old visibility of the CustomPane
-			// since setContent changes the visibility
-			boolean old= getVisible();
-			setContent(fViewer.getControl());
-			setVisible(old);	// restore old visibility
-
-			boolean newEmpty= isEmpty();
-
-			if (fViewer instanceof ISelectionProvider)
-				 ((ISelectionProvider) fViewer).addSelectionChangedListener(this);
-
-			if (fViewer instanceof StructuredViewer) {
-				StructuredViewer sv= (StructuredViewer) fViewer;
-				sv.addDoubleClickListener(this);
-				sv.addOpenListener(fOpenHandler);
-			}
-			
-			if (oldEmpty != newEmpty) {	// relayout my container
-				Composite parent= getParent();
-				if (parent instanceof Splitter)
-					((Splitter)parent).setVisible(this, fControlVisibility ? !newEmpty : true);
-			}
-				
-			layout(true);
-		}
-	}
-
-	/**
-	 * Returns the optional title argument that has been set with <code>setTitelArgument</code>
-	 * or <code>null</code> if no optional title argument has been set.
-	 * <p>
-	 * Note: this method is for internal use only. Clients should not call this method.
-	 * 
-	 * @return the optional title argument or <code>null</code>
-	 */
-	public String getTitleArgument() {
-		return fTitleArgument;
-	}
-
-	/**
-	 * Returns <code>true</code> if no viewer is installed or if the current viewer
-	 * is a <code>NullViewer</code>.
-	 * 
-	 * @return <code>true</code> if no viewer is installed or if the current viewer is a <code>NullViewer</code>
-	 */
-	public boolean isEmpty() {
-		return fViewer == null || fViewer instanceof NullViewer;
-	}
-
-	public void addSelectionChangedListener(ISelectionChangedListener l) {
-		fSelectionListeners.add(l);
-	}
-
-	public void removeSelectionChangedListener(ISelectionChangedListener l) {
-		fSelectionListeners.remove(l);
-	}
-
-	public void addDoubleClickListener(IDoubleClickListener l) {
-		fDoubleClickListener.add(l);
-	}
-
-	public void removeDoubleClickListener(IDoubleClickListener l) {
-		fDoubleClickListener.remove(l);
-	}
-
-	public void addOpenListener(IOpenListener l) {
-		fOpenListener.add(l);
-	}
-
-	public void removeOpenListener(IOpenListener l) {
-		fOpenListener.remove(l);
-	}
-
-	public void doubleClick(DoubleClickEvent event) {
-		Object[] listeners= fDoubleClickListener.getListeners();
-		for (int i= 0; i < listeners.length; i++)
-			((IDoubleClickListener) listeners[i]).doubleClick(event);
-	}
-
-	public ISelection getSelection() {
-		if (fViewer instanceof ISelectionProvider)
-			return ((ISelectionProvider) fViewer).getSelection();
-		return null;
-	}
-
-	public void setSelection(ISelection s) {
-		if (fViewer instanceof ISelectionProvider)
-			 ((ISelectionProvider) fViewer).setSelection(s);
-	}
-
-	public void selectionChanged(SelectionChangedEvent ev) {
-		Object[] listeners= fSelectionListeners.getListeners();
-		for (int i= 0; i < listeners.length; i++)
-			((ISelectionChangedListener) listeners[i]).selectionChanged(ev);
-	}
-	
-	private boolean hasFocus2() {
-		// do we have focus?
-		Display display= getDisplay();
-		if (display != null)
-			for (Control focus= display.getFocusControl(); focus != null; focus= focus.getParent())
-				if (focus == this)
-					return true;
-		return false;
-	}
-		
-	/**
-	 * Sets the input object of this pane. 
-	 * For this input object a suitable viewer is determined by calling the abstract
-	 * method <code>getViewer(Viewer, Object)</code>.
-	 * If the returned viewer differs from the current one, the old viewer
-	 * is disposed and the new one installed. Then the input object is fed
-	 * into the newly installed viewer by calling its <code>setInput(Object)</code> method.
-	 * If new and old viewer don't differ no new viewer is installed but just
-	 * <code>setInput(Object)</code> is called.
-	 * If the input is <code>null</code> the pane is cleared,
-	 * that is the current viewer is disposed.
-	 * 
-	 * @param input the new input object or <code>null</code>
-	 */ 
-	public void setInput(Object input) {
-
-		if (fInput == input)
-			return;
-			
-		boolean hadFocus= hasFocus2();
-		
-		fInput= input;
-
-		// viewer switching
-		Viewer newViewer= null;
-		if (input != null)
-			newViewer= getViewer(fViewer, input);
-
-		if (newViewer == null) {
-			if (fViewer instanceof NullViewer)
-				return;
-			newViewer= new NullViewer(this);
-		}
-		
-		setViewer(newViewer);
-
-		// set input
-		fViewer.setInput(input);
-
-		Image image= null;
-		if (!(fViewer instanceof NullViewer) && input instanceof ICompareInput)
-			image= ((ICompareInput)input).getImage();
-		setImage(image);
-		
-		String title= null;	
-		if (fViewer != null) {
-			Control c= fViewer.getControl();
-			if (c != null) {
-				Object data= c.getData(CompareUI.COMPARE_VIEWER_TITLE);
-				if (data instanceof String)
-					title= (String) data;
-				if (hadFocus)
-					c.setFocus();
-			}	
-		}
-			
-		fTitle= title;
-		updateTitle();
-	}
-	
-	/**
-	 * Sets an additional and optional argument for the pane's title.
-	 * Note: this method is for internal use only. Clients should not call this method.
-	 *  
-	 * @param argument an optional argument for the pane's title
-	 */
-	public void setTitleArgument(String argument) {
-		fTitleArgument= argument;
-		updateTitle();
-	}
-
-	private void updateTitle() {
-		if (fTitle != null) {
-			if (fTitleArgument != null) {
-				String format= CompareMessages.getString("CompareViewerSwitchingPane.Titleformat");	//$NON-NLS-1$
-				String t= MessageFormat.format(format, new String[] { fTitle, fTitleArgument } );
-				setText(t);
-			} else
-				setText(fTitle);			
-		} else {
-			setText("");	//$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * Returns the current input of this pane or null if the pane has no input.
-	 * 
-	 * @return an <code>Object</code> that is the input to this pane or null if the pane has no input.
-	 */
-	public Object getInput() {
-		return fInput;
-	}
-
-	/**
-	 * Returns a viewer which is able to display the given input.
-	 * If no viewer can be found, <code>null</code> is returned.
-	 * The additional argument oldViewer represents the viewer currently installed
-	 * in the pane (or <code>null</code> if no viewer is installed).
-	 * It can be returned from this method if the current viewer can deal with the
-	 * input (and no new viewer must be created).
-	 *
-	 * @param oldViewer the currently installed viewer or <code>null</code>
-	 * @param input the input object for which a viewer must be determined or <code>null</code>
-	 * @return a viewer for the given input, or <code>null</code> if no viewer can be determined
-	 */
-	abstract protected Viewer getViewer(Viewer oldViewer, Object input);
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java
deleted file mode 100644
index 5969b20..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java
+++ /dev/null
@@ -1,1126 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import java.util.HashMap;
-import java.util.ResourceBundle;
-import java.util.Date;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.HashSet;
-import java.util.Calendar;
-import java.io.InputStream;
-import java.text.*;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Widget;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.Item;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.jface.util.Assert;
-import org.eclipse.jface.dialogs.*;
-
-import org.eclipse.core.runtime.CoreException;
-
-import org.eclipse.compare.internal.*;
-import org.eclipse.compare.structuremergeviewer.*;
-
-
-/**
- * A dialog where one input element can be compared against
- * a list of historic variants (editions) of the same input element.
- * The dialog can be used to implement functions like "Compare/Replace with Version" or
- * "Compare/Replace from Local History" on workspace resources.
- * <p>
- * In addition it is possible to specify a subsection of the input element
- * (e.g. a method in a Java source file) by means of a "path".
- * In this case the dialog compares only the subsection (as specified by the path)
- * with the corresponding subsection in the list of editions.
- * Only those editions are shown where the subsection differs from the same subsection in
- * another edition thereby minimizing the number of presented variants.
- * This functionality can be used to implement "Replace from Local History"
- * for the Java language.
- * <p>
- * Subsections of an input element are determined by first finding an
- * <code>IStructureCreator</code> for the input's type.
- * Then the method <code>locate</code> is used to extract the subsection.
- * <p>
- * Each edition (variant in the list of variants) must implement the <code>IModificationDate</code> interface
- * so that the dialog can sort the editions and present them in a tree structure where every
- * node corresponds one day.
- * <p>
- * The functionality is surfaced in a single function <code>selectEdition</code>.
- * <p>
- * Clients may instantiate this class; it is not intended to be subclassed.
- * </p>
- *
- * @see IModificationDate
- * @see ITypedElement
- */
-public class EditionSelectionDialog extends ResizableDialog {
-		
-	/**
-	 * An item in an underlying edition.
-	 */
-	private static class Pair {
-		
-		private ITypedElement fEdition;
-		private ITypedElement fItem;
-		private String fContent;
-		private IStructureCreator fStructureCreator;
-		private boolean fHasError= false;
-				
-		Pair(IStructureCreator structureCreator, ITypedElement edition, ITypedElement item) {
-			fStructureCreator= structureCreator;
-			fEdition= edition;
-			fItem= item;
-		}
-		
-		Pair(IStructureCreator structureCreator, ITypedElement edition) {
-			this(structureCreator, edition, edition);
-		}
-		
-		ITypedElement getEdition() {
-			return fEdition;
-		}
-
-		ITypedElement getItem() {
-			return fItem;
-		}
-		
-		/**
-		 * The content is lazily loaded
-		 */
-		private String getContent() {
-			if (fContent == null) {
-				if (fStructureCreator != null)
-					fContent= fStructureCreator.getContents(fItem, false);
-				else {
-					if (fItem instanceof IStreamContentAccessor) {
-						IStreamContentAccessor sca= (IStreamContentAccessor) fItem;
-						try {
-							InputStream is= sca.getContents();
-							if (is != null)
-								fContent= Utilities.readString(is);
-						} catch (CoreException ex) {
-						}
-					}
-				}
-				if (fContent == null)
-					fContent= ""; //$NON-NLS-1$
-			}
-			return fContent;
-		}
-		
-		/**
-		 * Compares content of item.
-		 */
-		public boolean equals(Object other) {
-			if (other != null && other.getClass() == getClass()) {
-				if (getContent().equals(((Pair)other).getContent()))
-					return true;
-			}
-			return super.equals(other);
-		}
-	}
-	
-	// Configuration options
-	private CompareConfiguration fCompareConfiguration;
-	private ArrayList fArrayList= new ArrayList();
-	/** use a side-by-side compare viewer */
-	private boolean fCompare= true;
-	/** show target on right hand side */
-	private boolean fTargetIsRight= false;
-	/** hide entries which have identical content */
-	private boolean fHideIdentical= true;
-	/** add mode if true, otherwise replace mode */
-	private boolean fAddMode= false;
-	/** compare mode if true, otherwise replace/add mode */
-	private boolean fCompareMode= false;
-	/** perform structure compare on editions */
-	private boolean fStructureCompare= false;
-	/** allow for multiple selection */
-	private boolean fMultiSelect= false;
-	
-	/**
-	 * Maps from members to their corresponding editions.
-	 * Has only a single entry if dialog is used in "Replace" (and not "Add") mode.
-	 */
-	private HashMap fMemberEditions;
-	/**
-	 * Maps from members to their corresponding selected edition.
-	 */
-	private HashMap fMemberSelection;
-	/** The editions of the current selected member */
-	private List fCurrentEditions;
-	private Thread fThread;
-	private Pair fTargetPair;
-	/** The selected edition in the edition viewer */
-	private ITypedElement fSelectedItem;
-	private String fTitleArg;
-	private Image fTitleImage;
-	
-	// SWT controls
-	private CompareViewerSwitchingPane fContentPane;
-	private Button fCommitButton;
-	private Table fMemberTable;
-	private CompareViewerPane fMemberPane;
-	private Tree fEditionTree;
-	private CompareViewerPane fEditionPane;
-	private Image fDateImage;
-	private Image fTimeImage;
-	private CompareViewerSwitchingPane fStructuredComparePane;
-	
-	/**
-	 * Creates a new modal, resizable dialog.
-	 * Various titles, icons, and labels are configured from the given resource bundle.
-	 * The following resource keys are used:
-	 * <pre>
-	 *	key         type          description
-	 *	title       String        dialog title
-	 *	width       Integer       initial width of dialog
-	 *	height      Integer       initial height of dialog
-	 *	treeTitleFormat   MessageFormat pane title for edition tree; arg 0 is the target
-	 *	dateIcon    String        icon for node in edition tree; path relative to plugin
-	 *	timeIcon    String        icon for leaf in edition tree; path relative to plugin
-	 *	todayFormat MessageFormat format string if date is todays date; arg 0 is date
-	 *	yesterdayFormat MessageFormat format string if date is yesterdays date; arg 0 is date
-	 *	dayFormat   MessageFormat format string if date is any other date; arg 0 is date
-	 *	editionLabel String       label for editions side of compare viewer; arg 0 is the date
-	 *	targetLabel  String       label for target side of compare viewer 
-	 *  buttonLabel  String       label for OK button; default is IDialogConstants.OK_LABEL
-	 * </pre>
-	 *
-	 * @param parent if not <code>null</code> the new dialog stays on top of this parent shell
-	 * @param bundle <code>ResourceBundle</code> to configure the dialog
-	 */
-	public EditionSelectionDialog(Shell parent, ResourceBundle bundle) {
-		super(parent, bundle);
-		
-		fCompareConfiguration= new CompareConfiguration();
-		fCompareConfiguration.setLeftEditable(false);
-		fCompareConfiguration.setRightEditable(false);
-				
-		String iconName= Utilities.getString(fBundle, "dateIcon", "obj16/day_obj.gif"); //$NON-NLS-2$ //$NON-NLS-1$
-		ImageDescriptor id= CompareUIPlugin.getImageDescriptor(iconName);
-		if (id != null)
-			fDateImage= id.createImage();
-		iconName= Utilities.getString(fBundle, "timeIcon", "obj16/resource_obj.gif"); //$NON-NLS-1$ //$NON-NLS-2$
-		id= CompareUIPlugin.getImageDescriptor(iconName);
-		if (id != null)
-			fTimeImage= id.createImage();
-	}
-		
-	/**
-	 * Sets an additional and optional argument for the edition pane's title.
-	 *  
-	 * @param titleArgument an optional argument for the edition pane's title
-	 * @since 2.0
-	 */
-	public void setEditionTitleArgument(String titleArgument) {
-		fTitleArg= titleArgument;
-	}
-	
-	/**
-	 * Sets an optional image for the edition pane's title.
-	 *  
-	 * @param titleImage an optional image for the edition pane's title
-	 * @since 2.0
-	 */
-	public void setEditionTitleImage(Image titleImage) {
-		fTitleImage= titleImage;
-	}
-	
-	/**
-	 * Select the previous edition (presenting a UI).
-	 *
-	 * @param target the input object against which the editions are compared; must not be <code>null</code>
-	 * @param editions the list of editions (element type: <code>ITypedElement</code>s)
-	 * @param path If <code>null</code> dialog shows full input; if non <code>null</code> it extracts a subsection
-	 * @return returns the selected edition or <code>null</code> if error occurred.
-	 * The returned <code>ITypedElement</code> is one of the original editions
-	 * if <code>path</code> was <code>null</code>; otherwise
-	 * it is an <code>ITypedElement</code> returned from <code>IStructureCreator.locate(path, item)</code>
-	 * @since 2.0
-	 */
-	public ITypedElement selectPreviousEdition(final ITypedElement target, ITypedElement[] inputEditions, Object ppath) {
-		Assert.isNotNull(target);
-		fTargetPair= new Pair(null, target);
-		
-		// sort input editions
-		final int count= inputEditions.length;
-		final IModificationDate[] editions= new IModificationDate[count];
-		for (int i= 0; i < count; i++)
-			editions[i]= (IModificationDate) inputEditions[i];
-		if (count > 1)
-			internalSort(editions, 0, count-1);
-			
-		// find StructureCreator if ppath is not null
-		IStructureCreator structureCreator= null;
-		if (ppath != null) {
-			String type= target.getType();
-			IStructureCreatorDescriptor scd= CompareUIPlugin.getStructureCreator(type);
-			if (scd != null)
-				structureCreator= scd.createStructureCreator();
-		}
-
-		if (fAddMode) {
-			// does not work in add mode
-			return null;
-		}
-			
-		if (structureCreator != null) {
-			Pair pair= createPair(structureCreator, ppath, target);
-			if (pair != null)
-				fTargetPair= pair;
-			else
-				ppath= null;	// couldn't extract item because of error
-		}
-					
-		// from front (newest) to back (oldest)
-		for (int i= 0; i < count; i++) {
-				
-			ITypedElement edition= (ITypedElement) editions[i];
-			Pair pair= null;
-			
-			if (structureCreator != null && ppath != null) {
-				// extract sub element from edition
-				pair= createPair(structureCreator, ppath, edition);
-			} else {
-				pair= new Pair(null, edition);
-			}
-			
-			if (pair != null && pair.fHasError)
-				return null;
-				
-			if (pair != null && !fTargetPair.equals(pair)) {
-				return pair.fItem;
-			}
-		}
-		
-		// nothing found
-		return null;
-	}
-	
-	/**
-	 * Presents this modal dialog with the functionality described in the class comment above.
-	 *
-	 * @param target the input object against which the editions are compared; must not be <code>null</code>
-	 * @param editions the list of editions (element type: <code>ITypedElement</code>s)
-	 * @param path If <code>null</code> dialog shows full input; if non <code>null</code> it extracts a subsection
-	 * @return returns the selected edition or <code>null</code> if dialog was cancelled.
-	 * The returned <code>ITypedElement</code> is one of the original editions
-	 * if <code>path</code> was <code>null</code>; otherwise
-	 * it is an <code>ITypedElement</code> returned from <code>IStructureCreator.locate(path, item)</code>
-	 */
-	public ITypedElement selectEdition(final ITypedElement target, ITypedElement[] inputEditions, Object ppath) {
-		
-		Assert.isNotNull(target);
-		fTargetPair= new Pair(null, target);
-		
-		// sort input editions
-		final int count= inputEditions.length;
-		final IModificationDate[] editions= new IModificationDate[count];
-		for (int i= 0; i < count; i++)
-			editions[i]= (IModificationDate) inputEditions[i];
-		if (count > 1)
-			internalSort(editions, 0, count-1);
-			
-		// find StructureCreator if ppath is not null
-		IStructureCreator structureCreator= null;
-		if (ppath != null) {
-			String type= target.getType();
-			IStructureCreatorDescriptor scd= CompareUIPlugin.getStructureCreator(type);
-			if (scd != null)
-				structureCreator= scd.createStructureCreator();
-		}
-
-		if (!fAddMode) {
-			// replace mode
-			
-			if (structureCreator != null) {
-				Pair pair= createPair(structureCreator, ppath, target);
-				if (pair != null)
-					fTargetPair= pair;
-				else
-					ppath= null;	// couldn't extract item because of error
-			}
-			
-			// set the left and right labels for the compare viewer
-			String targetLabel= getTargetLabel(target, fTargetPair.getItem());
-			if (fTargetIsRight)
-				fCompareConfiguration.setRightLabel(targetLabel);
-			else
-				fCompareConfiguration.setLeftLabel(targetLabel);
-			
-			if (structureCreator != null && ppath != null) {	// extract sub element
-				
-				final IStructureCreator sc= structureCreator;
-				final Object path= ppath;
-				
-				// construct the comparer thread
-				// and perform the background extract
-				fThread= new Thread() {
-					public void run() {
-																				
-						// from front (newest) to back (oldest)
-						for (int i= 0; i < count; i++) {
-								
-							if (fEditionTree == null || fEditionTree.isDisposed())
-								break;
-							ITypedElement edition= (ITypedElement) editions[i];
-							
-							// extract sub element from edition
-							Pair pair= createPair(sc, path, edition);
-							if (pair != null)
-								sendPair(pair);
-						}
-						sendPair(null);
-					}
-				};
-			} else {
-				// create tree widget
-				create();
-				
-				// from front (newest) to back (oldest)
-				for (int i= 0; i < count; i++)
-					addMemberEdition(new Pair(null, (ITypedElement) editions[i]));
-			}
-			
-		} else {
-			// add mode
-			final Object container= ppath;
-			Assert.isNotNull(container);
-								
-			if (structureCreator == null)
-				return null;	// error
-		
-			// extract all elements of container
-			final HashSet current= new HashSet();
-			IStructureComparator sco= structureCreator.locate(container, target);
-			if (sco != null) {
-				Object[] children= sco.getChildren();
-				if (children != null)
-					for (int i= 0; i < children.length; i++)
-						current.add(children[i]);
-			}
-			
-			final IStructureCreator sc= structureCreator;
-			
-			// construct the comparer thread
-			// and perform the background extract
-			fThread= new Thread() {
-				public void run() {
-					
-					// from front (newest) to back (oldest)
-					for (int i= 0; i < count; i++) {
-							
-						if (fEditionTree == null || fEditionTree.isDisposed())
-							break;
-						ITypedElement edition= (ITypedElement) editions[i];
-						
-						IStructureComparator sco2= sc.locate(container, edition);
-						if (sco2 != null) {
-							Object[] children= sco2.getChildren();
-							if (children != null) {
-								for (int i2= 0; i2 < children.length; i2++) {
-									ITypedElement child= (ITypedElement) children[i2];
-									if (!current.contains(child))
-										sendPair(new Pair(sc, edition, child));
-								}
-							}
-						}
-					}
-					sendPair(null);
-				}
-			};
-		}
-		
-		open();
-		
-		if (getReturnCode() == OK)
-			return fSelectedItem;
-		return null;
-	}
-	
-	private Pair createPair(IStructureCreator sc, Object path, ITypedElement input) {
-		IStructureComparator scmp= sc.locate(path, input);
-		if (scmp == null && sc.getStructure(input) == null) {	// parse error
-			Pair p= new Pair(sc, input);
-			p.fHasError= true;
-			return p;
-		}
-		if (scmp instanceof ITypedElement)
-			return new Pair(sc, input, (ITypedElement) scmp);
-		return null;
-	}
-
-	/**
-	 * Controls whether identical entries are shown or not (default).
-	 * This method must be called before <code>selectEdition</code>.
-	 *
-	 * @param hide if true identical entries are hidden; otherwise they are shown.
-	 * @since 2.0
-	 */
-	public void setHideIdenticalEntries(boolean hide) {
-		fHideIdentical= hide;
-	}
-
-	/**
-	 * Controls whether workspace target is on the left (the default) or right hand side.
-	 *
-	 * @param isRight if true target is shown on right hand side.
-	 * @since 2.0
-	 */
-	public void setTargetIsRight(boolean isRight) {
-		fTargetIsRight= isRight;
-	}
-		
-	/**
-	 * Controls whether the <code>EditionSelectionDialog</code> is in 'add' mode
-	 * or 'replace' mode (the default).
-	 *
-	 * @param addMode if true dialog is in 'add' mode.
-	 * @since 2.0
-	 */
-	public void setAddMode(boolean addMode) {
-		fAddMode= addMode;
-		fMultiSelect= addMode;
-	}
-	
-	/**
-	 * Controls whether the <code>EditionSelectionDialog</code> is in 'compare' mode
-	 * or 'add/replace' (the default) mode. 
-	 *
-	 * @param addMode if true dialog is in 'add' mode.
-	 * @since 2.0
-	 */
-	public void setCompareMode(boolean compareMode) {
-		fCompareMode= compareMode;
-		fStructureCompare= fCompareMode && !fAddMode;
-	}
-	
-	/**
-	 * Returns the input target that has been specified with the most recent call
-	 * to <code>selectEdition</code>. If a not <code>null</code> path was specified this method
-	 * returns a subsection of this target (<code>IStructureCreator.locate(path, target)</code>)
-	 * instead of the input target.
-	 * <p>
-	 * For example if the <code>target</code> is a Java compilation unit and <code>path</code> specifies
-	 * a method, the value returned from <code>getTarget</code> will be the method not the compilation unit.
-	 *
-	 * @return the last specified target or a subsection thereof.
-	 */
-	public ITypedElement getTarget() {
-		return fTargetPair.getItem();
-	}
- 	
-	/**
-	 * Returns the editions that have been selected with the most
-	 * recent call to <code>selectEdition</code>.
-	 * 
-	 * @return the selected editions as an array.
-	 * @since 2.1
-	 */
-	public ITypedElement[] getSelection() {
-		ArrayList result= new ArrayList();
-		if (fMemberSelection != null) {
-			Iterator iter= fArrayList.iterator();
-			for (int i= 0; iter.hasNext(); i++) {
-				Object edition= iter.next();		
-				Object item= fMemberSelection.get(edition);
-				if (item != null)
-					result.add(item);
-			}
-		} else if (fSelectedItem != null)
-			result.add(fSelectedItem);
-		return (ITypedElement[]) result.toArray(new ITypedElement[result.size()]);
-	}
-		
- 	/**
- 	 * Returns a label for identifying the target side of a compare viewer.
- 	 * This implementation extracts the value for the key "targetLabel" from the resource bundle
- 	 * and passes it as the format argument to <code>MessageFormat.format</code>.
- 	 * The single format argument for <code>MessageFormat.format</code> ("{0}" in the format string)
- 	 * is the name of the given input element.
-	 * <p>
-	 * Subclasses may override to create their own label.
-	 * </p>
- 	 *
- 	 * @param target the target element for which a label must be returned
- 	 * @param item if a path has been specified in <code>selectEdition</code> a sub element of the given target; otherwise the same as target
- 	 * @return a label the target side of a compare viewer
-  	 */
-	protected String getTargetLabel(ITypedElement target, ITypedElement item) {
-		String format= null;
-		if (target instanceof ResourceNode)
-			format= Utilities.getString(fBundle, "workspaceTargetLabel", null); //$NON-NLS-1$
-		if (format == null)
-			format= Utilities.getString(fBundle, "targetLabel"); //$NON-NLS-1$
-		if (format == null)
-			format= "x{0}"; //$NON-NLS-1$
-		
-		return MessageFormat.format(format, new Object[] { target.getName() });
-	}
-	
- 	/**
- 	 * Returns a label for identifying the edition side of a compare viewer.
- 	 * This implementation extracts the value for the key "editionLabel" from the resource bundle
- 	 * and passes it as the format argument to <code>MessageFormat.format</code>.
- 	 * The single format argument for <code>MessageFormat.format</code> ("{0}" in the format string)
- 	 * is the formatted modification date of the given input element.
- 	 * <p>
-	 * Subclasses may override to create their own label.
-	 * </p>
-	 *
-	 * @param selectedEdition the selected edition for which a label must be returned
- 	 * @param item if a path has been specified in <code>selectEdition</code> a sub element of the given selectedEdition; otherwise the same as selectedEdition
- 	 * @return a label for the edition side of a compare viewer
-  	 */
-	protected String getEditionLabel(ITypedElement selectedEdition, ITypedElement item) {
-		String format= null;
-		if (selectedEdition instanceof ResourceNode)
-			format= Utilities.getString(fBundle, "workspaceEditionLabel", null);	//$NON-NLS-1$
-		else if (selectedEdition instanceof HistoryItem)
-			format= Utilities.getString(fBundle, "historyEditionLabel", null);	//$NON-NLS-1$
-		if (format == null)
-			format= Utilities.getString(fBundle, "editionLabel");	//$NON-NLS-1$
-		if (format == null)
-			format= "x{0}";	//$NON-NLS-1$
-		
-
-		String date= "";	//$NON-NLS-1$
-		if (selectedEdition instanceof IModificationDate) {
-			long modDate= ((IModificationDate)selectedEdition).getModificationDate();
-			date= DateFormat.getDateTimeInstance().format(new Date(modDate));
-		}
-		
-		return MessageFormat.format(format, new Object[] { date });
-	}
-	
- 	/**
- 	 * Returns a label for identifying a node in the edition tree viewer.
- 	 * This implementation extracts the value for the key "workspaceTreeFormat" or
- 	 * "treeFormat" (in that order) from the resource bundle
- 	 * and passes it as the format argument to <code>MessageFormat.format</code>.
- 	 * The single format argument for <code>MessageFormat.format</code> ("{0}" in the format string)
- 	 * is the formatted modification date of the given input element.
- 	 * <p>
-	 * Subclasses may override to create their own label.
-	 * </p>
-	 *
-	 * @param edition the edition for which a label must be returned
- 	 * @param item if a path has been specified in <code>edition</code> a sub element of the given edition; otherwise the same as edition
- 	 * @return a label of a node in the edition tree viewer
-	 * @since 2.0
-	 */
-	protected String getShortEditionLabel(ITypedElement edition, ITypedElement item, Date date) {
-		String format= null;
-		if (edition instanceof ResourceNode)
-			format= Utilities.getString(fBundle, "workspaceTreeFormat", null);	//$NON-NLS-1$
-		if (format == null)
-			format= Utilities.getString(fBundle, "treeFormat", null);	//$NON-NLS-1$
-		if (format == null)
-			format= "x{0}"; //$NON-NLS-1$
-
-		String ds= DateFormat.getTimeInstance().format(date);
-		return MessageFormat.format(format, new Object[] { ds });
-	}
-	
- 	/**
- 	 * Returns an image for identifying the edition side of a compare viewer.
- 	 * This implementation extracts the value for the key "editionLabel" from the resource bundle
- 	 * and passes it as the format argument to <code>MessageFormat.format</code>.
- 	 * The single format argument for <code>MessageFormat.format</code> ("{0}" in the format string)
- 	 * is the formatted modification date of the given input element.
- 	 * <p>
-	 * Subclasses may override to create their own label.
-	 * </p>
-	 *
-	 * @param selectedEdition the selected edition for which a label must be returned
- 	 * @param item if a path has been specified in <code>selectEdition</code> a sub element of the given selectedEdition; otherwise the same as selectedEdition
- 	 * @return a label the edition side of a compare viewer
-  	 * @since 2.0
- 	 */
-	protected Image getEditionImage(ITypedElement selectedEdition, ITypedElement item) {
-		if (selectedEdition instanceof ResourceNode)
-			return selectedEdition.getImage();
-		if (selectedEdition instanceof HistoryItem)
-			return fTimeImage;
-		return null;
-	}
-	
- 	/* (non Javadoc)
- 	 * Creates SWT control tree.
- 	 */
-	protected synchronized Control createDialogArea(Composite parent2) {
-		
-		Composite parent= (Composite) super.createDialogArea(parent2);
-
-		getShell().setText(Utilities.getString(fBundle, "title")); //$NON-NLS-1$
-		
-		Splitter vsplitter= new Splitter(parent,  SWT.VERTICAL);
-		vsplitter.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL
-					| GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL));
-
-		vsplitter.addDisposeListener(
-			new DisposeListener() {
-				public void widgetDisposed(DisposeEvent e) {
-					if (fDateImage != null)
-						fDateImage.dispose();
-					if (fTimeImage != null)
-						fTimeImage.dispose();
-				}
-			}
-		);
-		
-		if (fAddMode) {
-			// we need two panes: the left for the elements, the right one for the editions
-			Splitter hsplitter= new Splitter(vsplitter,  SWT.HORIZONTAL);
-			
-			fMemberPane= new CompareViewerPane(hsplitter, SWT.BORDER | SWT.FLAT);
-			fMemberPane.setText(Utilities.getString(fBundle, "memberPaneTitle")); //$NON-NLS-1$
-			
-			int flags= SWT.H_SCROLL + SWT.V_SCROLL;
-			if (fMultiSelect)
-				flags|= SWT.CHECK;
-			fMemberTable= new Table(fMemberPane, flags);
-			fMemberTable.addSelectionListener(
-				new SelectionAdapter() {
-					public void widgetSelected(SelectionEvent e) {
-						if (e.detail == SWT.CHECK) {
-							if (e.item instanceof TableItem) {
-								TableItem ti= (TableItem) e.item;
-								Object data= ti.getData();
-								if (ti.getChecked())
-									fArrayList.add(data);
-								else
-									fArrayList.remove(data);
-									
-								if (fCommitButton != null)
-									fCommitButton.setEnabled(fArrayList.size() > 0);
-									
-								fMemberTable.setSelection(new TableItem[] { ti });
-							}
-						}
-						handleMemberSelect(e.item);
-					}
-				}
-			);
-			fMemberPane.setContent(fMemberTable);
-			fMemberTable.setFocus();
-						
-			fEditionPane= new CompareViewerPane(hsplitter, SWT.BORDER | SWT.FLAT);
-		} else {
-			if (fStructureCompare) {
-				// we need two panes: the left for the elements, the right one for the structured diff
-				Splitter hsplitter= new Splitter(vsplitter,  SWT.HORIZONTAL);
-				
-				fEditionPane= new CompareViewerPane(hsplitter, SWT.BORDER | SWT.FLAT);
-				fStructuredComparePane= new CompareViewerSwitchingPane(hsplitter, SWT.BORDER | SWT.FLAT, true) {
-					protected Viewer getViewer(Viewer oldViewer, Object input) {
-						if (input instanceof ICompareInput)
-							return CompareUIPlugin.findStructureViewer(oldViewer, (ICompareInput)input, this, fCompareConfiguration);
-						return null;
-					}
-				};
-				fStructuredComparePane.addSelectionChangedListener(
-					new ISelectionChangedListener() {
-						public void selectionChanged(SelectionChangedEvent e) {
-							feedInput2(e.getSelection());
-						}
-					}
-				);
-			} else {
-				// only a single pane showing the editions
-				fEditionPane= new CompareViewerPane(vsplitter, SWT.BORDER | SWT.FLAT);
-			}
-			if (fTitleArg == null)
-				fTitleArg= fTargetPair.getItem().getName();
-			String titleFormat= Utilities.getString(fBundle, "treeTitleFormat"); //$NON-NLS-1$
-			String title= MessageFormat.format(titleFormat, new String[] { fTitleArg });
-			fEditionPane.setText(title);
-			if (fTitleImage != null)
-				fEditionPane.setImage(fTitleImage);
-		}
-		
-		fEditionTree= new Tree(fEditionPane, SWT.H_SCROLL + SWT.V_SCROLL);
-		fEditionTree.addSelectionListener(
-			new SelectionAdapter() {
-//				public void widgetDefaultSelected(SelectionEvent e) {
-//					handleDefaultSelected();
-//				}
-				public void widgetSelected(SelectionEvent e) {
-					feedInput(e.item);
-				}
-			}
-		);
-		fEditionPane.setContent(fEditionTree);		
-		
-		// now start the thread (and forget about it)
-		if (fThread != null) {
-			fThread.start();
-			fThread= null;
-		}
-		
-		fContentPane= new CompareViewerSwitchingPane(vsplitter, SWT.BORDER | SWT.FLAT) {
-			protected Viewer getViewer(Viewer oldViewer, Object input) {
-				return CompareUIPlugin.findContentViewer(oldViewer, input, this, fCompareConfiguration);	
-			}
-		};
-		vsplitter.setWeights(new int[] { 30, 70 });
-
-		applyDialogFont(parent);				
-		return parent;
-	}	
-	
-	/* (non-Javadoc)
-	 * Method declared on Dialog.
-	 */
-	protected void createButtonsForButtonBar(Composite parent) {
-		String buttonLabel= Utilities.getString(fBundle, "buttonLabel", IDialogConstants.OK_LABEL); //$NON-NLS-1$
-		if (fCompareMode) {
-			// only a 'Done' button
-			createButton(parent, IDialogConstants.CANCEL_ID, buttonLabel, false);
-		} else {
-			// a 'Cancel' and a 'Add/Replace' button
-			fCommitButton= createButton(parent, IDialogConstants.OK_ID, buttonLabel, true);
-			fCommitButton.setEnabled(false);
-			createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
-		}
-	}
-
-	/**
-	 * Overidden to disable dismiss on double click in compare mode.
-	 * @since 2.0
-	 */
-	protected void okPressed() {
-		if (fCompareMode)
-			;	// don't dismiss dialog
-		else
-			super.okPressed();
-	}
-
-	//---- private stuff ----------------------------------------------------------------------------------------
-				
-	/**
-	 * Asynchroneously sends a Pair (or null) to the UI thread.
-	 */
-	private void sendPair(final Pair pair) {		
-		if (fEditionTree != null && !fEditionTree.isDisposed()) {
-			Display display= fEditionTree.getDisplay();
-			display.asyncExec(
-				new Runnable() {
-					public void run() {
-						addMemberEdition(pair);
-					}
-				}
-			);
-		}
-	}
-	
-	private static void internalSort(IModificationDate[] keys, int left, int right) { 
-	
-		int original_left= left;
-		int original_right= right;
-		
-		IModificationDate mid= keys[(left + right) / 2]; 
-		do { 
-			while (keys[left].getModificationDate() > mid.getModificationDate())
-				left++; 
-			
-			while (mid.getModificationDate() > keys[right].getModificationDate())
-				right--; 
-		
-			if (left <= right) { 
-				IModificationDate tmp= keys[left]; 
-				keys[left]= keys[right]; 
-				keys[right]= tmp;			
-				left++; 
-				right--; 
-			} 
-		} while (left <= right);
-		
-		if (original_left < right)
-			internalSort(keys, original_left, right); 
-		
-		if (left < original_right)
-			internalSort(keys, left, original_right); 
-	}
-	
-	/**
-	 * Adds the given Pair to the member editions.
-	 * If HIDE_IDENTICAL is true the new Pair is only added if its contents
-	 * is different from the preceeding Pair.
-	 * If the argument is <code>null</code> the message "No Editions found" is shown
-	 * in the member or edition viewer.
-	 */
-	private void addMemberEdition(Pair pair) {
-		
-		if (pair == null) {	// end of list of pairs
-			if (fMemberTable != null) {	
-				if (!fMemberTable.isDisposed() && fMemberTable.getItemCount() == 0) {
-					if (fMultiSelect) {
-						fMemberTable.dispose();
-						fMemberTable= new Table(fMemberPane, SWT.NONE);
-						fMemberPane.setContent(fMemberTable);
-					}
-					TableItem ti= new TableItem(fMemberTable, SWT.NONE);
-					ti.setText(Utilities.getString(fBundle, "noAdditionalMembersMessage")); //$NON-NLS-1$
-				}
-				return;
-			}
-			if (fEditionTree != null && !fEditionTree.isDisposed() && fEditionTree.getItemCount() == 0) {
-				TreeItem ti= new TreeItem(fEditionTree, SWT.NONE);
-				ti.setText(Utilities.getString(fBundle, "notFoundInLocalHistoryMessage")); //$NON-NLS-1$
-			}
-			return;
-		}
-		
-		if (fMemberEditions == null)
-			fMemberEditions= new HashMap();
-		if (fMultiSelect && fMemberSelection == null)
-			fMemberSelection= new HashMap();
-		
-		ITypedElement item= pair.getItem();
-		List editions= (List) fMemberEditions.get(item);
-		if (editions == null) {
-			editions= new ArrayList();
-			fMemberEditions.put(item, editions);
-			if (fMemberTable != null && !fMemberTable.isDisposed()) {
-				ITypedElement te= (ITypedElement)item;
-				String name= te.getName();
-				
-				// find position
-				TableItem[] items= fMemberTable.getItems();
-				int where= items.length;
-				for (int i= 0; i < where; i++) {
-					String n= items[i].getText();
-					if (n.compareTo(name) > 0) {
-						where= i;
-						break;
-					}
-				}
-				
-				TableItem ti= new TableItem(fMemberTable, where, SWT.NULL);
-				ti.setImage(te.getImage());
-				ti.setText(name);
-				ti.setData(editions);
-			}
-		}
-		if (fHideIdentical) {
-			Pair last= fTargetPair;
-			int size= editions.size();
-			if (size > 0)
-				last= (Pair) editions.get(size-1);
-			if (last != null && last.equals(pair))
-				return;	// don't add since the new one is equal to old
-		}
-		editions.add(pair);
-		
-		if (!fAddMode || editions == fCurrentEditions)
-			addEdition(pair);
-	}
-		
-	/**
-	 * Returns the number of s since Jan 1st, 1970.
-	 * The given date is converted to GMT and daylight saving is taken into account too.
-	 */
-	private long dayNumber(long date) {
-		int ONE_DAY_MS= 24*60*60 * 1000; // one day in milli seconds
-		
-		Calendar calendar= Calendar.getInstance();
-		long localTimeOffset= calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET);
-		
-		return (date + localTimeOffset) / ONE_DAY_MS;
-	}
-	
-	/**
-	 * Adds the given Pair to the edition tree.
-	 * It takes care of creating tree nodes for different dates.
-	 */
-	private void addEdition(Pair pair) {
-		if (fEditionTree == null || fEditionTree.isDisposed())
-			return;
-		
-		// find last day
-		TreeItem[] days= fEditionTree.getItems();
-		TreeItem lastDay= null;
-		if (days.length > 0)
-			lastDay= days[days.length-1];
-		
-		boolean first= lastDay == null;
-		
-		ITypedElement edition= pair.getEdition();
-		ITypedElement item= pair.getItem();
-		
-		long ldate= ((IModificationDate)edition).getModificationDate();		
-		long day= dayNumber(ldate);
-		Date date= new Date(ldate);
-		if (lastDay == null || day != dayNumber(((Date)lastDay.getData()).getTime())) {
-			lastDay= new TreeItem(fEditionTree, SWT.NONE);
-			lastDay.setImage(fDateImage);
-			String df= DateFormat.getDateInstance().format(date);
-			long today= dayNumber(System.currentTimeMillis());
-			
-			String formatKey;
-			if (day == today)
-				formatKey= "todayFormat"; //$NON-NLS-1$
-			else if (day == today-1)
-				formatKey= "yesterdayFormat"; //$NON-NLS-1$
-			else
-				formatKey= "dayFormat"; //$NON-NLS-1$
-			String pattern= Utilities.getString(fBundle, formatKey);
-			if (pattern != null)
-				df= MessageFormat.format(pattern, new String[] { df });
-			lastDay.setText(df);
-			lastDay.setData(date);
-		}
-		TreeItem ti= new TreeItem(lastDay, SWT.NONE);
-		ti.setImage(getEditionImage(edition, item));
-		
-		String s= getShortEditionLabel(edition, item, date);
-		if (pair.fHasError) {
-			String pattern= Utilities.getString(fBundle, "parseErrorFormat"); //$NON-NLS-1$
-			s= MessageFormat.format(pattern, new String[] { s } );
-		}
-		ti.setText(s);
-		
-		ti.setData(pair);
-		
-		// determine selected TreeItem
-		TreeItem selection= first ? ti : null;
-		if (fMemberSelection != null) {
-			Object selected= fMemberSelection.get(fCurrentEditions);
-			if (selected != null) {
-				if (selected == pair.getItem())
-					selection= ti;
-				else
-					selection= null;
-			}
-		}
-		if (selection != null) {
-			fEditionTree.setSelection(new TreeItem[] { selection });
-			if (!fAddMode)
-				fEditionTree.setFocus();
-			feedInput(selection);
-		}
-		
-		if (first) // expand first node
-			lastDay.setExpanded(true);
-	}
-						
-	/**
-	 * Feeds selection from member viewer to edition viewer.
-	 */
-	private void handleMemberSelect(Widget w) {
-		Object data= w.getData();
-		if (data instanceof List) {
-			List editions= (List) data;
-			if (editions != fCurrentEditions) {
-				fCurrentEditions= editions;
-				fEditionTree.removeAll();
-				
-				String pattern= Utilities.getString(fBundle, "treeTitleFormat"); //$NON-NLS-1$
-				String title= MessageFormat.format(pattern, new Object[] { ((Item)w).getText() });
-				fEditionPane.setText(title);
-								
-				Iterator iter= editions.iterator();
-				while (iter.hasNext()) {
-					Object item= iter.next();
-					if (item instanceof Pair)
-						addEdition((Pair) item);
-				}
-			}
-		}
-	}
-	
-	private void setInput(Object input) {
-		if (!fCompare && input instanceof ICompareInput) {
-			ICompareInput ci= (ICompareInput) input;
-			if (fTargetIsRight)
-				input= ci.getLeft();
-			else
-				input= ci.getRight();
-		}
-		fContentPane.setInput(input);
-		if (fStructuredComparePane != null)
-			fStructuredComparePane.setInput(input);
-	}
-	
-	/*
-	 * Feeds selection from edition viewer to content (and structure) viewer.
-	 */
-	private void feedInput(Widget w) {
-		Object input= w.getData();
-		boolean isOK= false;
-		if (input instanceof Pair) {
-			Pair pair= (Pair) input;
-			fSelectedItem= pair.getItem();
-			isOK= !pair.fHasError;
-			
-			ITypedElement edition= pair.getEdition();
-			String editionLabel= getEditionLabel(edition, fSelectedItem);
-			Image editionImage= getEditionImage(edition, fSelectedItem);
-					
-			if (fAddMode) {
-				if (fMemberSelection != null)
-					fMemberSelection.put(fCurrentEditions, fSelectedItem);
-				setInput(fSelectedItem);
-				fContentPane.setText(editionLabel);
-				fContentPane.setImage(editionImage);
-			} else {
-				if (fTargetIsRight) {
-					fCompareConfiguration.setLeftLabel(editionLabel);
-					fCompareConfiguration.setLeftImage(editionImage);
-					setInput(new DiffNode(fSelectedItem, fTargetPair.getItem()));
-				} else {
-					fCompareConfiguration.setRightLabel(editionLabel);
-					fCompareConfiguration.setRightImage(editionImage);
-					setInput(new DiffNode(fTargetPair.getItem(), fSelectedItem));
-				}
-			}
-		} else {
-			fSelectedItem= null;
-			setInput(null);
-		}
-		if (fCommitButton != null) {
-			if (fMultiSelect)
-				fCommitButton.setEnabled(isOK && fSelectedItem != null && fArrayList.size() > 0);
-			else
-				fCommitButton.setEnabled(isOK && fSelectedItem != null && fTargetPair.getItem() != fSelectedItem);
-		}
-	}
-	
-	/*
-	 * Feeds selection from structure viewer to content viewer.
-	 */
-	private void feedInput2(ISelection sel) {
-		if (sel instanceof IStructuredSelection) {
-			IStructuredSelection ss= (IStructuredSelection) sel;
-			if (ss.size() == 1)
-				fContentPane.setInput(ss.getFirstElement());
-		}
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java
deleted file mode 100644
index cc521e1..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import java.io.InputStream;
-import java.io.BufferedInputStream;
-
-import org.eclipse.swt.graphics.Image;
-
-import org.eclipse.core.resources.IFileState;
-import org.eclipse.core.runtime.CoreException;
-
-/**
- * A combination <code>IFileState</code> and <code>ITypedElement</code> that can be used as
- * an input to a compare viewer or other places where an <code>IStreamContentAccessor</code>
- * is needed.
- * <p>
- * <p>
- * Clients may instantiate this class; it is not intended to be subclassed.
- * </p>
- */
-public class HistoryItem implements IStreamContentAccessor, ITypedElement, IModificationDate {
-	
-	private ITypedElement fBase;
-	private IFileState fFileState; 
-
-	/**
-	 * Creates a <code>HistoryItem</code> object which combines the given <code>IFileState</code>
-	 * and <code>ITypedElement</code> into an object
-	 * which is suitable as input for a compare viewer or <code>ReplaceWithEditionDialog</code>.
-	 *
-	 * @param base the implementation of the <code>ITypedElement</code> interface delegates to this base <code>ITypedElement</code>
-	 * @param fileState the <code>IFileState</code> from which the streamable contents and the modification time is derived from
-	 */
-	public HistoryItem(ITypedElement base, IFileState fileState) {
-		fBase= base;
-		fFileState= fileState;
-	}
-	
-	/* (non-Javadoc)
-	 * see ITypedElement.getName
-	 */
-	public String getName() {
-		return fBase.getName();
-	}
-	
-	/* (non-Javadoc)
-	 * see ITypedElement.getImage
-	 */
-	public Image getImage() {
-		return fBase.getImage();
-	}
-	
-	/* (non-Javadoc)
-	 * see ITypedElement.getType
-	 */
-	public String getType() {
-		return fBase.getType();
-	}
-
-	/* (non-Javadoc)
-	 * see IModificationDate.getModificationDate
-	 */
-	public long getModificationDate() {
-		return fFileState.getModificationTime();
-	}
-	
-	/* (non-Javadoc)
-	 * see IStreamContentAccessor.getContents
-	 */
-	public InputStream getContents() throws CoreException {
-		return new BufferedInputStream(fFileState.getContents());
-	}
-}
-
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java
deleted file mode 100644
index 9aab4f1..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-/**
- * An <code>IContentChangeListener</code> is informed about content changes of a 
- * <code>IContentChangeNotifier</code>.
- * <p>
- * Clients may implement this interface.
- * </p>
- *
- * @see IContentChangeNotifier
- */
-public interface IContentChangeListener {
-
-	/**
-	 * Called whenever the content of the given source has changed.
-	 *
-	 * @param source the source whose contents has changed
-	 */
-	void contentChanged(IContentChangeNotifier source);
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java
deleted file mode 100644
index fba34d2..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-/**
- * Interface common to all objects that provide a means for registering
- * for content change notification.
- * <p>
- * Clients may implement this interface.
- * </p>
- *
- * @see IContentChangeListener
- */
-public interface IContentChangeNotifier {
-	
-	/**
-	 * Adds a content change listener to this notifier.
-	 * Has no effect if an identical listener is already registered.
-	 *
-	 * @param listener a content changed listener
-	 */
-	void addContentChangeListener(IContentChangeListener listener);
-	
-	/**
-	 * Removes the given content changed listener from this notifier.
-	 * Has no effect if the listener is not registered.
-	 *
-	 * @param listener a content changed listener
-	 */
-	void removeContentChangeListener(IContentChangeListener listener);
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java
deleted file mode 100644
index 44fdc1c..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-/**
- * Common interface for objects with editable contents.
- * Typically it is implemented by objects that also implement
- * the <code>IStreamContentAccessor</code> interface.
- * <p>
- * Clients may implement this interface.
- * <p>
- * Note that implementing <code>IEditableContent</code> does not
- * automatically mean that it is editable. An object is only editable if
- * it implements <code>IEditableContent</code> and the <code>isEditable</code> method returns <code>true</code>.
- *
- * @see IStreamContentAccessor
- */
-public interface IEditableContent {
-	
-	/**
-	 * Returns <code>true</code> if this object can be modified.
-	 * If it returns <code>false</code> the other methods of this API must not be called.
-	 * 
-	 * @return <code>true</code> if this object can be modified
-	 */
-	boolean isEditable();
-			
-	/**
-	 * Replaces the current content with the given new bytes.
-	 * 
-	 * @param newContent this new contents replaces the old contents
-	 */
-	void setContent(byte[] newContent); 
-
-	/**
-	 * This method is called on a parent to add or remove a child,
-	 * or to copy the contents of a child.
-	 * 
-	 * What to do is encoded in the two arguments as follows:
-	 * <TABLE>
-	 * <TR>
-	 * 	<TD>add:</TD>
-	 *  <TD>child == null</TD>
-	 *  <TD>other != null</TD>
-	 * </TR>
-	 * <TR>
-	 * 	<TD>remove:</TD>
-	 *  <TD>child != null</TD>
-	 *  <TD>other == null</TD>
-	 * </TR>
-	 * <TR>
-	 * 	<TD>copy:</TD>
-	 *  <TD>child != null</TD>
-	 *  <TD>other != null</TD>
-	 * </TR>
-	 * </TABLE>
-	 */
-	ITypedElement replace(ITypedElement child, ITypedElement other);
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java
deleted file mode 100644
index 5e8def8..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-/**
- * Common interface for objects with a modification date. The modification date
- * can be used in the UI to give the user a general idea of how old an object is.
- * <p>
- * Clients may implement this interface.
- * </p>
- */
-public interface IModificationDate {
-	
-	/**
-	 * Returns the modification time of this object.
-	 * <p>
-	 * Note that this value should only be used to give the user a general idea of how
-	 * old the object is.
-	 *
-	 * @return the time of last modification, in milliseconds since January 1, 1970, 00:00:00 GMT
-	 */
-	long getModificationDate();
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java
deleted file mode 100644
index 85f4f34..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import org.eclipse.jface.util.IPropertyChangeListener;
-
-/**
- * Interface common to all objects that provide a means for registering
- * for property change notification.
- * <p>
- * Clients may implement this interface.
- * </p>
- *
- * @see org.eclipse.jface.util.IPropertyChangeListener
- */
-public interface IPropertyChangeNotifier {
-	
-	/**
-	 * Adds a listener for property changes to this notifier.
-	 * Has no effect if an identical listener is already registered.
-	 *
-	 * @param listener a property change listener
-	 */
-	void addPropertyChangeListener(IPropertyChangeListener listener);
-	
-	/**
-	 * Removes the given content change listener from this notifier.
-	 * Has no effect if the identical listener is not registered.
-	 *
-	 * @param listener a property change listener
-	 */
-	void removePropertyChangeListener(IPropertyChangeListener listener);
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java
deleted file mode 100644
index f17b318..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import java.io.InputStream;
-
-import org.eclipse.core.runtime.CoreException;
-
-/**
- * An <code>IStreamContentAccessor</code> object represents a set of bytes which can be
- * accessed by means of a stream.
- * <p>
- * Clients may implement this interface, or use the standard implementation,
- * <code>BufferedContent</code>.
- *
- * @see BufferedContent
- */
-public interface IStreamContentAccessor {
-	/**
-	 * Returns an open <code>InputStream</code> for this object which can be used to retrieve the object's content.
-	 * The client is responsible for closing the stream when finished.
-	 * Returns <code>null</code> if this object has no streamable contents.
-	 *
-	 * @return an input stream containing the contents of this object
-	 * @exception CoreException if the contents of this object could not be accessed
-	 */
-	InputStream getContents() throws CoreException;
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java
deleted file mode 100644
index 15dd45c..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import org.eclipse.swt.graphics.Image;
-
-/**
- * Interface for getting the name, image, and type for an object.
- * <p>
- * These methods are typically used to present an input object in the compare UI
- * (<code>getName</code> and <code>getImage</code>)
- * and for finding a viewer for a given input type (<code>getType</code>).
- * <p>
- * Clients may implement this interface.
- */
-public interface ITypedElement {
-
-	/**
-	 * Type for a folder input (value <code>"FOLDER"</code>).
-	 * Folders are comparison elements that have no contents, only a name and children.
-	 */
-	public static final String FOLDER_TYPE= "FOLDER"; //$NON-NLS-1$
-
-	/**
-	 * Type for an element whose actual type is text  (value <code>"txt"</code>).
-	 */
-	public static final String TEXT_TYPE= "txt"; //$NON-NLS-1$
-
-	/**
-	 * Type for an element whose actual type could not
-	 * be determined. (value <code>"???"</code>).
-	 */
-	public static final String UNKNOWN_TYPE= "???"; //$NON-NLS-1$
-
-	/**
-	 * Returns the name of this object.
-	 * The name is used when displaying this object in the UI.
-	 *
-	 * @return the name of this object
-	 */
-	String getName();
-
-	/**
-	 * Returns an image for this object.
-	 * This image is used when displaying this object in the UI.
-	 *
-	 * @return the image of this object or <code>null</code> if this type of input has no image
-	 */
-	Image getImage();
-
-	/**
-	 * Returns the type of this object. For objects with a file name
-	 * this is typically the file extension. For folders its the constant
-	 * <code>FOLDER_TYPE</code>.
-	 * The type is used for determining a suitable viewer for this object.
-	 *
-	 * @return the type of this object
-	 */
-	String getType();
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java
deleted file mode 100644
index 918ed6b..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import org.eclipse.swt.widgets.Composite;
-
-import org.eclipse.jface.viewers.Viewer;
-
-/**
- * A factory object for <code>Viewer</code>.
- * <p>
- * This interface is only required when creating a <code>Viewer</code> from a plugin.xml file.
- * Since <code>Viewer</code>s have no default constructor they cannot be
- * instantiated directly with <code>Class.forName</code>.
- */
-public interface IViewerCreator {
-
-	/**
-	 * Creates a new viewer under the given SWT parent control.
-	 *
-	 * @param parent the SWT parent control under which to create the viewer's SWT control
-	 * @param config a compare configuration the newly created viewer might want to use
-	 * @return a new viewer
-	 */
-	Viewer createViewer(Composite parent, CompareConfiguration config);
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java
deleted file mode 100644
index b0fac34..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import java.util.ResourceBundle;
-import org.eclipse.jface.action.Action;
-
-import org.eclipse.compare.internal.CompareNavigator;
-import org.eclipse.compare.internal.CompareUIPlugin;
-import org.eclipse.compare.internal.Utilities;
-
-/**
- * A <code>NavigationAction</code> is used to navigate through the individual
- * differences of a <code>CompareEditorInput</code>.
- * <p>
- * Clients may instantiate this class; it is not intended to be subclassed.
- * </p>
- * @since 2.0
- */
-public class NavigationAction extends Action {
-	
-	private boolean fNext;
-	private CompareEditorInput fCompareEditorInput;
-	
-	
-	/**
-	 * Creates a <code>NavigationAction</code>.
-	 *
-	 * @param next if <code>true</code> action goes to the next difference; otherwise to the previous difference.
-	 */
-	public NavigationAction(boolean next) {
-		this(CompareUIPlugin.getResourceBundle(), next);
-	}
-
-	/**
-	 * Creates a <code>NavigationAction</code> that initializes its attributes
-	 * from the given <code>ResourceBundle</code>.
-	 *
-	 * @param bundle is used to initialize the action
-	 * @param next if <code>true</code> action goes to the next difference; otherwise to the previous difference.
-	 */
-	public NavigationAction(ResourceBundle bundle, boolean next) {
-		Utilities.initAction(this, bundle, next ? "action.Next." : "action.Previous."); //$NON-NLS-2$ //$NON-NLS-1$
-		fNext= next;
-	}
-
-	public void run() {
-		if (fCompareEditorInput != null) {
-			Object adapter= fCompareEditorInput.getAdapter(CompareNavigator.class);
-			if (adapter instanceof CompareNavigator)
-				((CompareNavigator)adapter).selectChange(fNext);
-		}
-	}
-	
-	/**
-	 * Sets the <code>CompareEditorInput</code> on which this action operates.
-	 * 
-	 * @param input the <code>CompareEditorInput</code> on which this action operates; if <code>null</code> action does nothing
-	 */
-	public void setCompareEditorInput(CompareEditorInput input) {
-		fCompareEditorInput= input;
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java
deleted file mode 100644
index 31c367b..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import java.io.*;
-import java.util.ArrayList;
-
-import org.eclipse.swt.graphics.Image;
-
-import org.eclipse.jface.util.Assert;
-
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.compare.structuremergeviewer.IStructureComparator;
-
-/**
- * A <code>ResourceNode</code> wrappers an <code>IResources</code> so that it can be used
- * as input for the differencing engine (interfaces <code>IStructureComparator</code> and <code>ITypedElement</code>)
- * and the <code>ReplaceWithEditionDialog</code> (interfaces <code>ITypedElement</code> and <code>IModificationDate</code>).
- * <p>
- * Clients may instantiate this class; it is not intended to be subclassed.
- * </p>
- *
- * @see EditionSelectionDialog
- */
-public class ResourceNode extends BufferedContent
-			implements IStructureComparator, ITypedElement, IEditableContent, IModificationDate {
-			
-	private IResource fResource;
-	private ArrayList fChildren;
-		
-	
-	/**
-	 * Creates a <code>ResourceNode</code> for the given resource.
-	 *
-	 * @param resource the resource
-	 */
-	public ResourceNode(IResource resource) {
-		fResource= resource;
-		Assert.isNotNull(resource);
-	}
-		
-	/**
-	 * Returns the corresponding resource for this object.
-	 *
-	 * @return the corresponding resource
-	 */
-	public IResource getResource() {
-		return fResource;
-	}
-	
-	/* (non Javadoc)
-	 * see IStreamContentAccessor.getContents
-	 */
-	public InputStream getContents() throws CoreException {
-		if (fResource instanceof IStorage)
-			return super.getContents();
-		return null;
-	}
-	
-	/* (non Javadoc)
-	 * see IModificationDate.getModificationDate
-	 */
-	public long getModificationDate() {
-		IPath path= fResource.getLocation();
-		File file= path.toFile();
-		return file.lastModified();
-	}
-	
-	/* (non Javadoc)
-	 * see ITypedElement.getName
-	 */
-	public String getName() {
-		if (fResource != null)
-			return fResource.getName();
-		return null;
-	}
-		
-	/* (non Javadoc)
-	 * see ITypedElement.getType
-	 */
-	public String getType() {
-		if (fResource instanceof IContainer)
-			return ITypedElement.FOLDER_TYPE;
-		if (fResource != null) {
-			String s= fResource.getFileExtension();
-			if (s != null)
-				return s;
-		}
-		return ITypedElement.UNKNOWN_TYPE;
-	}
-	
-	/* (non Javadoc)
-	 * see ITypedElement.getImage
-	 */
-	public Image getImage() {
-		return CompareUI.getImage(fResource);
-	}
-
-	/**
-	 * Returns <code>true</code> if the other object is of type <code>ITypedElement</code>
-	 * and their names are identical. The content is not considered.
-	 */
-	/* (non Javadoc)
-	 * see IStructureComparator.equals
-	 */
-	public boolean equals(Object other) {
-		if (other instanceof ITypedElement) {
-			String otherName= ((ITypedElement)other).getName();
-			return getName().equals(otherName);
-		}
-		return super.equals(other);
-	}
-	
-	/**
-	 * Returns the hash code of the name.
-	 */
-	/* (non Javadoc)
-	 * see IStructureComparator.hashCode
-	 */
-	public int hashCode() {
-		return getName().hashCode();
-	}
-	
-	/* (non Javadoc)
-	 * see IStructureComparator.getChildren
-	 */
-	public Object[] getChildren() {
-		if (fChildren == null) {
-			fChildren= new ArrayList();
-			if (fResource instanceof IContainer) {
-				try {
-					IResource members[]= ((IContainer)fResource).members();
-					for (int i= 0; i < members.length; i++) {
-						IStructureComparator child= createChild(members[i]);
-						if (child != null)
-							fChildren.add(child);
-					}
-				} catch (CoreException ex) {
-				}
-			}
-		}
-		return fChildren.toArray();
-	}
-	
-	/**
-	 * This hook method is called from <code>getChildren</code> once for every
-	 * member of a container resource. This implementation
-	 * creates a new <code>ResourceNode</code> for the given child resource.
-	 * Clients may override this method to create a different type of
-	 * <code>IStructureComparator</code> or to filter children by returning <code>null</code>.
-	 *
-	 * @param child the child resource for which a <code>IStructureComparator</code> must be returned
-	 * @return a <code>ResourceNode</code> for the given child or <code>null</code>
-	 */
-	protected IStructureComparator createChild(IResource child) {
-		return new ResourceNode(child);
-	}
-		
-	/**
-	 * Returns an open stream if the corresponding resource implements the
-	 * <code>IStorage</code> interface. Otherwise the value <code>null</code> is returned.
-	 *
-	 * @return a buffered input stream containing the contents of this storage
-	 * @exception CoreException if the contents of this storage could not be accessed
-	 */
-	protected InputStream createStream() throws CoreException {
-		if (fResource instanceof IStorage)
-			return new BufferedInputStream(((IStorage)fResource).getContents());
-		return null;
-	}
-			
-	/* (non Javadoc)
-	 * see IEditableContent.isEditable
-	 */
-	public boolean isEditable() {
-		return true;
-	}
-	
-	/* (non Javadoc)
-	 * see IEditableContent.replace
-	 */
-	public ITypedElement replace(ITypedElement child, ITypedElement other) {
-		return child;
-	}
-}
-
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java
deleted file mode 100644
index 7e63053..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.custom.SashForm;
-
-/**
- * The Splitter adds support for nesting to a SashForm.
- * <P>
- * If Splitters are nested directly:
- * <UL>
- * <LI>changing the visibility of a child may propagate upward to the parent Splitter if the child
- * is the last child to become invisible or the first to become visible.</LI>
- * <LI>maximizing a child makes it as large as the topmost enclosing Splitter</LI>
- * </UL>
- * 
- * @since 2.1
- */
-public class Splitter extends SashForm {
-	
-	private static final String VISIBILITY= "org.eclipse.compare.internal.visibility"; //$NON-NLS-1$
-	
-	/**
-	 * Constructs a new instance of this class given its parent
-	 * and a style value describing its behavior and appearance.
-	 * <p>
-	 * The style value is either one of the style constants defined in
-	 * class <code>SWT</code> which is applicable to instances of this
-	 * class, or must be built by <em>bitwise OR</em>'ing together
-	 * (that is, using the <code>int</code> "|" operator) two or more
-	 * of those <code>SWT</code> style constants. The class description
-	 * lists the style constants that are applicable to the class.
-	 * Style bits are also inherited from superclasses.
-	 * </p>
-	 *
-	 * @param parent a widget which will be the parent of the new instance (cannot be null)
-	 * @param style the style of widget to construct
-	 *
-	 * @exception IllegalArgumentException <ul>
-	 *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
-	 * </ul>
-	 * @exception SWTException <ul>
-	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
-	 * </ul>
-	 */
-	public Splitter(Composite parent, int style) {
-		super(parent, style);
-	}
-		
-	/**
-	 * Sets the visibility of the given child in this Splitter. If this change
-	 * affects the visibility state of the whole Splitter, and if the Splitter
-	 * is directly nested in one or more Splitters, this method recursively
-	 * propagates the new state upward.
-	 *
-	 * @param child the child control for which the visibility is changed
-	 * @param visible the new visibility state
-	 */
-	public void setVisible(Control child, boolean visible) {
-		
-		boolean wasEmpty= isEmpty();
-				
-		child.setVisible(visible);
-		child.setData(VISIBILITY, new Boolean(visible));
-		
-		if (wasEmpty != isEmpty()) {
-			// recursively walk up
-			Composite parent= getParent();
-			if (parent instanceof Splitter) {
-				Splitter sp= (Splitter) parent;
-				sp.setVisible(this, visible);
-				sp.layout();
-			}
-		} else {
-			layout();
-		}
-	}
-
-	/* (non-Javadoc)
-	 * Recursively calls setMaximizedControl for all direct parents that are
-	 * itself Splitters.
-	 */
-	public void setMaximizedControl(Control control) {
-		if (control == null || control == getMaximizedControl())
-			super.setMaximizedControl(null);
-		else
-			super.setMaximizedControl(control);
-
-		// recursively walk upward
-		Composite parent= getParent();
-		if (parent instanceof Splitter)
-			((Splitter) parent).setMaximizedControl(this);
-		else
-			layout(true);
-	}
-
-	/* (non-Javadoc)
-	 * Returns true if Splitter has no children or if all children are invisible.
-	 */
-	private boolean isEmpty() {
-		Control[] controls= getChildren();
-		for (int i= 0; i < controls.length; i++)
-			if (isVisible(controls[i]))
-				return false;
-		return true;
-	}
-	
-	/* (non-Javadoc)
-	 * Returns the visibility state of the given child control. If the
-	 * control is a Sash, this method always returns false.
-	 */
-	private boolean isVisible(Control child) {
-		if (child instanceof Sash)
-			return false;
-		Object data= child.getData(VISIBILITY);
-		if (data instanceof Boolean)
-			return ((Boolean)data).booleanValue();
-		return true;
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
deleted file mode 100644
index f497f18..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
+++ /dev/null
@@ -1,314 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare;
-
-import java.io.*;
-import java.util.Iterator;
-import java.util.HashMap;
-import java.util.zip.*;
-
-import org.eclipse.swt.graphics.Image;
-
-import org.eclipse.jface.util.Assert;
-
-import org.eclipse.core.runtime.CoreException;
-
-import org.eclipse.compare.structuremergeviewer.*;
-import org.eclipse.compare.internal.Utilities;
-
-
-/**
- * This implementation of the <code>IStructureCreator</code> interface
- * makes the contents of a zip archive available as a
- * hierarchical structure of <code>IStructureComparator</code>s.
- * <p>
- * It is used when comparing the internal structure of a zip archive.
- *
- * @since 2.0
- */
-public class ZipFileStructureCreator implements IStructureCreator {
-
-	/**
-	 * Common base class for ZipFolder and ZipFile
-	 */
-	static abstract class ZipResource implements IStructureComparator, ITypedElement {
-
-		private String fName;
-
-		ZipResource(String name) {
-			fName= name;
-		}
-
-		public String getName() {
-			return fName;
-		}
-
-		public Image getImage() {
-			return CompareUI.getImage(getType());
-		}
-
-		/**
-		 * Returns true if other is ITypedElement and names are equal.
-		 * @see IComparator#equals
-		 */
-		public boolean equals(Object other) {
-			if (other instanceof ITypedElement)
-				return fName.equals(((ITypedElement) other).getName());
-			return super.equals(other);
-		}
-
-		public int hashCode() {
-			return fName.hashCode();
-		}
-	}
-
-	static class ZipFolder extends ZipResource {
-
-		private HashMap fChildren= new HashMap(10);
-
-		ZipFolder(String name) {
-			super(name);
-		}
-
-		public String getType() {
-			return ITypedElement.FOLDER_TYPE;
-		}
-
-		public Object[] getChildren() {
-			Object[] children= new Object[fChildren.size()];
-			Iterator iter= fChildren.values().iterator();
-			for (int i= 0; iter.hasNext(); i++)
-				children[i]= iter.next();
-			return children;
-		}
-
-		ZipFile createContainer(String path) {
-			String entry= path;
-			int pos= path.indexOf('/');
-			if (pos < 0)
-				pos= path.indexOf('\\');
-			if (pos >= 0) {
-				entry= path.substring(0, pos);
-				path= path.substring(pos + 1);
-			} else if (entry.length() > 0) {
-				ZipFile ze= new ZipFile(entry);
-				fChildren.put(entry, ze);
-				return ze;
-			} else
-				return null;
-
-			ZipFolder folder= null;
-			if (fChildren != null) {
-				Object o= fChildren.get(entry);
-				if (o instanceof ZipFolder)
-					folder= (ZipFolder) o;
-			}
-
-			if (folder == null) {
-				folder= new ZipFolder(entry);
-				fChildren.put(entry, folder);
-			}
-
-			return folder.createContainer(path);
-		}
-	}
-
-	static class ZipFile extends ZipResource implements IStreamContentAccessor {
-
-		private byte[] fContents;
-
-		ZipFile(String name) {
-			super(name);
-		}
-
-		public String getType() {
-			String s= this.getName();
-			int pos= s.lastIndexOf('.');
-			if (pos >= 0)
-				return s.substring(pos + 1);
-			return ITypedElement.UNKNOWN_TYPE;
-		}
-
-		public Object[] getChildren() {
-			return null;
-		}
-		
-		public InputStream getContents() {
-			if (fContents == null)
-				fContents= new byte[0];
-			return new ByteArrayInputStream(fContents);
-		}
-
-		byte[] getBytes() {
-			return fContents;
-		}
-
-		void setBytes(byte[] buffer) {
-			fContents= buffer;
-		}
-
-		void appendBytes(byte[] buffer, int length) {
-	    	if (length > 0) {
-				int oldLen= 0;
-				if (fContents != null)
-					oldLen= fContents.length;
-				byte[] newBuf= new byte[oldLen + length];
-				if (oldLen > 0)
-		    		System.arraycopy(fContents, 0, newBuf, 0, oldLen);
-	    		System.arraycopy(buffer, 0, newBuf, oldLen, length);
-	    		fContents= newBuf;
-	    	}
-		}
-	}
-	
-	private String fTitle;
-
-	/**
-	 * Create a new ZipFileStructureCreator.
-	 */
-	public ZipFileStructureCreator() {
-		this(Utilities.getString("ZipStructureCreator.name")); //$NON-NLS-1$
-	}
-	
-	/**
-	 * Create a new ZipFileStructureCreator with the given title.
-	 * The title is returned by the method <code>getName()</code>.
-	 * @param title the title of this strcuture creator
-	 */
-	public ZipFileStructureCreator(String title) {
-		fTitle= title;
-	}
-
-	public String getName() {
-		return fTitle;
-	}
-
-	public IStructureComparator getStructure(Object input) {
-
-		InputStream is= null;
-		
-		if (input instanceof IStreamContentAccessor) {
-			IStreamContentAccessor sca= (IStreamContentAccessor) input;
-			try {
-				is= sca.getContents();
-			} catch (CoreException ex) {
-			}
-		}
-
-		if (is == null)
-			return null;
-
-		ZipInputStream zip= new ZipInputStream(is);
-		ZipFolder root= new ZipFolder(""); //$NON-NLS-1$
-		try {
-			for (;;) {
-				ZipEntry entry= zip.getNextEntry();
-				if (entry == null)
-					break;
-
-				ZipFile ze= root.createContainer(entry.getName());
-				if (ze != null) {
-					int length= (int) entry.getSize();
-					if (length >= 0) {
-						byte[] buffer= new byte[length];
-						int offset= 0;
-	
-						do {
-							int n= zip.read(buffer, offset, length);
-							offset += n;
-							length -= n;
-						} while (length > 0);
-	
-						ze.setBytes(buffer);
-					} else {
-						byte[] buffer= new byte[1024];		
-						int n;
-						do {
-							n= zip.read(buffer, 0, 1024);
-							ze.appendBytes(buffer, n);
-						} while (n >= 0);
-					}
-				}
-				zip.closeEntry();
-			}
-		} catch (IOException ex) {
-			return null;
-		} finally {
-			try {
-				zip.close();
-			} catch (IOException ex) {
-			}
-		}
-
-		if (root.fChildren.size() == 1) {
-			Iterator iter= root.fChildren.values().iterator();
-			return (IStructureComparator) iter.next();
-		}
-		return root;
-	}
-
-	public String getContents(Object o, boolean ignoreWhitespace) {
-		if (o instanceof ZipFile) {
-			byte[] bytes= ((ZipFile)o).getBytes();
-			if (bytes != null)
-				return new String(bytes);
-			return ""; //$NON-NLS-1$
-		}
-		return null;
-	}
-
-	/**
-	 * Returns <code>false</code> since we cannot update a zip archive.
-	 * @return <code>false</code>
-	 */
-	public boolean canSave() {
-		return false;
-	}
-
-	/**
-	 * Called whenever a copy operation has been performed on a tree node.
-	 * This implementation throws an <code>AssertionFailedException</code>
-	 * since we cannot update a zip archive.
-	 *
-	 * @param structure the node for which to save the new content
-	 * @param input the object from which the structure tree was created in <code>getStructure</code>
-	 */
-	public void save(IStructureComparator structure, Object input) {
-		Assert.isTrue(false); // Cannot update zip archive
-	}
-	
-	public IStructureComparator locate(Object path, Object source) {
-		return null;
-	}
-		
-	/**
-	 * Returns <code>false</code> since this <code>IStructureCreator</code>
-	 * cannot rewrite the diff tree in order to fold certain combinations of
-	 * additons and deletions.
-	 * <p>
-	 * Note: this method is for internal use only. Clients should not call this method. 
-	 * @return <code>false</code>
-	 */
-	public boolean canRewriteTree() {
-		return false;
-	}
-	
-	/**
-	 * Empty implementation since this <code>IStructureCreator</code>
-	 * cannot rewrite the diff tree in order to fold certain combinations of
-	 * additons and deletions.
-	 * <p>
-	 * Note: this method is for internal use only. Clients should not call this method. 
-	 */
-	public void rewriteTree(Differencer diff, IDiffContainer root) {
-	}
-}
-
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
deleted file mode 100644
index e6e83c4..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
+++ /dev/null
@@ -1,978 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.compare.contentmergeviewer;
-
-import java.util.ResourceBundle;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.custom.CLabel;
-import org.eclipse.ui.IKeyBindingService;
-import org.eclipse.ui.IWorkbenchPartSite;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.CoreException;
-
-import org.eclipse.jface.util.*;
-import org.eclipse.jface.action.*;
-import org.eclipse.jface.dialogs.*;
-import org.eclipse.jface.viewers.ContentViewer;
-import org.eclipse.jface.viewers.IContentProvider;
-import org.eclipse.jface.viewers.ISelection;
-
-import org.eclipse.compare.*;
-import org.eclipse.compare.structuremergeviewer.*;
-import org.eclipse.compare.internal.*;
-
-/**
- * An abstract compare and merge viewer with two side-by-side content areas
- * and an optional content area for the ancestor. The implementation makes no
- * assumptions about the content type.
- * <p>
- * <code>ContentMergeViewer</code>
- * <ul>
- * <li>implements the overall layout and defines hooks so that subclasses
- *	can easily provide an implementation for a specific content type,
- * <li>implements the UI for making the areas resizable,
- * <li>has an action for controlling whether the ancestor area is visible or not,
- * <li>has actions for copying one side of the input to the other side,
- * <li>tracks the dirty state of the left and right sides and send out notification
- *	on state changes.
- * </ul>
- * A <code>ContentMergeViewer</code> accesses its
- * model by means of a content provider which must implement the
- * <code>IMergeViewerContentProvider</code> interface.
- * </p>
- * <p>
- * Clients may wish to use the standard concrete subclass <code>TextMergeViewer</code>,
- * or define their own subclass.
- * 
- * @see IMergeViewerContentProvider
- * @see TextMergeViewer
- */
-public abstract class ContentMergeViewer extends ContentViewer
-					implements IPropertyChangeNotifier, ISavable {
-	
-	class SaveAction extends MergeViewerAction {
-				
-		SaveAction(boolean left) {
-			super(true, false, false);
-			Utilities.initAction(this, getResourceBundle(), "action.save."); //$NON-NLS-1$
-		}
-			
-		public void run() {
-			saveContent(getInput());
-		}
-	};
-	
-	/**
-	 * Property names.
-	 */
-	private static final String ANCESTOR_ENABLED= ComparePreferencePage.INITIALLY_SHOW_ANCESTOR_PANE;	
-	
-	/* package */ static final int HORIZONTAL= 1;
-	/* package */ static final int VERTICAL= 2;
-	
-	static final double HSPLIT= 0.5;
-	static final double VSPLIT= 0.3;
-	
-	private class ContentMergeViewerLayout extends Layout {
-		
-		public Point computeSize(Composite c, int w, int h, boolean force) {
-			return new Point(100, 100);
-		}
-		
-		public void layout(Composite composite, boolean force) {
-			
-			// determine some derived sizes
-			int headerHeight= fLeftLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y;
-			Rectangle r= composite.getClientArea();
-			
-			int centerWidth= getCenterWidth();	
-			int width1= (int)((r.width-centerWidth)*fHSplit);
-			int width2= r.width-width1-centerWidth;
-			
-			int height1= 0;
-			int height2= 0;
-			if (fAncestorEnabled && fShowAncestor) {
-				height1= (int)((r.height-(2*headerHeight))*fVSplit);
-				height2= r.height-(2*headerHeight)-height1;
-			} else {
-				height1= 0;
-				height2= r.height-headerHeight;
-			}		
-							
-			int y= 0;
-			
-			if (fAncestorEnabled && fShowAncestor) {
-				fAncestorLabel.setBounds(0, y, r.width, headerHeight);
-				fAncestorLabel.setVisible(true);
-				y+= headerHeight;
-				handleResizeAncestor(0, y, r.width, height1);
-				y+= height1;
-			} else {
-				fAncestorLabel.setVisible(false);
-				handleResizeAncestor(0, 0, 0, 0);
-			}
-			
-			fLeftLabel.getSize();	// without this resizing would not always work
-			
-			if (centerWidth > 3) {
-				fLeftLabel.setBounds(0, y, width1+1, headerHeight);
-				fDirectionLabel.setVisible(true);
-				fDirectionLabel.setBounds(width1+1, y, centerWidth-1, headerHeight);
-				fRightLabel.setBounds(width1+centerWidth, y, width2, headerHeight);
-			} else {
-				fLeftLabel.setBounds(0, y, width1, headerHeight);
-				fDirectionLabel.setVisible(false);
-				fRightLabel.setBounds(width1, y, r.width-width1, headerHeight);
-			}
-			
-			y+= headerHeight;
-			
-			if (fCenter != null && !fCenter.isDisposed())
-				fCenter.setBounds(width1, y, centerWidth, height2);
-					
-			handleResizeLeftRight(0, y, width1, centerWidth, width2, height2);
-		}
-	}
-
-	class Resizer extends MouseAdapter implements MouseMoveListener {
-				
-		Control fControl;
-		int fX, fY;
-		int fWidth1, fWidth2;
-		int fHeight1, fHeight2;
-		int fDirection;
-		boolean fLiveResize;
-		boolean fIsDown;
-		
-		public Resizer(Control c, int dir) {
-			fDirection= dir;
-			fControl= c;
-			fLiveResize= !(fControl instanceof Sash);
-			fControl.addMouseListener(this);
-			fControl.addMouseMoveListener(this);
-			fControl.addDisposeListener(
-				new DisposeListener() {
-					public void widgetDisposed(DisposeEvent e) {
-						fControl= null;
-					}
-				}
-			);
-		}
-		
-		public void mouseDoubleClick(MouseEvent e) {
-			if ((fDirection & HORIZONTAL) != 0)
-				fHSplit= HSPLIT;
-			if ((fDirection & VERTICAL) != 0)
-				fVSplit= VSPLIT;
-			fComposite.layout(true);
-		}
-		
-		public void mouseDown(MouseEvent e) {
-			Composite parent= fControl.getParent();
-			
-			Point s= parent.getSize();
-			Point as= fAncestorLabel.getSize();
-			Point ys= fLeftLabel.getSize();
-			Point ms= fRightLabel.getSize();
-			
-			fWidth1= ys.x;
-			fWidth2= ms.x;
-			fHeight1= fLeftLabel.getLocation().y-as.y;
-			fHeight2= s.y-(fLeftLabel.getLocation().y+ys.y);
-			
-			fX= e.x;
-			fY= e.y;
-			fIsDown= true;
-		}
-		
-		public void mouseUp(MouseEvent e) {
-			fIsDown= false;
-			if (!fLiveResize)
-				resize(e);
-		}
-		
-		public void mouseMove(MouseEvent e) {
-			if (fIsDown && fLiveResize)
-				resize(e);
-		}
-		
-		private void resize(MouseEvent e) {
-			int dx= e.x-fX;
-			int dy= e.y-fY;
-		
-			int centerWidth= fCenter.getSize().x;
-
-			if (fWidth1 + dx > centerWidth && fWidth2 - dx > centerWidth) {
-				fWidth1+= dx;
-				fWidth2-= dx;
-				if ((fDirection & HORIZONTAL) != 0)
-					fHSplit= (double)fWidth1/(double)(fWidth1+fWidth2);
-			}
-			if (fHeight1 + dy > centerWidth && fHeight2 - dy > centerWidth) {
-				fHeight1+= dy;
-				fHeight2-= dy;
-				if ((fDirection & VERTICAL) != 0)
-					fVSplit= (double)fHeight1/(double)(fHeight1+fHeight2);
-			}
-
-			fComposite.layout(true);
-			fControl.getDisplay().update();
-		}
-	};
-
-	/** Style bits for top level composite */
-	private int fStyles;
-	private ResourceBundle fBundle;
-	private CompareConfiguration fCompareConfiguration;
-	private IPropertyChangeListener fPropertyChangeListener;
-	private ICompareInputChangeListener fCompareInputChangeListener;
-	private ListenerList fListenerList;
-	boolean fConfirmSave= true;
-	
-	private double fHSplit= HSPLIT;		// width ratio of left and right panes
-	private double fVSplit= VSPLIT;		// height ratio of ancestor and bottom panes
-	
-	private boolean fAncestorEnabled= true;	// show ancestor in case of conflicts
-	/* package */ boolean fShowAncestor= false;	// if current input has conflicts
-	private boolean fIsThreeWay= false;
-	private ActionContributionItem fAncestorItem;
-	
-	private Action fCopyLeftToRightAction;	// copy from left to right
-	private Action fCopyRightToLeftAction;	// copy from right to left
-
-	MergeViewerAction fLeftSaveAction;
-	MergeViewerAction fRightSaveAction;
-	
-	private IKeyBindingService fKeyBindingService;
-
-	// SWT widgets
-	/* package */ Composite fComposite;
-	private CLabel fAncestorLabel;
-	private CLabel fLeftLabel;
-	private CLabel fRightLabel;
-	/* package */ CLabel fDirectionLabel;
-	/* package */ Control fCenter;
-		
-	//---- SWT resources to be disposed
-	private Image fRightArrow;
-	private Image fLeftArrow;
-	private Image fBothArrow;
-	//---- end
-	
-	/**
-	 * Creates a new content merge viewer and initializes with a resource bundle and a
-	 * configuration.
-	 *
-	 * @param bundle the resource bundle
-	 * @param cc the configuration object
-	 */
-	protected ContentMergeViewer(int style, ResourceBundle bundle, CompareConfiguration cc) {
-		fStyles= style;
-		fBundle= bundle;
-		
-		fAncestorEnabled= Utilities.getBoolean(cc, ANCESTOR_ENABLED, fAncestorEnabled);
-		fConfirmSave= Utilities.getBoolean(cc, CompareEditor.CONFIRM_SAVE_PROPERTY, fConfirmSave);
-
-		setContentProvider(new MergeViewerContentProvider(cc));
-		
-		fCompareInputChangeListener= new ICompareInputChangeListener() {
-			public void compareInputChanged(ICompareInput input) {
-				ContentMergeViewer.this.internalRefresh(input);
-			}
-		};
-		
-		fCompareConfiguration= cc;
-		if (fCompareConfiguration != null) {
-			fPropertyChangeListener= new IPropertyChangeListener() {
-				public void propertyChange(PropertyChangeEvent event) {
-					ContentMergeViewer.this.propertyChange(event);
-				}
-			};
-			fCompareConfiguration.addPropertyChangeListener(fPropertyChangeListener);
-		}
-			
-		fLeftSaveAction= new SaveAction(true);
-		fLeftSaveAction.setEnabled(false);
-		fRightSaveAction= new SaveAction(false);
-		fRightSaveAction.setEnabled(false);
-	}
-	
-	//---- hooks ---------------------
-	
-	/**
-	 * Returns the viewer's name.
-	 *
-	 * @return the viewer's name
-	 */
-	public String getTitle() {
-		return Utilities.getString(getResourceBundle(), "title"); //$NON-NLS-1$
-	}
-	
-	/**
-	 * Creates the SWT controls for the ancestor, left, and right
-	 * content areas of this compare viewer.
-	 * Implementations typically hold onto the controls
-	 * so that they can be initialized with the input objects in method
-	 * <code>updateContent</code>.
-	 *
-	 * @param composite the container for the three areas
-	 */
-	abstract protected void createControls(Composite composite);
-
-	/**
-	 * Lays out the ancestor area of the compare viewer.
-	 * It is called whenever the viewer is resized or when the sashes between
-	 * the areas are moved to adjust the size of the areas.
-	 *
-	 * @param x the horizontal position of the ancestor area within its container
-	 * @param y the vertical position of the ancestor area within its container
-	 * @param width the width of the ancestor area
-	 * @param height the height of the ancestor area
-	 */
-	abstract protected void handleResizeAncestor(int x, int y, int width, int height);
-	
-	/**
-	 * Lays out the left and right areas of the compare viewer.
-	 * It is called whenever the viewer is resized or when the sashes between
-	 * the areas are moved to adjust the size of the areas.
-	 *
-	 * @param x the horizontal position of the left area within its container
-	 * @param y the vertical position of the left and right area within its container
-	 * @param leftWidth the width of the left area
-	 * @param centerWidth the width of the gap between the left and right areas
-	 * @param rightWidth the width of the right area
-	 * @param height the height of the left and right areas
-	 */
-	abstract protected void handleResizeLeftRight(int x, int y, int leftWidth, int centerWidth,
-			int rightWidth, int height);
-
-	/**
-	 * Contributes items to the given <code>ToolBarManager</code>.
-	 * It is called when this viewer is installed in its container and if the container
-	 * has a <code>ToolBarManager</code>.
-	 * The <code>ContentMergeViewer</code> implementation of this method does nothing.
-	 * Subclasses may reimplement.
-	 *
-	 * @param toolBarManager the toolbar manager to contribute to
-	 */
-	protected void createToolItems(ToolBarManager toolBarManager) {
-	}
-
-	/**
-	 * Initializes the controls of the three content areas with the given input objects.
-	 *
-	 * @param ancestor the input for the ancestor area
-	 * @param left the input for the left area
-	 * @param right the input for the right area
-	 */
-	abstract protected void updateContent(Object ancestor, Object left, Object right);
-		
-	/**
-	 * Copies the content of one side to the other side.
-	 * Called from the (internal) actions for copying the sides of the viewer's input object.
-	 * 
-	 * @param leftToRight if <code>true</code>, the left side is copied to the right side;
-	 * if <code>false</code>, the right side is copied to the left side
-	 */
-	abstract protected void copy(boolean leftToRight);
-
-	/**
-	 * Returns the byte contents of the left or right side. If the viewer
-	 * has no editable content <code>null</code> can be returned.
-	 *
-	 * @param left if <code>true</code>, the byte contents of the left area is returned;
-	 * 	if <code>false</code>, the byte contents of the right area
-	 * @return the content as an array of bytes, or <code>null</code>
-	 */
-	abstract protected byte[] getContents(boolean left);
-
-	//----------------------------
-	
-	/**
-	 * Returns the resource bundle of this viewer.
-	 *
-	 * @return the resource bundle
-	 */
-	protected ResourceBundle getResourceBundle() {
-		return fBundle;
-	}
-	
-	/**
-	 * Returns the compare configuration of this viewer,
-	 * or <code>null</code> if this viewer does not yet have a configuration.
-	 *
-	 * @return the compare configuration, or <code>null</code> if none
-	 */
-	protected CompareConfiguration getCompareConfiguration() {
-		return fCompareConfiguration;
-	}
-	
-	/**
-	 * The <code>ContentMergeViewer</code> implementation of this 
-	 * <code>ContentViewer</code> method
-	 * checks to ensure that the content provider is an <code>IMergeViewerContentProvider</code>.
-	 */
-	public void setContentProvider(IContentProvider contentProvider) {
-		Assert.isTrue(contentProvider instanceof IMergeViewerContentProvider);
-		super.setContentProvider(contentProvider);
-	}
-
-	/* package */ IMergeViewerContentProvider getMergeContentProvider() {
-		return (IMergeViewerContentProvider) getContentProvider();
-	}
-
-	/**
-	 * The <code>ContentMergeViewer</code> implementation of this 
-	 * <code>Viewer</code> method returns the empty selection. Subclasses may override.
-	 */
-	public ISelection getSelection() {
-		return new ISelection() {
-			public boolean isEmpty() {
-				return true;
-			}
-		};
-	}
-	
-	/**
-	 * The <code>ContentMergeViewer</code> implementation of this 
-	 * <code>Viewer</code> method does nothing. Subclasses may reimplement.
-	 */
-	public void setSelection(ISelection s, boolean reveal) {
-	}
-
-	/* package */ void propertyChange(PropertyChangeEvent event) {
-		
-		String key= event.getProperty();
-
-		if (key.equals(ANCESTOR_ENABLED)) {
-			fAncestorEnabled= Utilities.getBoolean(getCompareConfiguration(), ANCESTOR_ENABLED, fAncestorEnabled);
-			fComposite.layout(true);
-			return;
-		}
-	}
-	
-	void setAncestorVisibility(boolean visible, boolean enabled) {
-		if (fAncestorItem != null) {
-			Action action= (Action) fAncestorItem.getAction();
-			if (action != null) {
-				action.setChecked(visible);
-				action.setEnabled(enabled);
-			}
-		}
-		if (fCompareConfiguration != null)
-			fCompareConfiguration.setProperty(ANCESTOR_ENABLED, new Boolean(visible));
-	}
-
-	//---- input
-			 
-	/* package */ boolean isThreeWay() {
-		return fIsThreeWay;
-	}
-	
-	/**
-	 * Internal hook method called when the input to this viewer is
-	 * initially set or subsequently changed.
-	 * <p>
-	 * The <code>ContentMergeViewer</code> implementation of this <code>Viewer</code>
-	 * method tries to save the old input by calling <code>doSave(...)</code> and
-	 * then calls <code>internalRefresh(...)</code>.
-	 *
-	 * @param input the new input of this viewer, or <code>null</code> if there is no new input
-	 * @param oldInput the old input element, or <code>null</code> if there was previously no input
-	 */
-	protected final void inputChanged(Object input, Object oldInput) {
-		
-		if (input != oldInput)
-			if (oldInput instanceof ICompareInput)
-				((ICompareInput)oldInput).removeCompareInputChangeListener(fCompareInputChangeListener);
-		
-		boolean success= doSave(input, oldInput);
-		
-		if (input != oldInput)
-			if (input instanceof ICompareInput)
-				((ICompareInput)input).addCompareInputChangeListener(fCompareInputChangeListener);
-		
-		if (success) {
-			setLeftDirty(false);
-			setRightDirty(false);
-		}
-
-		if (input != oldInput)
-			internalRefresh(input);
-	}
-	
-	/**
-	 * This method is called from the <code>Viewer</code> method <code>inputChanged</code>
-	 * to save any unsaved changes of the old input.
-	 * <p>
-	 * The <code>ContentMergeViewer</code> implementation of this
-	 * method calls <code>saveContent(...)</code>. If confirmation has been turned on
-	 * with <code>setConfirmSave(true)</code>, a confirmation alert is posted before saving.
-	 * </p>
-	 * Clients can override this method and are free to decide whether
-	 * they want to call the inherited method.
-	 * @param newInput the new input of this viewer, or <code>null</code> if there is no new input
-	 * @param oldInput the old input element, or <code>null</code> if there was previously no input
-	 * @return <code>true</code> if saving was successful, or if the user didn't want to save (by pressing 'NO' in the confirmation dialog).
-	 * @since 2.0
-	 */
-	protected boolean doSave(Object newInput, Object oldInput) {
-		
-		// before setting the new input we have to save the old
-		if (fLeftSaveAction.isEnabled() || fRightSaveAction.isEnabled()) {
-			
-			// post alert
-			if (fConfirmSave) {
-				Shell shell= fComposite.getShell();
-				
-				MessageDialog dialog= new MessageDialog(shell,
-					Utilities.getString(getResourceBundle(), "saveDialog.title"), //$NON-NLS-1$
-					null, 	// accept the default window icon
-					Utilities.getString(getResourceBundle(), "saveDialog.message"), //$NON-NLS-1$
-					MessageDialog.QUESTION,
-					new String[] {
-						IDialogConstants.YES_LABEL,
-						IDialogConstants.NO_LABEL,
-					},
-					0);		// default button index
-									
-				switch (dialog.open()) {	// open returns index of pressed button
-				case 0:
-					saveContent(oldInput);
-					break;
-				case 1:
-					setLeftDirty(false);
-					setRightDirty(false);
-					break;
-				case 2:
-					throw new ViewerSwitchingCancelled();
-				}
-			} else
-				saveContent(oldInput);
-			return true;
-		}
-		return false;
-	}
-		
-	/**
-	 * Controls whether <code>doSave(Object, Object)</code> asks for confirmation before saving
-	 * the old input with <code>saveContent(Object)</code>.
-	 * @param enable a value of <code>true</code> enables confirmation
-	 * @since 2.0
-	 */
-	public void setConfirmSave(boolean enable) {
-		fConfirmSave= enable;
-	}
-	
-	/* (non Javadoc)
-	 * see Viewer.refresh
-	 */
-	public void refresh() {
-		internalRefresh(getInput());
-	}
-	
-	private void internalRefresh(Object input) {
-		
-		IMergeViewerContentProvider content= getMergeContentProvider();
-		if (content != null) {
-			Object ancestor= content.getAncestorContent(input);
-			if (input instanceof ICompareInput)	
-				fIsThreeWay= (((ICompareInput)input).getKind() & Differencer.DIRECTION_MASK) != 0;
-			else
-				fIsThreeWay= ancestor != null;
-				
-			if (fAncestorItem != null)
-				fAncestorItem.setVisible(fIsThreeWay);
-				
-			boolean oldFlag= fShowAncestor;
-			fShowAncestor= fIsThreeWay && content.showAncestor(input);
-			
-			if (fAncestorEnabled && oldFlag != fShowAncestor)
-				fComposite.layout(true);
-			
-			ToolBarManager tbm= CompareViewerSwitchingPane.getToolBarManager(fComposite.getParent());
-			if (tbm != null) {
-				updateToolItems();
-				tbm.update(true);
-				tbm.getControl().getParent().layout(true);
-			}
-			
-			updateHeader();
-									
-			Object left= content.getLeftContent(input);
-			Object right= content.getRightContent(input);
-			updateContent(ancestor, left, right);
-		}
-	}
-	
-	//---- layout & SWT control creation
-		
-	/**
-	 * Builds the SWT controls for the three areas of a compare/merge viewer.
-	 * <p>
-	 * Calls the hooks <code>createControls</code> and <code>createToolItems</code>
-	 * to let subclasses build the specific content areas and to add items to
-	 * an enclosing toolbar.
-	 * <p>
-	 * This method must only be called in the constructor of subclasses.
-	 *
-	 * @param parent the parent control
-	 * @return the new control
-	 */
-	protected final Control buildControl(Composite parent) {
-									
-		fComposite= new Composite(parent, fStyles) {
-			public boolean setFocus() {
-				return internalSetFocus();
-			}
-		};
-		fComposite.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle());
-		
-		hookControl(fComposite);	// hook help & dispose listener
-		
-		fComposite.setLayout(new ContentMergeViewerLayout());
-		
-		int style= SWT.SHADOW_OUT;
-		fAncestorLabel= new CLabel(fComposite, style);
-		
-		fLeftLabel= new CLabel(fComposite, style);
-		new Resizer(fLeftLabel, VERTICAL);
-		
-		fDirectionLabel= new CLabel(fComposite, style);
-		fDirectionLabel.setAlignment(SWT.CENTER);
-		new Resizer(fDirectionLabel, HORIZONTAL | VERTICAL);
-		
-		fRightLabel= new CLabel(fComposite, style);
-		new Resizer(fRightLabel, VERTICAL);
-		
-		if (fCenter == null || fCenter.isDisposed())
-			fCenter= createCenter(fComposite);
-				
-		createControls(fComposite);
-		
-		IWorkbenchPartSite ps= Utilities.findSite(fComposite);
-		fKeyBindingService= ps != null ? ps.getKeyBindingService() : null;
-						
-		ToolBarManager tbm= CompareViewerSwitchingPane.getToolBarManager(parent);
-		if (tbm != null) {
-			tbm.removeAll();
-			
-			// define groups
-			tbm.add(new Separator("modes"));	//$NON-NLS-1$
-			tbm.add(new Separator("merge"));	//$NON-NLS-1$
-			tbm.add(new Separator("navigation"));	//$NON-NLS-1$
-			
-			CompareConfiguration cc= getCompareConfiguration();
-		
-			if (cc.isRightEditable()) {
-				fCopyLeftToRightAction=
-					new Action() {
-						public void run() {
-							copy(true);
-						}
-					};
-				Utilities.initAction(fCopyLeftToRightAction, getResourceBundle(), "action.CopyLeftToRight."); //$NON-NLS-1$
-				tbm.appendToGroup("merge", fCopyLeftToRightAction); //$NON-NLS-1$
-				Utilities.registerAction(fKeyBindingService, fCopyLeftToRightAction, "org.eclipse.compare.copyAllLeftToRight");	//$NON-NLS-1$
-			}
-			
-			if (cc.isLeftEditable()) {
-				fCopyRightToLeftAction=
-					new Action() {
-						public void run() {
-							copy(false);
-						}
-					};
-				Utilities.initAction(fCopyRightToLeftAction, getResourceBundle(), "action.CopyRightToLeft."); //$NON-NLS-1$
-				tbm.appendToGroup("merge", fCopyRightToLeftAction); //$NON-NLS-1$
-				Utilities.registerAction(fKeyBindingService, fCopyRightToLeftAction, "org.eclipse.compare.copyAllRightToLeft");	//$NON-NLS-1$
-			}
-			
-			Action a= new ChangePropertyAction(fBundle, fCompareConfiguration, "action.EnableAncestor.", ANCESTOR_ENABLED); //$NON-NLS-1$
-			a.setChecked(fAncestorEnabled);
-			fAncestorItem= new ActionContributionItem(a);
-			fAncestorItem.setVisible(false);
-			tbm.appendToGroup("modes", fAncestorItem); //$NON-NLS-1$
-			
-			createToolItems(tbm);
-			updateToolItems();
-			
-			tbm.update(true);
-		}
-	
-		return fComposite;
-	}
-	
-	/* package */ boolean internalSetFocus() {
-		return false;
-	}
-	
-	/* package */ int getCenterWidth() {
-		return 3;
-	}
-	
-	/* package */ boolean getAncestorEnabled() {
-		return fAncestorEnabled;
-	}
-	
-	/* package */ Control createCenter(Composite parent) {
-		Sash sash= new Sash(parent, SWT.VERTICAL);
-		new Resizer(sash, HORIZONTAL);
-		return sash;
-	}
-	
-	/* package */ Control getCenter() {
-		return fCenter;
-	}
-		
-	/* 
-	 * @see Viewer.getControl()
-	 */
-	public Control getControl() {
-		return fComposite;
-	}
-	
-	/**
-	 * Called on the viewer disposal.
-	 * Unregisters from the compare configuration.
-	 * Clients may extend if they have to do additional cleanup.
-	 */
-	protected void handleDispose(DisposeEvent event) {
-		
-		if (fKeyBindingService != null) {
-			if (fCopyLeftToRightAction != null)
-				fKeyBindingService.unregisterAction(fCopyLeftToRightAction);
-			if (fCopyRightToLeftAction != null)
-				fKeyBindingService.unregisterAction(fCopyRightToLeftAction);
-			fKeyBindingService= null;
-		}
-		
-		Object input= getInput();	
-		if (input instanceof ICompareInput)
-			((ICompareInput)input).removeCompareInputChangeListener(fCompareInputChangeListener);
-		
-		if (fCompareConfiguration != null && fPropertyChangeListener != null) {
-			fCompareConfiguration.removePropertyChangeListener(fPropertyChangeListener);
-			fPropertyChangeListener= null;
-		}
-
-		fAncestorLabel= null;
-		fLeftLabel= null;
-		fDirectionLabel= null;
-		fRightLabel= null;
-		fCenter= null;
-				
-		if (fRightArrow != null) {
-			fRightArrow.dispose();
-			fRightArrow= null;
-		}
-		if (fLeftArrow != null) {
-			fLeftArrow.dispose();
-			fLeftArrow= null;
-		}
-		if (fBothArrow != null) {
-			fBothArrow.dispose();
-			fBothArrow= null;
-		}
-		
-		super.handleDispose(event);
-  	}
-  	
-	/**
-	 * Updates the enabled state of the toolbar items.
-	 * <p>
-	 * This method is called whenever the state of the items needs updating.
-	 * <p>
-	 * Subclasses may extend this method, although this is generally not required.
-	 */
-	protected void updateToolItems() {
-										
-		IMergeViewerContentProvider content= getMergeContentProvider();
-		
-		Object input= getInput();
-		
-		if (fCopyLeftToRightAction != null) {
-			boolean enable= content.isRightEditable(input);
-//			if (enable && input instanceof ICompareInput) {
-//				ITypedElement e= ((ICompareInput) input).getLeft();
-//				if (e == null)
-//					enable= false;
-//			}
-			fCopyLeftToRightAction.setEnabled(enable);
-		}
-		
-		if (fCopyRightToLeftAction != null) {
-			boolean enable= content.isLeftEditable(input);
-//			if (enable && input instanceof ICompareInput) {
-//				ITypedElement e= ((ICompareInput) input).getRight();
-//				if (e == null)
-//					enable= false;
-//			}
-			fCopyRightToLeftAction.setEnabled(enable);
-		}
-	}
-	
-	/**
-	 * Updates the headers of the three areas
-	 * by querying the content provider for a name and image for
-	 * the three sides of the input object.
-	 * <p>
-	 * This method is called whenever the header must be updated.
-	 * <p>
-	 * Subclasses may extend this method, although this is generally not required.
-	 */
-	protected void updateHeader() {
-						
-		IMergeViewerContentProvider content= getMergeContentProvider();
-		Object input= getInput();
-
-		if (fAncestorLabel != null) {
-			fAncestorLabel.setImage(content.getAncestorImage(input));
-			fAncestorLabel.setText(content.getAncestorLabel(input));
-		}
-		if (fLeftLabel != null) {
-			fLeftLabel.setImage(content.getLeftImage(input));
-			fLeftLabel.setText(content.getLeftLabel(input));
-		}
-		if (fRightLabel != null) {
-			fRightLabel.setImage(content.getRightImage(input));
-			fRightLabel.setText(content.getRightLabel(input));
-		}
-	}
-	
-//	private Image loadImage(String name) {
-//		ImageDescriptor id= ImageDescriptor.createFromFile(ContentMergeViewer.class, name);
-//		if (id != null)
-//			return id.createImage();
-//		return null;
-//	}
-		
-	/**
-	 * Calculates the height of the header.
-	 */
-	/* package */ int getHeaderHeight() {
-		int headerHeight= fLeftLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y;
-		headerHeight= Math.max(headerHeight, fDirectionLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y);		
-		return headerHeight;
-	}
-
-	//---- merge direction
-	
-	/**
-	 * Returns true if both sides are editable.
-	 */
-	/* package */ boolean canToggleMergeDirection() {
-		IMergeViewerContentProvider content= getMergeContentProvider();
-		Object input= getInput();
-		return content.isLeftEditable(input) && content.isRightEditable(input);
-	}
-	
-	//---- dirty state & saving state
-	
-	/* (non Javadoc)
-	 * see IPropertyChangeNotifier.addPropertyChangeListener
-	 */
-	public void addPropertyChangeListener(IPropertyChangeListener listener) {
-		if (fListenerList == null)
-			fListenerList= new ListenerList();
-		fListenerList.add(listener);
-	}
-	
-	/* (non Javadoc)
-	 * see IPropertyChangeNotifier.removePropertyChangeListener
-	 */
-	public void removePropertyChangeListener(IPropertyChangeListener listener) {
-		if (fListenerList != null) {
-			fListenerList.remove(listener);
-			if (fListenerList.isEmpty())
-				fListenerList= null;
-		}
-	}
-	
-	/* package */ void fireDirtyState(boolean state) {
-		Utilities.firePropertyChange(fListenerList, this, CompareEditorInput.DIRTY_STATE, null, new Boolean(state));
-	}
-	
-	/**
-	 * Sets the dirty state of the left side of this viewer.
-	 * If the new value differs from the old
-	 * all registered listener are notified with
-	 * a <code>PropertyChangeEvent</code> with the
-	 * property name <code>CompareEditorInput.DIRTY_STATE</code>.
-	 *
-	 * @param dirty the state of the left side dirty flag
-	 */
-	protected void setLeftDirty(boolean dirty) {
-		if (fLeftSaveAction.isEnabled() != dirty) {
-			fLeftSaveAction.setEnabled(dirty);
-			fireDirtyState(dirty);
-		}
-	}
-	
-	/**
-	 * Sets the dirty state of the right side of this viewer.
-	 * If the new value differs from the old
-	 * all registered listener are notified with
-	 * a <code>PropertyChangeEvent</code> with the
-	 * property name <code>CompareEditorInput.DIRTY_STATE</code>.
-	 *
-	 * @param dirty the state of the right side dirty flag
-	 */
-	protected void setRightDirty(boolean dirty) {
-		if (fRightSaveAction.isEnabled() != dirty) {
-			fRightSaveAction.setEnabled(dirty);
-			fireDirtyState(dirty);
-		}
-	}
-	
-	/**
-	 * Save the viewers's content.
-	 * Note: this method is for internal use only. Clients should not call this method. 
-	 * @since 2.0
-	 */
-	public void save(IProgressMonitor pm) throws CoreException {
-		saveContent(getInput());
-	}
-	
-	/**
-	 * Save modified content back to input elements via the content provider.
-	 */
-	/* package */ void saveContent(Object oldInput) {
-				
-		// write back modified contents
-		IMergeViewerContentProvider content= (IMergeViewerContentProvider) getContentProvider();
-		
-		boolean leftEmpty= content.getLeftContent(oldInput) == null;
-		boolean rightEmpty= content.getRightContent(oldInput) == null;
-
-		if (fCompareConfiguration.isLeftEditable() && fLeftSaveAction.isEnabled()) {
-			byte[] bytes= getContents(true);
-			if (leftEmpty && bytes != null && bytes.length == 0)
-				bytes= null;
-			setLeftDirty(false);
-			content.saveLeftContent(oldInput, bytes);
-		}
-		
-		if (fCompareConfiguration.isRightEditable() && fRightSaveAction.isEnabled()) {
-			byte[] bytes= getContents(false);
-			if (rightEmpty && bytes != null && bytes.length == 0)
-				bytes= null;
-			setRightDirty(false);
-			content.saveRightContent(oldInput, bytes);
-		}
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java
deleted file mode 100644
index 45d4482..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.contentmergeviewer;
-
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.core.runtime.IProgressMonitor;
-import java.lang.reflect.InvocationTargetException;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.operation.ModalContext;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-
-
-class DelayedProgressMonitor implements IProgressMonitor {
-	
-	ProgressMonitorDialog fProgressDialog;
-	IProgressMonitor fRealProgressMonitor;
-	String fTaskName;
-	String fSubTaskName;
-	int fTotalWork;
-	int fWorked;
-	boolean fCancelable;
-	Shell fShell;
-	int fTime;
-	
-	
-	DelayedProgressMonitor(Shell shell) {
-		fShell= shell;
-	}
-
-	/*
-	 * @see IProgressMonitor#beginTask(String, int)
-	 */
-	public void beginTask(String name, int totalWork) {
-		fTaskName= name;
-		fTotalWork= totalWork;
-		fTime= 0;
-	}
-
-	/*
-	 * @see IProgressMonitor#done()
-	 */
-	public void done() {
-		if (fRealProgressMonitor != null)
-			fRealProgressMonitor.done();
-	}
-
-	/*
-	 * @see IProgressMonitor#internalWorked(double)
-	 */
-	public void internalWorked(double work) {
-		if (fRealProgressMonitor != null) {
-			fRealProgressMonitor.internalWorked(work);
-		}
-	}
-	
-	private void checkTimeout() {
-		if (fRealProgressMonitor == null) {
-			
-			//if (fTime++ < 100)
-			//	return;
-			
-			fProgressDialog= new ProgressMonitorDialog(fShell);
-			fProgressDialog.setCancelable(true);
-			fProgressDialog.open();
-			fRealProgressMonitor= fProgressDialog.getProgressMonitor();
-			fRealProgressMonitor.beginTask(fTaskName, fTotalWork);
-			if (fSubTaskName != null)
-				fRealProgressMonitor.subTask(fSubTaskName);
-			fRealProgressMonitor.worked(fWorked);
-		}
-	}
-
-	/*
-	 * @see IProgressMonitor#isCanceled()
-	 */
-	public boolean isCanceled() {
-		checkTimeout();
-		if (fRealProgressMonitor != null)
-			return fRealProgressMonitor.isCanceled();
-		return false;
-	}
-
-	/*
-	 * @see IProgressMonitor#setCanceled(boolean)
-	 */
-	public void setCanceled(boolean value) {
-		if (fRealProgressMonitor != null)
-			fRealProgressMonitor.setCanceled(value);
-		else
-			fCancelable= value;
-	}
-
-	/*
-	 * @see IProgressMonitor#setTaskName(String)
-	 */
-	public void setTaskName(String name) {
-		if (fRealProgressMonitor != null)
-			fRealProgressMonitor.setTaskName(name);
-		else
-			fTaskName= name;
-	}
-
-	/*
-	 * @see IProgressMonitor#subTask(String)
-	 */
-	public void subTask(String name) {
-		if (fRealProgressMonitor != null)
-			fRealProgressMonitor.subTask(name);
-		else
-			fSubTaskName= name;
-	}
-
-	/*
-	 * @see IProgressMonitor#worked(int)
-	 */
-	public void worked(int work) {
-		if (fRealProgressMonitor != null)
-			fRealProgressMonitor.internalWorked(work);
-		else {
-			fWorked+= work;
-			checkTimeout();
-		}
-	}
-	
-	public static void run(Shell shell, boolean fork, boolean cancelable, IRunnableWithProgress runnable)
-						throws InvocationTargetException, InterruptedException {
-		
-		DelayedProgressMonitor pm= new DelayedProgressMonitor(shell);
-		pm.checkTimeout();
-		try {
-			ModalContext.run(runnable, fork, pm, shell.getDisplay());
-		} finally {
-			if (pm.fProgressDialog != null)
-				pm.fProgressDialog.close();
-		}
-	}
-}
-
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java
deleted file mode 100644
index 851749d..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.contentmergeviewer;
-
-import org.eclipse.jface.text.Position;
-import org.eclipse.jface.text.IDocument;
-
-
-/**
- * Defines a subrange in a document.
- * <p>
- * It is used by text viewers that can work on a subrange of a document. For example,
- * a text viewer for Java compilation units might use this to restrict the view
- * to a single method.
- * </p>
- * <p>
- * Clients may implement this interface.
- * </p>
- *
- * @see TextMergeViewer
- * @see org.eclipse.compare.structuremergeviewer.DocumentRangeNode
- */
-public interface IDocumentRange {
-	
-	/**
-	 * The position category typically used for an <code>IDocumentRange</code> position
-	 * (value <code>"DocumentRangeCategory"</code>).
-	 * @since 2.0
-	 */
-	public static final String RANGE_CATEGORY= "DocumentRangeCategory";	//$NON-NLS-1$
-
-	/**
-	 * Returns the underlying document.
-	 * 
-	 * @return the underlying document
-	 */
-	IDocument getDocument();
-	
-	/**
-	 * Returns a position that specifies a subrange in the underlying document,
-	 * or <code>null</code> if this document range spans the whole underlying document.
-	 * 
-	 * @return a position that specifies a subrange in the underlying document, or <code>null</code>
-	 */
-	Position getRange();
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java
deleted file mode 100644
index d4a2066..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.contentmergeviewer;
-
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.jface.viewers.IContentProvider;
-
-
-/** 
- * A content provider that mediates between a <code>ContentMergeViewer</code>'s model
- * and the viewer itself.
- * <p>
- * Clients may implement this interface.
- * </p>
- * 
- * @see ContentMergeViewer
- */
-public interface IMergeViewerContentProvider extends IContentProvider {
-	
-	//---- ancestor side
-
-	/**
-	 * Returns the label for the ancestor side of a <code>ContentMergeViewer</code>.
-	 *
-	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @return the label for the ancestor side of a <code>ContentMergeViewer</code>
-	 */
-	String getAncestorLabel(Object input);
-
-	/**
-	 * Returns an optional image for the ancestor side of a <code>ContentMergeViewer</code>.
-	 *
-	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @return the image for the ancestor side of a <code>ContentMergeViewer</code>,
-	 *   or <code>null</code> if none
-	 */
-	Image getAncestorImage(Object input);
-
-	/**
-	 * Returns the contents for the ancestor side of a <code>ContentMergeViewer</code>.
-	 * The interpretation of the returned object depends on the concrete <code>ContentMergeViewer</code>.
-	 *
-	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @return the content for the ancestor side of a <code>ContentMergeViewer</code>,
-	 *   or <code>null</code> if none
-	 */
-	Object getAncestorContent(Object input);
-
-	/**
-	 * Returns whether the ancestor side of the given input element should be shown.
-	 *
-	 * @return <code>true</code> if the ancestor side of the given input element should be shown
-	 */
-	boolean showAncestor(Object input);
-	
-	//---- left side
-
-	/**
-	 * Returns the label for the left side of a <code>ContentMergeViewer</code>.
-	 *
-	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @return the label for the left side of a <code>ContentMergeViewer</code>
-	 */
-	String getLeftLabel(Object input);
-
-	/**
-	 * Returns an optional image for the left side of a <code>ContentMergeViewer</code>.
-	 *
-	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @return the image for the left side of a <code>ContentMergeViewer</code>,
-	 *   or <code>null</code> if none
-	 */
-	Image getLeftImage(Object input);
-
-	/**
-	 * Returns the contents for the left side of a <code>ContentMergeViewer</code>.
-	 * The interpretation of the returned object depends on the concrete <code>ContentMergeViewer</code>.
-	 *
-	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @return the content for the left side of a <code>ContentMergeViewer</code>,
-	 *   or <code>null</code> if none
-	 */
-	Object getLeftContent(Object input);
-
-	/**
-	 * Returns whether the left side is editable.
-	 *
-	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @return <code>true</code> if the left side of a <code>ContentMergeViewer</code> is editable	 
-	 */
-	boolean isLeftEditable(Object input);
-
-	/**
-	 * Saves new contents for the left side of the <code>ContentMergeViewer</code>.
-	 *
-	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @param bytes the new contents to save for the left side
-	 */
-	void saveLeftContent(Object input, byte[] bytes);
-
-	//---- right side
-
-	/**
-	 * Returns the label for the right side of a <code>ContentMergeViewer</code>.
-	 *
-	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @return the label for the right side of a <code>ContentMergeViewer</code>
-	 */
-	String getRightLabel(Object input);
-
-	/**
-	 * Returns an optional image for the right side of a <code>ContentMergeViewer</code>.
-	 *
-	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @return the image for the right side of a <code>ContentMergeViewer</code>,
-	 *   or <code>null</code> if none
-	 */
-	Image getRightImage(Object input);
-
-	/**
-	 * Returns the contents for the right side of a <code>ContentMergeViewer</code>.
-	 * The interpretation of the returned object depends on the concrete <code>ContentMergeViewer</code>.
-	 *
-	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @return the content for the right side of a <code>ContentMergeViewer</code>,
-	 *   or <code>null</code> if none
-	 */
-	Object getRightContent(Object input);
-
-	/**
-	 * Returns whether the right side is editable.
-	 *
-	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @return <code>true</code> if the right side of a <code>ContentMergeViewer</code> is editable	 
-	 */
-	boolean isRightEditable(Object input);
-
-	/**
-	 * Saves new contents for the right side of the <code>ContentMergeViewer</code>.
-	 *
-	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @param bytes the new contents to save for the right side
-	 */
-	void saveRightContent(Object input, byte[] bytes);
-}
-
-
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java
deleted file mode 100644
index 27354bf..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.contentmergeviewer;
-
-import org.eclipse.compare.rangedifferencer.IRangeComparator;
-
-
-/**
- * For performing a so-called "token compare" on a line of text.
- * This interface extends the <code>IRangeComparator</code> interface
- * so that it can be used by the <code>TextMergeViewer</code>.
- * <p>
- * <code>TextMergeViewer</code> activates the token compare when navigating into
- * a range of differing lines. At first the lines are selected as a block.
- * When navigating into this block the token compare shows for every line 
- * the differing token by selecting them.
- * <p>
- * <code>TextMergeViewer</code>'s default token comparator works on characters separated
- * by whitespace. If a different strategy is needed (for example, to use Java tokens in
- * a Java-aware merge viewer), clients may create their own token
- * comparators by implementing this interface (and overriding the
- * <code>TextMergeViewer.createTokenComparator</code> factory method).
- * </p>
- *
- * @see TextMergeViewer
- */
-public interface ITokenComparator extends IRangeComparator {
-
-	/**
-	 * Returns the start character position of the token with the given index.
-	 * If the index is out of range (but not negative) the character position
-	 * behind the last character (the length of the input string) is returned.
-	 *
-	 * @param index index of the token for which to return the start position
-	 * @return the start position of the token with the given index
-	 * @throws java.lang.IndexOutOfBoundsException if index is negative
-	 */
-	int getTokenStart(int index);
-
-	/**
-	 * Returns the character length of the token with the given index.
-	 * If the index is out of range (but not negative) the value 0 is returned.
-	 *
-	 * @param index index of the token for which to return the start position
-	 * @return the character length of the token with the given index
-	 * @throws java.lang.IndexOutOfBoundsException if index is negative
-	 */
-	int getTokenLength(int index);
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
deleted file mode 100644
index 14a2010..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
+++ /dev/null
@@ -1,4125 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *     channingwalton@mac.com - curved line code
- *******************************************************************************/
-package org.eclipse.compare.contentmergeviewer;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.ResourceBundle;
-import java.io.UnsupportedEncodingException;
-import java.text.MessageFormat;
-
-import java.lang.reflect.InvocationTargetException;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Cursor;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.custom.*;
-
-import org.eclipse.jface.action.*;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.text.*;
-import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.CoreException;
-
-import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.IKeyBindingService;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.IWorkbenchPartSite;
-import org.eclipse.ui.help.WorkbenchHelp;
-
-import org.eclipse.compare.*;
-import org.eclipse.compare.internal.ICompareContextIds;
-import org.eclipse.compare.internal.MergeSourceViewer;
-import org.eclipse.compare.internal.BufferedCanvas;
-import org.eclipse.compare.internal.Utilities;
-import org.eclipse.compare.internal.TokenComparator;
-import org.eclipse.compare.internal.DocLineComparator;
-import org.eclipse.compare.internal.ComparePreferencePage;
-import org.eclipse.compare.internal.INavigatable;
-import org.eclipse.compare.internal.CompareNavigator;
-import org.eclipse.compare.internal.TimeoutContext;
-import org.eclipse.compare.internal.DocumentManager;
-import org.eclipse.compare.internal.CompareMessages;
-import org.eclipse.compare.rangedifferencer.*;
-import org.eclipse.compare.structuremergeviewer.*;
-
-/**
- * A text merge viewer uses the <code>RangeDifferencer</code> to perform a
- * textual, line-by-line comparison of two (or three) input documents.
- * It is based on the <code>ContentMergeViewer</code> and uses <code>TextViewer</code>s
- * to implement the ancestor, left, and right content areas.
- * <p>
- * In the three-way compare case ranges of differing lines are highlighted and framed
- * with different colors to show whether the difference is an incoming, outgoing, or conflicting change.
- * The <code>TextMergeViewer</code> supports the notion of a current "differing range"
- * and provides toolbar buttons to navigate from one range to the next (or previous).
- * <p>
- * If there is a current "differing range" and the underlying document is editable
- * the <code>TextMergeViewer</code> enables actions in context menu and toolbar to
- * copy a range from one side to the other side, thereby performing a merge operation.
- * <p>
- * In addition to a line-by-line comparison the <code>TextMergeViewer</code>
- * uses a token based compare on differing lines.
- * The token compare is activated when navigating into
- * a range of differing lines. At first the lines are selected as a block.
- * When navigating into this block the token compare shows for every line 
- * the differing token by selecting them.
- * <p>
- * The <code>TextMergeViewer</code>'s default token compare works on characters separated
- * by whitespace. If a different strategy is needed (for example, Java tokens in
- * a Java-aware merge viewer), clients can create their own token
- * comparators by implementing the <code>ITokenComparator</code> interface and overriding the
- * <code>TextMergeViewer.createTokenComparator</code> factory method).
- * <p>
- * Access to the <code>TextMergeViewer</code>'s model is by means of an
- * <code>IMergeViewerContentProvider</code>. Its <code>get<it>X</it></code>Content</code> methods must return
- * either an <code>IDocument</code>, an <code>IDocumentRange</code>, or an <code>IStreamContentAccessor</code>.
- * In the <code>IDocumentRange</code> case the <code>TextMergeViewer</code>
- * works on a subrange of a document. In the <code>IStreamContentAccessor</code> case
- * a document is created internally and initialized from the stream.
- * <p>
- * A <code>TextMergeViewer</code> can be used as is. However clients may subclass
- * to customize the behavior. For example a <code>MergeTextViewer</code> for Java would override
- * the <code>configureTextViewer</code> method to configure the <code>TextViewer</code> for Java source code,
- * the <code>createTokenComparator</code> method to create a Java specific tokenizer.
- *
- * @see org.eclipse.compare.rangedifferencer.RangeDifferencer
- * @see org.eclipse.jface.text.TextViewer
- * @see ITokenComparator
- * @see IDocumentRange
- * @see org.eclipse.compare.IStreamContentAccessor
- */
-public class TextMergeViewer extends ContentMergeViewer  {
-	
-	private static final boolean DEBUG= false;
-	
-	private static final String[] GLOBAL_ACTIONS= {
-		IWorkbenchActionConstants.UNDO,
-		IWorkbenchActionConstants.REDO,
-		IWorkbenchActionConstants.CUT,
-		IWorkbenchActionConstants.COPY,
-		IWorkbenchActionConstants.PASTE,
-		IWorkbenchActionConstants.DELETE,
-		IWorkbenchActionConstants.SELECT_ALL,
-		IWorkbenchActionConstants.SAVE
-	};
-	private static final String[] TEXT_ACTIONS= {
-		MergeSourceViewer.UNDO_ID,
-		MergeSourceViewer.REDO_ID,
-		MergeSourceViewer.CUT_ID,
-		MergeSourceViewer.COPY_ID,
-		MergeSourceViewer.PASTE_ID,
-		MergeSourceViewer.DELETE_ID,
-		MergeSourceViewer.SELECT_ALL_ID,
-		MergeSourceViewer.SAVE_ID
-	};
-					
-	private static final String BUNDLE_NAME= "org.eclipse.compare.contentmergeviewer.TextMergeViewerResources"; //$NON-NLS-1$
-			
-	// constants
-	/** Width of left and right vertical bar */
-	private static final int MARGIN_WIDTH= 6;
-	/** Width of center bar */
-	private static final int CENTER_WIDTH= 34;
-	/** Width of birds eye view */
-	private static final int BIRDS_EYE_VIEW_WIDTH= 12;
-	/** Width of birds eye view */
-	private static final int BIRDS_EYE_VIEW_INSET= 2;
-	/** */
-	private static final int RESOLVE_SIZE= 5;
-	/** if true copying conflicts from one side to other concatenates both sides */
-	private static final boolean APPEND_CONFLICT= true;
-
-	/** line width of change borders */
-	private static final int LW= 1;
-	/** Selects between smartTokenDiff and mergingTokenDiff */
-	private static final boolean USE_MERGING_TOKEN_DIFF= false;
-	/** When calculating differences show Progress after this timeout (in milliseconds) */
-	private static final int TIMEOUT= 2000;
-		
-	// determines whether a change between left and right is considered incoming or outgoing
-	private boolean fLeftIsLocal;
-	private boolean fShowCurrentOnly= false;
-	private boolean fShowCurrentOnly2= false;
-	private int fMarginWidth= MARGIN_WIDTH;
-	private int fTopInset;
-	
-	// Colors
-	private RGB fBackground;
-	private RGB fForeground;
-	private boolean fPollSystemForeground= true;
-	private boolean fPollSystemBackground= true;
-	
-	private RGB SELECTED_INCOMING;
-	private RGB INCOMING;
-	private RGB INCOMING_FILL;
-	
-	private RGB SELECTED_CONFLICT;
-	private RGB CONFLICT;
-	private RGB CONFLICT_FILL;
-	
-	private RGB SELECTED_OUTGOING;
-	private RGB OUTGOING;
-	private RGB OUTGOING_FILL;
-	
-	private RGB RESOLVED;
-
-	private boolean fEndOfDocReached;
-	private IDocumentListener fDocumentListener;
-	
-	private IPreferenceStore fPreferenceStore;
-	private IPropertyChangeListener fPreferenceChangeListener;
-	
-	/** All diffs for calculating scrolling position (includes line ranges without changes) */
-	private ArrayList fAllDiffs;
-	/** Subset of above: just real differences. */
-	private ArrayList fChangeDiffs;
-	/** The current diff */
-	private Diff fCurrentDiff;
-	
-	private HashMap fNewAncestorRanges= new HashMap();
-	private HashMap fNewLeftRanges= new HashMap();
-	private HashMap fNewRightRanges= new HashMap();
-	
-	private MergeSourceViewer fAncestor;
-	private MergeSourceViewer fLeft;
-	private MergeSourceViewer fRight;
-	
-	private int fLeftLineCount;
-	private int fRightLineCount;
-	
-	private boolean fInScrolling;
-	
-	private int fPts[]= new int[8];	// scratch area for polygon drawing
-	
-	private boolean fIgnoreAncestor= false;
-	private ActionContributionItem fIgnoreAncestorItem;
-	private boolean fHiglightRanges;
-	
-	private boolean fShowPseudoConflicts= false;
-	
-	private boolean fUseSplines= true;
-	private boolean fUseSingleLine= true;
-	private boolean fUseResolveUI= fUseSingleLine;	// resolve UI only for single lines	private boolean fShowSummeryIcon;
-
-	private String fSymbolicFontName;
-
-	private ActionContributionItem fNextItem;	// goto next difference
-	private ActionContributionItem fPreviousItem;	// goto previous difference
-	private ActionContributionItem fCopyDiffLeftToRightItem;
-	private ActionContributionItem fCopyDiffRightToLeftItem;
-	
-	private IKeyBindingService fKeyBindingService;
-	
-	private boolean fSynchronizedScrolling= true;
-	private boolean fShowMoreInfo= false;
-	
-	private MergeSourceViewer fFocusPart;
-	
-	private boolean fSubDoc= true;
-	private IPositionUpdater fPositionUpdater;
-	private boolean fIsMotif;	
-	private boolean fIsCarbon;	
-		
-
-	// SWT widgets
-	private BufferedCanvas fAncestorCanvas;
-	private BufferedCanvas fLeftCanvas;
-	private BufferedCanvas fRightCanvas;
-	private Canvas fScrollCanvas;
-	private ScrollBar fVScrollBar;
-	private Canvas fBirdsEyeCanvas;
-	private Canvas fSummaryHeader;
-	private HeaderPainter fHeaderPainter;
-	
-	// SWT resources to be disposed
-	private Map fColors;
-	private Cursor fBirdsEyeCursor;
-				
-	// points for center curves
-	private double[] fBasicCenterCurve;
-	
-	private Button fCenterButton;
-	private Diff fButtonDiff;
-					
-	class HeaderPainter implements PaintListener {
-		
-		private static final int INSET= BIRDS_EYE_VIEW_INSET;
-
-		private RGB fIndicatorColor;
-		private Color fSeparatorColor;
-		
-		public HeaderPainter() {
-			fSeparatorColor= getColor(fSummaryHeader.getDisplay(), ViewForm.borderInsideRGB);
-		}
-		
-		/**
-		 * Returns true on color change
-		 */
-		public boolean setColor(RGB color) {
-			RGB oldColor= fIndicatorColor;
-			fIndicatorColor= color;
-			if (color == null)
-				return oldColor != null;
-			if (oldColor != null)
-				return !color.equals(oldColor);
-			return true;
-		}
-		
-		private void drawBevelRect(GC gc, int x, int y, int w, int h, Color topLeft, Color bottomRight) {
-			gc.setForeground(topLeft);
-			gc.drawLine(x, y, x + w -1, y);
-			gc.drawLine(x, y, x, y + h -1);
-		
-			gc.setForeground(bottomRight);
-			gc.drawLine(x + w, y, x + w, y + h);
-			gc.drawLine(x, y + h, x + w, y + h);
-		}
-		
-		public void paintControl(PaintEvent e) {
-			
-			Point s= fSummaryHeader.getSize();
-			
-			if (fIndicatorColor != null) {
-				Display d= fSummaryHeader.getDisplay();
-				e.gc.setBackground(getColor(d, fIndicatorColor));
-				int min= Math.min(s.x, s.y)-2*INSET;
-				Rectangle r= new Rectangle((s.x-min)/2, (s.y-min)/2, min, min);
-				e.gc.fillRectangle(r);
-				if (d != null)
-					drawBevelRect(e.gc, r.x, r.y, r.width -1, r.height -1, d.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW), d.getSystemColor(SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW));
-
-				e.gc.setForeground(fSeparatorColor);
-				e.gc.setLineWidth(1);
-				e.gc.drawLine(0+1, s.y-1, s.x-1-1, s.y-1);
-			}
-		}
-	};
-
-	/**
-	 * The position updater used to adapt the positions representing
-	 * the child document ranges to changes of the parent document.
-	 */
-	class ChildPositionUpdater extends DefaultPositionUpdater {
-		
-		/**
-		 * Creates the position updated.
-		 */
-		protected ChildPositionUpdater(String category) {
-			super(category);
-		}
-		
-		/**
-		 * Child document ranges cannot be deleted other then by calling
-		 * freeChildDocument.
-		 */
-		protected boolean notDeleted() {
-			return true;
-		}
-		
-		/**
-		 * If an insertion happens at a child document's start offset, the
-		 * position is extended rather than shifted. Also, if something is added 
-		 * right behind the end of the position, the position is extended rather
-		 * than kept stable.
-		 */
-		protected void adaptToInsert() {
-			
-			if (fPosition == fLeft.getRegion() || fPosition == fRight.getRegion()) {
-				int myStart= fPosition.offset;
-				int myEnd=   fPosition.offset + fPosition.length;
-				myEnd= Math.max(myStart, myEnd);
-				
-				int yoursStart= fOffset;
-				int yoursEnd=   fOffset + fReplaceLength -1;
-				yoursEnd= Math.max(yoursStart, yoursEnd);
-				
-				if (myEnd < yoursStart)
-					return;
-				
-				if (myStart <= yoursStart)
-					fPosition.length += fReplaceLength;
-				else
-					fPosition.offset += fReplaceLength;
-			} else {
-				super.adaptToInsert();
-			}			
-		}
-	}
-	
-	/**
-	 * A Diff represents synchronized character ranges in two or three Documents.
-	 * The MergeTextViewer uses Diffs to find differences in line and token ranges.
-	 */
-	/* package */ class Diff {
-		/** character range in ancestor document */
-		Position fAncestorPos;
-		/** character range in left document */
-		Position fLeftPos;
-		/** character range in right document */
-		Position fRightPos;
-		/** if this is a TokenDiff fParent points to the enclosing LineDiff */
-		Diff fParent;	
-		/** if Diff has been resolved */
-		boolean fResolved;
-		int fDirection;
-		boolean fIsToken= false;
-		/** child token diffs */
-		ArrayList fDiffs;
-		boolean fIsWhitespace= false;
-
-		/**
-		 * Create Diff from two ranges and an optional parent diff.
-		 */
-		Diff(Diff parent, int dir, IDocument ancestorDoc, Position aRange, int ancestorStart, int ancestorEnd,
-							 IDocument leftDoc, Position lRange, int leftStart, int leftEnd,
-							 IDocument rightDoc, Position rRange, int rightStart, int rightEnd) {
-			fParent= parent != null ? parent : this;
-			fDirection= dir;
-			
-			fLeftPos= createPosition(leftDoc, lRange, leftStart, leftEnd);
-			fRightPos= createPosition(rightDoc, rRange, rightStart, rightEnd);
-			if (ancestorDoc != null)
-				fAncestorPos= createPosition(ancestorDoc, aRange, ancestorStart, ancestorEnd);
-		}
-		
-		Position getPosition(char type) {
-			switch (type) {
-			case 'A':
-				return fAncestorPos;
-			case 'L':
-				return fLeftPos;
-			case 'R':
-				return fRightPos;
-			}
-			return null;
-		}
-		
-		boolean isInRange(char type, int pos) {
-			Position p= getPosition(type);
-			return (pos >= p.offset) && (pos < (p.offset+p.length));
-		}
-		
-		String changeType() {
-			boolean leftEmpty= fLeftPos.length == 0;
-			boolean rightEmpty= fRightPos.length == 0;
-			
-			if (fDirection == RangeDifference.LEFT) {
-				if (!leftEmpty && rightEmpty)
-					return CompareMessages.getString("TextMergeViewer.changeType.addition"); //$NON-NLS-1$
-				if (leftEmpty && !rightEmpty)
-					return CompareMessages.getString("TextMergeViewer.changeType.deletion"); //$NON-NLS-1$
-			} else {
-				if (leftEmpty && !rightEmpty)
-					return CompareMessages.getString("TextMergeViewer.changeType.addition"); //$NON-NLS-1$
-				if (!leftEmpty && rightEmpty)
-					return CompareMessages.getString("TextMergeViewer.changeType.deletion"); //$NON-NLS-1$
-			}
-			return CompareMessages.getString("TextMergeViewer.changeType.change"); //$NON-NLS-1$
-		}
-		
-		Image getImage() {
-			int code= Differencer.CHANGE;
-			switch (fDirection) {
-			case RangeDifference.RIGHT:
-				code+= Differencer.LEFT;
-				break;
-			case RangeDifference.LEFT:
-				code+= Differencer.RIGHT;
-				break;
-			case RangeDifference.ANCESTOR:
-			case RangeDifference.CONFLICT:
-				code+= Differencer.CONFLICTING;
-				break;
-			}
-			if (code != 0)
-				return getCompareConfiguration().getImage(code);
-			return null;
-		}
-		
-		Position createPosition(IDocument doc, Position range, int start, int end) {
-			try {
-				int l= end-start;
-				if (range != null) {
-					int dl= range.length;
-					if (l > dl)
-						l= dl;					
-				} else {
-					int dl= doc.getLength();
-					if (start+l > dl)
-						l= dl-start;
-				}
-					
-				Position p= null;
-				try {
-					p= new Position(start, l);
-				} catch (RuntimeException ex) {
-					//System.out.println("Diff.createPosition: " + start + " " + l);
-				}
-				
-				try {
-					doc.addPosition(IDocumentRange.RANGE_CATEGORY, p);
-				} catch (BadPositionCategoryException ex) {
-				}
-				return p;
-			} catch (BadLocationException ee) {
-				//System.out.println("Diff.createPosition: " + start + " " + end);
-			}
-			return null;
-		}
-
-		void add(Diff d) {
-			if (fDiffs == null)
-				fDiffs= new ArrayList();
-			fDiffs.add(d);
-		}
-		
-		boolean isDeleted() {
-			if (fAncestorPos != null && fAncestorPos.isDeleted())
-				return true;
-			return fLeftPos.isDeleted() || fRightPos.isDeleted();
-		}
-		
-		void setResolved(boolean r) {
-			fResolved= r;
-			if (r)
-				fDiffs= null;
-		}
-
-		boolean isResolved() {
-			if (!fResolved && fDiffs != null) {
-				Iterator e= fDiffs.iterator();
-				while (e.hasNext()) {
-					Diff d= (Diff) e.next();
-					if (!d.isResolved())
-						return false;
-				}
-				return true;
-			}
-			return fResolved;
-		}
-		
-//		private boolean isIncoming() {
-//			switch (fDirection) {
-//			case RangeDifference.RIGHT:
-//				if (fLeftIsLocal)
-//					return true;
-//				break;
-//			case RangeDifference.LEFT:
-//				if (!fLeftIsLocal)
-//					return true;
-//				break;
-//			}
-//			return false;
-//		}
-		
-		private boolean isIncomingOrConflicting() {
-			switch (fDirection) {
-			case RangeDifference.RIGHT:
-				if (fLeftIsLocal)
-					return true;
-				break;
-			case RangeDifference.LEFT:
-				if (!fLeftIsLocal)
-					return true;
-				break;
-			case RangeDifference.CONFLICT:
-				return true;
-			}
-			return false;
-		}
-		
-//		private boolean isUnresolvedIncoming() {
-//			if (fResolved)
-//				return false;
-//			return isIncoming();
-//		}
-		
-		private boolean isUnresolvedIncomingOrConflicting() {
-			if (fResolved)
-				return false;
-			return isIncomingOrConflicting();
-		}
-				
-		Position getPosition(MergeSourceViewer w) {
-			if (w == fLeft)
-				return fLeftPos;
-			if (w == fRight)
-				return fRightPos;
-			if (w == fAncestor)
-				return fAncestorPos;
-			return null;
-		}
-		
-		/**
-		 * Returns true if given character range overlaps with this Diff.
-		 */
-		boolean contains(MergeSourceViewer w, int start, int end) {
-			Position h= getPosition(w);
-			if (h != null) {
-				int offset= h.getOffset();
-				if (start >= offset) {
-					int endPos= offset+h.getLength();
-					if (end < endPos)
-						return true;
-					if (endPos == w.getDocument().getLength())
-						return true;
-				}
-			}
-			return false;
-		}
-				
-		int getMaxDiffHeight(boolean withAncestor) {
-			Point region= new Point(0, 0);
-			int h= fLeft.getLineRange(fLeftPos, region).y;
-			if (withAncestor)
-				h= Math.max(h, fAncestor.getLineRange(fAncestorPos, region).y);
-			return Math.max(h, fRight.getLineRange(fRightPos, region).y);
-		}
-		
-		int getAncestorHeight() {
-			Point region= new Point(0, 0);			
-			return fAncestor.getLineRange(fAncestorPos, region).y;
-		}
-
-		int getLeftHeight() {
-			Point region= new Point(0, 0);			
-			return fLeft.getLineRange(fLeftPos, region).y;
-		}
-
-		int getRightHeight() {
-			Point region= new Point(0, 0);			
-			return fRight.getLineRange(fRightPos, region).y;
-		}
-	}
-
-	//---- MergeTextViewer
-	
-	/**
-	 * Creates a text merge viewer under the given parent control.
-	 *
-	 * @param parent the parent control
-	 * @param configuration the configuration object
-	 */
-	public TextMergeViewer(Composite parent, CompareConfiguration configuration) {
-		this(parent, SWT.NULL, configuration);
-	}
-	
-	/**
-	 * Creates a text merge viewer under the given parent control.
-	 *
-	 * @param parent the parent control
-	 * @param style SWT style bits for top level composite of this viewer
-	 * @param configuration the configuration object
-	 */
-	public TextMergeViewer(Composite parent, int style, CompareConfiguration configuration) {
-		super(style, ResourceBundle.getBundle(BUNDLE_NAME), configuration);
-		
-		fSymbolicFontName= getClass().getName();
-		
-		String platform= SWT.getPlatform();
-		fIsMotif= "motif".equals(platform); //$NON-NLS-1$
-		fIsCarbon= "carbon".equals(platform); //$NON-NLS-1$
-		
-		if (fIsMotif)
-			fMarginWidth= 0;
-			
-		Display display= parent.getDisplay();
-		
-		fPreferenceChangeListener= new IPropertyChangeListener() {
-			public void propertyChange(PropertyChangeEvent event) {
-				TextMergeViewer.this.propertyChange(event);
-			}
-		};
-
-		fPreferenceStore= configuration.getPreferenceStore();
-		if (fPreferenceStore != null) {
-			fPreferenceStore.addPropertyChangeListener(fPreferenceChangeListener);
-			
-			checkForColorUpdate(display);
-
-			fLeftIsLocal= Utilities.getBoolean(configuration, "LEFT_IS_LOCAL", false); //$NON-NLS-1$
-			fSynchronizedScrolling= fPreferenceStore.getBoolean(ComparePreferencePage.SYNCHRONIZE_SCROLLING);
-			fShowMoreInfo= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_MORE_INFO);
-			fShowPseudoConflicts= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS);
-			//fUseSplines= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SPLINES);
-			fUseSingleLine= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SINGLE_LINE);
-			fUseResolveUI= fUseSingleLine;
-			//fUseResolveUI= fPreferenceStore.getBoolean(ComparePreferencePage.USE_RESOLVE_UI);
-		}
-		
-		fDocumentListener= new IDocumentListener() {
-			
-			public void documentAboutToBeChanged(DocumentEvent e) {
-			}
-			
-			public void documentChanged(DocumentEvent e) {
-				TextMergeViewer.this.documentChanged(e);
-			}
-		};
-		
-		buildControl(parent);
-		
-		INavigatable nav= new INavigatable() {
-			public boolean gotoDifference(boolean next) {
-				return navigate(next, false, false);
-			}
-		};
-		fComposite.setData(INavigatable.NAVIGATOR_PROPERTY, nav);
-		
-		fBirdsEyeCursor= new Cursor(parent.getDisplay(), SWT.CURSOR_HAND);
-		
-		JFaceResources.getFontRegistry().addListener(fPreferenceChangeListener);
-		updateFont();
-	}
-	
-	private void updateFont() {
-		Font f= JFaceResources.getFont(fSymbolicFontName);
-		if (f != null) {
-			if (fAncestor != null)
-				fAncestor.setFont(f);
-			if (fLeft != null)
-				fLeft.setFont(f);
-			if (fRight != null)
-				fRight.setFont(f);
-		}
-	}
-	
-	private void checkForColorUpdate(Display display) {
-		if (fPollSystemForeground) {
-			RGB fg= display.getSystemColor(SWT.COLOR_LIST_FOREGROUND).getRGB();
-			if (fForeground == null || !fg.equals(fForeground)) {
-				fForeground= fg;
-				updateColors(display);
-			}
-		}
-		if (fPollSystemBackground) {
-			RGB bg= display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).getRGB();
-			if (fBackground == null || !bg.equals(fBackground)) {
-				fBackground= bg;
-				updateColors(display);
-			}
-		}
-	}
-	
-	/**
-	 * Sets the viewer's background color to the given RGB value.
-	 * If the value is <code>null</code> the system's default background color is used.
-	 * @param background the background color or <code>null</code> to use the system's default background color
-	 * @since 2.0
-	 */
-	public void setBackgroundColor(RGB background) {
-		fPollSystemBackground= (background == null);
-		fBackground= background;
-		updateColors(null);
-	}
-	
-	private RGB getBackground(Display display) {
-		if (fBackground != null)
-			return fBackground;
-		if (display == null)
-			display= fComposite.getDisplay();
-		return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).getRGB();
-	}
-	
-	/**
-	 * Sets the viewer's foreground color to the given RGB value.
-	 * If the value is <code>null</code> the system's default foreground color is used.
-	 * @param foreground the foreground color or <code>null</code> to use the system's default foreground color
-	 * @since 2.0
-	 */
-	public void setForegroundColor(RGB foreground) {
-		fPollSystemForeground= (foreground == null);
-		fForeground= foreground;
-		updateColors(null);
-	}
-	
-	private RGB getForeground(Display display) {
-		if (fForeground != null)
-			return fForeground;
-		if (display == null)
-			display= fComposite.getDisplay();
-		return display.getSystemColor(SWT.COLOR_LIST_FOREGROUND).getRGB();
-	}
-	
-	private void updateColors(Display display) {
-		
-		if (display == null)
-			display= fComposite.getDisplay();
-		
-		Color color= null;
-		if (fBackground != null)
-			color= getColor(display, fBackground);
-		
-		if (fAncestor != null)
-			fAncestor.setBackgroundColor(color);
-		if (fLeft != null)
-			fLeft.setBackgroundColor(color);
-		if (fRight != null)
-			fRight.setBackgroundColor(color);
-						
-		RGB bg= getBackground(display);
-		SELECTED_INCOMING= new RGB(0, 0, 255);
-		INCOMING= interpolate(SELECTED_INCOMING, bg, 0.6);
-		INCOMING_FILL= interpolate(SELECTED_INCOMING, bg, 0.97);
-
-		SELECTED_CONFLICT= new RGB(255, 0, 0);
-		CONFLICT= interpolate(SELECTED_CONFLICT, bg, 0.6);
-		CONFLICT_FILL= interpolate(SELECTED_CONFLICT, bg, 0.97);
-	
-		SELECTED_OUTGOING= getForeground(display);
-		OUTGOING= interpolate(SELECTED_OUTGOING, bg, 0.6);
-		OUTGOING_FILL= interpolate(SELECTED_OUTGOING, bg, 0.97);
-		
-		RESOLVED= new RGB(0, 255, 0);
-				
-		refreshBirdsEyeView();
-		invalidateLines();
-		
-		updateAllDiffBackgrounds(display);
-	}
-	
-	/**
-	 * Invalidates the current presentation by invalidating the three text viewers.
-	 * @since 2.0
-	 */
-	public void invalidateTextPresentation() {
-		if (fAncestor != null)
-			fAncestor.invalidateTextPresentation();
-		if (fLeft != null)
-			fLeft.invalidateTextPresentation();
-		if (fRight != null)
-			fRight.invalidateTextPresentation();
-	}
-	
-	/**
-	 * Configures the passed text viewer.
-	 * This method is called after the three text viewers have been created for the
-	 * content areas.
-	 * The <code>TextMergeViewer</code> implementation of this method does nothing.
-	 * Subclasses may reimplement to provide a specific configuration for the text viewer.
-	 *
-	 * @param textViewer the text viewer to configure
-	 */
-	protected void configureTextViewer(TextViewer textViewer) {
-	}
-				
-	/**
-	 * Creates an <code>ITokenComparator</code> which is used to show the
-	 * intra line differences.
-	 * The <code>TextMergeViewer</code> implementation of this method returns a 
-	 * tokenizer that breaks a line into words separated by whitespace.
-	 * Subclasses may reimplement to provide a specific tokenizer.
-	 *
-	 * @return a ITokenComparator which is used for a second level token compare.
-	 */
-	protected ITokenComparator createTokenComparator(String s) {
-		return new TokenComparator(s);
-	}
-	
-	/**
-	 * Returns a document partitioner which is suitable for the underlying content type.
-	 * This method is only called if the input provided by the content provider is a
-	 * <code>IStreamContentAccessor</code> and an internal document must be created. This
-	 * document is initialized with the partitioner returned from this method.
-	 * <p>
-	 * The <code>TextMergeViewer</code> implementation of this method returns 
-	 * <code>null</code>. Subclasses may reimplement to create a partitioner for a 
-	 * specific content type.
-	 *
-	 * @return a document partitioner, or <code>null</code>
-	 */
-	protected IDocumentPartitioner getDocumentPartitioner() {
-		return null;
-	}
-	
-	/**
-	 * Called on the viewer disposal.
-	 * Unregisters from the compare configuration.
-	 * Clients may extend if they have to do additional cleanup.
-	 */
-	protected void handleDispose(DisposeEvent event) {
-		
-		if (fKeyBindingService != null) {
-			IAction a;
-			if (fNextItem != null) {
-				a= fNextItem.getAction();
-				if (a != null)
-					fKeyBindingService.unregisterAction(a);
-			}
-			if (fPreviousItem != null) {
-				a= fPreviousItem.getAction();
-				if (a != null)
-					fKeyBindingService.unregisterAction(a);
-			}
-			if (fCopyDiffLeftToRightItem != null) {
-				a= fCopyDiffLeftToRightItem.getAction();
-				if (a != null)
-					fKeyBindingService.unregisterAction(a);
-			}
-			if (fCopyDiffRightToLeftItem != null) {
-				a= fCopyDiffRightToLeftItem.getAction();
-				if (a != null)
-					fKeyBindingService.unregisterAction(a);
-			}
-			fKeyBindingService= null;
-		}
-		
-		Object input= getInput();
-		DocumentManager.remove(getDocument2('A', input));
-		DocumentManager.remove(getDocument2('L', input));
-		DocumentManager.remove(getDocument2('R', input));
-		
-		if (DEBUG)
-			DocumentManager.dump();
-
-		if (fPreferenceChangeListener != null) {
-			JFaceResources.getFontRegistry().removeListener(fPreferenceChangeListener);
-			if (fPreferenceStore != null)
-				fPreferenceStore.removePropertyChangeListener(fPreferenceChangeListener);
-			fPreferenceChangeListener= null;
-		}
-		
-		fLeftCanvas= null;
-		fRightCanvas= null;
-		fVScrollBar= null;
-		fBirdsEyeCanvas= null;
-		fSummaryHeader= null;
-
-		unsetDocument(fAncestor);
-		unsetDocument(fLeft);
-		unsetDocument(fRight);
-		
-		if (fColors != null) {
-			Iterator i= fColors.values().iterator();
-			while (i.hasNext()) {
-				Color color= (Color) i.next();
-				if (!color.isDisposed())
-					color.dispose();
-			}
-			fColors= null;
-		}
-		
-		if (fBirdsEyeCursor != null) {
-			fBirdsEyeCursor.dispose();
-			fBirdsEyeCursor= null;
-		}
-		
-		super.handleDispose(event);
-  	}
-  	  	  				 		
-	//-------------------------------------------------------------------------------------------------------------
-	//--- internal ------------------------------------------------------------------------------------------------
-	//-------------------------------------------------------------------------------------------------------------
-	
-	/**
-	 * Creates the specific SWT controls for the content areas.
-	 * Clients must not call or override this method.
-	 */
-	protected void createControls(Composite composite) {
-		
-		WorkbenchHelp.setHelp(composite, ICompareContextIds.TEXT_MERGE_VIEW);
-		
-		// 1st row
-		if (fMarginWidth > 0) {
-			fAncestorCanvas= new BufferedCanvas(composite, SWT.NONE) {
-				public void doPaint(GC gc) {
-					paintSides(gc, fAncestor, fAncestorCanvas, false);
-				}
-			};
-			fAncestorCanvas.addMouseListener(
-				new MouseAdapter() {
-					public void mouseDown(MouseEvent e) {
-						setCurrentDiff2(handleMouseInSides(fAncestorCanvas, fAncestor, e.y), false);
-					}
-				}
-			);
-		}
-									
-		fAncestor= createPart(composite);
-		fAncestor.setEditable(false);
-		
-		fSummaryHeader= new Canvas(composite, SWT.NONE);
-		fHeaderPainter= new HeaderPainter();
-		fSummaryHeader.addPaintListener(fHeaderPainter);
-		updateResolveStatus();
-				
-		// 2nd row
-		if (fMarginWidth > 0) {
-			fLeftCanvas= new BufferedCanvas(composite, SWT.NONE) {
-				public void doPaint(GC gc) {
-					paintSides(gc, fLeft, fLeftCanvas, false);
-				}
-			};
-			fLeftCanvas.addMouseListener(
-				new MouseAdapter() {
-					public void mouseDown(MouseEvent e) {
-						setCurrentDiff2(handleMouseInSides(fLeftCanvas, fLeft, e.y), false);
-					}
-				}
-			);
-		}
-		
-		fLeft= createPart(composite);
-		fLeft.getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling);
-		fLeft.addAction(MergeSourceViewer.SAVE_ID, fLeftSaveAction);
-			
-		fRight= createPart(composite);
-		fRight.getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling);
-		fRight.addAction(MergeSourceViewer.SAVE_ID, fRightSaveAction);
-		
-		if (fMarginWidth > 0) {
-			fRightCanvas= new BufferedCanvas(composite, SWT.NONE) {
-				public void doPaint(GC gc) {
-					paintSides(gc, fRight, fRightCanvas, fSynchronizedScrolling);
-				}
-			};
-			fRightCanvas.addMouseListener(
-				new MouseAdapter() {
-					public void mouseDown(MouseEvent e) {
-						setCurrentDiff2(handleMouseInSides(fRightCanvas, fRight, e.y), false);
-					}
-				}
-			);
-		}
-		
-		fScrollCanvas= new Canvas(composite, SWT.V_SCROLL);
-		//Rectangle trim= fScrollCanvas.computeTrim(0, 0, 0, 0);
-		Rectangle trim= fLeft.getTextWidget().computeTrim(0, 0, 0, 0);
-		fTopInset= trim.y;
-		
-		fVScrollBar= fScrollCanvas.getVerticalBar();
-		fVScrollBar.setIncrement(1);
-		fVScrollBar.setVisible(true);
-		fVScrollBar.addListener(SWT.Selection,
-			new Listener() {
-				public void handleEvent(Event e) {
-					int vpos= ((ScrollBar)e.widget).getSelection();
-					scrollVertical(vpos, vpos, vpos, null);
-				}
-			}
-		);
-		
-		fBirdsEyeCanvas= new BufferedCanvas(composite, SWT.NONE) {
-			public void doPaint(GC gc) {
-				paintBirdsEyeView(this, gc);
-			}
-		};
-		//fBirdsEyeCanvas.setBackground(composite.getDisplay().getSystemColor(SWT.COLOR_YELLOW));
-		fBirdsEyeCanvas.addMouseListener(
-			new MouseAdapter() {
-				public void mouseDown(MouseEvent e) {
-					setCurrentDiff2(handlemouseInBirdsEyeView(fBirdsEyeCanvas, e.y), true);
-				}
-			}
-		);
-		fBirdsEyeCanvas.addMouseMoveListener(
-			new MouseMoveListener() {
-				
-				private Cursor fLastCursor;
-				
-				public void mouseMove(MouseEvent e) {
-					Cursor cursor= null;
-					Diff diff= handlemouseInBirdsEyeView(fBirdsEyeCanvas, e.y);
-					if (diff != null && diff.fDirection != Differencer.NO_CHANGE)
-						cursor= fBirdsEyeCursor;
-					if (fLastCursor != cursor) {
-						fBirdsEyeCanvas.setCursor(cursor);
-						fLastCursor= cursor;
-					}
-				}
-			}
-		);
-	}
-	
-	private void setCurrentDiff2(Diff diff, boolean reveal) {
-		if (diff != null && diff.fDirection != Differencer.NO_CHANGE) {
-			//fCurrentDiff= null;
-			setCurrentDiff(diff, reveal);
-		}
-	}
-	
-	private Diff handleMouseInSides(Canvas canvas, MergeSourceViewer tp, int my) {
-
-		int lineHeight= tp.getTextWidget().getLineHeight();
-		int visibleHeight= tp.getViewportHeight();
-
-		if (! fHiglightRanges)
-			return null;
-
-		if (fChangeDiffs != null) {
-			int shift= tp.getVerticalScrollOffset() + (2-LW);
-
-			Point region= new Point(0, 0);
-			Iterator e= fChangeDiffs.iterator();
-			while (e.hasNext()) {
-				Diff diff= (Diff) e.next();
-				if (diff.isDeleted())
-					continue;
-
-				if (fShowCurrentOnly2 && !isCurrentDiff(diff))
-					continue;
-
-				tp.getLineRange(diff.getPosition(tp), region);
-				int y= (region.x * lineHeight) + shift;
-				int h= region.y * lineHeight;
-
-				if (y+h < 0)
-					continue;
-				if (y >= visibleHeight)
-					break;
-					
-				if (my >= y && my < y+h)
-					return diff;
-			}
-		}
-		return null;
-	}
-	
-	private Diff getDiffUnderMouse(Canvas canvas, int mx, int my, Rectangle r) {
-
-		if (! fSynchronizedScrolling)
-			return null;
-
-		int lineHeight= fLeft.getTextWidget().getLineHeight();
-		int visibleHeight= fRight.getViewportHeight();
-
-		Point size= canvas.getSize();
-		int w= size.x;
-
-		if (! fHiglightRanges)
-			return null;
-
-		if (fChangeDiffs != null) {
-			int lshift= fLeft.getVerticalScrollOffset();
-			int rshift= fRight.getVerticalScrollOffset();
-
-			Point region= new Point(0, 0);
-
-			Iterator e= fChangeDiffs.iterator();
-			while (e.hasNext()) {
-				Diff diff= (Diff) e.next();
-				if (diff.isDeleted())
-					continue;
-
-				if (fShowCurrentOnly2 && !isCurrentDiff(diff))
-					continue;
-
-				fLeft.getLineRange(diff.fLeftPos, region);
-				int ly= (region.x * lineHeight) + lshift;
-				int lh= region.y * lineHeight;
-
-				fRight.getLineRange(diff.fRightPos, region);
-				int ry= (region.x * lineHeight) + rshift;
-				int rh= region.y * lineHeight;
-
-				if (Math.max(ly+lh, ry+rh) < 0)
-					continue;
-				if (Math.min(ly, ry) >= visibleHeight)
-					break;
-
-				int cx= (w-RESOLVE_SIZE)/2;
-				int cy= ((ly+lh/2) + (ry+rh/2) - RESOLVE_SIZE)/2; 
-				if (my >= cy && my < cy+RESOLVE_SIZE && mx >= cx && mx < cx+RESOLVE_SIZE) {
-					if (r != null) {
-						r.x= cx+RESOLVE_SIZE/2-10;
-						r.y= cy+RESOLVE_SIZE/2-10;
-						r.width= 20;
-						r.height= 20;
-					}
-					return diff;
-				}
-			}
-		}
-		return null;
-	}
-
-	private Diff handlemouseInBirdsEyeView(Canvas canvas, int my) {
-		int yy, hh;
-		
-		Point size= canvas.getSize();
-		
-		int virtualHeight= fSynchronizedScrolling ? getVirtualHeight() : getRightHeight();		
-		if (virtualHeight < getViewportHeight())
-			return null;
-		
-		int y= 0;
-		if (fAllDiffs != null) {
-			Iterator e= fAllDiffs.iterator();
-			for (int i= 0; e.hasNext(); i++) {
-				Diff diff= (Diff) e.next();
-				int h= fSynchronizedScrolling ? diff.getMaxDiffHeight(fShowAncestor)
-											  : diff.getRightHeight();
-				if (useChange(diff.fDirection) && !diff.fIsWhitespace) {
-									
-					yy= (y*size.y)/virtualHeight;
-					hh= (h*size.y)/virtualHeight;
-					if (hh < 3)
-						hh= 3;
-						
-					if (my >= yy && my < yy+hh)
-						return diff;
-				}
-				y+= h;
-			}
-		}
-		return null;
-	}
-	
-	private void paintBirdsEyeView(Canvas canvas, GC gc) {
-		
-		Color c;
-		Rectangle r= new Rectangle(0, 0, 0, 0);
-		int yy, hh;
-		
-		Point size= canvas.getSize();
-		
-		int virtualHeight= fSynchronizedScrolling ? getVirtualHeight() : getRightHeight();		
-		if (virtualHeight < getViewportHeight())
-			return;
-				
-		Display display= canvas.getDisplay();
-		int y= 0;
-		if (fAllDiffs != null) {
-			Iterator e= fAllDiffs.iterator();
-			for (int i= 0; e.hasNext(); i++) {
-				Diff diff= (Diff) e.next();
-				int h= fSynchronizedScrolling ? diff.getMaxDiffHeight(fShowAncestor)
-											  : diff.getRightHeight();
-								
-				if (useChange(diff.fDirection) && !diff.fIsWhitespace) {
-					
-					yy= (y*size.y)/virtualHeight;
-					hh= (h*size.y)/virtualHeight;
-					if (hh < 3)
-						hh= 3;
-					
-					c= getColor(display, getFillColor(diff));
-					if (c != null) {
-						gc.setBackground(c);
-						gc.fillRectangle(BIRDS_EYE_VIEW_INSET, yy, size.x-(2*BIRDS_EYE_VIEW_INSET),hh);
-					}
-					c= getColor(display, getStrokeColor(diff));
-					if (c != null) {
-						gc.setForeground(c);
-						r.x= BIRDS_EYE_VIEW_INSET;
-						r.y= yy;
-						r.width= size.x-(2*BIRDS_EYE_VIEW_INSET)-1;
-						r.height= hh;
-						if (diff == fCurrentDiff ||
-								(fCurrentDiff != null && diff == fCurrentDiff.fParent)) {
-							gc.setLineWidth(2);
-							r.x++;
-							r.y++;
-							r.width--;
-							r.height--;
-						} else {
-							gc.setLineWidth(1);
-						}
-						gc.drawRectangle(r);
-					}
-				}
-				
-				y+= h;
-			}
-		}
-	}
-	
-	private void refreshBirdsEyeView() {
-		if (fBirdsEyeCanvas != null)
-			fBirdsEyeCanvas.redraw();
-	}
-	
-	/**
-	 * Called whenever setFocus() is called on the ContentViewer's top level SWT Composite.
-	 * This implementation sets the focus to the first enabled text widget.
-	 */
-	/* package */ boolean internalSetFocus() {
-		if (fFocusPart == null) {
-			if (fLeft != null && fLeft.getEnabled()) {
-				fFocusPart= fLeft;
-			} else if (fRight != null && fRight.getEnabled()) {
-				fFocusPart= fRight;
-			} else if (fAncestor != null && fAncestor.getEnabled()) {
-				fFocusPart= fAncestor;
-			}
-		}
-		if (fFocusPart != null) {
-			StyledText st= fFocusPart.getTextWidget();
-			if (st != null)
-				return st.setFocus();
-		}
-		return false;	// could not set focus
-	}
-	
-	
-	class HoverResizer extends Resizer {
-		Canvas fCanvas;
-		public HoverResizer(Canvas c, int dir) {
-			super(c, dir);
-			fCanvas= c;
-		}
-		public void mouseMove(MouseEvent e) {
-			if (!fIsDown && showResolveUI() && handleMouseMoveOverCenter(fCanvas, e.x, e.y))
-				return;
-			super.mouseMove(e);
-		}
-	}
-	
-	/**
-	 * Creates the central Canvas.
-	 * Called from ContentMergeViewer.
-	 */
-	/* package */ Control createCenter(Composite parent) {
-		if (fSynchronizedScrolling) {
-			final Canvas canvas= new BufferedCanvas(parent, SWT.NONE) {
-				public void doPaint(GC gc) {
-					paintCenter(this, gc);
-				}
-			};
-			if (!fUseResolveUI) {
-				new Resizer(canvas, HORIZONTAL);
-			} else {
-				
-				new HoverResizer(canvas, HORIZONTAL);
-								
-				fCenterButton= new Button(canvas, "carbon".equals(SWT.getPlatform()) ? SWT.FLAT : SWT.PUSH);	//$NON-NLS-1$
-				fCenterButton.setText("<");	 //$NON-NLS-1$
-				fCenterButton.pack();
-				fCenterButton.setVisible(false);
-				fCenterButton.addSelectionListener(
-					new SelectionAdapter() {
-						public void widgetSelected(SelectionEvent e) {
-							fCenterButton.setVisible(false);
-							if (fButtonDiff != null) {
-								setCurrentDiff(fButtonDiff, false);
-								copy(fCurrentDiff, false, fCurrentDiff.fDirection == RangeDifference.CONFLICT);
-							}
-						}
-					}
-				);				
-			}
-			
-			return canvas;
-		}
-		return super.createCenter(parent);
-	}
-	
-	private boolean handleMouseMoveOverCenter(Canvas canvas, int x, int y) {
-		Rectangle r= new Rectangle(0, 0, 0, 0);
-		Diff diff= getDiffUnderMouse(canvas, x, y, r);
-		if (diff != null && !diff.isUnresolvedIncomingOrConflicting())
-			diff= null;
-		if (diff != fButtonDiff) {
-			if (diff != null) {
-				if (fLeft.isEditable()) {
-					fButtonDiff= diff;
-					fCenterButton.setText("<");		//$NON-NLS-1$
-					String tt= fCopyDiffRightToLeftItem.getAction().getToolTipText();
-					fCenterButton.setToolTipText(tt);
-					fCenterButton.setBounds(r);
-					fCenterButton.setVisible(true);
-				} else if (fRight.isEditable()) {
-					fButtonDiff= diff;
-					fCenterButton.setText(">");		//$NON-NLS-1$
-					String tt= fCopyDiffLeftToRightItem.getAction().getToolTipText();
-					fCenterButton.setToolTipText(tt);
-					fCenterButton.setBounds(r);
-					fCenterButton.setVisible(true);										
-				} else
-					fButtonDiff= null;
-			} else {
-				fCenterButton.setVisible(false);
-				fButtonDiff= null;
-			}
-		}
-		return fButtonDiff != null;
-	}
-	
-	/**
-	 * Returns width of central canvas.
-	 * Overridden from ContentMergeViewer.
-	 */
-	/* package */ int getCenterWidth() {
-		if (fSynchronizedScrolling)
-			return CENTER_WIDTH;
-		return super.getCenterWidth();
-	}
-
-	/**
-	 * Creates and initializes a text part.
-	 */
-	private MergeSourceViewer createPart(Composite parent) {
-		
-		final MergeSourceViewer part= new MergeSourceViewer(parent, getResourceBundle());
-		final StyledText te= part.getTextWidget();
-		
-		if (!fConfirmSave)
-			part.hideSaveAction();
-		
-		te.addPaintListener(
-			new PaintListener() {
-				public void paintControl(PaintEvent e) {
-					paint(e, part);
-				}
-			}
-		);		
-		te.addKeyListener(
-			new KeyAdapter() {
-				public void keyPressed(KeyEvent e) {
-					handleSelectionChanged(part);
-				}
-			}
-		);
-		te.addMouseListener(
-			new MouseAdapter() {
-				public void mouseDown(MouseEvent e) {
-					//syncViewport(part);
-					handleSelectionChanged(part);
-				}
-			}
-		);		
-					
-		te.addFocusListener(
-			new FocusAdapter() {
-				public void focusGained(FocusEvent fe) {
-					fFocusPart= part;
-					connectGlobalActions(fFocusPart);
-				}
-				public void focusLost(FocusEvent fe) {
-					connectGlobalActions(null);
-				}
-			}
-		);
-		
-		part.addViewportListener(
-			new IViewportListener() {
-				public void viewportChanged(int verticalPosition) {
-					syncViewport(part);
-				}
-			}
-		);
-		
-		Font font= JFaceResources.getFont(fSymbolicFontName);
-		if (font != null)
-			te.setFont(font);
-		
-		if (fBackground != null)	// not default
-			te.setBackground(getColor(parent.getDisplay(), fBackground));			
-		
-		configureTextViewer(part);
-		
-		return part;
-	}
-	
-	private void connectGlobalActions(MergeSourceViewer part) {
-		IActionBars actionBars= Utilities.findActionBars(fComposite);
-		if (actionBars != null) {
-			for (int i= 0; i < GLOBAL_ACTIONS.length; i++) {
-				IAction action= null; 
-				if (part != null) {
-					action= part.getAction(TEXT_ACTIONS[i]);
-					if (action == null && TEXT_ACTIONS[i].equals(MergeSourceViewer.SAVE_ID)) {			
-						if (part == fLeft)
-							action= fLeftSaveAction;
-						else
-							action= fRightSaveAction;
-					}
-				}
-				actionBars.setGlobalActionHandler(GLOBAL_ACTIONS[i], action);
-			}
-			actionBars.updateActionBars();
-		}
-	}
-	
-	ITypedElement getLeg(char type, Object input) {
-		if (input instanceof ICompareInput) {
-			switch (type) {
-			case 'A':
-				return ((ICompareInput)input).getAncestor();
-			case 'L':
-				return ((ICompareInput)input).getLeft();
-			case 'R':
-				return ((ICompareInput)input).getRight();
-			}
-		}
-		return null;
-	}
-
-	IDocument getDocument(char type, Object input) {
-		ITypedElement te= getLeg(type, input);
-		if (te instanceof IDocument)
-			return (IDocument) te;
-		if (te instanceof IDocumentRange)
-			return ((IDocumentRange) te).getDocument();
-		if (te instanceof IStreamContentAccessor)
-			return DocumentManager.get(te);
-		return null;
-	}
-	
-	IDocument getDocument2(char type, Object input) {
-		IDocument doc= getDocument(type, input);
-		if (doc != null)
-			return doc;
-			
-		if (input instanceof IDiffElement) {
-			IDiffContainer parent= ((IDiffElement)input).getParent();
-			return getDocument(type, parent);
-		}
-		return null;
-	}
-	
-	/**
-	 * Returns true if the given inputs map to the same documents
-	 */
-	boolean sameDoc(char type, Object newInput, Object oldInput) {
-		IDocument newDoc= getDocument2(type, newInput);
-		IDocument oldDoc= getDocument2(type, oldInput);
-		return newDoc == oldDoc;
-	}
-	
-	/**
-	 * Overridden to prevent save confirmation if new input is sub document of current input.
-	 * @param newInput the new input of this viewer, or <code>null</code> if there is no new input
-	 * @param oldInput the old input element, or <code>null</code> if there was previously no input
-	 * @return <code>true</code> if saving was successful, or if the user didn't want to save (by pressing 'NO' in the confirmation dialog).
-	 * @since 2.0
-	 */
-	protected boolean doSave(Object newInput, Object oldInput) {
-		
-		if (oldInput != null && newInput != null) {
-			// check whether underlying documents have changed.
-			if (sameDoc('A', newInput, oldInput) &&
-					sameDoc('L', newInput, oldInput) &&
-						sameDoc('R', newInput, oldInput)) {
-				if (DEBUG) System.out.println("----- Same docs !!!!");	//$NON-NLS-1$
-				return false;
-			}
-		}
-		
-		if (DEBUG) System.out.println("***** New docs !!!!");	//$NON-NLS-1$
-		
-		IDocument aDoc= getDocument2('A', oldInput);
-		DocumentManager.remove(aDoc);
-		IDocument lDoc= getDocument2('L', oldInput);
-		DocumentManager.remove(lDoc);
-		IDocument rDoc= getDocument2('R', oldInput);
-		DocumentManager.remove(rDoc);
-		
-		if (DEBUG)
-			DocumentManager.dump();
-		
-		return super.doSave(newInput, oldInput);
-	}
-	
-	private ITypedElement getParent(char type) {
-		Object input= getInput();
-		if (input instanceof IDiffElement) {
-			IDiffContainer parent= ((IDiffElement)input).getParent();
-			return getLeg(type, parent);
-		}
-		return null;
-	}
-		
-	/**
-	 * Initializes the text viewers of the three content areas with the given input objects.
-	 * Subclasses may extend.
-	 */
-	protected void updateContent(Object ancestor, Object left, Object right) {
-		
-		boolean emptyInput= (ancestor == null && left == null && right == null);
-
-		int n= 0;
-		if (left != null)
-			n++;
-		if (right != null)
-			n++;
-		fHiglightRanges= n > 1;
-		
-		// clear stuff
-		fCurrentDiff= null;
-	 	fChangeDiffs= null;
-		fAllDiffs= null;
-		fEndOfDocReached= false;
-		
-		CompareConfiguration cc= getCompareConfiguration();
-		IMergeViewerContentProvider cp= getMergeContentProvider();
-		
-		boolean rightEditable= cc.isRightEditable() && cp.isRightEditable(getInput());
-		boolean leftEditable= cc.isLeftEditable() && cp.isLeftEditable(getInput());
-		
-		fRight.setEditable(rightEditable);
-		fLeft.setEditable(leftEditable);
-																					
-		// set new documents
-		setDocument(fLeft, 'L', left);
-		fLeftLineCount= fLeft.getLineCount();
-		setDocument(fRight, 'R', right);
-		fRightLineCount= fRight.getLineCount();
-		
-		setDocument(fAncestor, 'A', ancestor);
-					
-		doDiff();
-				
-		invalidateLines();
-		updateVScrollBar();
-		refreshBirdsEyeView();
-		
-		if (!emptyInput && !fComposite.isDisposed()) {
-			if (true) {	// see #13844
-				selectFirstDiff();
-			} else {
-				// delay so that StyledText widget gets a chance to resize itself
-				// (otherwise selectFirstDiff would not know its visible area)
-				fComposite.getDisplay().asyncExec(
-					new Runnable() {
-						public void run() {
-							selectFirstDiff();
-						}
-					}
-				);
-			}
-		}
-	}
-	
-	private void updateDiffBackground(Diff diff) {
-		
-		if (! fHiglightRanges)
-			return;
-		
-		if (diff == null || diff.fIsToken)
-			return;
-			
-		if (fShowCurrentOnly && !isCurrentDiff(diff))
-			return;
-						
-		Color c= getColor(null, getFillColor(diff));
-		if (c == null)
-			return;
-			
-		if (isThreeWay())
-			fAncestor.setLineBackground(diff.fAncestorPos, c);
-		fLeft.setLineBackground(diff.fLeftPos, c);
-		fRight.setLineBackground(diff.fRightPos, c);
-	}
-	
-	private void updateAllDiffBackgrounds(Display display) {
-		if (fChangeDiffs != null) {
-			boolean threeWay= isThreeWay();
-			Iterator iter= fChangeDiffs.iterator();
-			while (iter.hasNext()) {
-				Diff diff= (Diff) iter.next();
-				Color c= getColor(display, getFillColor(diff));
-				if (threeWay)
-					fAncestor.setLineBackground(diff.fAncestorPos, c);
-				fLeft.setLineBackground(diff.fLeftPos, c);
-				fRight.setLineBackground(diff.fRightPos, c);
-			}
-		}
-	}
-	
-	boolean isCurrentDiff(Diff diff) {
-		if (diff == null)
-			return false;
-		if (diff == fCurrentDiff)
-			return true;
-		if (fCurrentDiff != null && fCurrentDiff.fParent == diff)
-			return true;
-		return false;
-	}
-	
-	/**
-	 * Called whenver one of the documents changes.
-	 * Sets the dirty state of this viewer and updates the lines.
-	 * Implements IDocumentListener.
-	 */
-	private void documentChanged(DocumentEvent e) {
-		
-		IDocument doc= e.getDocument();
-		
-		if (doc == fLeft.getDocument()) {
-			setLeftDirty(true);
-		} else if (doc == fRight.getDocument()) {
-			setRightDirty(true);
-		}
-
-		updateLines(doc);
-	}
-	
-//	private static ITypedElement getLeg(ICompareInput input, char type) {
-//		switch (type) {
-//		case 'A':
-//			return input.getAncestor();
-//		case 'L':
-//			return input.getLeft();
-//		case 'R':
-//			return input.getRight();
-//		}
-//		return null;			
-//	}
-	
-	/**
-	 * This method is called if a range of text on one side is copied into an empty subdocument
-	 * on the other side. The method returns the position where the subdocument is placed into the base document.
-	 * This default implementation determines the position by using the text range differencer.
-	 * However this position is not always optimal for specific types of text.
-	 * So subclasses (which are awrae of the type of text they are dealing with) 
-	 * may override this method to find a better position where to insert a newly added
-	 * piece of text.
-	 * @param type the side for which the insertion position should be determined: 'A' for ancestor, 'L' for left hand side, 'R' for right hand side.
-	 * @param input the current input object of this viewer
-	 * @since 2.0
-	 */
-	protected int findInsertionPosition(char type, ICompareInput input) {
-			
-		ITypedElement other= null;
-		char otherType= 0;
-		
-		switch (type) {
-		case 'A':
-			other= input.getLeft();
-			otherType= 'L';
-			if (other == null) {
-				other= input.getRight();
-				otherType= 'R';
-			}
-			break;
-		case 'L':
-			other= input.getRight();
-			otherType= 'R';
-			if (other == null) {
-				other= input.getAncestor();
-				otherType= 'A';
-			}
-			break;
-		case 'R':
-			other= input.getLeft();
-			otherType= 'L';
-			if (other == null) {
-				other= input.getAncestor();
-				otherType= 'A';
-			}
-			break;
-		}
-		
-		if (other instanceof IDocumentRange) {
-			IDocumentRange dr= (IDocumentRange) other;
-			Position p= dr.getRange();	
-			Diff diff= findDiff(otherType, p.offset);
-			if (diff != null) {
-				switch (type) {
-				case 'A':
-					if (diff.fAncestorPos != null)
-						return diff.fAncestorPos.offset;
-					break;
-				case 'L':
-					if (diff.fLeftPos != null)
-						return diff.fLeftPos.offset;
-					break;
-				case 'R':
-					if (diff.fRightPos != null)
-						return diff.fRightPos.offset;
-					break;
-				}
-			}
-		}
-		return 0;
-	}
-	
-	/**
-	 * Returns true if a new Document could be installed.
-	 */
-	private boolean setDocument(MergeSourceViewer tp, char type, Object o) {
-		
-		if (tp == null)
-			return false;
-				
-		IDocument newDoc= null;
-		Position range= null;
-		
-		if (o instanceof IDocumentRange) {
-			newDoc= ((IDocumentRange)o).getDocument();
-			range= ((IDocumentRange)o).getRange();
-
-		} else if (o instanceof IDocument) {
-			newDoc= (IDocument) o;
-			
-		} else if (o instanceof IStreamContentAccessor) {
-			
-			newDoc= DocumentManager.get(o);
-			if (newDoc == null) {
-				IStreamContentAccessor sca= (IStreamContentAccessor) o;
-				String s= null;
-			
-				try {
-					s= Utilities.readString(sca.getContents());
-				} catch (CoreException ex) {
-				}
-	
-				newDoc= new Document(s != null ? s : ""); //$NON-NLS-1$
-				DocumentManager.put(o, newDoc);
-				IDocumentPartitioner partitioner= getDocumentPartitioner();
-				if (partitioner != null) {
-					newDoc.setDocumentPartitioner(partitioner);
-					partitioner.connect(newDoc);
-				}
-			}
-		} else if (o == null) {	// deletion on one side
-			
-			ITypedElement parent= getParent(type);	// we try to find an insertion position within the deletion's parent
-			
-			if (parent instanceof IDocumentRange) {
-				newDoc= ((IDocumentRange)parent).getDocument();
-				newDoc.addPositionCategory(IDocumentRange.RANGE_CATEGORY);
-				Object input= getInput();
-				range= getNewRange(type, input);
-				if (range == null) {
-					int pos= 0;
-					if (input instanceof ICompareInput)
-						pos= findInsertionPosition(type, (ICompareInput)input);
-					range= new Position(pos, 0);
-					try {
-						newDoc.addPosition(IDocumentRange.RANGE_CATEGORY, range);
-					} catch (BadPositionCategoryException ex) {
-						if (DEBUG) System.out.println("BadPositionCategoryException: " + ex);	//$NON-NLS-1$
-					} catch (BadLocationException ex) {
-						if (DEBUG) System.out.println("BadLocationException: " + ex);	//$NON-NLS-1$
-					}
-					addNewRange(type, input, range);
-				}
-			} else if (parent instanceof IDocument) {
-				newDoc= ((IDocumentRange)o).getDocument();
-			}
-		}
-
-		boolean enabled= true;
-		if (newDoc == null) {
-			//System.out.println("setDocument: create new Document");
-			newDoc= new Document(""); //$NON-NLS-1$
-			enabled= false;
-		}
-		
-		IDocument oldDoc= tp.getDocument();
-		
-		if (newDoc != oldDoc) {
-			
-			// got a new document
-			
-			unsetDocument(tp);
-			
-			if (newDoc != null) {
-				newDoc.addPositionCategory(IDocumentRange.RANGE_CATEGORY);
-				if (fPositionUpdater == null)
-					fPositionUpdater= new ChildPositionUpdater(IDocumentRange.RANGE_CATEGORY);
-				else
-					newDoc.removePositionUpdater(fPositionUpdater);
-				newDoc.addPositionUpdater(fPositionUpdater);
-			}
-
-			// install new document
-			if (newDoc != null) {
-						
-				tp.setRegion(range);
-				if (fSubDoc) {
-					if (range != null) {
-						IRegion r= normalizeDocumentRegion(newDoc, toRegion(range));
-						tp.setDocument(newDoc, r.getOffset(), r.getLength());
-					} else
-						tp.setDocument(newDoc);
-				} else
-					tp.setDocument(newDoc);
-								
-				newDoc.addDocumentListener(fDocumentListener);
-			}
-			
-		} else {	// same document but different range
-			
-			tp.setRegion(range);
-			if (fSubDoc) {
-				if (range != null) {
-					IRegion r= normalizeDocumentRegion(newDoc, toRegion(range));
-					tp.setVisibleRegion(r.getOffset(), r.getLength());
-				} else
-					tp.resetVisibleRegion();
-			} else
-				tp.resetVisibleRegion();
-		}
-		
-		tp.setEnabled(enabled);
-
-		return enabled;
-	}
-	
-	private Position getNewRange(char type, Object input) {
-		switch (type) {
-		case 'A':
-			return (Position) fNewAncestorRanges.get(input);
-		case 'L':
-			return (Position) fNewLeftRanges.get(input);
-		case 'R':
-			return (Position) fNewRightRanges.get(input);
-		}
-		return null;
-	}
-	
-	private void addNewRange(char type, Object input, Position range) {
-		switch (type) {
-		case 'A':
-			fNewAncestorRanges.put(input, range);
-			break;
-		case 'L':
-			fNewLeftRanges.put(input, range);
-			break;
-		case 'R':
-			fNewRightRanges.put(input, range);
-			break;
-		}
-	}
-
-	private void unsetDocument(MergeSourceViewer tp) {
-		IDocument oldDoc= tp.getDocument();
-		if (oldDoc != null) {
-			// deinstall old positions
-			if (fPositionUpdater != null)
-				oldDoc.removePositionUpdater(fPositionUpdater);
-			try {
-				oldDoc.removePositionCategory(IDocumentRange.RANGE_CATEGORY);
-			} catch (BadPositionCategoryException ex) {
-			}
-			
-			oldDoc.removeDocumentListener(fDocumentListener);
-		}
-	}
-	
-	/**
-	 * Returns the contents of the underlying document as an array of bytes.
-	 * 
-	 * @param left if <code>true</code> the contents of the left side is returned; otherwise the right side
-	 * @return the contents of the left or right document or null
-	 */
-	protected byte[] getContents(boolean left) {
-		MergeSourceViewer v= left ? fLeft : fRight;
-		if (v != null) {
-			IDocument d= v.getDocument();
-			if (d != null) {
-				String contents= d.get();
-				if (contents != null) {
-					byte[] bytes;
-					try {
-						bytes= contents.getBytes(ResourcesPlugin.getEncoding());
-					} catch(UnsupportedEncodingException ex) {
-						// use default encoding
-						bytes= contents.getBytes();
-					}
-					return bytes;
-				}
-			}
-		}	
-		return null;	
-	}
-				
-	private IRegion normalizeDocumentRegion(IDocument doc, IRegion region) {
-		
-		if (region == null || doc == null)
-			return region;
-			
-		int maxLength= doc.getLength();
-		
-		int start= region.getOffset();
-		if (start < 0)
-			start= 0;
-		else if (start > maxLength)
-			start= maxLength;
-			
-		int length= region.getLength();
-		if (length < 0)
-			length= 0;
-		else if (start + length > maxLength)
-			length= maxLength - start;
-			
-		return new Region(start, length);
-	}
-		
-	protected final void handleResizeAncestor(int x, int y, int width, int height) {
-		if (width > 0) {
-			Rectangle trim= fLeft.getTextWidget().computeTrim(0, 0, 0, 0);
-			int scrollbarHeight= trim.height;
-			if (Utilities.okToUse(fAncestorCanvas))
-				fAncestorCanvas.setVisible(true);
-			if (fAncestor.isControlOkToUse())
-				fAncestor.getTextWidget().setVisible(true);
-			
-			if (fAncestorCanvas != null) {
-				fAncestorCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight);
-				x+= fMarginWidth;
-				width-= fMarginWidth;
-			}
-			fAncestor.getTextWidget().setBounds(x, y, width, height);
-		} else {
-			if (Utilities.okToUse(fAncestorCanvas))
-				fAncestorCanvas.setVisible(false);
-			if (fAncestor.isControlOkToUse()) {
-				StyledText t= fAncestor.getTextWidget();
-				t.setVisible(false);
-				t.setBounds(0, 0, 0, 0);
-				if (fFocusPart == fAncestor) {
-					fFocusPart= fLeft;
-					fFocusPart.getTextWidget().setFocus();
-				}
-			}
-		}
-	}
-
-	/**
-	 * Lays out everything.
-	 */
-  	protected final void handleResizeLeftRight(int x, int y, int width1, int centerWidth, int width2,  int height) {
-  				
-  		if (fBirdsEyeCanvas != null)
-  			width2-= BIRDS_EYE_VIEW_WIDTH;
-  			
-		Rectangle trim= fLeft.getTextWidget().computeTrim(0, 0, 0, 0);
-		int scrollbarHeight= trim.height;
-		if (fIsCarbon)
-			scrollbarHeight-= 3;	// get rid of the focus ring
-
-		Composite composite= (Composite) getControl();
-
-		int leftTextWidth= width1;
-		if (fLeftCanvas != null) {
-			fLeftCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight);
-			x+= fMarginWidth;
-			leftTextWidth-= fMarginWidth;
-		}
-		
-		fLeft.getTextWidget().setBounds(x, y, leftTextWidth, height);
-		x+= leftTextWidth;
-		
-		if (fCenter == null || fCenter.isDisposed())
-			fCenter= createCenter(composite);
-		fCenter.setBounds(x, y, centerWidth, height-scrollbarHeight);
-		x+= centerWidth;
-		
-		if (!fSynchronizedScrolling) {	// canvas is to the left of text
-			if (fRightCanvas != null) {
-				fRightCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight);
-				fRightCanvas.redraw();
-				x+= fMarginWidth;
-			}
-			// we draw the canvas to the left of the text widget
-		}
-		
-		int scrollbarWidth= 0;
-		if (fSynchronizedScrolling && fScrollCanvas != null) {
-			//scrollbarWidth= fScrollCanvas.computeTrim(0, 0, 0, 0).width;
-			scrollbarWidth= fLeft.getTextWidget().computeTrim(0, 0, 0, 0).width;
-			if (fIsCarbon)
-				scrollbarWidth-= 6;	// get rid of the focus ring
-		}
-		int rightTextWidth= width2-scrollbarWidth;
-		if (fRightCanvas != null)
-			rightTextWidth-= fMarginWidth;
-		fRight.getTextWidget().setBounds(x, y, rightTextWidth, height);
-		x+= rightTextWidth;
-			
-		if (fSynchronizedScrolling) {
-			if (fRightCanvas != null) {	// canvas is to the right of the text
-				fRightCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight);
-				x+= fMarginWidth;
-			}
-			if (fScrollCanvas != null)
-				fScrollCanvas.setBounds(x, y, scrollbarWidth, height-scrollbarHeight);
-		}
-		
-  		if (fBirdsEyeCanvas != null) {
-  			int verticalScrollbarButtonHeight= scrollbarWidth;
-			int horizontalScrollbarButtonHeight= scrollbarHeight;
-			if (fIsCarbon) {
-				verticalScrollbarButtonHeight+= 2;
-				horizontalScrollbarButtonHeight= 18;
-			}
-  			if (fSummaryHeader != null)
-				fSummaryHeader.setBounds(x+scrollbarWidth, y, BIRDS_EYE_VIEW_WIDTH, verticalScrollbarButtonHeight);
-  			y+= verticalScrollbarButtonHeight;
-  			fBirdsEyeCanvas.setBounds(x+scrollbarWidth, y, BIRDS_EYE_VIEW_WIDTH, height-(2*verticalScrollbarButtonHeight+horizontalScrollbarButtonHeight));
-   		}
-		
-		// doesn't work since TextEditors don't have their correct size yet.
-		updateVScrollBar(); 
-		refreshBirdsEyeView();
-	}
-							
-	/**
-	 * Track selection changes to update the current Diff.
-	 */
-	private void handleSelectionChanged(MergeSourceViewer tw) {
-		Point p= tw.getSelectedRange();
-		Diff d= findDiff(tw, p.x, p.x+p.y);
-		updateStatus(d);
-		setCurrentDiff(d, false);	// don't select or reveal
-	}
-
-	private static IRegion toRegion(Position position) {
-		if (position != null)
-			return new Region(position.getOffset(), position.getLength());
-		return null;
-	}
-	
-	//---- the differencing
-
-	private static int maxWork(IRangeComparator a, IRangeComparator l, IRangeComparator r) {
-		int ln= l.getRangeCount();
-		int rn= r.getRangeCount();
-		if (a != null) {
-			int an= a.getRangeCount();
-			return (2 * Math.max(an, ln)) + (2 * Math.max(an, rn));
-		}
-		return 2 * Math.max(ln, rn);
-	}
-	
-	/**
-	 * Perform a two level 2- or 3-way diff.
-	 * The first level is based on line comparison, the second level on token comparison.
-	 */
-	private void doDiff() {
-						
-		fAllDiffs= new ArrayList();
-		fChangeDiffs= new ArrayList();
-		fCurrentDiff= null;
-		
-		IDocument aDoc= null;
-		IDocument lDoc= fLeft.getDocument();
-		IDocument rDoc= fRight.getDocument();
-		if (lDoc == null || rDoc == null)
-			return;
-			
-		Position aRegion= null;
-		Position lRegion= fLeft.getRegion();
-		Position rRegion= fRight.getRegion();
-				
-		boolean threeWay= isThreeWay();
-		
-		if (threeWay && !fIgnoreAncestor) {
-			aDoc= fAncestor.getDocument();
-			aRegion= fAncestor.getRegion();
-		}
-		
-		fAncestor.resetLineBackground();
-		fLeft.resetLineBackground();
-		fRight.resetLineBackground();
-		
-		boolean ignoreWhiteSpace= Utilities.getBoolean(getCompareConfiguration(), CompareConfiguration.IGNORE_WHITESPACE, false);		
-		
-		DocLineComparator sright= new DocLineComparator(rDoc, toRegion(rRegion), ignoreWhiteSpace);
-		DocLineComparator sleft= new DocLineComparator(lDoc, toRegion(lRegion), ignoreWhiteSpace);
-		DocLineComparator sancestor= null;
-		if (aDoc != null)
-			sancestor= new DocLineComparator(aDoc, toRegion(aRegion), ignoreWhiteSpace);
-			
-		if (!fSubDoc && rRegion != null && lRegion != null) {
-			// we have to add a diff for the ignored lines
-			
-			int astart= 0;
-			int as= 0;
-			if (aRegion != null) {
-				astart= aRegion.getOffset();
-				as= Math.max(0, astart-1);
-			}
-			int ys= Math.max(0, lRegion.getOffset()-1);
-			int ms= Math.max(0, rRegion.getOffset()-1);
-			
-			if (as > 0 || ys > 0 || ms > 0) {
-				Diff diff= new Diff(null, RangeDifference.NOCHANGE,
-					aDoc, aRegion, 0, astart,
-					lDoc, lRegion, 0, lRegion.getOffset(),
-					rDoc, rRegion, 0, rRegion.getOffset());
-				fAllDiffs.add(diff);
-			}
-		}
-		
-		final ResourceBundle bundle= getResourceBundle();
-			
-		final Object[] result= new Object[1];
-		final DocLineComparator sa= sancestor, sl= sleft, sr= sright;
-		IRunnableWithProgress runnable= new IRunnableWithProgress() {
-			public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException {
-				String progressTitle= Utilities.getString(bundle, "compareProgressTask.title"); //$NON-NLS-1$
-				monitor.beginTask(progressTitle, maxWork(sa, sl, sr));
-				try {
-					result[0]= RangeDifferencer.findRanges(monitor, sa, sl, sr);
-				} catch (OutOfMemoryError ex) {
-					System.gc();
-					throw new InvocationTargetException(ex);
-				}
-				if (monitor.isCanceled())	{ // cancelled
-					throw new InterruptedException();
-				}
-				monitor.done();
-			}
-		};
-		
-		RangeDifference[] e= null;
-		try {
-			TimeoutContext.run(true, TIMEOUT, getControl().getShell(), runnable);
-			e= (RangeDifference[]) result[0];
-		} catch (InvocationTargetException ex) {
-			String title= Utilities.getString(bundle, "tooComplexError.title"); //$NON-NLS-1$
-			String format= Utilities.getString(bundle, "tooComplexError.format"); //$NON-NLS-1$
-			String msg= MessageFormat.format(format, new Object[] { Integer.toString(TIMEOUT/1000) } );
-			MessageDialog.openError(fComposite.getShell(), title, msg);
-			e= null;
-		} catch (InterruptedException ex) {
-			// 
-		}
-					
-		if (e == null) {
-			// we create a NOCHANGE range for the whole document
-			Diff diff= new Diff(null, RangeDifference.NOCHANGE,
-				aDoc, aRegion, 0, aDoc != null ? aDoc.getLength() : 0,
-				lDoc, lRegion, 0, lDoc.getLength(),
-				rDoc, rRegion, 0, rDoc.getLength());	
-				
-			fAllDiffs.add(diff);
-		} else {
-			for (int i= 0; i < e.length; i++) {
-				String a= null, s= null, d= null;
-				RangeDifference es= e[i];
-				
-				int kind= es.kind();
-				
-				int ancestorStart= 0;
-				int ancestorEnd= 0;
-				if (sancestor != null) {
-					ancestorStart= sancestor.getTokenStart(es.ancestorStart());
-					ancestorEnd= getTokenEnd2(sancestor, es.ancestorStart(), es.ancestorLength());
-				}
-				
-				int leftStart= sleft.getTokenStart(es.leftStart());
-				int leftEnd= getTokenEnd2(sleft, es.leftStart(), es.leftLength());
-				
-				int rightStart= sright.getTokenStart(es.rightStart());
-				int rightEnd= getTokenEnd2(sright, es.rightStart(), es.rightLength());
-				
-				Diff diff= new Diff(null, kind,
-					aDoc, aRegion, ancestorStart, ancestorEnd,
-					lDoc, lRegion, leftStart, leftEnd,
-					rDoc, rRegion, rightStart, rightEnd);	
-				
-				fAllDiffs.add(diff);	// remember all range diffs for scrolling
-		
-				if (ignoreWhiteSpace) {
-					if (sancestor != null)
-						a= extract2(aDoc, sancestor, es.ancestorStart(), es.ancestorLength());
-					s= extract2(lDoc, sleft, es.leftStart(), es.leftLength());
-					d= extract2(rDoc, sright, es.rightStart(), es.rightLength());
-				
-					if ((a == null || a.trim().length() == 0) && s.trim().length() == 0 && d.trim().length() == 0) {
-						diff.fIsWhitespace= true;
-						continue;
-					}
-				}
-		
-				if (useChange(kind)) {
-					fChangeDiffs.add(diff);	// here we remember only the real diffs
-					updateDiffBackground(diff);
-		
-					if (s == null)
-						s= extract2(lDoc, sleft, es.leftStart(), es.leftLength());
-					if (d == null)
-						d= extract2(rDoc, sright, es.rightStart(), es.rightLength());
-					
-					if (s.length() > 0 && d.length() > 0) {
-						if (a == null && sancestor != null)
-							a= extract2(aDoc, sancestor, es.ancestorStart(), es.ancestorLength());
-						if (USE_MERGING_TOKEN_DIFF)
-							mergingTokenDiff(diff, aDoc, a, rDoc, d, lDoc, s);
-						else
-							simpleTokenDiff(diff, aDoc, a, rDoc, d, lDoc, s);
-					}
-				}
-			}
-		}
-		
-		if (!fSubDoc && rRegion != null && lRegion != null) {
-			// we have to add a diff for the ignored lines
-			
-			int aEnd= 0;
-			int aLen= 0;
-			if (aRegion != null && aDoc != null) {
-				aEnd= aRegion.getOffset()+aRegion.getLength();
-				aLen= aDoc.getLength();
-			}
-			Diff diff= new Diff(null, RangeDifference.NOCHANGE,
-				aDoc, aRegion, aEnd, aLen,
-				lDoc, lRegion, lRegion.getOffset()+lRegion.getLength(), lDoc.getLength(),
-				rDoc, rRegion, rRegion.getOffset()+rRegion.getLength(), rDoc.getLength());
-			fAllDiffs.add(diff);
-		}		
-	}
-	
-	private Diff findDiff(char type, int pos) {
-								
-		IDocument aDoc= null;
-		IDocument lDoc= fLeft.getDocument();
-		IDocument rDoc= fRight.getDocument();
-		if (lDoc == null || rDoc == null)
-			return null;
-			
-		Position aRegion= null;
-		Position lRegion= null;
-		Position rRegion= null;
-				
-		boolean threeWay= isThreeWay();
-		
-		if (threeWay && !fIgnoreAncestor)
-			aDoc= fAncestor.getDocument();
-
-		boolean ignoreWhiteSpace= Utilities.getBoolean(getCompareConfiguration(), CompareConfiguration.IGNORE_WHITESPACE, false);		
-		
-		DocLineComparator sright= new DocLineComparator(rDoc, toRegion(rRegion), ignoreWhiteSpace);
-		DocLineComparator sleft= new DocLineComparator(lDoc, toRegion(lRegion), ignoreWhiteSpace);
-		DocLineComparator sancestor= null;
-		if (aDoc != null)
-			sancestor= new DocLineComparator(aDoc, toRegion(aRegion), ignoreWhiteSpace);
-			
-		final ResourceBundle bundle= getResourceBundle();
-			
-		final Object[] result= new Object[1];
-		final DocLineComparator sa= sancestor, sl= sleft, sr= sright;
-		IRunnableWithProgress runnable= new IRunnableWithProgress() {
-			public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException {
-				String progressTitle= Utilities.getString(bundle, "compareProgressTask.title"); //$NON-NLS-1$
-				monitor.beginTask(progressTitle, maxWork(sa, sl, sr));
-				try {
-					result[0]= RangeDifferencer.findRanges(monitor, sa, sl, sr);
-				} catch (OutOfMemoryError ex) {
-					System.gc();
-					throw new InvocationTargetException(ex);
-				}
-				if (monitor.isCanceled())	{ // cancelled
-					throw new InterruptedException();
-				}
-				monitor.done();
-			}
-		};
-		
-		RangeDifference[] e= null;
-		try {
-			TimeoutContext.run(true, TIMEOUT, getControl().getShell(), runnable);
-			e= (RangeDifference[]) result[0];
-		} catch (InvocationTargetException ex) {
-			String title= Utilities.getString(bundle, "tooComplexError.title"); //$NON-NLS-1$
-			String format= Utilities.getString(bundle, "tooComplexError.format"); //$NON-NLS-1$
-			String msg= MessageFormat.format(format, new Object[] { Integer.toString(TIMEOUT/1000) } );
-			MessageDialog.openError(fComposite.getShell(), title, msg);
-			e= null;
-		} catch (InterruptedException ex) {
-			// 
-		}
-					
-		if (e != null) {
-			for (int i= 0; i < e.length; i++) {
-				RangeDifference es= e[i];
-				
-				int kind= es.kind();
-				
-				int ancestorStart= 0;
-				int ancestorEnd= 0;
-				if (sancestor != null) {
-					ancestorStart= sancestor.getTokenStart(es.ancestorStart());
-					ancestorEnd= getTokenEnd2(sancestor, es.ancestorStart(), es.ancestorLength());
-				}
-				
-				int leftStart= sleft.getTokenStart(es.leftStart());
-				int leftEnd= getTokenEnd2(sleft, es.leftStart(), es.leftLength());
-				
-				int rightStart= sright.getTokenStart(es.rightStart());
-				int rightEnd= getTokenEnd2(sright, es.rightStart(), es.rightLength());
-				
-				Diff diff= new Diff(null, kind,
-					aDoc, aRegion, ancestorStart, ancestorEnd,
-					lDoc, lRegion, leftStart, leftEnd,
-					rDoc, rRegion, rightStart, rightEnd);	
-
-				if (diff.isInRange(type, pos))
-					return diff;
-			}
-		}
-		
-		return null;
-	}
-	
-	/**
-	 * Returns true if kind of change should be shown.
-	 */
-	private boolean useChange(int kind) {
-		if (kind == RangeDifference.NOCHANGE)
-			return false;
-		if (kind == RangeDifference.ANCESTOR)
-			return fShowPseudoConflicts;
-		return true;
-	}
-	
-	private int getTokenEnd(ITokenComparator tc, int start, int count) {
-		if (count <= 0)
-			return tc.getTokenStart(start);
-		int index= start + count - 1;
-		return tc.getTokenStart(index) + tc.getTokenLength(index);
-	}
-	
-	private static int getTokenEnd2(ITokenComparator tc, int start, int length) {
-		return tc.getTokenStart(start + length);
-	}
-
-	/**
-	 * Returns the content of lines in the specified range as a String.
-	 * This includes the line separators.
-	 *
-	 * @param doc the document from which to extract the characters
-	 * @param start index of first line
-	 * @param length number of lines
-	 * @return the contents of the specified line range as a String
-	 */
-	private String extract2(IDocument doc, ITokenComparator tc, int start, int length) {
-		int count= tc.getRangeCount();
-		if (length > 0 && count > 0) {
-			
-//			
-//			int startPos= tc.getTokenStart(start);
-//			int endPos= startPos;
-//			
-//			if (length > 1)
-//				endPos= tc.getTokenStart(start + (length-1));
-//			endPos+= tc.getTokenLength(start + (length-1));
-//				
-
-			int startPos= tc.getTokenStart(start);
-			int endPos;
-			
-			if (length == 1) {
-				endPos= startPos + tc.getTokenLength(start);
-			} else {
-				endPos= tc.getTokenStart(start + length);
-			}
-
-			try {
-				return doc.get(startPos, endPos - startPos);
-			} catch (BadLocationException e) {
-			}
-
-		}
-		return ""; //$NON-NLS-1$
-	}
-
-	/**
-	 * Performs a token based 3-way diff on the character range specified by the given baseDiff.
-	 */
-	private void simpleTokenDiff(final Diff baseDiff,
-				IDocument ancestorDoc, String a,
-				IDocument rightDoc, String d,
-				IDocument leftDoc, String s) {
-
-		int ancestorStart= 0;
-		ITokenComparator sa= null;
-		if (ancestorDoc != null) {
-			ancestorStart= baseDiff.fAncestorPos.getOffset();
-			sa= createTokenComparator(a);
-		}
-		
-		int rightStart= baseDiff.fRightPos.getOffset();	
-		ITokenComparator sm= createTokenComparator(d);
-		
-		int leftStart= baseDiff.fLeftPos.getOffset();
-		ITokenComparator sy= createTokenComparator(s);
-		
-		RangeDifference[] e= RangeDifferencer.findRanges(sa, sy, sm);
-		for (int i= 0; i < e.length; i++) {
-			RangeDifference es= e[i];
-			int kind= es.kind();
-			if (kind != RangeDifference.NOCHANGE) {
-				
-				int ancestorStart2= ancestorStart;
-				int ancestorEnd2= ancestorStart;
-				if (ancestorDoc != null) {
-					ancestorStart2 += sa.getTokenStart(es.ancestorStart());
-					ancestorEnd2 += getTokenEnd(sa, es.ancestorStart(), es.ancestorLength());
-				}
-				
-				int leftStart2= leftStart + sy.getTokenStart(es.leftStart());
-				int leftEnd2= leftStart + getTokenEnd(sy, es.leftStart(), es.leftLength());
-				
-				int rightStart2= rightStart + sm.getTokenStart(es.rightStart());
-				int rightEnd2= rightStart + getTokenEnd(sm, es.rightStart(), es.rightLength());
-				
-				Diff diff= new Diff(baseDiff, kind,
-						ancestorDoc, null, ancestorStart2, ancestorEnd2,
-						leftDoc, null, leftStart2, leftEnd2,
-						rightDoc, null, rightStart2, rightEnd2);
-				
-				// ensure that token diff is smaller than basediff
-				int leftS= baseDiff.fLeftPos.offset;
-				int leftE= baseDiff.fLeftPos.offset+baseDiff.fLeftPos.length;
-				int rightS= baseDiff.fRightPos.offset;
-				int rightE= baseDiff.fRightPos.offset+baseDiff.fRightPos.length;
-				if (leftS != leftStart2 || leftE != leftEnd2 ||
-							rightS != rightStart2 || rightE != rightEnd2) {
-					diff.fIsToken= true;
-					// add to base Diff
-					baseDiff.add(diff);
-				}
-			}
-		}
-	}
-	
-	/**
-	 * Performs a "smart" token based 3-way diff on the character range specified by the given baseDiff.
-	 * It is "smart" because it tries to minimize the number of token diffs by merging them.
-	 */
-	private void mergingTokenDiff(Diff baseDiff, 
-				IDocument ancestorDoc, String a,
-				IDocument rightDoc, String d,
-				IDocument leftDoc, String s) {
-		ITokenComparator sa= null;
-		int ancestorStart= 0;
-		if (ancestorDoc != null) {
-			sa= createTokenComparator(a);
-			ancestorStart= baseDiff.fAncestorPos.getOffset();
-		}
-		
-		int rightStart= baseDiff.fRightPos.getOffset();	
-		ITokenComparator sm= createTokenComparator(d);
-		
-		int leftStart= baseDiff.fLeftPos.getOffset();
-		ITokenComparator sy= createTokenComparator(s);
-		
-		RangeDifference[] r= RangeDifferencer.findRanges(sa, sy, sm);
-		for (int i= 0; i < r.length; i++) {
-			RangeDifference  es= r[i];
-			// determine range of diffs in one line
-			int start= i;
-			int leftLine= -1;
-			int rightLine= -1;
-			try {
-				leftLine= leftDoc.getLineOfOffset(leftStart+sy.getTokenStart(es.leftStart()));
-				rightLine= rightDoc.getLineOfOffset(rightStart+sm.getTokenStart(es.rightStart()));
-			} catch (BadLocationException e) {
-			}
-			i++;
-			for (; i < r.length; i++) {
-				es= r[i];
-				try {
-					if (leftLine != leftDoc.getLineOfOffset(leftStart+sy.getTokenStart(es.leftStart())))
-						break;
-					if (rightLine != rightDoc.getLineOfOffset(rightStart+sm.getTokenStart(es.rightStart())))
-						break;
-				} catch (BadLocationException e) {
-				}
-			}
-			int end= i;
-			
-			// find first diff from left
-			RangeDifference first= null;
-			for (int ii= start; ii < end; ii++) {
-				es= r[ii];
-				if (useChange(es.kind())) {
-					first= es;
-					break;
-				}
-			}
-			
-			// find first diff from mine
-			RangeDifference last= null;
-			for (int ii= end-1; ii >= start; ii--) {
-				es= r[ii];
-				if (useChange(es.kind())) {
-					last= es;
-					break;
-				}
-			}
-			
-			if (first != null && last != null) {
-				
-				int ancestorStart2= 0;
-				int ancestorEnd2= 0;
-				if (ancestorDoc != null) {
-					ancestorStart2= ancestorStart+sa.getTokenStart(first.ancestorStart());
-					ancestorEnd2= ancestorStart+getTokenEnd(sa, last.ancestorStart(), last.ancestorLength());
-				}
-				
-				int leftStart2= leftStart+sy.getTokenStart(first.leftStart());
-				int leftEnd2= leftStart+getTokenEnd(sy, last.leftStart(), last.leftLength());
-				
-				int rightStart2= rightStart+sm.getTokenStart(first.rightStart());
-				int rightEnd2= rightStart+getTokenEnd(sm, last.rightStart(), last.rightLength());
-				Diff diff= new Diff(baseDiff, first.kind(),
-							ancestorDoc, null, ancestorStart2, ancestorEnd2+1,
-							leftDoc, null, leftStart2, leftEnd2+1,
-							rightDoc, null, rightStart2, rightEnd2+1);	
-				diff.fIsToken= true;
-				baseDiff.add(diff);
-			}
-		}
-	}
-	
-	//---- update UI stuff
-	
-	private void updateControls() {
-		
-		boolean leftToRight= false;
-		boolean rightToLeft= false;
-		
-		updateStatus(fCurrentDiff);
-		updateResolveStatus();
-
-		if (fCurrentDiff != null) {
-			IMergeViewerContentProvider cp= getMergeContentProvider();
-			if (cp != null) {
-				rightToLeft= cp.isLeftEditable(getInput());
-				leftToRight= cp.isRightEditable(getInput());
-			}			
-		}
-		
-		if (fDirectionLabel != null) {
-			if (fHiglightRanges && fCurrentDiff != null && isThreeWay() && !fIgnoreAncestor) {
-				fDirectionLabel.setImage(fCurrentDiff.getImage());
-			} else {
-				fDirectionLabel.setImage(null);
-			}
-		}
-		
-		if (fCopyDiffLeftToRightItem != null)
-			((Action)fCopyDiffLeftToRightItem.getAction()).setEnabled(leftToRight);
-		if (fCopyDiffRightToLeftItem != null)
-			((Action)fCopyDiffRightToLeftItem.getAction()).setEnabled(rightToLeft);
-			
-		boolean enableNavigation= false;
-		if (fCurrentDiff == null && fChangeDiffs != null && fChangeDiffs.size() > 0)
-			enableNavigation= true;
-		else if (fChangeDiffs != null && fChangeDiffs.size() > 1)
-			enableNavigation= true;
-		else if (fCurrentDiff != null && fCurrentDiff.fDiffs != null)
-			enableNavigation= true;
-		else if (fCurrentDiff != null && fCurrentDiff.fIsToken)
-			enableNavigation= true;
-		
-		if (fNextItem != null) {
-			IAction a= fNextItem.getAction();
-			a.setEnabled(enableNavigation);
-		}
-		if (fPreviousItem != null) {
-			IAction a= fPreviousItem.getAction();
-			a.setEnabled(enableNavigation);
-		}	
-	}
-	
-	private void updateResolveStatus() {
-			
-		RGB rgb= null;
-		
-		if (showResolveUI()) {
-			// we only show red or green if there is at least one incoming or conflicting change
-			int incomingOrConflicting= 0;
-			int unresolvedIncoming= 0;
-			int unresolvedConflicting= 0;
-
-			if (fChangeDiffs != null) {
-				Iterator e= fChangeDiffs.iterator();
-				while (e.hasNext()) {
-					Diff d= (Diff) e.next();
-					if (d.isIncomingOrConflicting() /* && useChange(d.fDirection) && !d.fIsWhitespace */) {
-						incomingOrConflicting++;
-						if (!d.fResolved) {
-							if (d.fDirection == RangeDifference.CONFLICT) {
-								unresolvedConflicting++;
-								break; // we can stop here because a conflict has the maximum priority
-							} else {
-								unresolvedIncoming++;
-							}
-						}
-					}
-				}
-			}
-		
-			if (incomingOrConflicting > 0) {
-				if (unresolvedConflicting > 0)
-					rgb= SELECTED_CONFLICT;
-				else if (unresolvedIncoming > 0)
-					rgb= SELECTED_INCOMING;
-				else
-					rgb= RESOLVED;
-			}
-		}
-		
-		if (fHeaderPainter.setColor(rgb))
-			fSummaryHeader.redraw();
-	}
-
-	private void updateStatus(Diff diff) {
-		
-		if (! fShowMoreInfo)
-			return;
-		
-		IActionBars bars= Utilities.findActionBars(fComposite);
-		if (bars == null)
-			return;
-		IStatusLineManager slm= bars.getStatusLineManager();
-		if (slm == null)
-			return;
-					
-		String diffDescription;
-		
-		if (diff == null) {
-			diffDescription= CompareMessages.getString("TextMergeViewer.diffDescription.noDiff.format");	//$NON-NLS-1$
-		} else {
-			
-			if (diff.fIsToken)		// we don't show special info for token diffs
-				diff= diff.fParent;
-		
-			String format= CompareMessages.getString("TextMergeViewer.diffDescription.diff.format");	//$NON-NLS-1$
-			diffDescription= MessageFormat.format(format, 
-				new String[] {
-					getDiffType(diff),						// 0: diff type
-					getDiffNumber(diff),					// 1: diff number
-					getDiffRange(fLeft, diff.fLeftPos),		// 2: left start line
-					getDiffRange(fRight, diff.fRightPos)	// 3: left end line
-				}
-			);
-		}
-		
-		String format= CompareMessages.getString("TextMergeViewer.statusLine.format");	//$NON-NLS-1$
-		String s= MessageFormat.format(format, 
-			new String[] {
-				getCursorPosition(fLeft),	// 0: left column
-				getCursorPosition(fRight),	// 1: right column
-				diffDescription				// 2: diff description
-			}
-		);
-	
-		slm.setMessage(s);
-	}
-
-	private void clearStatus() {
-		
-		IActionBars bars= Utilities.findActionBars(fComposite);
-		if (bars == null)
-			return;
-		IStatusLineManager slm= bars.getStatusLineManager();
-		if (slm == null)
-			return;
-						
-		slm.setMessage(null);
-	}
-	
-	private String getDiffType(Diff diff) {
-		String s= ""; 	//$NON-NLS-1$
-		switch(diff.fDirection) {
-		case RangeDifference.LEFT:
-			s= CompareMessages.getString("TextMergeViewer.direction.outgoing");	//$NON-NLS-1$
-			break;
-		case RangeDifference.RIGHT:
-			s= CompareMessages.getString("TextMergeViewer.direction.incoming");	//$NON-NLS-1$
-			break;
-		case RangeDifference.CONFLICT:
-			s= CompareMessages.getString("TextMergeViewer.direction.conflicting");	//$NON-NLS-1$
-			break;
-		}
-		String format= CompareMessages.getString("TextMergeViewer.diffType.format");	//$NON-NLS-1$
-		return MessageFormat.format(format, new String[] { s, diff.changeType() } );
-	}
-	
-	private String getDiffNumber(Diff diff) {
-		// find the diff's number
-		int diffNumber= 0;
-		if (fChangeDiffs != null) {
-			Iterator e= fChangeDiffs.iterator();
-			while (e.hasNext()) {
-				Diff d= (Diff) e.next();
-				diffNumber++;
-				if (d == diff)
-					break;
-			}
-		}
-		return Integer.toString(diffNumber);
-	}
-	
-	private String getDiffRange(MergeSourceViewer v, Position pos) {
-		Point p= v.getLineRange(pos, new Point(0, 0));
-		int startLine= p.x+1;
-		int endLine= p.x+p.y;
-		
-		String format;
-		if (endLine < startLine)
-			format= CompareMessages.getString("TextMergeViewer.beforeLine.format");	//$NON-NLS-1$
-		else
-			format= CompareMessages.getString("TextMergeViewer.range.format");	//$NON-NLS-1$
-		return MessageFormat.format(format,
-					new String[] { Integer.toString(startLine),
-									Integer.toString(endLine) } );
-	}
-	
-	/**
-	 * Returns a description of the cursor position.
-	 * 
-	 * @return a description of the cursor position
-	 */
-	private String getCursorPosition(MergeSourceViewer v) {
-		if (v != null) {
-			StyledText styledText= v.getTextWidget();
-			
-			IDocument document= v.getDocument();
-			if (document != null) {
-				int offset= v.getVisibleRegion().getOffset();
-				int caret= offset + styledText.getCaretOffset();
-				
-				try {
-					
-					int line=document.getLineOfOffset(caret);
-					
-					int lineOffset= document.getLineOffset(line);
-					int occurrences= 0;
-					for (int i= lineOffset; i < caret; i++)
-						if ('\t' == document.getChar(i))
-							++ occurrences;
-							
-					int tabWidth= styledText.getTabs();
-					int column= caret - lineOffset + (tabWidth -1) * occurrences;
-					
-					String format= CompareMessages.getString("TextMergeViewer.cursorPosition.format");	//$NON-NLS-1$
-					return MessageFormat.format(format,
-						new String[] { Integer.toString(line + 1), Integer.toString(column + 1) } );
-					
-				} catch (BadLocationException x) {
-				}
-			}
-		}
-		return "";	//$NON-NLS-1$
-	}
-
-	protected void updateHeader() {
-		
-		super.updateHeader();
-				
-		updateControls();
-	}
-
-	/**
-	 * Creates the two items for copying a difference range from one side to the other 
-	 * and adds them to the given toolbar manager.
-	 */
-	protected void createToolItems(ToolBarManager tbm) {
-
-		IWorkbenchPartSite ps= Utilities.findSite(fComposite);
-		fKeyBindingService= ps != null ? ps.getKeyBindingService() : null;
-		
-		final String ignoreAncestorActionKey= "action.IgnoreAncestor.";	//$NON-NLS-1$
-		Action ignoreAncestorAction= new Action() {
-			public void run() {
-				setIgnoreAncestor(! fIgnoreAncestor);
-				Utilities.initToggleAction(this, getResourceBundle(), ignoreAncestorActionKey, fIgnoreAncestor);
-			}
-		};
-		ignoreAncestorAction.setChecked(fIgnoreAncestor);
-		Utilities.initAction(ignoreAncestorAction, getResourceBundle(), ignoreAncestorActionKey);
-		Utilities.initToggleAction(ignoreAncestorAction, getResourceBundle(), ignoreAncestorActionKey, fIgnoreAncestor);
-		
-		fIgnoreAncestorItem= new ActionContributionItem(ignoreAncestorAction);
-		fIgnoreAncestorItem.setVisible(false);
-		tbm.appendToGroup("modes", fIgnoreAncestorItem); //$NON-NLS-1$
-
-		tbm.add(new Separator());
-					
-		Action a= new Action() {
-			public void run() {
-				navigate(true, true, true);
-			}
-		};
-		Utilities.initAction(a, getResourceBundle(), "action.NextDiff."); //$NON-NLS-1$
-		fNextItem= new ActionContributionItem(a);
-		tbm.appendToGroup("navigation", fNextItem); //$NON-NLS-1$
-		Utilities.registerAction(fKeyBindingService, a, "org.eclipse.compare.selectNextChange");	//$NON-NLS-1$
-		
-		a= new Action() {
-			public void run() {
-				navigate(false, true, true);
-			}
-		};
-		Utilities.initAction(a, getResourceBundle(), "action.PrevDiff."); //$NON-NLS-1$
-		fPreviousItem= new ActionContributionItem(a);
-		tbm.appendToGroup("navigation", fPreviousItem); //$NON-NLS-1$
-		Utilities.registerAction(fKeyBindingService, a, "org.eclipse.compare.selectPreviousChange");	//$NON-NLS-1$
-
-		
-		CompareConfiguration cc= getCompareConfiguration();
-		
-		if (cc.isRightEditable()) {
-			a= new Action() {
-				public void run() {
-					copyDiffLeftToRight();
-				}
-			};
-			Utilities.initAction(a, getResourceBundle(), "action.CopyDiffLeftToRight."); //$NON-NLS-1$
-			fCopyDiffLeftToRightItem= new ActionContributionItem(a);
-			fCopyDiffLeftToRightItem.setVisible(true);
-			tbm.appendToGroup("merge", fCopyDiffLeftToRightItem); //$NON-NLS-1$
-			Utilities.registerAction(fKeyBindingService, a, "org.eclipse.compare.copyLeftToRight");	//$NON-NLS-1$
-		}
-		
-		if (cc.isLeftEditable()) {
-			a= new Action() {
-				public void run() {
-					copyDiffRightToLeft();
-				}
-			};
-			Utilities.initAction(a, getResourceBundle(), "action.CopyDiffRightToLeft."); //$NON-NLS-1$
-			fCopyDiffRightToLeftItem= new ActionContributionItem(a);
-			fCopyDiffRightToLeftItem.setVisible(true);
-			tbm.appendToGroup("merge", fCopyDiffRightToLeftItem); //$NON-NLS-1$
-			Utilities.registerAction(fKeyBindingService, a, "org.eclipse.compare.copyRightToLeft");	//$NON-NLS-1$
-		}
-	}
-	
-	/* package */ void propertyChange(PropertyChangeEvent event) {
-		
-		String key= event.getProperty();
-		
-		if (key.equals(CompareConfiguration.IGNORE_WHITESPACE)
-				|| key.equals(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS)) {
-					
-			fShowPseudoConflicts= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS);
-			
-			// clear stuff
-			fCurrentDiff= null;
-		 	fChangeDiffs= null;
-			fAllDiffs= null;
-					
-			doDiff();
-					
-			updateControls();
-			invalidateLines();
-			updateVScrollBar();
-			refreshBirdsEyeView();
-			
-			selectFirstDiff();
-			
-//		} else if (key.equals(ComparePreferencePage.USE_SPLINES)) {
-//			fUseSplines= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SPLINES);
-//			invalidateLines();
-
-		} else if (key.equals(ComparePreferencePage.USE_SINGLE_LINE)) {
-			fUseSingleLine= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SINGLE_LINE);
-			fUseResolveUI= fUseSingleLine;
-			fBasicCenterCurve= null;
-			updateResolveStatus();
-			invalidateLines();
-	
-//		} else if (key.equals(ComparePreferencePage.USE_RESOLVE_UI)) {
-//			fUseResolveUI= fPreferenceStore.getBoolean(ComparePreferencePage.USE_RESOLVE_UI);
-//			updateResolveStatus();
-//			invalidateLines();
-		
-		} else if (key.equals(fSymbolicFontName)) {
-			updateFont();
-			invalidateLines();
-			
-		} else if (key.equals(ComparePreferencePage.SYNCHRONIZE_SCROLLING)) {
-			
-			boolean b= fPreferenceStore.getBoolean(ComparePreferencePage.SYNCHRONIZE_SCROLLING);
-			if (b != fSynchronizedScrolling)
-				toggleSynchMode();
-		
-		} else if (key.equals(ComparePreferencePage.SHOW_MORE_INFO)) {
-			
-			boolean b= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_MORE_INFO);
-			if (b != fShowMoreInfo) {
-				fShowMoreInfo= b;
-				if (fShowMoreInfo)
-					updateStatus(fCurrentDiff);
-				else
-					clearStatus();
-			}
-		
-		} else
-			super.propertyChange(event);
-	}
-	
-	private void setIgnoreAncestor(boolean ignore) {
-		if (ignore != fIgnoreAncestor) {
-			fIgnoreAncestor= ignore;
-			setAncestorVisibility(false, !fIgnoreAncestor);
-		
-			// clear stuff
-			fCurrentDiff= null;
-		 	fChangeDiffs= null;
-			fAllDiffs= null;
-					
-			doDiff();
-					
-			invalidateLines();
-			updateVScrollBar();
-			refreshBirdsEyeView();
-			
-			selectFirstDiff();
-		}
-	}
-	
-	private void selectFirstDiff() {
-		
-		if (fLeft == null || fRight == null) {
-			return;
-		}
-		if (fLeft.getDocument() == null || fRight.getDocument() == null) {
-			return;
-		}
-		
-		Diff firstDiff= null;
-		if (CompareNavigator.getDirection(fComposite))
-			firstDiff= findNext(fRight, fChangeDiffs, -1, -1, false);
-		else
-			firstDiff= findPrev(fRight, fChangeDiffs, 9999999, 9999999, false);
-		setCurrentDiff(firstDiff, true);
-	}
-	
-	private void toggleSynchMode() {
-		fSynchronizedScrolling= ! fSynchronizedScrolling;
-		
-		scrollVertical(0, 0, 0, null);
-		
-		// throw away central control (Sash or Canvas)
-		Control center= getCenter();
-		if (center != null && !center.isDisposed())
-			center.dispose();
-		
-		fLeft.getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling);
-		fRight.getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling);
-
-		fComposite.layout(true);
-	}
-					
-	protected void updateToolItems() {
-					
-		if (fIgnoreAncestorItem != null)
-			fIgnoreAncestorItem.setVisible(isThreeWay());
-		
-		super.updateToolItems();
-	}
-	
-	//---- painting lines
-	
-	/**
-	 * 
-	 */
-	private void updateLines(IDocument d) {
-
-		boolean left= false;
-		boolean right= false;
-		
-		// FIXME: this optimization is incorrect because
-		// it doesn't take replace operations into account where
-		// the old and new line count does not differ
-		if (d == fLeft.getDocument()) {
-			int l= fLeft.getLineCount();
-			left= fLeftLineCount != l;
-			fLeftLineCount= l;
-		} else if (d == fRight.getDocument()) {
-			int l= fRight.getLineCount();
-			right= fRightLineCount != l;
-			fRightLineCount= l;
-		}
-		
-		if (left || right) {
-			
-			if (left) {
-				if (fLeftCanvas != null)
-					fLeftCanvas.redraw();
-			} else {
-				if (fRightCanvas != null)
-					fRightCanvas.redraw();
-			}
-			Control center= getCenter();
-			if (center != null)
-				center.redraw();
-
-			updateVScrollBar();
-			refreshBirdsEyeView();
-		}
-	}
-	
-	private void invalidateLines() {
-		if (isThreeWay()) {
-			if (Utilities.okToUse(fAncestorCanvas))
-				fAncestorCanvas.redraw();
-			if (fAncestor != null && fAncestor.isControlOkToUse())
-				fAncestor.getTextWidget().redraw();
-		}
-		
-		if (Utilities.okToUse(fLeftCanvas))
-			fLeftCanvas.redraw();
-			
-		if (fLeft != null && fLeft.isControlOkToUse())
-			fLeft.getTextWidget().redraw();
-			
-		if (Utilities.okToUse(getCenter()))
-			getCenter().redraw();
-			
-		if (fRight != null && fRight.isControlOkToUse())
-			fRight.getTextWidget().redraw();
-			
-		if (Utilities.okToUse(fRightCanvas))
-			fRightCanvas.redraw();
-	}
-	
-	private boolean showResolveUI() {
-		if (!fUseResolveUI || !isThreeWay() || fIgnoreAncestor)
-			return false;
-		CompareConfiguration cc= getCompareConfiguration();
-		if (cc == null)
-			return false;
-		// we only enable the new resolve ui if exactly one side is editable
-		boolean l= cc.isLeftEditable();
-		boolean r= cc.isRightEditable();
-		//return (l && !r) || (r && !l);
-		return l || r;
-	}
-	
-	private void paintCenter(Canvas canvas, GC g) {
-		
-		Display display= canvas.getDisplay();
-		
-		checkForColorUpdate(display);
-		
-		if (! fSynchronizedScrolling)
-			return;
-
-		int lineHeight= fLeft.getTextWidget().getLineHeight();			
-		int visibleHeight= fRight.getViewportHeight();
-
-		Point size= canvas.getSize();
-		int x= 0;
-		int w= size.x;
-				
-		g.setBackground(canvas.getBackground());
-		g.fillRectangle(x+1, 0, w-2, size.y);
-		
-		if (!fIsMotif) {
-			// draw thin line between center ruler and both texts
-			g.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW));
-			g.fillRectangle(0, 0, 1, size.y);
-			g.fillRectangle(w-1, 0, 1, size.y);
-		}
-			
-		if (! fHiglightRanges)
-			return;
-
-		boolean showResolveUI= showResolveUI();
-
-		if (fChangeDiffs != null) {
-			int lshift= fLeft.getVerticalScrollOffset();
-			int rshift= fRight.getVerticalScrollOffset();
-					
-			Point region= new Point(0, 0);
-		
-			Iterator e= fChangeDiffs.iterator();
-			while (e.hasNext()) {
-				Diff diff= (Diff) e.next();
-				if (diff.isDeleted())
-					continue;
-				
-				if (fShowCurrentOnly2 && !isCurrentDiff(diff))
-					continue;
-
-				fLeft.getLineRange(diff.fLeftPos, region);
-				int ly= (region.x * lineHeight) + lshift;
-				int lh= region.y * lineHeight;
-	
-				fRight.getLineRange(diff.fRightPos, region);
-				int ry= (region.x * lineHeight) + rshift;
-				int rh= region.y * lineHeight;
-	
-				if (Math.max(ly+lh, ry+rh) < 0)
-					continue;
-				if (Math.min(ly, ry) >= visibleHeight)
-					break;
-	
-				fPts[0]= x;	fPts[1]= ly;	fPts[2]= w;	fPts[3]= ry;
-				fPts[6]= x;	fPts[7]= ly+lh;	fPts[4]= w;	fPts[5]= ry+rh;
-				
-				Color fillColor= getColor(display, getFillColor(diff));
-				Color strokeColor= getColor(display, getStrokeColor(diff));
-				
-				if (fUseSingleLine) {
-					int w2= 3;
-
-					g.setBackground(fillColor);
-					g.fillRectangle(0, ly, w2, lh);		// left
-					g.fillRectangle(w-w2, ry, w2, rh);	// right
-
-					g.setLineWidth(LW);
-					g.setForeground(strokeColor);
-					g.drawRectangle(0-1, ly, w2, lh);	// left
-					g.drawRectangle(w-w2, ry, w2, rh);	// right
-
-					if (fUseSplines) {
-						int[] points= getCenterCurvePoints(w2, ly+lh/2, w-w2, ry+rh/2);
-						for (int i= 1; i < points.length; i++)
-							g.drawLine(w2+i-1, points[i-1], w2+i, points[i]);
-					} else {
-						g.drawLine(w2, ly+lh/2, w-w2, ry+rh/2);
-					}
-				} else {
-					// two lines
-					if (fUseSplines) {
-						g.setBackground(fillColor);
-
-						g.setLineWidth(LW);
-						g.setForeground(strokeColor);
-
-						int[] topPoints= getCenterCurvePoints(fPts[0], fPts[1], fPts[2], fPts[3]);
-						int[] bottomPoints= getCenterCurvePoints(fPts[6], fPts[7], fPts[4], fPts[5]);
-						g.setForeground(fillColor);
-						g.drawLine(0, bottomPoints[0], 0, topPoints[0]);
-						for (int i= 1; i < bottomPoints.length; i++) {
-							g.setForeground(fillColor);
-							g.drawLine(i, bottomPoints[i], i, topPoints[i]);
-							g.setForeground(strokeColor);
-							g.drawLine(i-1, topPoints[i-1], i, topPoints[i]);
-							g.drawLine(i-1, bottomPoints[i-1], i, bottomPoints[i]);
-						}
-					} else {
-						g.setBackground(fillColor);
-						g.fillPolygon(fPts);
-
-						g.setLineWidth(LW);
-						g.setForeground(strokeColor);
-						g.drawLine(fPts[0], fPts[1], fPts[2], fPts[3]);
-						g.drawLine(fPts[6], fPts[7], fPts[4], fPts[5]);
-					}
-				}
-				
-				if (showResolveUI && diff.isUnresolvedIncomingOrConflicting()) {
-					// draw resolve state
-					int cx= (w-RESOLVE_SIZE)/2;
-					int cy= ((ly+lh/2) + (ry+rh/2) - RESOLVE_SIZE)/2;
-					
-					g.setBackground(fillColor);
-					g.fillRectangle(cx, cy, RESOLVE_SIZE, RESOLVE_SIZE);
-					
-					g.setForeground(strokeColor);
-					g.drawRectangle(cx, cy, RESOLVE_SIZE, RESOLVE_SIZE);
-				}
-			}
-		}
-	}
-	
-	private int[] getCenterCurvePoints(int startx, int starty, int endx, int endy) {
-		if (fBasicCenterCurve == null)
-			buildBaseCenterCurve(endx-startx);
-		double height= endy - starty;
-		height= height/2;
-		int width= endx-startx;
-		int[] points= new int[width];
-		for (int i= 0; i < width; i++) {
-			points[i]= (int) (-height * fBasicCenterCurve[i] + height + starty);
-		}
-		return points;
-	}
-
-	private void buildBaseCenterCurve(int w) {
-		double width= w;
-		fBasicCenterCurve= new double[getCenterWidth()];
-		for (int i= 0; i < getCenterWidth(); i++) {
-			double r= ((double) i) / width;
-			fBasicCenterCurve[i]= Math.cos(Math.PI * r);
-		}
-	}
-
-	private void paintSides(GC g, MergeSourceViewer tp, Canvas canvas, boolean right) {
-		
-		Display display= canvas.getDisplay();
-		
-		int lineHeight= tp.getTextWidget().getLineHeight();
-		int visibleHeight= tp.getViewportHeight();
-
-		Point size= canvas.getSize();
-		int x= 0;
-		int w= fMarginWidth;
-		int w2= w/2;
-			
-		g.setBackground(canvas.getBackground());
-		g.fillRectangle(x, 0, w, size.y);
-
-		if (!fIsMotif) {
-			// draw thin line between ruler and text
-			g.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW));
-			if (right)
-				g.fillRectangle(0, 0, 1, size.y);
-			else
-				g.fillRectangle(size.x-1, 0, 1, size.y);
-		}
-
-		if (! fHiglightRanges)
-			return;
-
-		if (fChangeDiffs != null) {
-			int shift= tp.getVerticalScrollOffset() + (2-LW);
-				
-			Point region= new Point(0, 0);
-			Iterator e= fChangeDiffs.iterator();
-			while (e.hasNext()) {
-				Diff diff= (Diff) e.next();
-				if (diff.isDeleted())
-					continue;
-				
-				if (fShowCurrentOnly2 && !isCurrentDiff(diff))
-					continue;
-
-				tp.getLineRange(diff.getPosition(tp), region);	
-				int y= (region.x * lineHeight) + shift;
-				int h= region.y * lineHeight;
-	
-				if (y+h < 0)
-					continue;
-				if (y >= visibleHeight)
-					break;
-					
-				g.setBackground(getColor(display, getFillColor(diff)));
-				if (right)
-					g.fillRectangle(x, y, w2, h);
-				else
-					g.fillRectangle(x+w2, y, w2, h);
-	
-				g.setLineWidth(LW);
-				g.setForeground(getColor(display, getStrokeColor(diff)));
-				if (right)
-					g.drawRectangle(x-1, y-1, w2, h);
-				else
-					g.drawRectangle(x+w2, y-1, w2, h);
-			}
-		}
-	}
-	
-	private void paint(PaintEvent event, MergeSourceViewer tp) {
-		
-		if (! fHiglightRanges)
-			return;
-		if (fChangeDiffs == null)
-			return;
-
-		Control canvas= (Control) event.widget;
-		GC g= event.gc;
-		
-		Display display= canvas.getDisplay();
-		
-		int lineHeight= tp.getTextWidget().getLineHeight();			
-		int w= canvas.getSize().x;
-		int shift= tp.getVerticalScrollOffset() + (2-LW);
-		int maxh= event.y+event.height; 	// visibleHeight
-		
-		//if (fIsMotif)
-			shift+= fTopInset;
-				
-		Point range= new Point(0, 0);
-				
-		Iterator e= fChangeDiffs.iterator();	
-		while (e.hasNext()) {
-			Diff diff= (Diff) e.next();
-			if (diff.isDeleted())
-				continue;
-			
-			if (fShowCurrentOnly && !isCurrentDiff(diff))
-				continue;
-
-			tp.getLineRange(diff.getPosition(tp), range);
-			int y= (range.x * lineHeight) + shift;
-			int h= range.y * lineHeight;
-			
-			if (y+h < event.y)
-				continue;
-			if (y > maxh)
-				break;
-			
-			g.setBackground(getColor(display, getStrokeColor(diff)));
-			g.fillRectangle(0, y-1, w, LW);
-			g.fillRectangle(0, y+h-1, w, LW);
-		}
-	}
-
-	private RGB getFillColor(Diff diff) {
-		boolean selected= fCurrentDiff != null && fCurrentDiff.fParent == diff;
-		
-		RGB selected_fill= getBackground(null);
-
-		if (isThreeWay() && !fIgnoreAncestor) {
-			switch (diff.fDirection) {
-			case RangeDifference.RIGHT:
-				if (fLeftIsLocal)
-					return selected ? selected_fill : INCOMING_FILL;
-				return selected ? selected_fill : OUTGOING_FILL;
-			case RangeDifference.ANCESTOR:
-				return selected ? selected_fill : CONFLICT_FILL;
-			case RangeDifference.LEFT:
-				if (fLeftIsLocal)
-					return selected ? selected_fill : OUTGOING_FILL;
-				return selected ? selected_fill : INCOMING_FILL;
-			case RangeDifference.CONFLICT:
-				return selected ? selected_fill : CONFLICT_FILL;
-			}
-			return null;
-		}
-		return selected ? selected_fill : OUTGOING_FILL;
-	}
-	
-	private RGB getStrokeColor(Diff diff) {
-		boolean selected= fCurrentDiff != null && fCurrentDiff.fParent == diff;
-		
-		if (isThreeWay() && !fIgnoreAncestor) {
-			switch (diff.fDirection) {
-			case RangeDifference.RIGHT:
-				if (fLeftIsLocal)
-					return selected ? SELECTED_INCOMING : INCOMING;
-				return selected ? SELECTED_OUTGOING : OUTGOING;
-			case RangeDifference.ANCESTOR:
-				return selected ? SELECTED_CONFLICT : CONFLICT;
-			case RangeDifference.LEFT:
-				if (fLeftIsLocal)
-					return selected ? SELECTED_OUTGOING : OUTGOING;
-				return selected ? SELECTED_INCOMING : INCOMING;
-			case RangeDifference.CONFLICT:
-				return selected ? SELECTED_CONFLICT : CONFLICT;
-			}
-			return null;
-		}
-		return selected ? SELECTED_OUTGOING : OUTGOING;
-	}
-	
-	private Color getColor(Display display, RGB rgb) {
-		if (rgb == null)
-			return null;		
-		if (fColors == null)
-			fColors= new HashMap(20);
-		Color c= (Color) fColors.get(rgb);
-		if (c == null) {
-			c= new Color(display, rgb);
-			fColors.put(rgb, c);
-		}
-		return c;
-	}
-			
-	static RGB interpolate(RGB fg, RGB bg, double scale) {
-		return new RGB(
-			(int)((1.0-scale) * fg.red + scale * bg.red),
-			(int)((1.0-scale) * fg.green + scale * bg.green),
-			(int)((1.0-scale) * fg.blue + scale * bg.blue)
-		);
-	}
-	
-	//---- Navigating and resolving Diffs
-	
-	/**
-	 * Returns true if end (or beginning) of document reached.
-	 */
-	private boolean navigate(boolean down, boolean wrap, boolean deep) {
-
-		Diff diff= null;
-		
-		for (;;) {
-			
-			if (fChangeDiffs != null) {
-				MergeSourceViewer part= fFocusPart;
-				if (part == null)
-					part= fRight;
-				
-				if (part != null) {
-					Point s= part.getSelectedRange();
-					if (down)
-						diff= findNext(part, fChangeDiffs, s.x, s.x+s.y, deep);
-					else
-						diff= findPrev(part, fChangeDiffs, s.x, s.x+s.y, deep);					
-				}		
-			}
-		
-			if (diff == null) {	// at end or beginning
-				if (wrap) {
-					if (!fEndOfDocReached) {
-						fEndOfDocReached= true;
-						if (! endOfDocumentReached(down))
-							return true;
-					}
-					fEndOfDocReached= false;
-					if (fChangeDiffs != null && fChangeDiffs.size() > 0) {
-						if (down)
-							diff= (Diff) fChangeDiffs.get(0);
-						else
-							diff= (Diff) fChangeDiffs.get(fChangeDiffs.size()-1);
-					}
-				} else {
-					fEndOfDocReached= false;	
-					return true;
-				}
-			}
-			
-			setCurrentDiff(diff, true);
-			
-			if (diff != null && diff.fDirection == RangeDifference.ANCESTOR
-									&& !getAncestorEnabled())
-				continue;
-				
-			break;
-		}
-
-		return false;
-	}
-	
-	private boolean endOfDocumentReached(boolean down) {
-		Control c= getControl();
-		if (Utilities.okToUse(c)) {
-			
-			c.getDisplay().beep();
-			
-			String key= down ? "atEnd" : "atBeginning"; //$NON-NLS-1$ //$NON-NLS-2$
-			return MessageDialog.openQuestion(c.getShell(),
-				CompareMessages.getString("TextMergeViewer."+key+".title"),	//$NON-NLS-1$ //$NON-NLS-2$
-				CompareMessages.getString("TextMergeViewer."+key+".message"));	//$NON-NLS-1$ //$NON-NLS-2$
-		}
-		return false;
-	}
-	
-	/**
-	 * Find the Diff that overlaps with the given TextPart's text range.
-	 * If the range doesn't overlap with any range <code>null</code>
-	 * is returned.
-	 */
-	private Diff findDiff(MergeSourceViewer tp, int rangeStart, int rangeEnd) {
-		if (fChangeDiffs != null) {
-			Iterator e= fChangeDiffs.iterator();
-			while (e.hasNext()) {
-				Diff diff= (Diff) e.next();
-				if (diff.contains(tp, rangeStart, rangeEnd))
-					return diff;
-			}
-		}
-		return null;
-	}
-	
-	private static Diff findNext(MergeSourceViewer tp, List v, int start, int end, boolean deep) {
-		for (int i= 0; i < v.size(); i++) {
-			Diff diff= (Diff) v.get(i);
-			Position p= diff.getPosition(tp);
-			if (p != null) {
-				int startOffset= p.getOffset();
-				if (end < startOffset)  // <=
-					return diff;
-				if (deep && diff.fDiffs != null) {
-					Diff d= null;
-					int endOffset= startOffset + p.getLength();
-					if (start == startOffset && (end == endOffset || end == endOffset-1)) {
-						d= findNext(tp, diff.fDiffs, start-1, start-1, deep);
-					} else if (end < endOffset) {
-						d= findNext(tp, diff.fDiffs, start, end, deep);
-					}
-					if (d != null)
-						return d;
-				}
-			}
-		}
-		return null;
-	}
-	
-	private static Diff findPrev(MergeSourceViewer tp, List v, int start, int end, boolean deep) {
-		for (int i= v.size()-1; i >= 0; i--) {
-			Diff diff= (Diff) v.get(i);
-			Position p= diff.getPosition(tp);
-			if (p != null) {
-				int startOffset= p.getOffset();
-				int endOffset= startOffset + p.getLength();
-				if (start > endOffset)
-					return diff;
-				if (deep && diff.fDiffs != null) {
-					Diff d= null;
-					if (start == startOffset && end == endOffset) {
-						d= findPrev(tp, diff.fDiffs, end, end, deep);
-					} else if (start >= startOffset) {
-						d= findPrev(tp, diff.fDiffs, start, end, deep);
-					}
-					if (d != null)
-						return d;
-				}
-			}
-		}
-		return null;
-	}
-		
-	/*
-	 * Set the currently active Diff and update the toolbars controls and lines.
-	 * If <code>revealAndSelect</code> is <code>true</code> the Diff is revealed and
-	 * selected in both TextParts.
-	 */
-	private void setCurrentDiff(Diff d, boolean revealAndSelect) {
-
-//		if (d == fCurrentDiff)
-//			return;
-
-		if (fCenterButton != null)
-			fCenterButton.setVisible(false);
-						
-		fEndOfDocReached= false;	
-
-		Diff oldDiff= fCurrentDiff;
-					
-		if (d != null && revealAndSelect) {
-			
-			// before we set fCurrentDiff we change the selection
-			// so that the paint code uses the old background colors
-			// otherwise selection isn't drawn correctly
-			if (isThreeWay() && !fIgnoreAncestor)
-				fAncestor.setSelection(d.fAncestorPos);
-			fLeft.setSelection(d.fLeftPos);
-			fRight.setSelection(d.fRightPos);
-			
-			// now switch diffs
-			fCurrentDiff= d;
-			revealDiff(d, d.fIsToken);
-		} else {
-			fCurrentDiff= d;
-		}
-		
-		Diff d1= oldDiff != null ? oldDiff.fParent : null;
-		Diff d2= fCurrentDiff != null ? fCurrentDiff.fParent : null;
-		if (d1 != d2) {
-			updateDiffBackground(d1);
-			updateDiffBackground(d2);
-		}
-		
-		updateControls();
-		invalidateLines();
-		refreshBirdsEyeView();
-	}
-	
-	/**
-	 * Smart determines whether 
-	 */
-	private void revealDiff(Diff d, boolean smart) {
-		
-		boolean ancestorIsVisible= false;
-		boolean leftIsVisible= false;
-		boolean rightIsVisible= false;
-
-		if (smart) {
-			Point region= new Point(0, 0);
-			// find the starting line of the diff in all text widgets
-			int ls= fLeft.getLineRange(d.fLeftPos, region).x;
-			int rs= fRight.getLineRange(d.fRightPos, region).x;
-			
-			if (isThreeWay() && !fIgnoreAncestor) {
-				int as= fAncestor.getLineRange(d.fAncestorPos, region).x;
-				if (as >= fAncestor.getTopIndex() && as <= fAncestor.getBottomIndex())
-					ancestorIsVisible= true;
-			}
-
-			if (ls >= fLeft.getTopIndex() && ls <= fLeft.getBottomIndex())
-				leftIsVisible= true;
-
-			if (rs >= fRight.getTopIndex() && rs <= fRight.getBottomIndex())
-				rightIsVisible= true;
-		}
-
-		// vertical scrolling
-		if (!leftIsVisible || !rightIsVisible) {
-			int avpos= 0, lvpos= 0, rvpos= 0;
-			
-			MergeSourceViewer allButThis= null;
-			if (leftIsVisible) {
-				avpos= lvpos= rvpos= realToVirtualPosition(fLeft, fLeft.getTopIndex());
-				allButThis= fLeft;
-			} else if (rightIsVisible) {
-				avpos= lvpos= rvpos= realToVirtualPosition(fRight, fRight.getTopIndex());
-				allButThis= fRight;
-			} else if (ancestorIsVisible) {
-				avpos= lvpos= rvpos= realToVirtualPosition(fAncestor, fAncestor.getTopIndex());
-				allButThis= fAncestor;
-			} else {
-				if (fAllDiffs != null) {
-					int vpos= 0;
-					Iterator e= fAllDiffs.iterator();
-					for (int i= 0; e.hasNext(); i++) {
-						Diff diff= (Diff) e.next();
-						if (diff == d)
-							break;
-						if (fSynchronizedScrolling) {
-							vpos+= diff.getMaxDiffHeight(fShowAncestor);
-						} else {
-							avpos+= diff.getAncestorHeight();
-							lvpos+= diff.getLeftHeight();
-							rvpos+= diff.getRightHeight();
-						}
-					}
-					if (fSynchronizedScrolling)
-						avpos= lvpos= rvpos= vpos;
-				}
-				int delta= fRight.getViewportLines()/4;
-				avpos-= delta;
-				if (avpos < 0)
-					avpos= 0;
-				lvpos-= delta;
-				if (lvpos < 0)
-					lvpos= 0;
-				rvpos-= delta;
-				if (rvpos < 0)
-					rvpos= 0;
-			}
-							
-			scrollVertical(avpos, lvpos, rvpos, allButThis);
-			
-			if (fVScrollBar != null)
-				fVScrollBar.setSelection(avpos);
-		}
-		
-		// horizontal scrolling
-		if (d.fIsToken) {
-			// we only scroll horizontally for token diffs
-			reveal(fAncestor, d.fAncestorPos);
-			reveal(fLeft, d.fLeftPos);
-			reveal(fRight, d.fRightPos);
-		} else {
-			// in all other cases we reset the horizontal offset
-			hscroll(fAncestor);
-			hscroll(fLeft);
-			hscroll(fRight);
-		}
-	}
-	
-	private static void reveal(MergeSourceViewer v, Position p) {
-		if (v != null && p != null) {
-			StyledText st= v.getTextWidget();
-			if (st != null) {
-				Rectangle r= st.getClientArea();
-				if (!r.isEmpty())	// workaround for #7320: Next diff scrolls when going into current diff 
-					v.revealRange(p.offset, p.length);
-			}
-		}
-	}
-	
-	private static void hscroll(MergeSourceViewer v) {
-		if (v != null) {
-			StyledText st= v.getTextWidget();
-			if (st != null)
-				st.setHorizontalIndex(0);
-		}
-	}
-	
-	//--------------------------------------------------------------------------------
-	
-	void copyAllUnresolved(boolean leftToRight) {
-		if (fChangeDiffs != null && isThreeWay() && !fIgnoreAncestor) {
-			IRewriteTarget target= leftToRight ? fRight.getRewriteTarget() : fLeft.getRewriteTarget();
-			boolean compoundChangeStarted= false;
-			Iterator e= fChangeDiffs.iterator();
-			try {
-				while (e.hasNext()) {
-					Diff diff= (Diff) e.next();
-					switch (diff.fDirection) {
-					case RangeDifference.LEFT:
-						if (leftToRight) {
-							if (!compoundChangeStarted) {
-								target.beginCompoundChange();
-								compoundChangeStarted= true;
-							}
-							copy(diff, leftToRight);
-						}
-						break;
-					case RangeDifference.RIGHT:
-						if (!leftToRight) {
-							if (!compoundChangeStarted) {
-								target.beginCompoundChange();
-								compoundChangeStarted= true;
-							}
-							copy(diff, leftToRight);
-						}
-						break;
-					default:
-						continue;
-					}
-				}
-			} finally {
-				if (compoundChangeStarted) {
-					target.endCompoundChange();
-				}
-			}
-		}
-	}
-	
-	/*
-	 * Copy whole document from one side to the other.
-	 */
-	protected void copy(boolean leftToRight) {
-		
-		if (showResolveUI()) {
-			copyAllUnresolved(leftToRight);
-			invalidateLines();
-			return;
-		}
-				
-		if (leftToRight) {
-			if (fLeft.getEnabled()) {
-				// copy text
-				String text= fLeft.getTextWidget().getText();
-				fRight.getTextWidget().setText(text);
-				fRight.setEnabled(true);
-			} else {
-				// delete
-				fRight.getTextWidget().setText(""); //$NON-NLS-1$
-				fRight.setEnabled(false);
-			}
-			fRightLineCount= fRight.getLineCount();
-			setRightDirty(true);
-		} else {
-			if (fRight.getEnabled()) {
-				// copy text
-				String text= fRight.getTextWidget().getText();
-				fLeft.getTextWidget().setText(text);
-				fLeft.setEnabled(true);
-			} else {
-				// delete
-				fLeft.getTextWidget().setText(""); //$NON-NLS-1$
-				fLeft.setEnabled(false);
-			}
-			fLeftLineCount= fLeft.getLineCount();
-			setLeftDirty(true);
-		}
-		doDiff();
-		invalidateLines();
-		updateVScrollBar();
-		selectFirstDiff();
-		refreshBirdsEyeView();
-	}
-
-	private void copyDiffLeftToRight() {
-		copy(fCurrentDiff, true, false);
-	}
-
-	private void copyDiffRightToLeft() {
-		copy(fCurrentDiff, false, false);
-	}
-		
-	/*
-	 * Copy the contents of the given diff from one side to the other.
-	 */
-	private void copy(Diff diff, boolean leftToRight, boolean gotoNext) {
-		if (copy(diff, leftToRight)) {
-			if (gotoNext) {
-				navigate(true, true, true);
-			} else {
-				revealDiff(diff, true);
-				updateControls();
-			}
-		}
-	}
-
-	/*
-	 * Copy the contents of the given diff from one side to the other but
-	 * doesn't reveal anything.
-	 * Returns true if copy was succesful.
-	 */
-	private boolean copy(Diff diff, boolean leftToRight) {
-		
-		if (diff != null && !diff.isResolved()) {
-
-			Position fromPos= null;
-			Position toPos= null;
-			IDocument fromDoc= null;
-			IDocument toDoc= null;
-
-			if (leftToRight) {
-				fRight.setEnabled(true);
-				fromPos= diff.fLeftPos;
-				toPos= diff.fRightPos;
-				fromDoc= fLeft.getDocument();
-				toDoc= fRight.getDocument();
-			} else {
-				fLeft.setEnabled(true);
-				fromPos= diff.fRightPos;
-				toPos= diff.fLeftPos;
-				fromDoc= fRight.getDocument();
-				toDoc= fLeft.getDocument();
-			}
-			
-			if (fromDoc != null) {
-				
-				int fromStart= fromPos.getOffset();
-				int fromLen= fromPos.getLength();
-				
-				int toStart= toPos.getOffset();
-				int toLen= toPos.getLength();
-
-				try {
-					String s= null;
-											
-					switch (diff.fDirection) {
-					case RangeDifference.RIGHT:
-					case RangeDifference.LEFT:
-						s= fromDoc.get(fromStart, fromLen);
-						break;
-					case RangeDifference.ANCESTOR:
-						break;
-					case RangeDifference.CONFLICT:
-						if (APPEND_CONFLICT) {
-							s= toDoc.get(toStart, toLen);
-							s+= fromDoc.get(fromStart, fromLen);
-						} else
-							s= fromDoc.get(fromStart, fromLen);
-						break;
-					}
-					if (s != null) {
-						toDoc.replace(toStart, toLen, s);						
-						toPos.setOffset(toStart);
-						toPos.setLength(s.length());
-					}	
-				
-				} catch (BadLocationException e) {
-				}
-			}
-		
-			diff.setResolved(true);
-			updateResolveStatus();
-			
-			return true;
-		}
-		return false;
-	}
-
-	//---- scrolling
-
-	/**
-	 * Calculates virtual height (in lines) of views by adding the maximum of corresponding diffs.
-	 */
-	private int getVirtualHeight() {
-		int h= 1;
-		if (fAllDiffs != null) {
-			Iterator e= fAllDiffs.iterator();
-			for (int i= 0; e.hasNext(); i++) {
-				Diff diff= (Diff) e.next();
-				h+= diff.getMaxDiffHeight(fShowAncestor);
-			}
-		}
-		return h;
-	}
-	
-	/**
-	 * Calculates height (in lines) of right view by adding the height of the right diffs.
-	 */
-	private int getRightHeight() {
-		int h= 1;
-		if (fAllDiffs != null) {
-			Iterator e= fAllDiffs.iterator();
-			for (int i= 0; e.hasNext(); i++) {
-				Diff diff= (Diff) e.next();
-				h+= diff.getRightHeight();
-			}
-		}
-		return h;
-	}
-	
-	/**
-	 * The height of the TextEditors in lines.
-	 */
-	private int getViewportHeight() {
-		StyledText te= fLeft.getTextWidget();
-		
-		int vh= te.getClientArea().height;
-		if (vh == 0) {
-			Rectangle trim= te.computeTrim(0, 0, 0, 0);
-			int scrollbarHeight= trim.height;
-			
-			int headerHeight= getHeaderHeight();
-	
-			Composite composite= (Composite) getControl();
-			Rectangle r= composite.getClientArea();
-							
-			vh= r.height-headerHeight-scrollbarHeight;
-		}															
-
-		return vh / te.getLineHeight();
-	}
-	
-	/**
-	 * Returns the virtual position for the given view position.
-	 */
-	private int realToVirtualPosition(MergeSourceViewer w, int vpos) {
-
-		if (! fSynchronizedScrolling || fAllDiffs == null)
-			return vpos;
-				
-		int viewPos= 0;		// real view position
-		int virtualPos= 0;	// virtual position
-		Point region= new Point(0, 0);
-		
-		Iterator e= fAllDiffs.iterator();
-		while (e.hasNext()) {
-			Diff diff= (Diff) e.next();
-			Position pos= diff.getPosition(w);
-			w.getLineRange(pos, region);
-			int realHeight= region.y;
-			int virtualHeight= diff.getMaxDiffHeight(fShowAncestor);
-			if (vpos <= viewPos + realHeight) {	// OK, found!
-				vpos-= viewPos;	// make relative to this slot
-				// now scale position within this slot to virtual slot
-				if (realHeight <= 0)
-					vpos= 0;
-				else
-					vpos= (vpos*virtualHeight)/realHeight;
-				return virtualPos+vpos;
-			}
-			viewPos+= realHeight;
-			virtualPos+= virtualHeight;
-		}
-		return virtualPos;
-	}
-		
-	private void scrollVertical(int avpos, int lvpos, int rvpos, MergeSourceViewer allBut) {
-						
-		int s= 0;
-		
-		if (fSynchronizedScrolling) {
-			s= getVirtualHeight() - rvpos;
-			int height= fRight.getViewportLines()/4;
-			if (s < 0)
-				s= 0;
-			if (s > height)
-				s= height;
-		}
-
-		fInScrolling= true;
-				
-		if (isThreeWay() && allBut != fAncestor) {
-			if (fSynchronizedScrolling || allBut == null) {
-				int y= virtualToRealPosition(fAncestor, avpos+s)-s;
-				fAncestor.vscroll(y);
-			}
-		}
-
-		if (allBut != fLeft) {
-			if (fSynchronizedScrolling || allBut == null) {
-				int y= virtualToRealPosition(fLeft, lvpos+s)-s;
-				fLeft.vscroll(y);
-			}
-		}
-
-		if (allBut != fRight) {
-			if (fSynchronizedScrolling || allBut == null) {
-				int y= virtualToRealPosition(fRight, rvpos+s)-s;
-				fRight.vscroll(y);
-			}
-		}
-		
-		fInScrolling= false;
-		
-		if (isThreeWay() && fAncestorCanvas != null)
-			fAncestorCanvas.repaint();
-		
-		if (fLeftCanvas != null)
-			fLeftCanvas.repaint();
-		
-		Control center= getCenter();
-		if (center instanceof BufferedCanvas)
-			((BufferedCanvas)center).repaint();
-		
-		if (fRightCanvas != null)
-			fRightCanvas.repaint();
-	}
-		
-	/**
-	 * Updates Scrollbars with viewports.
-	 */
-	private void syncViewport(MergeSourceViewer w) {
-		
-		if (fInScrolling)
-			return;
-
-		int ix= w.getTopIndex();
-		int ix2= w.getDocumentRegionOffset();
-		
-		int viewPosition= realToVirtualPosition(w, ix-ix2);
-				
-		scrollVertical(viewPosition, viewPosition, viewPosition, w);	// scroll all but the given views
-		
-		if (fVScrollBar != null) {
-			int value= Math.max(0, Math.min(viewPosition, getVirtualHeight() - getViewportHeight()));
-			fVScrollBar.setSelection(value);
-			//refreshBirdEyeView();
-		}
-	}
-
-	/**
-	 */
-	private void updateVScrollBar() {
-		
-		if (Utilities.okToUse(fVScrollBar) && fSynchronizedScrolling) {
-			int virtualHeight= getVirtualHeight();
-			int viewPortHeight= getViewportHeight();
-			int pageIncrement= viewPortHeight-1;
-			int thumb= (viewPortHeight > virtualHeight) ? virtualHeight : viewPortHeight;
-						
-			fVScrollBar.setPageIncrement(pageIncrement);
-			fVScrollBar.setMaximum(virtualHeight);
-			fVScrollBar.setThumb(thumb);
-		}			
-	}
-	
-	/**
-	 * maps given virtual position into a real view position of this view.
-	 */
-	private int virtualToRealPosition(MergeSourceViewer part, int v) {
-			
-		if (! fSynchronizedScrolling || fAllDiffs == null)
-			return v;
-					
-		int virtualPos= 0;
-		int viewPos= 0;
-		Point region= new Point(0, 0);
-		
-		Iterator e= fAllDiffs.iterator();
-		while (e.hasNext()) {
-			Diff diff= (Diff) e.next();
-			Position pos= diff.getPosition(part);
-			int viewHeight= part.getLineRange(pos, region).y;
-			int virtualHeight= diff.getMaxDiffHeight(fShowAncestor);
-			if (v < (virtualPos + virtualHeight)) {
-				v-= virtualPos;		// make relative to this slot
-				if (viewHeight <= 0) {
-					v= 0;
-				} else {
-					v= (v*viewHeight)/virtualHeight;
-				}
-				return viewPos+v;
-			}
-			virtualPos+= virtualHeight;
-			viewPos+= viewHeight;
-		}
-		return viewPos;
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties
deleted file mode 100644
index 3126d00..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties
+++ /dev/null
@@ -1,98 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials 
-# are made available under the terms of the Common Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/cpl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-# @(#)TextMergeViewerResources.properties
-#
-# Resource strings for TextMergeViewer.java
-
-title= Text Compare
-
-saveDialog.title= Save Resource
-saveDialog.message= Resource has been modified. Save changes?
-
-compareProgressTask.title= Computing Differences...
-
-tooComplexError.title= Error
-tooComplexError.format= Too many differences. Turn on the ''Ignore White Space'' option or do a structure compare first.
-
-#####################################################
-# Toolbar actions
-#####################################################
-
-action.CopyLeftToRight.label=Copy Left to Right
-action.CopyLeftToRight.tooltip=Copy All from Left to Right
-action.CopyLeftToRight.image=copy_r_co.gif
-
-action.CopyRightToLeft.label=Copy Right to Left
-action.CopyRightToLeft.tooltip=Copy All Non-Conflicting Changes from Right to Left
-action.CopyRightToLeft.image=copy_l_co.gif
-
-action.CopyDiffLeftToRight.label=Copy Current Diff
-action.CopyDiffLeftToRight.tooltip=Copy Current Change from Left to Right
-action.CopyDiffLeftToRight.image=copycont_r_co.gif
-
-action.CopyDiffRightToLeft.label=Copy Current Diff
-action.CopyDiffRightToLeft.tooltip=Copy Current Change from Right to Left
-action.CopyDiffRightToLeft.image=copycont_l_co.gif
-
-action.NextDiff.label=Next
-action.NextDiff.tooltip=Select Next Change
-action.NextDiff.image=next_nav.gif
-
-action.PrevDiff.label=Previous
-action.PrevDiff.tooltip=Select Previous Change
-action.PrevDiff.image=prev_nav.gif
-
-action.EnableAncestor.label=Enable Ancestor Pane
-action.EnableAncestor.tooltip.unchecked=Show Ancestor Pane
-action.EnableAncestor.tooltip.checked=Hide Ancestor Pane
-action.EnableAncestor.description.unchecked=Show Ancestor Pane
-action.EnableAncestor.description.checked=Hide Ancestor Pane
-action.EnableAncestor.image=ancestorpane_co.gif
-
-action.IgnoreAncestor.label=Ignore Ancestor
-action.IgnoreAncestor.tooltip.unchecked=Two-Way Compare (Ignore Ancestor)
-action.IgnoreAncestor.tooltip.checked=Three-Way Compare
-action.IgnoreAncestor.description.unchecked=Two-Way Compare (Ignore Ancestor)
-action.IgnoreAncestor.description.checked=Three-Way Compare
-action.IgnoreAncestor.image=twowaycompare_co.gif
-
-
-#####################################################
-# Context menu actions
-#####################################################
-
-action.undo.label=Undo@Ctrl+Z
-action.undo.tooltip=Undo Last Operation
-
-action.redo.label=Redo@Ctrl+Y
-action.redo.tooltip=Redo Last Operation
-
-action.cut.label=Cut@Ctrl+X
-action.cut.tooltip=Cut Text Selection to Clipboard
-
-action.copy.label=Copy@Ctrl+C
-action.copy.tooltip=Copy Text Selection to Clipboard
-
-action.paste.label=Paste@Ctrl+V
-action.paste.tooltip=Replace Text Selection with Clipboard
-
-action.delete.label=Delete
-action.delete.tooltip=Delete Current Text Selection
-
-action.find.label=Find...@Ctrl+F
-action.find.tooltip=Find Occurrence
-
-action.selectAll.label=Select All@Ctrl+A
-action.selectAll.tooltip=Select All Changes
-
-action.save.label=Save@Ctrl+S
-action.save.tooltip=Save Changes
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html
deleted file mode 100644
index 9f606fb..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-   <meta name="Author" content="IBM">
-   <meta name="GENERATOR" content="Mozilla/4.75 [en] (WinNT; U) [Netscape]">
-   <title>Package-level Javadoc</title>
-</head>
-<body>
-Support for compare and merge viewers which show the
-content side-by-side.
-<h2>
-Package Specification</h2>
-
-The <b>ContentMergeViewer</b> is an abstract compare and merge viewer
-with two side-by-side content areas and an optional content area for a
-common ancestor (for three-way compare). Because the implementation makes
-no assumptions about the content type it is a subclass responsibility to
-deal with a specific type. Its subclass <b>ImageMergeViewer</b> in
-package org.eclipse.compare.internal shows how to base a simple
-mergeviewer for images on <b>ContentMergeViewer</b>.
-<p>
-
-A <b>ContentMergeViewer</b> accesses its model by means of a content
-provider which must implement the <b>IMergeViewerContentProvider</b> interface.
-<p>
-
-The <b>TextMergeViewer</b> is the standard concrete subclass of
-<b>ContentMergeViewer</b> for comparing and merging text content.
-<br>
-A text merge viewer uses the <b>org.eclipse.compare.rangedifferencer.RangeDifferencer</b>
-to perform a textual, line-by-line comparison of two (or three) input documents.
-For text lines that differ the <b>TextMergeViewer</b> uses an <b>ITokenComparator</b>
-to find longest sequences of matching and non-matching tokens.
-The <b>TextMergeViewer</b>'s
-default token compare works on characters separated by whitespace. If a
-different strategy is needed (for example, Java tokens in a Java-aware
-merge viewer), clients can create their own token comparators by implementing
-the <b>ITokenComparator</b> interface.
-<p>The <b>TextMergeViewer</b> not only works on whole documents but on
-subranges of documents too. In this case the viewer's input must be an
-<b>IDocumentRange</b> instead of an <b>IDocument</b>.
-
-</body>
-</html>
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java
deleted file mode 100644
index d6c2021..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.Viewer;
-
-
-public abstract class AbstractViewer extends Viewer {
-
-	public void setInput(Object input) {
-	}
-	
-	public Object getInput() {
-		return null;
-	}
-	
-	public ISelection getSelection() {
-		return null;
-	}
-	
-	public void setSelection(ISelection s, boolean reveal) {
-	}
-	
-	public void refresh() {
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
deleted file mode 100644
index 4f43866..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import java.util.ResourceBundle;
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-
-import org.eclipse.ui.actions.WorkspaceModifyOperation;
-import org.eclipse.ui.IActionDelegate;
-
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
-
-
-public class AddFromHistoryAction implements IActionDelegate {
-	
-	private static final String BUNDLE_NAME= "org.eclipse.compare.internal.AddFromHistoryAction"; //$NON-NLS-1$
-
-	private ISelection fSelection;
-	
-	public AddFromHistoryAction() {
-	}
-	
-	public void selectionChanged(IAction a, ISelection s) {
-		fSelection= s;
-	}
-
-	public void run(IAction action) {
-			
-		ResourceBundle bundle= ResourceBundle.getBundle(BUNDLE_NAME);
-		String title= Utilities.getString(bundle, "title"); //$NON-NLS-1$
-			
-		Shell parentShell= CompareUIPlugin.getShell();
-		AddFromHistoryDialog dialog= null;
-
-		Object[] s= Utilities.getResources(fSelection);
-		
-		for (int i= 0; i < s.length; i++) {
-			Object o= s[i];
-			if (o instanceof IContainer) {
-				IContainer container= (IContainer) o;
-				
-				ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(parentShell);	
-				IProgressMonitor pm= pmdialog.getProgressMonitor();
-				IFile[] states= null;
-				try {
-					states= container.findDeletedMembersWithHistory(IContainer.DEPTH_INFINITE, pm);
-				} catch (CoreException ex) {
-					pm.done();
-				}
-		
-				if (states == null || states.length <= 0) {
-					String msg= Utilities.getString(bundle, "noLocalHistoryError"); //$NON-NLS-1$
-					MessageDialog.openInformation(parentShell, title, msg);
-					return;
-				}
-		
-				if (dialog == null) {
-					dialog= new AddFromHistoryDialog(parentShell, bundle);
-					dialog.setHelpContextId(ICompareContextIds.ADD_FROM_HISTORY_DIALOG);
-				}
-					
-				if (dialog.select(container, states)) {		
-							
-					AddFromHistoryDialog.HistoryInput[] selected= dialog.getSelected();				
-
-					if (selected != null && selected.length > 0) {	
-						try {
-							updateWorkspace(bundle, parentShell, selected);
-	
-						} catch (InterruptedException x) {
-							// Do nothing. Operation has been canceled by user.
-							
-						} catch (InvocationTargetException x) {
-							String reason= x.getTargetException().getMessage();
-							MessageDialog.openError(parentShell, title, Utilities.getFormattedString(bundle, "replaceError", reason));	//$NON-NLS-1$
-						}
-					}
-				}
-			}
-		}
-	}
-	
-	void createContainers(IResource resource) throws CoreException {
-		IContainer container= resource.getParent();
-		if (container instanceof IFolder) {
-			IFolder parent= (IFolder) container;
-			if (parent != null && !parent.exists()) {
-				createContainers(parent);
-				parent.create(false, true, null);
-			}
-		}
-	}
-	
-	private void updateWorkspace(final ResourceBundle bundle, Shell shell,
-					final AddFromHistoryDialog.HistoryInput[] selected)
-									throws InvocationTargetException, InterruptedException {
-		
-		WorkspaceModifyOperation operation= new WorkspaceModifyOperation() {
-			public void execute(IProgressMonitor pm) throws InvocationTargetException {
-				try {
-					String taskName= Utilities.getString(bundle, "taskName"); //$NON-NLS-1$
-					pm.beginTask(taskName, selected.length);
-					
-					for (int i= 0; i < selected.length; i++) {
-						IFile file= selected[i].fFile;
-						IFileState fileState= selected[i].fFileState;
-						createContainers(file);
-						
-						SubProgressMonitor subMonitor= new SubProgressMonitor(pm, 1);
-						try {
-							file.create(fileState.getContents(), false, subMonitor);
-						} finally {
-							subMonitor.done();
-						}
-					}
-				} catch (CoreException e) {
-					throw new InvocationTargetException(e);
-				} finally {
-					pm.done();
-				}
-			}
-		};
-		
-		ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(shell);				
-		pmdialog.run(false, true, operation);									
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties
deleted file mode 100644
index e252071..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials 
-# are made available under the terms of the Common Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/cpl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-# @(#)AddFromHistoryAction.properties
-#
-# Resources for AddFromHistoryAction.java
-
-title= Restore from Local History
-
-memberPaneTitle= {0} - Available Files in Local History:
-
-treeTitleFormat= Local History of ''{0}''
-dateIcon= obj16/day_obj.gif
-timeIcon= obj16/resource_obj.gif
-
-memberDescription= Check files to restore from the local history:
-editionDescription= Select an edition of a file:
-
-treeFormat= {0}
-workspaceTreeFormat= {0} (Workspace File)
-parseErrorFormat= {0} (Parse Error)
-
-editionLabel= Local History ({0})
-workspaceEditionLabel= Workspace File
-
-targetLabel= {0}
-
-todayFormat= Today ({0})
-yesterdayFormat= Yesterday ({0})
-dayFormat= {0}
-
-buttonLabel= Restore
-
-noLocalHistoryError= No deleted resources in local history for selected container.
-replaceError=Can''t replace resource (reason: {0}).
-
-taskName=Restoring
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java
deleted file mode 100644
index 028bb02..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java
+++ /dev/null
@@ -1,463 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import java.io.*;
-import java.text.*;
-import java.util.*;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-
-import org.eclipse.jface.dialogs.*;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.Viewer;
-
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
-
-import org.eclipse.compare.*;
-
-
-public class AddFromHistoryDialog extends ResizableDialog {
-	
-	static class HistoryInput implements ITypedElement, IStreamContentAccessor, IModificationDate {
-		IFile fFile;
-		IFileState fFileState;
-		
-		HistoryInput(IFile file, IFileState fileState) {
-			fFile= file;
-			fFileState= fileState;
-		}
-		public InputStream getContents() throws CoreException {
-			return new BufferedInputStream(fFileState.getContents());
-		}
-		public String getName() {
-			return fFile.getName();
-		}
-		public String getType() {
-			return fFile.getFileExtension();
-		}
-		public Image getImage() {
-			return CompareUI.getImage(fFile);
-		}
-		public long getModificationDate() {
-			return fFileState.getModificationTime();
-		}
-	}
-	
-	static class FileHistory {
-		private IFile fFile;
-		private IFileState[] fStates;
-		private int fSelected;
-		
-		FileHistory(IFile file) {
-			fFile= file;
-		}
-		
-		IFile getFile() {
-			return fFile;
-		}
-		
-		IFileState[] getStates() {
-			if (fStates == null) {
-				try {
-					fStates= fFile.getHistory(new NullProgressMonitor());
-				} catch (CoreException ex) {
-				}
-			}
-			return fStates;
-		}
-		
-		IFileState getSelectedState() {
-			return getStates()[fSelected];
-		}
-		
-		void setSelected(IFileState state) {
-			for (int i= 0; i < fStates.length; i++) {
-				if (fStates[i] == state) {
-					fSelected= i;
-					return;
-				}
-			}
-		}
-		
-		HistoryInput getHistoryInput() {
-			return new HistoryInput(fFile, getSelectedState());
-		}
-		
-		boolean isSelected(int index) {
-			return index == fSelected;
-		}
-	}
-
-	private CompareConfiguration fCompareConfiguration;
-	private ArrayList fArrayList= new ArrayList();
-	private FileHistory fCurrentFileHistory;
-
-	// SWT controls
-	private CompareViewerSwitchingPane fContentPane;
-	private Button fCommitButton;
-	private Table fMemberTable;
-	private CompareViewerPane fMemberPane;
-	private Tree fEditionTree;
-	private CompareViewerPane fEditionPane;
-	private Image fDateImage;
-	private Image fTimeImage;
-
-
-	public AddFromHistoryDialog(Shell parent, ResourceBundle bundle) {
-		super(parent, bundle);
-					
-		String iconName= Utilities.getString(fBundle, "dateIcon", "obj16/day_obj.gif"); //$NON-NLS-2$ //$NON-NLS-1$
-		ImageDescriptor id= CompareUIPlugin.getImageDescriptor(iconName);
-		if (id != null)
-			fDateImage= id.createImage();
-		iconName= Utilities.getString(fBundle, "timeIcon", "obj16/resource_obj.gif"); //$NON-NLS-1$ //$NON-NLS-2$
-		id= CompareUIPlugin.getImageDescriptor(iconName);
-		if (id != null)
-			fTimeImage= id.createImage();
-	}
-	
-	public boolean select(IContainer root, IFile[] inputFiles) {
-		
-		create();	// create widgets
-		
-		String format= Utilities.getString(fBundle, "memberPaneTitle");	//$NON-NLS-1$
-		String title= MessageFormat.format(format, new Object[] { root.getName() });
-		fMemberPane.setImage(CompareUI.getImage(root));
-		fMemberPane.setText(title);
-		
-		// sort input files
-		final int count= inputFiles.length;
-		final IFile[] files= new IFile[count];
-		for (int i= 0; i < count; i++)
-			files[i]= (IFile) inputFiles[i];
-		if (count > 1)
-			internalSort(files, 0, count-1);
-			
-		
-		String prefix= root.getFullPath().toString();
-		
-		if (fMemberTable != null && !fMemberTable.isDisposed()) {
-			for (int i= 0; i < files.length; i++) {
-				IFile file= files[i];
-				String path= file.getFullPath().toString();
-				if (path.startsWith(prefix))
-					path= path.substring(prefix.length()+1);
-				TableItem ti= new TableItem(fMemberTable, SWT.NONE);
-				ti.setImage(CompareUI.getImage(file));
-				ti.setText(path);
-				ti.setData(new FileHistory(file));
-			}
-		}
-		
-		open();
-		
-		return (getReturnCode() == OK) && (fArrayList.size() > 0);
-	}
-		
-	HistoryInput[] getSelected() {
-		HistoryInput[] selected= new HistoryInput[fArrayList.size()];
-		Iterator iter= fArrayList.iterator();
-		for (int i= 0; iter.hasNext(); i++) {
-			FileHistory h= (FileHistory) iter.next();
-			selected[i]= h.getHistoryInput();
-		}
-		return selected;
-	}
-				
-	protected synchronized Control createDialogArea(Composite parent2) {
-		
-		Composite parent= (Composite) super.createDialogArea(parent2);
-
-		getShell().setText(Utilities.getString(fBundle, "title")); //$NON-NLS-1$
-		
-		org.eclipse.compare.Splitter vsplitter= new org.eclipse.compare.Splitter(parent,  SWT.VERTICAL);
-		vsplitter.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL
-					| GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL));
-
-		vsplitter.addDisposeListener(
-			new DisposeListener() {
-				public void widgetDisposed(DisposeEvent e) {
-					if (fDateImage != null)
-						fDateImage.dispose();
-					if (fTimeImage != null)
-						fTimeImage.dispose();
-				}
-			}
-		);
-		
-		// we need two panes: the left for the elements, the right one for the editions
-		Splitter hsplitter= new Splitter(vsplitter,  SWT.HORIZONTAL);
-		
-		Composite c= new Composite(hsplitter, SWT.NONE);
-		GridLayout layout= new GridLayout();
-		layout.marginWidth= 0;
-		layout.marginHeight= 2;
-		layout.verticalSpacing= 2;
-		layout.numColumns= 1;
-		c.setLayout(layout);
-		Label l1= new Label(c, SWT.NONE);
-		l1.setText(Utilities.getString(fBundle, "memberDescription"));	//$NON-NLS-1$
-		fMemberPane= new CompareViewerPane(c, SWT.BORDER | SWT.FLAT);
-		GridData gd= new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
-		fMemberPane.setLayoutData(gd);
-
-		fMemberTable= new Table(fMemberPane, SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL);
-		fMemberTable.addSelectionListener(
-			new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					if (e.detail == SWT.CHECK) {
-						if (e.item instanceof TableItem) {
-							TableItem ti= (TableItem) e.item;
-							if (ti.getChecked())
-								fArrayList.add(ti.getData());
-							else
-								fArrayList.remove(ti.getData());
-								
-							if (fCommitButton != null)
-								fCommitButton.setEnabled(fArrayList.size() > 0);
-						}
-					} else {
-						handleMemberSelect(e.item);
-					}
-				}
-			}
-		);
-				
-		fMemberPane.setContent(fMemberTable);
-		
-		c= new Composite(hsplitter, SWT.NONE);
-		layout= new GridLayout();
-		layout.marginWidth= 0;
-		layout.marginHeight= 2;
-		layout.verticalSpacing= 2;
-		layout.numColumns= 1;
-		c.setLayout(layout);
-		Label l2= new Label(c, SWT.NONE);
-		l2.setText(Utilities.getString(fBundle, "editionDescription"));	//$NON-NLS-1$
-		fEditionPane= new CompareViewerPane(c, SWT.BORDER | SWT.FLAT);
-		gd= new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
-		fEditionPane.setLayoutData(gd);
-		
-		fEditionTree= new Tree(fEditionPane, SWT.H_SCROLL | SWT.V_SCROLL);
-		fEditionTree.addSelectionListener(
-			new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					feedContent(e.item);
-				}
-			}
-		);
-		fEditionPane.setContent(fEditionTree);		
-		
-		applyDialogFont(parent); // to avoid applying font to compare viewer
-		fContentPane= new CompareViewerSwitchingPane(vsplitter, SWT.BORDER | SWT.FLAT) {
-			protected Viewer getViewer(Viewer oldViewer, Object input) {
-				return CompareUIPlugin.findContentViewer(oldViewer, input, this, fCompareConfiguration);	
-			}
-		};
-		vsplitter.setWeights(new int[] { 30, 70 });
-		
-		return parent;
-	}
-	
-	/**
-	 * Feeds selection from member viewer to edition viewer.
-	 */
-	private void handleMemberSelect(Widget w) {
-		Object data= null;
-		if (w != null)
-			data= w.getData();
-		if (data instanceof FileHistory) {
-			
-			FileHistory h= (FileHistory) data;
-			fCurrentFileHistory= h;
-			
-			IFile file= h.getFile();
-			IFileState[] states= h.getStates();
-			
-			fEditionPane.setImage(CompareUI.getImage(file));
-			String pattern= Utilities.getString(fBundle, "treeTitleFormat"); //$NON-NLS-1$
-			String title= MessageFormat.format(pattern, new Object[] { file.getName() });
-			fEditionPane.setText(title);
-			
-			if (fEditionTree != null) {
-				fEditionTree.setRedraw(false);
-				fEditionTree.removeAll();
-				for (int i= 0; i < states.length; i++) {
-					addEdition(new HistoryInput(file, states[i]), h.isSelected(i));
-				}
-				fEditionTree.setRedraw(true);
-			}
-		} else
-			fCurrentFileHistory= null;
-	}
-	
-	/**
-	 * Adds the given Pair to the edition tree.
-	 * It takes care of creating tree nodes for different dates.
-	 */
-	private void addEdition(HistoryInput input, boolean isSelected) {
-		if (fEditionTree == null || fEditionTree.isDisposed())
-			return;
-		
-		IFileState state= input.fFileState;
-		
-		// find last day
-		TreeItem[] days= fEditionTree.getItems();
-		TreeItem lastDay= null;
-		if (days.length > 0)
-			lastDay= days[days.length-1];
-						
-		long ldate= state.getModificationTime();		
-		long day= dayNumber(ldate);
-		Date date= new Date(ldate);
-		if (lastDay == null || day != dayNumber(((Date)lastDay.getData()).getTime())) {
-			lastDay= new TreeItem(fEditionTree, SWT.NONE);
-			lastDay.setImage(fDateImage);
-			String df= DateFormat.getDateInstance().format(date);
-			long today= dayNumber(System.currentTimeMillis());
-			
-			String formatKey;
-			if (day == today)
-				formatKey= "todayFormat"; //$NON-NLS-1$
-			else if (day == today-1)
-				formatKey= "yesterdayFormat"; //$NON-NLS-1$
-			else
-				formatKey= "dayFormat"; //$NON-NLS-1$
-			String pattern= Utilities.getString(fBundle, formatKey);
-			if (pattern != null)
-				df= MessageFormat.format(pattern, new String[] { df });
-			lastDay.setText(df);
-			lastDay.setData(date);
-		}
-		TreeItem ti= new TreeItem(lastDay, SWT.NONE);
-		ti.setImage(fTimeImage);
-		ti.setText(DateFormat.getTimeInstance().format(date));
-		ti.setData(input);
-
-		if (isSelected) {
-			lastDay.setExpanded(true);
-			fEditionTree.setSelection(new TreeItem[] { ti });
-			feedContent(ti);
-		}
-	}
-						
-	/**
-	 * Returns the number of s since Jan 1st, 1970.
-	 * The given date is converted to GMT and daylight saving is taken into account too.
-	 */
-	private long dayNumber(long date) {
-		int ONE_DAY_MS= 24*60*60 * 1000; // one day in milli seconds
-		
-		Calendar calendar= Calendar.getInstance();
-		long localTimeOffset= calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET);
-		
-		return (date + localTimeOffset) / ONE_DAY_MS;
-	}
-	
-	/**
-	 * Feeds the tree viewer's selection to the contentviewer
-	 */
-	private void feedContent(Widget w) {
-		if (fContentPane != null && !fContentPane.isDisposed()) {
-			Object o= w.getData();
-			if (o instanceof HistoryInput) {
-				HistoryInput selected= (HistoryInput) o;
-				fContentPane.setInput(selected);
-				fContentPane.setText(getEditionLabel(selected));
-				fContentPane.setImage(fTimeImage);
-				
-				if (fCurrentFileHistory != null)
-					fCurrentFileHistory.setSelected(selected.fFileState);
-			} else {
-				fContentPane.setInput(null);
-			}
-		}
-	}
-	
-	protected String getEditionLabel(HistoryInput input) {
-		String format= Utilities.getString(fBundle, "historyEditionLabel", null);	//$NON-NLS-1$
-		if (format == null)
-			format= Utilities.getString(fBundle, "editionLabel");	//$NON-NLS-1$
-		if (format == null)
-			format= "x{0}";	//$NON-NLS-1$
-		
-		long modDate= input.getModificationDate();
-		String date= DateFormat.getDateTimeInstance().format(new Date(modDate));
-		
-		return MessageFormat.format(format, new Object[] { date });
-	}
-			
-	/* (non-Javadoc)
-	 * Method declared on Dialog.
-	 */
-	protected void createButtonsForButtonBar(Composite parent) {
-		String buttonLabel= Utilities.getString(fBundle, "buttonLabel", IDialogConstants.OK_LABEL); //$NON-NLS-1$
-		// a 'Cancel' and a 'Add' button
-		fCommitButton= createButton(parent, IDialogConstants.OK_ID, buttonLabel, true);
-		fCommitButton.setEnabled(false);
-		createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
-	}
-	
-	/**
-	 * Returns true if the pathname of f1 comes after f2
-	 */
-	private static boolean greaterThan(IFile f1, IFile f2) {
-		String[] ss1= f1.getFullPath().segments();
-		String[] ss2= f2.getFullPath().segments();
-		int l1= ss1.length;
-		int l2= ss2.length;
-		int n= Math.max(l1, l2);
-		
-		for (int i= 0; i < n; i++) {
-			String s1= i < l1 ? ss1[i] : ""; //$NON-NLS-1$
-			String s2= i < l2 ? ss2[i] : ""; //$NON-NLS-1$
-			int rc= s1.compareToIgnoreCase(s2);
-			if (rc != 0)
-				return rc < 0;
-		}
-		return false;
-	}
-	
-	private static void internalSort(IFile[] keys, int left, int right) { 
-	
-		int original_left= left;
-		int original_right= right;
-		
-		IFile mid= keys[(left + right) / 2]; 
-		do { 
-			while (greaterThan(keys[left], mid))
-				left++; 
-			
-			while (greaterThan(mid, keys[right]))
-				right--; 
-		
-			if (left <= right) { 
-				IFile tmp= keys[left]; 
-				keys[left]= keys[right]; 
-				keys[right]= tmp;			
-				left++; 
-				right--; 
-			} 
-		} while (left <= right);
-		
-		if (original_left < right)
-			internalSort(keys, original_left, right); 
-		
-		if (left < original_right)
-			internalSort(keys, left, original_right); 
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
deleted file mode 100644
index c9d673e..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import java.io.*;
-import java.util.ResourceBundle;
-import java.text.MessageFormat;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.help.WorkbenchHelp;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.compare.*;
-import org.eclipse.compare.structuremergeviewer.ICompareInput;
-
-/**
- * A simple compare viewer for binary files.
- * Shows the position of the first non-matching byte.
- */
-public class BinaryCompareViewer extends AbstractViewer {
-
-	private static final String BUNDLE_NAME= "org.eclipse.compare.internal.BinaryCompareViewerResources"; //$NON-NLS-1$
-
-	private static final int EOF= -1;
-	private Text fControl;
-	private ICompareInput fInput;
-	private ResourceBundle fBundle;
-	private boolean fLeftIsLocal;
-	
-	
-	public BinaryCompareViewer(Composite parent, CompareConfiguration cc) {
-		
-		WorkbenchHelp.setHelp(parent, ICompareContextIds.BINARY_COMPARE_VIEW);
-
-		fBundle= ResourceBundle.getBundle(BUNDLE_NAME);
-
-		fControl= new Text(parent, SWT.NONE);
-		fControl.setEditable(false);
-		fControl.setData(CompareUI.COMPARE_VIEWER_TITLE, Utilities.getString(fBundle, "title")); //$NON-NLS-1$
-		
-		fLeftIsLocal= Utilities.getBoolean(cc, "LEFT_IS_LOCAL", false); //$NON-NLS-1$
-	}
-
-	public Control getControl() {
-		return fControl;
-	}
-
-	public void setInput(Object input) {
-		if (fControl != null && input instanceof ICompareInput) {
-			fInput= (ICompareInput) input;
-			
-			InputStream left= null;
-			InputStream right= null;
-			
-			String message= null;
-			try {
-				left= getStream(fInput.getLeft());
-				right= getStream(fInput.getRight());
-				
-				if (left != null && right != null) {
-					int pos= 0;
-					while (true) {
-						int l= left.read();
-						int r= right.read();
-						if (l != r) {
-							String format= Utilities.getString(fBundle, "diffMessageFormat"); //$NON-NLS-1$
-							message= MessageFormat.format(format, new String[] { Integer.toString(pos) } );
-							break;
-						}
-						if (l == EOF)
-							break;
-						pos++;
-					}
-				} else if (left == null && right == null) {
-					message= Utilities.getString(fBundle, "deleteConflictMessage"); //$NON-NLS-1$
-				} else if (left == null) {
-					if (fLeftIsLocal)
-						message= Utilities.getString(fBundle, "deletedMessage"); //$NON-NLS-1$
-					else
-						message= Utilities.getString(fBundle, "addedMessage"); //$NON-NLS-1$
-				} else if (right == null) {
-					if (fLeftIsLocal)
-						message= Utilities.getString(fBundle, "addedMessage"); //$NON-NLS-1$
-					else
-						message= Utilities.getString(fBundle, "deletedMessage"); //$NON-NLS-1$
-				}
-			} catch (CoreException ex) {
-				message= Utilities.getString(fBundle, "errorMessage"); //$NON-NLS-1$
-			} catch (IOException ex) {
-				message= Utilities.getString(fBundle, "errorMessage"); //$NON-NLS-1$
-			} finally {
-				if (left != null) {
-					try {
-						left.close();
-					} catch (IOException ex) {
-					}
-				}
-				if (right != null) {
-					try {
-						right.close();
-					} catch (IOException ex) {
-					}
-				}			
-			}
-			if (message != null)
-				fControl.setText(message);				
-		}
-	}
-
-	public Object getInput() {
-		return fInput;
-	}
-
-	private InputStream getStream(ITypedElement input) throws CoreException {
-		if (input instanceof IStreamContentAccessor)
-			return ((IStreamContentAccessor)input).getContents();
-		return null;
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java
deleted file mode 100644
index 8c98ec6..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.jface.viewers.Viewer;
-
-import org.eclipse.compare.*;
-
-/**
- * A factory object for the <code>BinaryCompareViewer</code>.
- * This indirection is necessary because only objects with a default
- * constructor can be created via an extension point
- * (this precludes Viewers).
- */
-public class BinaryCompareViewerCreator implements IViewerCreator {
-
-	public Viewer createViewer(Composite parent, CompareConfiguration mp) {
-		return new BinaryCompareViewer(parent, mp);
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties
deleted file mode 100644
index dbfc7d7..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials 
-# are made available under the terms of the Common Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/cpl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-# @(#)BinaryCompareViewerResources.properties
-#
-# Resource strings for BinaryCompareViewer.java
-
-title= Binary Compare
-
-diffMessageFormat= First bytes differ at position {0}
-deleteConflictMessage= Delete Conflict
-addedMessage= Added Resource
-deletedMessage= Removed Resource
-errorMessage= Internal Error
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java
deleted file mode 100644
index 79b3425..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.events.*;
-
-/**
- * A Canvas which reduces flicker by drawing in an off screen buffer.
- */
-public abstract class BufferedCanvas extends Canvas {
-
-	//private static final boolean USE_DOUBLE_BUFFER= !"carbon".equals(SWT.getPlatform()); //$NON-NLS-1$
-	private static final boolean USE_DOUBLE_BUFFER= true;
-	
-	/** The drawable for double buffering */
-	Image fBuffer;
-
-	public BufferedCanvas(Composite parent, int flags) {
-		super(parent, flags + SWT.NO_BACKGROUND);
-
-		addPaintListener(
-			new PaintListener() {
-				public void paintControl(PaintEvent event) {
-					doubleBufferPaint(event.gc);
-				}
-			}
-		);
-
-		addDisposeListener(
-			new DisposeListener() {
-				public void widgetDisposed(DisposeEvent e) {
-					if (fBuffer != null) {
-						fBuffer.dispose();
-						fBuffer= null;
-					}
-				}
-			}
-		);
-	}
-
-	public void repaint() {
-		if (!isDisposed()) {
-			GC gc= new GC(this);
-			doubleBufferPaint(gc);
-			gc.dispose();
-		}
-	}
-
-	/**
-	 * Double buffer drawing.
-	 */
-	void doubleBufferPaint(GC dest) {
-		
-		if (!USE_DOUBLE_BUFFER) {
-			doPaint(dest);
-			return;
-		}
-
-		Point size= getSize();
-
-		if (size.x <= 1 || size.y <= 1) // we test for <= 1 because on X11 controls have initial size 1,1
-			return;
-
-		if (fBuffer != null) {
-			Rectangle r= fBuffer.getBounds();
-			if (r.width != size.x || r.height != size.y) {
-				fBuffer.dispose();
-				fBuffer= null;
-			}
-		}
-		if (fBuffer == null)
-			fBuffer= new Image(getDisplay(), size.x, size.y);
-
-		GC gc= new GC(fBuffer);
-		try {
-			gc.setBackground(getBackground());
-			gc.fillRectangle(0, 0, size.x, size.y);
-			doPaint(gc);
-		} finally {
-			gc.dispose();
-		}
-
-		dest.drawImage(fBuffer, 0, 0);
-	}
-
-	abstract public void doPaint(GC gc);
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java
deleted file mode 100644
index 9c5db3d..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import java.io.*;
-
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.compare.*;
-import org.eclipse.compare.structuremergeviewer.IStructureComparator;
-
-/**
- * A buffer for a workspace resource.
- */
-public class BufferedResourceNode extends ResourceNode {
-	
-	private boolean fDirty= false;
-	private IFile fDeleteFile;
-		
-	/**
-	 * Creates a <code>ResourceNode</code> for the given resource.
-	 *
-	 * @param resource the resource
-	 */
-	public BufferedResourceNode(IResource resource) {
-		super(resource);
-	}
-			
-	protected IStructureComparator createChild(IResource child) {
-		return new BufferedResourceNode(child);
-	}
-		
-	public void setContent(byte[] contents) {
-		fDirty= true;
-		super.setContent(contents);
-	}	
-
-	/**
-	 * Commits buffered contents to resource.
-	 */
-	public void commit(IProgressMonitor pm) throws CoreException {
-		if (fDirty) {
-			
-			if (fDeleteFile != null) {
-				fDeleteFile.delete(true, true, pm);
-				return;
-			}
-			
-			IResource resource= getResource();
-			if (resource instanceof IFile) {
-				ByteArrayInputStream is= new ByteArrayInputStream(getContent());
-				try {
-					IFile file= (IFile) resource;
-					if (file.exists())
-						file.setContents(is, false, true, pm);
-					else
-						file.create(is, false, pm);
-					fDirty= false;
-				} finally {
-					if (is != null)
-						try {
-							is.close();
-						} catch(IOException ex) {
-						}
-				}
-			}
-		}
-	}
-	
-	public ITypedElement replace(ITypedElement child, ITypedElement other) {
-		
-		if (child == null) {	// add resource
-			// create a node without a resource behind it!
-			IResource resource= getResource();
-			if (resource instanceof IFolder) {
-				IFolder folder= (IFolder) resource;
-				IFile file= folder.getFile(other.getName());
-				child= new BufferedResourceNode(file);
-			}
-		}
-		
-		if (other == null) {	// delete resource
-			IResource resource= getResource();
-			if (resource instanceof IFolder) {
-				IFolder folder= (IFolder) resource;
-				IFile file= folder.getFile(child.getName());
-				if (file != null && file.exists()) {
-					fDeleteFile= file;
-					fDirty= true;
-				}
-			}
-			return null;
-		}
-		
-		if (other instanceof IStreamContentAccessor && child instanceof IEditableContent) {
-			IEditableContent dst= (IEditableContent) child;
-			
-			try {
-				InputStream is= ((IStreamContentAccessor)other).getContents();
-				byte[] bytes= Utilities.readBytes(is);
-				if (bytes != null)
-					dst.setContent(bytes);
-			} catch (CoreException ex) {
-			}
-		}
-		return child;
-	}
-}
-
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java
deleted file mode 100644
index 824ed3e..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import java.util.ResourceBundle;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.compare.CompareConfiguration;
-
-/**
- * Toggles a boolean property of an <code>ICompareConfiguration</code>.
- */
-public class ChangePropertyAction extends Action {
-
-	private CompareConfiguration fCompareConfiguration;
-	private String fPropertyKey;
-	private ResourceBundle fBundle;
-	private String fPrefix;
-
-
-	public ChangePropertyAction(ResourceBundle bundle, CompareConfiguration cc, String rkey, String pkey) {
-		fPropertyKey= pkey;
-		fBundle= bundle;
-		fPrefix= rkey;
-		Utilities.initAction(this, fBundle, fPrefix);
-		setCompareConfiguration(cc);
-	}
-
-	public void run() {
-		boolean b= !Utilities.getBoolean(fCompareConfiguration, fPropertyKey, false);
-		setChecked(b);
-		if (fCompareConfiguration != null)
-			fCompareConfiguration.setProperty(fPropertyKey, new Boolean(b));
-	}
-
-	public void setChecked(boolean state) {
-		super.setChecked(state);
-		Utilities.initToggleAction(this, fBundle, fPrefix, state);
-	}
-	
-	public void setCompareConfiguration(CompareConfiguration cc) {
-		fCompareConfiguration= cc;
-		setChecked(Utilities.getBoolean(fCompareConfiguration, fPropertyKey, false));
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java
deleted file mode 100644
index 787c3fb..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.ColorDialog;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-
-import org.eclipse.jface.resource.JFaceResources;
-
-/**
- * A "button" of a certain color determined by the color picker.
- */
-public class ColorEditor {
-	
-	private Point fExtent;
-	private Image fImage;
-	private RGB fColorValue;
-	private Color fColor;
-	private Button fButton;
-	
-	public ColorEditor(Composite parent) {
-		
-		fButton= new Button(parent, SWT.PUSH);
-		fExtent= computeImageSize(parent);
-		fImage= new Image(parent.getDisplay(), fExtent.x, fExtent.y);
-		
-		GC gc= new GC(fImage);
-		gc.setBackground(fButton.getBackground());
-		gc.fillRectangle(0, 0, fExtent.x, fExtent.y);
-		gc.dispose();
-		
-		fButton.setImage(fImage);
-		fButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				ColorDialog colorDialog= new ColorDialog(fButton.getShell());
-				colorDialog.setRGB(fColorValue);
-				RGB newColor = colorDialog.open();
-				if (newColor != null) {
-					fColorValue= newColor;
-					updateColorImage();
-				}
-			}
-		});
-		
-		fButton.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent event) {
-				if (fImage != null)  {
-					fImage.dispose();
-					fImage= null;
-				}
-				if (fColor != null) {
-					fColor.dispose();
-					fColor= null;
-				}
-			}
-		});
-	}
-	
-	public RGB getColorValue() {
-		return fColorValue;
-	}
-	
-	public void setColorValue(RGB rgb) {
-		fColorValue= rgb;
-		updateColorImage();
-	}
-	
-	public Button getButton() {
-		return fButton;
-	}
-	
-	protected void updateColorImage() {
-		
-		Display display= fButton.getDisplay();
-		
-		GC gc= new GC(fImage);
-		gc.setForeground(display.getSystemColor(SWT.COLOR_BLACK));
-		gc.drawRectangle(0, 2, fExtent.x - 1, fExtent.y - 4);
-		
-		if (fColor != null)
-			fColor.dispose();
-			
-		fColor= new Color(display, fColorValue);
-		gc.setBackground(fColor);
-		gc.fillRectangle(1, 3, fExtent.x - 2, fExtent.y - 5);
-		gc.dispose();
-		
-		fButton.setImage(fImage);
-	}
-	
-	protected Point computeImageSize(Control window) {
-		GC gc= new GC(window);
-		Font f= JFaceResources.getFontRegistry().get(JFaceResources.DEFAULT_FONT);
-		gc.setFont(f);
-		int height= gc.getFontMetrics().getHeight();
-		gc.dispose();
-		Point p= new Point(height * 3 - 6, height);
-		return p;
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
deleted file mode 100644
index d502e93..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-
-import org.eclipse.ui.IObjectActionDelegate;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.compare.CompareConfiguration;
-import org.eclipse.compare.CompareUI;
-
-
-/*
- * The "Compare with each other" action
- */
-public class CompareAction implements IObjectActionDelegate {
-
-	private ResourceCompareInput fInput;
-	private IWorkbenchPage fWorkbenchPage;
-	private ISelection fSelection;
-
-	public void run(IAction action) {
-		if (fInput != null) {
-			fInput.setSelection(fSelection);
-			fInput.initializeCompareConfiguration();
-			CompareUI.openCompareEditorOnPage(fInput, fWorkbenchPage);
-			fInput= null;	// don't reuse this input!
-		}
-	}
-
-	public void selectionChanged(IAction action, ISelection selection) {
-		if (fInput == null) {
-			CompareConfiguration cc= new CompareConfiguration();
-			// buffered merge mode: don't ask for confirmation
-			// when switching between modified resources
-			cc.setProperty(CompareEditor.CONFIRM_SAVE_PROPERTY, new Boolean(false));
-						
-			fInput= new ResourceCompareInput(cc);
-		}
-		fSelection= selection;
-		action.setEnabled(fInput.isEnabled(selection));
-	}
-
-	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
-		fWorkbenchPage= targetPart.getSite().getPage();
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java
deleted file mode 100644
index 335a023..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.compare.CompareEditorInput;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.util.Assert;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
-
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.ui.actions.WorkspaceModifyOperation;
-
-
-public class CompareDialog extends ResizableDialog implements IPropertyChangeListener {
-		
-	private CompareEditorInput fCompareEditorInput;
-	private Button fCommitButton;
-
-
-	CompareDialog(Shell shell, CompareEditorInput input) {
-		super(shell, null);
-		
-		Assert.isNotNull(input);
-		fCompareEditorInput= input;
-		fCompareEditorInput.addPropertyChangeListener(this);
-		setHelpContextId(ICompareContextIds.COMPARE_DIALOG);
-	}
-	
-	public boolean close() {
-		if (super.close()) {
-			if (fCompareEditorInput != null)
-				fCompareEditorInput.addPropertyChangeListener(this);
-			return true;
-		}
-		return false;
-	}
-	
-	/* (non-Javadoc)
-	 * Method declared on Dialog.
-	 */
-	protected void createButtonsForButtonBar(Composite parent) {
-		fCommitButton= createButton(parent, IDialogConstants.OK_ID, Utilities.getString("CompareDialog.commitAction.label"), true); //$NON-NLS-1$
-		fCommitButton.setEnabled(false);
-		createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
-	}
-
-	public void propertyChange(PropertyChangeEvent event) {
-		if (fCommitButton != null && fCompareEditorInput != null)
-			fCommitButton.setEnabled(fCompareEditorInput.isSaveNeeded());
-	}
-	
-	/* (non-Javadoc)
-	 * Method declared on Dialog.
-	 */
-	protected Control createDialogArea(Composite parent2) {
-						
-		Composite parent= (Composite) super.createDialogArea(parent2);
-
-		Control c= fCompareEditorInput.createContents(parent);
-		c.setLayoutData(new GridData(GridData.FILL_BOTH));
-		
-		Shell shell= c.getShell();
-		shell.setText(fCompareEditorInput.getTitle());
-		shell.setImage(fCompareEditorInput.getTitleImage());
-		applyDialogFont(parent);
-		return parent;
-	}
-		
-	/* (non-Javadoc)
-	 * Method declared on Window.
-	 */
-	public int open() {
-		
-		int rc= super.open();
-		
-		if (rc == OK && fCompareEditorInput.isSaveNeeded()) {
-						
-			WorkspaceModifyOperation operation= new WorkspaceModifyOperation() {
-				public void execute(IProgressMonitor pm) throws CoreException {
-					fCompareEditorInput.saveChanges(pm);
-				}
-			};
-						
-			Shell shell= getParentShell();
-			ProgressMonitorDialog pmd= new ProgressMonitorDialog(shell);				
-			try {
-				operation.run(pmd.getProgressMonitor());				
-				
-			} catch (InterruptedException x) {
-			} catch (OperationCanceledException x) {
-			} catch (InvocationTargetException x) {
-				String title= Utilities.getString("CompareDialog.saveErrorTitle"); //$NON-NLS-1$
-				String msg= Utilities.getString("CompareDialog.saveErrorMessage"); //$NON-NLS-1$
-				MessageDialog.openError(shell, title, msg + x.getTargetException().getMessage());
-			}
-		}
-		
-		return rc;
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java
deleted file mode 100644
index 8342461..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.*;
-
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.util.*;
-
-import org.eclipse.ui.*;
-import org.eclipse.ui.actions.WorkspaceModifyOperation;
-import org.eclipse.ui.help.WorkbenchHelp;
-import org.eclipse.ui.part.EditorPart;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.*;
-
-import org.eclipse.compare.*;
-
-
-/**
- * A CompareEditor takes a ICompareEditorInput as input.
- * Most functionality is delegated to the ICompareEditorInput.
- */
-public class CompareEditor extends EditorPart implements IReusableEditor {
-	
-	/**
-	 * Internal property change listener for handling changes in the editor's input.
-	 */
-	class PropertyChangeListener implements IPropertyChangeListener {
-		/*
-		 * @see IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
-		 */
-		public void propertyChange(PropertyChangeEvent event) {
-			CompareEditor.this.propertyChange(event);
-		}
-	};
-
-	public final static String CONFIRM_SAVE_PROPERTY= "org.eclipse.compare.internal.CONFIRM_SAVE_PROPERTY"; //$NON-NLS-1$
-	
-	private IActionBars fActionBars;
-	/** The editor's property change listener. */
-	private IPropertyChangeListener fPropertyChangeListener= new PropertyChangeListener();
-	/** the SWT control */
-	private Control fControl;
-	
-	
-	public CompareEditor() {
-	}
-		
-	/* package */ CompareConfiguration getCompareConfiguration() {
-		IEditorInput input= getEditorInput();
-		if (input instanceof CompareEditorInput)
-			return ((CompareEditorInput)input).getCompareConfiguration();
-		return null;
-	}
-				
-	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
-		
-		if (!(input instanceof CompareEditorInput))
-			throw new PartInitException(Utilities.getString("CompareEditor.invalidInput")); //$NON-NLS-1$
-				
-		setSite(site);
-		setInput(input);
-	}
-	
-	public void setInput(IEditorInput input) {
-		try {
-			doSetInput(input);			
-		} catch (CoreException x) {
-			String title= Utilities.getString("CompareEditor.error.setinput.title"); //$NON-NLS-1$
-			String msg= Utilities.getString("CompareEditor.error.setinput.message"); //$NON-NLS-1$
-			ErrorDialog.openError(getSite().getShell(), title, msg, x.getStatus());
-		}				
-	}
-	
-	public void doSetInput(IEditorInput input) throws CoreException {
-	
-		if (!(input instanceof CompareEditorInput)) {
-			IStatus s= new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, IStatus.OK, Utilities.getString("CompareEditor.invalidInput"), null); //$NON-NLS-1$
-			throw new CoreException(s);
-		}
-
-		IEditorInput oldInput= getEditorInput();
-		if (oldInput instanceof IPropertyChangeNotifier)
-			((IPropertyChangeNotifier)input).removePropertyChangeListener(fPropertyChangeListener);
-			
-		super.setInput(input);
-		
-		CompareEditorInput cei= (CompareEditorInput) input;
-
-		setTitleImage(cei.getTitleImage());
-		setTitle(cei.getTitle());
-				
-		if (input instanceof IPropertyChangeNotifier)
-			((IPropertyChangeNotifier)input).addPropertyChangeListener(fPropertyChangeListener);
-			
-		if (oldInput != null) {
-			if (fControl != null && !fControl.isDisposed()) {
-				Point oldSize= fControl.getSize();
-				Composite parent= fControl.getParent();
-				fControl.dispose();
-				createPartControl(parent);
-				if (fControl != null)
-					fControl.setSize(oldSize);
-			}
-		}
-	}
-	
-	public IActionBars getActionBars() {
-		return fActionBars;
-	}
-	
-	public void setActionBars(IActionBars actionBars) {
-		fActionBars= actionBars;
-	}
-	
-	/*
-	 * @see IDesktopPart#createPartControl(Composite)
-	 */
-	public void createPartControl(Composite parent) {
-		parent.setData(this);
-		
-		IEditorInput input= getEditorInput();
-		if (input instanceof CompareEditorInput) {
-			fControl= ((CompareEditorInput) input).createContents(parent);
-			WorkbenchHelp.setHelp(fControl, ICompareContextIds.COMPARE_EDITOR);
-		}
-	}
-	
-	/*
-	 * @see DesktopPart#dispose
-	 */
-	public void dispose() {
-	
-		IEditorInput input= getEditorInput();
-		if (input instanceof IPropertyChangeNotifier)
-			((IPropertyChangeNotifier)input).removePropertyChangeListener(fPropertyChangeListener);
-								
-		super.dispose();
-		
-		fPropertyChangeListener= null;
-	}
-			
-	/*
-	 * @see IDesktopPart#setFocus
-	 */
-	public void setFocus() {
-		IEditorInput input= getEditorInput();
-		if (input instanceof CompareEditorInput)
-			((CompareEditorInput)input).setFocus();
-	}
-	
-	/**
-	 * Returns false because the editor doesn't support "Save As...".
-	 */
-	public boolean isSaveAsAllowed() {
-		return false;
-	}
-	
-	public void gotoMarker(IMarker marker) {
-	}
-	
-	/**
-	 * Always throws an AssertionFailedException.
-	 */
-	/*
-	 * @see IEditorPart#doSaveAs()
-	 */
-	public void doSaveAs() {
-		Assert.isTrue(false); // Save As not supported for CompareEditor
-	}
-	
-	/*
-	 * @see IEditorPart#doSave()
-	 */
-	public void doSave(IProgressMonitor progressMonitor) {
-		
-		final IEditorInput input= getEditorInput();
-		
-		WorkspaceModifyOperation operation= new WorkspaceModifyOperation() {
-			public void execute(IProgressMonitor pm) throws CoreException {
-				if (input instanceof CompareEditorInput)
-					((CompareEditorInput)input).saveChanges(pm);
-			}
-		};
-
-		Shell shell= getSite().getShell();
-		
-		try {
-			
-			operation.run(progressMonitor);
-									
-			firePropertyChange(PROP_DIRTY);
-			
-		} catch (InterruptedException x) {
-		} catch (OperationCanceledException x) {
-		} catch (InvocationTargetException x) {
-			String title= Utilities.getString("CompareEditor.saveError.title"); //$NON-NLS-1$
-			String reason= x.getTargetException().getMessage();
-			MessageDialog.openError(shell, title, Utilities.getFormattedString("CompareEditor.cantSaveError", reason));	//$NON-NLS-1$
-		}
-	}	
-		
-	/*
-	 * @see IEditorPart#isDirty()
-	 */
-	public boolean isDirty() {
-		IEditorInput input= getEditorInput();
-		if (input instanceof CompareEditorInput)
-			return ((CompareEditorInput)input).isSaveNeeded();
-		return false;
-	}
-	
-	public void propertyChange(PropertyChangeEvent event) {
-		if (isDirty())
-			firePropertyChange(PROP_DIRTY);
-	}
-}
-
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
deleted file mode 100644
index 87735fe..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import java.util.ResourceBundle;
-
-import org.eclipse.jface.action.*;
-
-import org.eclipse.ui.*;
-import org.eclipse.ui.help.WorkbenchHelp;
-import org.eclipse.ui.part.EditorActionBarContributor;
-
-import org.eclipse.compare.*;
-
-
-public class CompareEditorContributor extends EditorActionBarContributor {
-	
-	private IEditorPart fActiveEditorPart= null;
-
-	private IgnoreWhiteSpaceAction fIgnoreWhitespace;
-	private NavigationAction fNext;
-	private NavigationAction fPrevious;
-	
-	private NavigationAction fToolbarNext;
-	private NavigationAction fToolbarPrevious;
-
-
-	public CompareEditorContributor() {
-		ResourceBundle bundle= CompareUIPlugin.getResourceBundle();
-		
-		fIgnoreWhitespace= new IgnoreWhiteSpaceAction(bundle, null);
-		WorkbenchHelp.setHelp(fIgnoreWhitespace, ICompareContextIds.IGNORE_WHITESPACE_ACTION);
-		
-		fNext= new NavigationAction(bundle, true);
-		WorkbenchHelp.setHelp(fNext, ICompareContextIds.GLOBAL_NEXT_DIFF_ACTION);
-		
-		fPrevious= new NavigationAction(bundle, false);
-		WorkbenchHelp.setHelp(fPrevious, ICompareContextIds.GLOBAL_PREVIOUS_DIFF_ACTION);
-		
-		fToolbarNext= new NavigationAction(bundle, true);
-		WorkbenchHelp.setHelp(fToolbarNext,ICompareContextIds.NEXT_DIFF_ACTION);
-		
-		fToolbarPrevious= new NavigationAction(bundle, false);
-		WorkbenchHelp.setHelp(fToolbarPrevious, ICompareContextIds.PREVIOUS_DIFF_ACTION);
-	}
-
-	/*
-	 * @see EditorActionBarContributor#contributeToToolBar(IToolBarManager)
-	 */
-	public void contributeToToolBar(IToolBarManager tbm) {
-		tbm.add(new Separator());
-		tbm.add(fIgnoreWhitespace);
-		tbm.add(fToolbarNext);
-		tbm.add(fToolbarPrevious);
-	}
-	
-	/*
-	 * @see EditorActionBarContributor#contributeToMenu(IMenuManager)
-	 */
-	public void contributeToMenu(IMenuManager menuManager) {
-	}
-
-	public void setActiveEditor(IEditorPart targetEditor) {
-				
-		if (fActiveEditorPart == targetEditor)
-			return;
-			
-		fActiveEditorPart= targetEditor;
-		
-		if (fActiveEditorPart != null) {
-			IEditorInput input= fActiveEditorPart.getEditorInput();
-			if (input instanceof CompareEditorInput) {
-				CompareEditorInput compareInput= (CompareEditorInput) input;
-				fNext.setCompareEditorInput(compareInput);
-				fPrevious.setCompareEditorInput(compareInput);
-				// Begin fix http://bugs.eclipse.org/bugs/show_bug.cgi?id=20105
-				fToolbarNext.setCompareEditorInput(compareInput);
-				fToolbarPrevious.setCompareEditorInput(compareInput);
-				// End fix http://bugs.eclipse.org/bugs/show_bug.cgi?id=20105
-			}
-		}
-			
-		if (targetEditor instanceof CompareEditor) {
-			IActionBars actionBars= getActionBars();
-		
-			CompareEditor editor= (CompareEditor) targetEditor;
-			editor.setActionBars(actionBars);
-		
-			actionBars.setGlobalActionHandler(IWorkbenchActionConstants.NEXT, fNext);
-			actionBars.setGlobalActionHandler(IWorkbenchActionConstants.PREVIOUS, fPrevious);
-
-			CompareConfiguration cc= editor.getCompareConfiguration();
-			fIgnoreWhitespace.setCompareConfiguration(cc);
-		}		
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java
deleted file mode 100644
index b6fb85f..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-public class CompareMessages {
-
-	private static final String RESOURCE_BUNDLE= "org.eclipse.compare.internal.CompareMessages";//$NON-NLS-1$
-
-	private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE);
-
-	private CompareMessages() {
-	}
-
-	public static String getString(String key) {
-		try {
-			return fgResourceBundle.getString(key);
-		} catch (MissingResourceException e) {
-			return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$
-		}
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties
deleted file mode 100644
index e29774d..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties
+++ /dev/null
@@ -1,58 +0,0 @@
-###############################################################################
-# Copyright (c) 2000, 2003 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials 
-# are made available under the terms of the Common Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/cpl-v10.html
-# 
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-ComparePlugin.internal_error= Internal Error
-ExceptionDialog.seeErrorLogMessage= See error log for more details.
-
-#
-# Title format for CompareViewerSwitchingPane
-#
-CompareViewerSwitchingPane.Titleformat= {0}  ({1})
-
-#
-# Title message for StructureDiffViewer if no structural differences could be found
-#
-StructureDiffViewer.NoStructuralDifferences= No Structural Differences
-StructureDiffViewer.StructureError= Can't Compare Structures
-
-#
-# TextMergeViewer
-#
-TextMergeViewer.cursorPosition.format= {0} : {1}
-
-TextMergeViewer.beforeLine.format= before line {0}
-TextMergeViewer.range.format= {0} : {1}
-
-TextMergeViewer.changeType.addition= addition
-TextMergeViewer.changeType.deletion= deletion
-TextMergeViewer.changeType.change= change
-
-TextMergeViewer.direction.outgoing= outgoing
-TextMergeViewer.direction.incoming= incoming
-TextMergeViewer.direction.conflicting= conflicting
-
-TextMergeViewer.diffType.format= {0} {1}
-
-TextMergeViewer.diffDescription.noDiff.format= no diff
-TextMergeViewer.diffDescription.diff.format= {0} #{1} (Left: {2}, Right: {3})
-TextMergeViewer.statusLine.format= Left: {0}, Right: {1}, {2}
-
-TextMergeViewer.atEnd.title= Go to Next Difference
-TextMergeViewer.atEnd.message= End of document reached. Continue at beginning?
-				
-TextMergeViewer.atBeginning.title= Go to Previous Difference
-TextMergeViewer.atBeginning.message= Beginning of document reached. Continue at end?
-
-CompareNavigator.atEnd.title= Go to Next Difference
-CompareNavigator.atEnd.message= Last difference reached.
-				
-CompareNavigator.atBeginning.title= Go to Previous Difference
-CompareNavigator.atBeginning.message= First difference reached.
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java
deleted file mode 100644
index 9812a86..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.dialogs.MessageDialog;
-
-import org.eclipse.compare.CompareEditorInput;
-import org.eclipse.compare.*;
-
-/**
- * Supports cross-pane navigation through differences.
- * XXX: Design is as it is because the feature had to be added without touching API.
- */
-public class CompareNavigator {
-	
-	private boolean fLastDirection= true;
-	private CompareViewerSwitchingPane[] fPanes;
-	// Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106
-	private boolean fNextFirstTime= true;
-	
-	public CompareNavigator(CompareViewerSwitchingPane[] panes) {
-		fPanes= panes;
-	}
-
-	public CompareViewerSwitchingPane[] getPanes() {
-		return fPanes;
-	}
-	
-	public void selectChange(boolean next) {
-		
-		fLastDirection= next;
-
-		// Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106
-		if (next && fNextFirstTime && mustOpen()) {
-			fNextFirstTime= false;
-			openElement();
-		}
-		
-		// find most down stream CompareViewerPane
-		int n= 0;
-		INavigatable[] navigators= new INavigatable[4];
-		for (int i= 0; i < fPanes.length; i++) {
-			navigators[n]= getNavigator(fPanes[i]);
-			if (navigators[n] != null)
-				n++;
-		}
-									
-		while (n > 0) {
-			n--;
-			if (navigators[n].gotoDifference(next)) {
-				// at end of this navigator
-				continue;
-			} else // not at end
-				return;
-		}
-		// beep
-		if (fPanes[0] != null) {
-			Control c= fPanes[0].getContent();
-			if (c != null) {
-				Display display= c.getDisplay();
-				if (display != null)
-					display.beep();
-
-				String title;
-				String message;
-				if (next) {
-					title= CompareMessages.getString("CompareNavigator.atEnd.title"); //$NON-NLS-1$
-					message= CompareMessages.getString("CompareNavigator.atEnd.message"); //$NON-NLS-1$
-				} else {
-					title= CompareMessages.getString("CompareNavigator.atBeginning.title"); //$NON-NLS-1$
-					message= CompareMessages.getString("CompareNavigator.atBeginning.message"); //$NON-NLS-1$
-				}
-				MessageDialog.openInformation(c.getShell(), title, message);
-			}
-		}
-	}
-
-	private static INavigatable getNavigator(CompareViewerSwitchingPane pane) {
-		if (pane == null)
-			return null;
-		if (pane.isEmpty())
-			return null;
-		Viewer viewer= pane.getViewer();
-		if (viewer == null)
-			return null;
-		Control control= viewer.getControl();
-		if (control == null)
-			return null;
-		Object data= control.getData(INavigatable.NAVIGATOR_PROPERTY);
-		if (data instanceof INavigatable)
-			return (INavigatable) data;
-		return null;
-	}
-	
-	private static CompareNavigator findNavigator(Control c) {
-		while (c != null && !c.isDisposed()) {	// PR 1GEUVV2
-			Object data= c.getData();
-			if (data instanceof CompareEditorInput) {
-				CompareEditorInput cei= (CompareEditorInput) data;
-				Object adapter= cei.getAdapter(CompareNavigator.class);
-				if (adapter instanceof CompareNavigator)
-					return (CompareNavigator)adapter;
-			}
-			c= c.getParent();
-		}
-		return null;
-	}
-	
-	private boolean resetDirection() {
-		boolean last= fLastDirection;
-		fLastDirection= true;
-		return last;
-	}
-	
-	public static boolean getDirection(Control c) {
-		CompareNavigator nav= findNavigator(c);
-		if (nav != null)
-			return nav.resetDirection();
-		return true;
-	}
-	
-	/*
-	 * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106
-	 */
-	private boolean mustOpen() {
-		if (fPanes == null || fPanes.length == 0)
-			return false;
-		for (int i= 1; i < fPanes.length; i++) {
-			CompareViewerSwitchingPane pane= fPanes[i];
-			if (pane != null && pane.getInput() != null)
-				return false;
-		}
-		return true;
-	}
-	
-	/*
-	 * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106
-	 */
-	private void openElement() {
-		if (fPanes == null || fPanes.length == 0)
-			return;
-		IOpenable openable= getOpenable(fPanes[0]);
-		if (openable != null) {
-			openable.openSelected();
-		}
-	}
-	
-	/*
-	 * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106
-	 */
-	private static IOpenable getOpenable(CompareViewerSwitchingPane pane) {
-		if (pane == null)
-			return null;
-		if (pane.isEmpty())
-			return null;
-		Viewer viewer= pane.getViewer();
-		if (viewer == null)
-			return null;
-		Control control= viewer.getControl();
-		if (control == null)
-			return null;
-		Object data= control.getData(IOpenable.OPENABLE_PROPERTY);
-		if (data instanceof IOpenable)
-			return (IOpenable) data;
-		return null;
-	}	
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
deleted file mode 100644
index 9bfc879..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import java.util.*;
-import java.io.*;
-
-import org.eclipse.swt.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.Image;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.preference.*;
-import org.eclipse.jface.util.*;
-
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-import org.eclipse.ui.help.WorkbenchHelp;
-import org.eclipse.ui.texteditor.AbstractTextEditor;
-
-import org.eclipse.compare.*;
-import org.eclipse.compare.contentmergeviewer.TextMergeViewer;
-import org.eclipse.compare.structuremergeviewer.*;
-
-
-public class ComparePreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
-	
-	class FakeInput implements ITypedElement, IStreamContentAccessor {
-		String fContent;
-		
-		FakeInput(String name) {
-			fContent= loadPreviewContentFromFile(name);
-		}
-		public Image getImage() {
-			return null;
-		}
-		public String getName() {
-			return "no name";	//$NON-NLS-1$
-		}
-		public String getType() {
-			return "no type";	//$NON-NLS-1$
-		}
-		public InputStream getContents() {
-			return new ByteArrayInputStream(fContent.getBytes());
-		}
-	};
-
-	private static final String PREFIX= CompareUIPlugin.PLUGIN_ID + "."; //$NON-NLS-1$
-	public static final String OPEN_STRUCTURE_COMPARE= PREFIX + "OpenStructureCompare"; //$NON-NLS-1$
-	public static final String SYNCHRONIZE_SCROLLING= PREFIX + "SynchronizeScrolling"; //$NON-NLS-1$
-	public static final String SHOW_PSEUDO_CONFLICTS= PREFIX + "ShowPseudoConflicts"; //$NON-NLS-1$
-	public static final String INITIALLY_SHOW_ANCESTOR_PANE= PREFIX + "InitiallyShowAncestorPane"; //$NON-NLS-1$
-	public static final String PREF_SAVE_ALL_EDITORS= PREFIX + "SaveAllEditors"; //$NON-NLS-1$
-	public static final String SHOW_MORE_INFO= PREFIX + "ShowMoreInfo"; //$NON-NLS-1$
-	public static final String IGNORE_WHITESPACE= PREFIX + "IgnoreWhitespace"; //$NON-NLS-1$
-	//public static final String USE_SPLINES= PREFIX + "UseSplines"; //$NON-NLS-1$
-	public static final String USE_SINGLE_LINE= PREFIX + "UseSingleLine"; //$NON-NLS-1$
-	//public static final String USE_RESOLVE_UI= PREFIX + "UseResolveUI"; //$NON-NLS-1$
-	
-	
-	private TextMergeViewer fPreviewViewer;
-	private IPropertyChangeListener	fPreferenceChangeListener;
-	private CompareConfiguration fCompareConfiguration;
-	private OverlayPreferenceStore fOverlayStore;
-	private Map fCheckBoxes= new HashMap();
-	private SelectionListener fCheckBoxListener;
-
-
-	public final OverlayPreferenceStore.OverlayKey[] fKeys= new OverlayPreferenceStore.OverlayKey[] {	
-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, OPEN_STRUCTURE_COMPARE),
-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, SYNCHRONIZE_SCROLLING),
-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, SHOW_PSEUDO_CONFLICTS),
-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, INITIALLY_SHOW_ANCESTOR_PANE),
-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, SHOW_MORE_INFO),
-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IGNORE_WHITESPACE),
-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PREF_SAVE_ALL_EDITORS),
-		
-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND),
-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT),
-		
-		//new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, USE_SPLINES),
-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, USE_SINGLE_LINE),
-		//new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, USE_RESOLVE_UI),
-	};
-	
-	
-	public static void initDefaults(IPreferenceStore store) {
-		store.setDefault(OPEN_STRUCTURE_COMPARE, true);
-		store.setDefault(SYNCHRONIZE_SCROLLING, true);
-		store.setDefault(SHOW_PSEUDO_CONFLICTS, false);
-		store.setDefault(INITIALLY_SHOW_ANCESTOR_PANE, false);
-		store.setDefault(SHOW_MORE_INFO, false);
-		store.setDefault(IGNORE_WHITESPACE, false);
-		store.setDefault(PREF_SAVE_ALL_EDITORS, false);
-		//store.setDefault(USE_SPLINES, false);
-		store.setDefault(USE_SINGLE_LINE, true);
-		//store.setDefault(USE_RESOLVE_UI, false);
-		
-		store.setDefault(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT, true);
-	}
-
-	public ComparePreferencePage() {
-		
-		//setDescription(Utilities.getString("ComparePreferencePage.description"));	//$NON-NLS-1$
-		
-		setPreferenceStore(CompareUIPlugin.getDefault().getPreferenceStore());
-		
-		fOverlayStore= new OverlayPreferenceStore(getPreferenceStore(), fKeys);
-		fPreferenceChangeListener= new IPropertyChangeListener() {
-			public void propertyChange(PropertyChangeEvent event) {
-				String key= event.getProperty();
-				if (key.equals(INITIALLY_SHOW_ANCESTOR_PANE)) {
-					boolean b= fOverlayStore.getBoolean(INITIALLY_SHOW_ANCESTOR_PANE);
-					if (fCompareConfiguration != null) {
-						fCompareConfiguration.setProperty(INITIALLY_SHOW_ANCESTOR_PANE, new Boolean(b));
-					}
-				}
-			}
-		};
-		fOverlayStore.addPropertyChangeListener(fPreferenceChangeListener);
-	}
-	
-	/*
-	 * @see IWorkbenchPreferencePage#init()
-	 */
-	public void init(IWorkbench workbench) {
-	}	
-
-	/*
-	 * @see PreferencePage#performOk()
-	 */
-	public boolean performOk() {
-		fOverlayStore.propagate();
-		return true;
-	}
-	
-	/*
-	 * @see PreferencePage#performDefaults()
-	 */
-	protected void performDefaults() {
-		
-		fOverlayStore.loadDefaults();
-		initializeFields();
-		
-		super.performDefaults();
-	}
-	
-	/*
-	 * @see DialogPage#dispose()
-	 */
-	public void dispose() {
-				
-		if (fOverlayStore != null) {
-			if (fPreferenceChangeListener != null) {
-				fOverlayStore.removePropertyChangeListener(fPreferenceChangeListener);
-				fPreferenceChangeListener= null;
-			}
-			fOverlayStore.stop();
-			fOverlayStore= null;
-		}
-		
-		super.dispose();
-	}
-
-	static public boolean getSaveAllEditors() {
-		IPreferenceStore store= CompareUIPlugin.getDefault().getPreferenceStore();
-		return store.getBoolean(PREF_SAVE_ALL_EDITORS);
-	}
-	
-	static public void setSaveAllEditors(boolean value) {
-		IPreferenceStore store= CompareUIPlugin.getDefault().getPreferenceStore();
-		store.setValue(PREF_SAVE_ALL_EDITORS, value);
-	}	
-
-	/*
-	 * @see PreferencePage#createContents(Composite)
-	 */
-	protected Control createContents(Composite parent) {
-		
-		WorkbenchHelp.setHelp(parent, ICompareContextIds.COMPARE_PREFERENCE_PAGE);
-		
-		fOverlayStore.load();
-		fOverlayStore.start();
-		
-		TabFolder folder= new TabFolder(parent, SWT.NONE);
-		folder.setLayout(new TabFolderLayout());	
-		folder.setLayoutData(new GridData(GridData.FILL_BOTH));
-		
-		TabItem item= new TabItem(folder, SWT.NONE);
-		item.setText(Utilities.getString("ComparePreferencePage.generalTab.label"));	//$NON-NLS-1$
-		//item.setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_CFILE));
-		item.setControl(createGeneralPage(folder));
-		
-		item= new TabItem(folder, SWT.NONE);
-		item.setText(Utilities.getString("ComparePreferencePage.textCompareTab.label"));	//$NON-NLS-1$
-		//item.setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_CFILE));
-		item.setControl(createTextComparePage(folder));
-		
-		initializeFields();
-		Dialog.applyDialogFont(folder);
-		return folder;
-	}
-	
-	private Control createGeneralPage(Composite parent) {
-		Composite composite= new Composite(parent, SWT.NULL);
-		GridLayout layout= new GridLayout();
-		layout.numColumns= 1;
-		composite.setLayout(layout);
-				
-		addCheckBox(composite, "ComparePreferencePage.structureCompare.label", OPEN_STRUCTURE_COMPARE, 0);	//$NON-NLS-1$
-		addCheckBox(composite, "ComparePreferencePage.showMoreInfo.label", SHOW_MORE_INFO, 0);	//$NON-NLS-1$
-		addCheckBox(composite, "ComparePreferencePage.ignoreWhitespace.label", IGNORE_WHITESPACE, 0);	//$NON-NLS-1$
-		
-		// a spacer
-		new Label(composite, SWT.NONE);
-
-		addCheckBox(composite, "ComparePreferencePage.saveBeforePatching.label", PREF_SAVE_ALL_EDITORS, 0);	//$NON-NLS-1$
-		
-		return composite;
-	}
-	
-	private Control createTextComparePage(Composite parent) {
-		
-		Composite composite= new Composite(parent, SWT.NULL);
-		GridLayout layout= new GridLayout();
-		layout.numColumns= 1;
-		composite.setLayout(layout);
-				
-		addCheckBox(composite, "ComparePreferencePage.synchronizeScrolling.label", SYNCHRONIZE_SCROLLING, 0);	//$NON-NLS-1$
-		addCheckBox(composite, "ComparePreferencePage.initiallyShowAncestorPane.label", INITIALLY_SHOW_ANCESTOR_PANE, 0);	//$NON-NLS-1$
-		addCheckBox(composite, "ComparePreferencePage.showPseudoConflicts.label", SHOW_PSEUDO_CONFLICTS, 0);	//$NON-NLS-1$
-		
-		//addCheckBox(composite, "ComparePreferencePage.useSplines.label", USE_SPLINES, 0);	//$NON-NLS-1$
-		addCheckBox(composite, "ComparePreferencePage.useSingleLine.label", USE_SINGLE_LINE, 0);	//$NON-NLS-1$
-		//addCheckBox(composite, "ComparePreferencePage.useResolveUI.label", USE_RESOLVE_UI, 0);	//$NON-NLS-1$
-		
-		// a spacer
-		new Label(composite, SWT.NONE);
-		
-		Label previewLabel= new Label(composite, SWT.NULL);
-		previewLabel.setText(Utilities.getString("ComparePreferencePage.preview.label"));	//$NON-NLS-1$
-		
-		Control previewer= createPreviewer(composite);
-		GridData gd= new GridData(GridData.FILL_BOTH);
-		gd.widthHint= convertWidthInCharsToPixels(60);
-		gd.heightHint= convertHeightInCharsToPixels(13);
-		previewer.setLayoutData(gd);
-		
-		return composite;
-	}
-	
-	private Control createPreviewer(Composite parent) {
-				
-		fCompareConfiguration= new CompareConfiguration(fOverlayStore);
-		fCompareConfiguration.setAncestorLabel(Utilities.getString("ComparePreferencePage.ancestor.label"));	//$NON-NLS-1$
-		
-		fCompareConfiguration.setLeftLabel(Utilities.getString("ComparePreferencePage.left.label"));	//$NON-NLS-1$
-		fCompareConfiguration.setLeftEditable(false);
-		
-		fCompareConfiguration.setRightLabel(Utilities.getString("ComparePreferencePage.right.label"));	//$NON-NLS-1$
-		fCompareConfiguration.setRightEditable(false);
-		
-		fPreviewViewer= new TextMergeViewer(parent, SWT.BORDER, fCompareConfiguration);
-		
-		fPreviewViewer.setInput(
-			new DiffNode(Differencer.CONFLICTING,
-				new FakeInput("ComparePreferencePage.previewAncestor"),	//$NON-NLS-1$
-				new FakeInput("ComparePreferencePage.previewLeft"),	//$NON-NLS-1$
-				new FakeInput("ComparePreferencePage.previewRight")	//$NON-NLS-1$
-			)
-		);
-
-		Control c= fPreviewViewer.getControl();
-		c.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				if (fCompareConfiguration != null)
-					fCompareConfiguration.dispose();
-			}
-		});
-		
-		return  c;
-	}
-			
-	private void initializeFields() {
-		
-		Iterator e= fCheckBoxes.keySet().iterator();
-		while (e.hasNext()) {
-			Button b= (Button) e.next();
-			String key= (String) fCheckBoxes.get(b);
-			b.setSelection(fOverlayStore.getBoolean(key));
-		}
-	}
-
-	// overlay stuff
-	
-	private Button addCheckBox(Composite parent, String labelKey, String key, int indentation) {
-		
-		String label= Utilities.getString(labelKey);
-				
-		Button checkBox= new Button(parent, SWT.CHECK);
-		checkBox.setText(label);
-		
-		GridData gd= new GridData(GridData.FILL_HORIZONTAL);
-		gd.horizontalIndent= indentation;
-		gd.horizontalSpan= 2;
-		checkBox.setLayoutData(gd);
-		
-		if (fCheckBoxListener == null) {
-			fCheckBoxListener= new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					Button button= (Button) e.widget;
-					fOverlayStore.setValue((String) fCheckBoxes.get(button), button.getSelection());
-				}
-			};
-		}
-		checkBox.addSelectionListener(fCheckBoxListener);
-		
-		fCheckBoxes.put(checkBox, key);
-		
-		return checkBox;
-	}
-	
-	private String loadPreviewContentFromFile(String key) {
-		
-		String preview= Utilities.getString(key);
-		String separator= System.getProperty("line.separator"); //$NON-NLS-1$
-		StringBuffer buffer= new StringBuffer();
-		for (int i= 0; i < preview.length(); i++) {
-			char c= preview.charAt(i);
-			if (c == '\n')
-				buffer.append(separator);
-			else
-				buffer.append(c);
-		}
-		return buffer.toString();
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
deleted file mode 100644
index f05c019..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
+++ /dev/null
@@ -1,879 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.compare.internal;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.lang.reflect.InvocationTargetException;
-import java.util.*;
-
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.util.Assert;
-import org.eclipse.jface.preference.IPreferenceStore;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.ui.model.IWorkbenchAdapter;
-import org.eclipse.ui.*;
-import org.eclipse.compare.*;
-import org.eclipse.compare.structuremergeviewer.*;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-
-
-/**
- * The Compare UI plug-in defines the entry point to initiate a configurable
- * compare operation on arbitrary resources. The result of the compare
- * is opened into a compare editor where the details can be browsed and
- * edited in dynamically selected structure and content viewers.
- * <p>
- * The Compare UI provides a registry for content and structure compare viewers,
- * which is initialized from extensions contributed to extension points
- * declared by this plug-in.
- * <p>
- * This class is the plug-in runtime class for the 
- * <code>"org.eclipse.compare"</code> plug-in.
- * </p>
- */
-public final class CompareUIPlugin extends AbstractUIPlugin {
-	
-	public static final String DTOOL_NEXT= "dlcl16/next_nav.gif";	//$NON-NLS-1$
-	public static final String CTOOL_NEXT= "clcl16/next_nav.gif";	//$NON-NLS-1$
-	public static final String ETOOL_NEXT= "elcl16/next_nav.gif";	//$NON-NLS-1$
-	
-	public static final String DTOOL_PREV= "dlcl16/prev_nav.gif";	//$NON-NLS-1$
-	public static final String CTOOL_PREV= "clcl16/prev_nav.gif";	//$NON-NLS-1$
-	public static final String ETOOL_PREV= "elcl16/prev_nav.gif";	//$NON-NLS-1$
-				
-	/** Status code describing an internal error */
-	public static final int INTERNAL_ERROR= 1;
-
-	private static boolean NORMALIZE_CASE= true;
-
-	private final static String CLASS_ATTRIBUTE= "class"; //$NON-NLS-1$
-	private final static String EXTENSIONS_ATTRIBUTE= "extensions"; //$NON-NLS-1$
-
-	public static final String PLUGIN_ID= "org.eclipse.compare"; //$NON-NLS-1$
-
-	private static final String STRUCTURE_CREATOR_EXTENSION_POINT= "structureCreators"; //$NON-NLS-1$
-	private static final String STRUCTURE_MERGEVIEWER_EXTENSION_POINT= "structureMergeViewers"; //$NON-NLS-1$
-	private static final String CONTENT_MERGEVIEWER_EXTENSION_POINT= "contentMergeViewers"; //$NON-NLS-1$
-	private static final String CONTENT_VIEWER_EXTENSION_POINT= "contentViewers"; //$NON-NLS-1$
-	
-	private static final String COMPARE_EDITOR= PLUGIN_ID + ".CompareEditor"; //$NON-NLS-1$
-	
-	private static final String STRUCTUREVIEWER_ALIASES_PREFERENCE_NAME= "StructureViewerAliases";	//$NON-NLS-1$
-	
-	/** Maps type to icons */
-	private static Map fgImages= new Hashtable(10);
-	/** Maps type to ImageDescriptors */
-	private static Map fgImageDescriptors= new Hashtable(10);
-	/** Maps ImageDescriptors to Images */
-	private static Map fgImages2= new Hashtable(10);
-	
-	private static Map fgStructureCreators= new Hashtable(10);
-	private static Map fgStructureViewerDescriptors= new Hashtable(10);
-	private static Map fgStructureViewerAliases= new Hashtable(10);
-	private static Map fgContentViewerDescriptors= new Hashtable(10);
-	private static Map fgContentMergeViewerDescriptors= new Hashtable(10);
-	
-	private static List fgDisposeOnShutdownImages= new ArrayList();
-	
-	private static ResourceBundle fgResourceBundle;
-
-	private static CompareUIPlugin fgComparePlugin;
-
-	/**
-	 * Creates the <code>CompareUIPlugin</code> object and registers all
-	 * structure creators, content merge viewers, and structure merge viewers
-	 * contributed to this plug-in's extension points.
-	 * <p>
-	 * Note that instances of plug-in runtime classes are automatically created 
-	 * by the platform in the course of plug-in activation.
-	 * </p>
-	 *
-	 * @param descriptor the plug-in descriptor
-	 */
-	public CompareUIPlugin(IPluginDescriptor descriptor) {
-		super(descriptor);
-				
-		fgComparePlugin= this;
-		
-		fgResourceBundle= descriptor.getResourceBundle();
-		
-		registerExtensions();
-		
-		initPreferenceStore();
-	}
-	
-	/**
-	 * @see AbstractUIPlugin#initializeDefaultPreferences
-	 */
-	protected void initializeDefaultPreferences(IPreferenceStore store) {
-		super.initializeDefaultPreferences(store);
-		
-		ComparePreferencePage.initDefaults(store);		
-	}
-	
-	/**
-	 * Registers all structure creators, content merge viewers, and structure merge viewers
-	 * that are found in the XML plugin files.
-	 */
-	private void registerExtensions() {
-		IPluginRegistry registry= Platform.getPluginRegistry();
-		
-		// collect all IStructureCreators
-		IConfigurationElement[] elements= registry.getConfigurationElementsFor(PLUGIN_ID, STRUCTURE_CREATOR_EXTENSION_POINT);
-		for (int i= 0; i < elements.length; i++) {
-			final IConfigurationElement conf= elements[i];
-			String extensions= conf.getAttribute(EXTENSIONS_ATTRIBUTE);
-			registerStructureCreator(extensions,
-				new IStructureCreatorDescriptor() {
-					public IStructureCreator createStructureCreator() {
-						try {
-							return (IStructureCreator) conf.createExecutableExtension(CLASS_ATTRIBUTE);
-						} catch (CoreException ex) {
-						}
-						return null;
-					}
-				}
-			);
-		}
-				
-		// collect all viewers which define the structure mergeviewer extension point
-		elements= registry.getConfigurationElementsFor(PLUGIN_ID, STRUCTURE_MERGEVIEWER_EXTENSION_POINT);
-		for (int i= 0; i < elements.length; i++) {
-			ViewerDescriptor desc= new ViewerDescriptor(elements[i]);
-			String ext= desc.getExtension();
-			if (ext != null)
-				registerStructureViewerDescriptor(desc.getExtension(), desc);
-		}
-		
-		// collect all viewers which define the content mergeviewer extension point
-		elements= registry.getConfigurationElementsFor(PLUGIN_ID, CONTENT_MERGEVIEWER_EXTENSION_POINT);
-		for (int i= 0; i < elements.length; i++) {
-			ViewerDescriptor desc= new ViewerDescriptor(elements[i]);
-			String ext= desc.getExtension();
-			if (ext != null)
-				registerContentMergeViewerDescriptor(desc.getExtension(), desc);
-		}
-		
-		// collect all viewers which define the content viewer extension point
-		elements= registry.getConfigurationElementsFor(PLUGIN_ID, CONTENT_VIEWER_EXTENSION_POINT);
-		for (int i= 0; i < elements.length; i++) {
-			ViewerDescriptor desc= new ViewerDescriptor(elements[i]);
-			String ext= desc.getExtension();
-			if (ext != null)
-				registerContentViewerDescriptor(desc.getExtension(), desc);
-		}
-	}
-	
-	/**
-	 * Returns the singleton instance of this plug-in runtime class.
-	 *
-	 * @return the compare plug-in instance
-	 */
-	public static CompareUIPlugin getDefault() {
-		return fgComparePlugin;
-	}
-	
-	/**
-	 * Returns this plug-in's resource bundle.
-	 *
-	 * @return the plugin's resource bundle
-	 */
-	public static ResourceBundle getResourceBundle() {
-		return fgResourceBundle;
-	}
-	
-	public static IWorkbench getActiveWorkbench() {
-		CompareUIPlugin plugin= getDefault();
-		if (plugin == null)
-			return null;
-		return plugin.getWorkbench();
-	}
-	
-	public static IWorkbenchWindow getActiveWorkbenchWindow() {
-		IWorkbench workbench= getActiveWorkbench();
-		if (workbench == null)
-			return null;	
-		return workbench.getActiveWorkbenchWindow();
-	}
-	
-	/**
-	 * Returns the active workkbench page or <code>null</code> if
-	 * no active workkbench page can be determined.
-	 *
-	 * @return the active workkbench page or <code>null</code> if
-	 * 	no active workkbench page can be determined
-	 */
-	private static IWorkbenchPage getActivePage() {
-		IWorkbenchWindow window= getActiveWorkbenchWindow();
-		if (window == null)
-			return null;
-		return window.getActivePage();
-	}
-	
-	/**
-	 * Returns the SWT Shell of the active workbench window or <code>null</code> if
-	 * no workbench window is active.
-	 *
-	 * @return the SWT Shell of the active workbench window, or <code>null</code> if
-	 * 	no workbench window is active
-	 */
-	public static Shell getShell() {
-		IWorkbenchWindow window= getActiveWorkbenchWindow();
-		if (window == null)
-			return null;
-		return window.getShell();
-	}
-
-	/**
-	 * Registers the given image for being disposed when this plug-in is shutdown.
-	 *
-	 * @param image the image to register for disposal
-	 */
-	public static void disposeOnShutdown(Image image) {
-		if (image != null)
-			fgDisposeOnShutdownImages.add(image);
-	}
-	
-	/* (non-Javadoc)
-	 * Method declared on Plugin.
-	 * Frees all resources of the compare plug-in.
-	 */
-	public void shutdown() throws CoreException {
-			
-		/*
-		 * Converts the aliases into a single string before they are stored
-		 * in the preference store.
-		 * The format is:
-		 * <key> '.' <alias> ' ' <key> '.' <alias> ...
-		 */
-		IPreferenceStore ps= getPreferenceStore();
-		if (ps != null) {
-			StringBuffer sb= new StringBuffer();
-			Iterator iter= fgStructureViewerAliases.keySet().iterator();
-			while (iter.hasNext()) {
-				String key= (String) iter.next();
-				String alias= (String) fgStructureViewerAliases.get(key);
-				sb.append(key);
-				sb.append('.');
-				sb.append(alias);
-				sb.append(' ');
-			}
-			ps.setValue(STRUCTUREVIEWER_ALIASES_PREFERENCE_NAME, sb.toString());
-		}
-		
-		super.shutdown();
-		
-		if (fgDisposeOnShutdownImages != null) {
-			Iterator i= fgDisposeOnShutdownImages.iterator();
-			while (i.hasNext()) {
-				Image img= (Image) i.next();
-				if (!img.isDisposed())
-					img.dispose();
-			}
-			fgImages= null;
-		}
-	}
-	
-	/**
-	 * Performs the comparison described by the given input and opens a
-	 * compare editor on the result.
-	 *
-	 * @param input the input on which to open the compare editor
-	 * @see CompareEditorInput
-	 */
-	public void openCompareEditor(CompareEditorInput input, IWorkbenchPage page) {
-		
-		if (compareResultOK(input)) {
-			if (page == null)
-				page= getActivePage();
-			if (page != null) {
-				try {
-					page.openEditor(input, COMPARE_EDITOR);
-				} catch (PartInitException e) {
-					MessageDialog.openError(getShell(), Utilities.getString("CompareUIPlugin.openEditorError"), e.getMessage()); //$NON-NLS-1$
-				}
-			} else {
-				MessageDialog.openError(getShell(),
-						Utilities.getString("CompareUIPlugin.openEditorError"), //$NON-NLS-1$
-						Utilities.getString("CompareUIPlugin.noActiveWorkbenchPage")); //$NON-NLS-1$
-			}
-		}
-	}
-
-	/**
-	 * Performs the comparison described by the given input and opens a
-	 * compare dialog on the result.
-	 *
-	 * @param input the input on which to open the compare editor
-	 * @see CompareEditorInput
-	 */
-	public void openCompareDialog(final CompareEditorInput input) {
-				
-		if (compareResultOK(input)) {
-			CompareDialog dialog= new CompareDialog(getShell(), input);
-			dialog.open();
-		}
-	}
-	
-	/**
-	 * @return <code>true</code> if compare result is OK to show, <code>false</code> otherwise
-	 */
-	private boolean compareResultOK(CompareEditorInput input) {
-		final Shell shell= getShell();
-		try {
-			
-			// run operation in separate thread and make it canceable
-			new ProgressMonitorDialog(shell).run(true, true, input);
-			
-			String message= input.getMessage();
-			if (message != null) {
-				MessageDialog.openError(shell, Utilities.getString("CompareUIPlugin.compareFailed"), message); //$NON-NLS-1$
-				return false;
-			}
-			
-			if (input.getCompareResult() == null) {
-				MessageDialog.openInformation(shell, Utilities.getString("CompareUIPlugin.dialogTitle"), Utilities.getString("CompareUIPlugin.noDifferences")); //$NON-NLS-2$ //$NON-NLS-1$
-				return false;
-			}
-			
-			return true;
-
-		} catch (InterruptedException x) {
-			// cancelled by user		
-		} catch (InvocationTargetException x) {
-			MessageDialog.openError(shell, Utilities.getString("CompareUIPlugin.compareFailed"), x.getTargetException().getMessage()); //$NON-NLS-1$
-		}
-		return false;
-	}
-		
-	/**
-	 * Registers an image for the given type.
-	 */
-	private static void registerImage(String type, Image image, boolean dispose) {
-		fgImages.put(normalizeCase(type), image);
-		if (image != null && dispose) {
-			fgDisposeOnShutdownImages.add(image);
-		}
-	}
-	
-	/**
-	 * Registers an image descriptor for the given type.
-	 *
-	 * @param type the type
-	 * @param descriptor the image descriptor
-	 */
-	public static void registerImageDescriptor(String type, ImageDescriptor descriptor) {
-		fgImageDescriptors.put(normalizeCase(type), descriptor);
-	}
-	
-	public static ImageDescriptor getImageDescriptor(String relativePath) {
-		
-		URL installURL= null;
-		if (fgComparePlugin != null)
-			installURL= fgComparePlugin.getDescriptor().getInstallURL();
-					
-		if (installURL != null) {
-			try {
-				URL url= new URL(installURL, Utilities.getIconPath(null) + relativePath);
-				return ImageDescriptor.createFromURL(url);
-			} catch (MalformedURLException e) {
-				Assert.isTrue(false);
-			}
-		}
-		return null;
-	}
-	
-	/**
-	 * Returns a shared image for the given type, or a generic image if none
-	 * has been registered for the given type.
-	 * <