This commit was manufactured by cvs2svn to create tag 'I20020607natures'.

Sprout from master 2002-06-07 20:43:01 UTC Michael Valenta <mvalenta> 'Adding support for persistant properties'
Cherrypick from NoNatures3 2002-06-07 21:00:21 UTC Kevin Macguire <kevinm> '*** empty log message ***':
    bundles/org.eclipse.team.cvs.core/plugin.xml
    bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSException.java
    bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProvider.java
    bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTeamProvider.java
    bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/messages.properties
    bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/CVSWorkspaceRoot.java
    bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseFile.java
    bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseResource.java
    bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteModule.java
    bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/AddDeleteMoveListener.java
    bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/PrepareForReplaceVisitor.java
    bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ProjectDescriptionManager.java
    bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/StringMatcher.java
    bundles/org.eclipse.team.cvs.ui/plugin.properties
    bundles/org.eclipse.team.cvs.ui/plugin.xml
    bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSDecorationRunnable.java
    bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSRepositoryPropertiesPage.java
    bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/HistoryFilter.java
    bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/HistoryFilterAction.java
    bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/RepositoriesView.java
    bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/VersionCollator.java
    bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CVSAction.java
    bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/RemoveRootAction.java
    bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/UnmanageAction.java
    bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties
    bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/CVSSyncSet.java
    bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/ForceCommitSyncAction.java
    bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/SharingWizard.java
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/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/INavigatable.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/Splitter.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/PatchCompareInput.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/PatchedResource.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/internal/previewAncestor.txt
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewLeft.txt
    bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewRight.txt
    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/doc/hglegal.htm
    bundles/org.eclipse.compare/doc/ngibmcpy.gif
    bundles/org.eclipse.compare/doc/org_eclipse_compare.html
    bundles/org.eclipse.compare/doc/org_eclipse_compare_contentMergeViewers.html
    bundles/org.eclipse.compare/doc/org_eclipse_compare_contentViewers.html
    bundles/org.eclipse.compare/doc/org_eclipse_compare_structureCreators.html
    bundles/org.eclipse.compare/doc/org_eclipse_compare_structureMergeViewers.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/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/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/INavigatable.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/Splitter.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/PatchCompareInput.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/PatchedResource.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/internal/previewAncestor.txt
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewLeft.txt
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewRight.txt
    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/doc/hglegal.htm
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/ngibmcpy.gif
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare.html
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_contentMergeViewers.html
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_contentViewers.html
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_structureCreators.html
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_structureMergeViewers.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/plugin.properties
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.xml
    bundles/org.eclipse.compare/plugins/org.eclipse.compare/scripts/exportplugin.xml
    bundles/org.eclipse.compare/scripts/exportplugin.xml
diff --git a/bundles/org.eclipse.compare/.classpath b/bundles/org.eclipse.compare/.classpath
deleted file mode 100644
index 1e3546d..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="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>

-    <classpathentry kind="src" path="/org.eclipse.swt"/>

-    <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 092357e..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 88d7c29..0000000
--- a/bundles/org.eclipse.compare/.project
+++ /dev/null
@@ -1,23 +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>

-	</buildSpec>

-	<natures>

-		<nature>org.eclipse.jdt.core.javanature</nature>

-		<nature>org.eclipse.team.cvs.core.cvsnature</nature>

-	</natures>

-</projectDescription>

diff --git a/bundles/org.eclipse.compare/about.html b/bundles/org.eclipse.compare/about.html
deleted file mode 100644
index 768324e..0000000
--- a/bundles/org.eclipse.compare/about.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<html>

-<head>

-<title>About</title>

-<style type="text/css">

-p, table, td, th { font-family: arial, helvetica, geneva; font-size: 10pt}

-pre { font-family: "Courier New", Courier, mono; font-size: 10pt}

-h2 { font-family: arial, helvetica, geneva; font-size: 18pt; font-weight: bold ; line-height: 14px}

-code { font-family: "Courier New", Courier, mono; font-size: 10pt}

-sup { font-family: arial,helvetica,geneva; font-size: 10px}

-h3 { font-family: arial, helvetica, geneva; font-size: 14pt; font-weight: bold}

-li { font-family: arial, helvetica, geneva; font-size: 10pt}

-h1 { font-family: arial, helvetica, geneva; font-size: 28px; font-weight: bold}

-body { font-family: arial, helvetica, geneva; font-size: 10pt; clip: rect(   ); margin-top: 5mm; margin-left: 3mm}

-</style>

-</head>

-<body lang="EN-US" link="blue" vlink="purple">

-<table border="0" cellspacing="5" cellpadding="2" width="100%" >

-  <tr> 

-    <td align="LEFT" valign="TOP" colspan="2" bgcolor="#0080C0"><b><font color="#FFFFFF">About This Content</font></b></td>

-  </tr>

-  <tr> 

-    <td> 

-<p>11th December, 2001</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

-<a href="http://www.eclipse.org/legal/cpl-v05.html">Common Public License Version 0.5</a> &quot;CPL&quot;.  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>

-</td></tr></table>

-</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 68f93ee..0000000
--- a/bundles/org.eclipse.compare/build.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-source.compare.jar = compare/

-bin.includes = icons/,\

-               plugin.xml,\

-               *.jar,\

-               plugin.properties,\

-               notice.html,\

-               about.html

-src.includes=about.html

diff --git a/bundles/org.eclipse.compare/buildnotes_compare.html b/bundles/org.eclipse.compare/buildnotes_compare.html
deleted file mode 100644
index 28405b0..0000000
--- a/bundles/org.eclipse.compare/buildnotes_compare.html
+++ /dev/null
@@ -1,1056 +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 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 d64b122..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 c2c62db..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java
+++ /dev/null
@@ -1,425 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.

-	 */

-	public static final String IGNORE_WHITESPACE= "IGNORE_WHITESPACE"; //$NON-NLS-1$

-	/**

-	 * Name of the show pseudo conflicts property.

-	 */

-	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$

-		

-//		ImageDescriptor tmp= fgImages[Differencer.ADDITION];

-//		fgImages[Differencer.ADDITION]= fgImages[Differencer.DELETION];

-//		fgImages[Differencer.DELETION]= tmp;

-	}

-

-	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.

-	 */

-	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.

-	 */

-	public CompareConfiguration() {

-		this(CompareUIPlugin.getDefault().getPreferenceStore());

-	}

-	

-	/**

-	 * Returns the preference store of this configuration.

-	 * @return the preference store of this configuration.

-	 */

-	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

-	 */

-	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() {

-	}

-

-	/**

-	 * 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 fdbe766..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
+++ /dev/null
@@ -1,792 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare; 

-

-import java.lang.reflect.InvocationTargetException;

-

-import java.util.List;

-import java.util.ArrayList;

-import java.util.ResourceBundle;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.events.*;

-import org.eclipse.swt.graphics.Point;

-import org.eclipse.swt.widgets.*;

-import org.eclipse.swt.graphics.Image;

-

-import org.eclipse.core.resources.IResource;

-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.swt.custom.BusyIndicator;

-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.contentmergeviewer.ContentMergeViewer;

-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.

-	 */

-	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 ISelection fSelection2;

-	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 fTitle;

-	}

-	

-	/* (non Javadoc)

-	 * see IEditorInput.getName

-	 */

-	public String getName() {

-		return fTitle;

-	}

-			

-	/**

-	 * 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() {

-		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>.

-	 *

-	 * @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());

-				}

-			}

-		);

-		

-		// setup the wiring for second pane

-		fStructurePane1.addOpenListener(

-			new IOpenListener() {

-				public void open(OpenEvent oe) {

-					feed2(oe.getSelection());

-				}

-			}

-		);

-		fStructurePane1.addSelectionChangedListener(

-			new ISelectionChangedListener() {

-				public void selectionChanged(SelectionChangedEvent e) {

-					ISelection s= e.getSelection();

-					if (s == null || s.isEmpty())

-						feed2(s);

-				}

-			}

-		);

-

-		// setup the wiring for third pane

-		fStructurePane2.addOpenListener(

-			new IOpenListener() {

-				public void open(OpenEvent oe) {

-					feed3(oe.getSelection());

-				}

-			}

-		);

-		fStructurePane2.addSelectionChangedListener(

-			new ISelectionChangedListener() {

-				public void selectionChanged(SelectionChangedEvent e) {

-					ISelection s= e.getSelection();

-					if (s == null || s.isEmpty())

-						feed3(s);

-				}

-			}

-		);

-		

-		// now deal with activation/deactivation

-		Listener activationListener= new Listener() {

-			int fOldOpenStrategy;

-			

-			public void handleEvent(Event event) {

-				if (event.widget instanceof CompareViewerSwitchingPane) {

-					

-					switch (event.type) {

-					case SWT.Activate:

-						fFocusPane= (CompareViewerSwitchingPane) event.widget;

-						fOldOpenStrategy= OpenStrategy.getOpenMethod();

-						OpenStrategy.setOpenMethod(OpenStrategy.SINGLE_CLICK | OpenStrategy.ARROW_KEYS_OPEN);

-						break;

-					case SWT.Deactivate:

-						OpenStrategy.setOpenMethod(fOldOpenStrategy);

-						break;

-					}

-				}

-			}

-		};

-		fStructureInputPane.addListener(SWT.Activate, activationListener);

-		fStructurePane1.addListener(SWT.Activate, activationListener);

-		fStructurePane2.addListener(SWT.Activate, activationListener);

-		fContentInputPane.addListener(SWT.Activate, activationListener);

-		

-		fStructureInputPane.addListener(SWT.Deactivate, activationListener);

-		fStructurePane1.addListener(SWT.Deactivate, activationListener);

-		fStructurePane2.addListener(SWT.Deactivate, activationListener);

-		fContentInputPane.addListener(SWT.Deactivate, activationListener);

-		

-

-		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

-	 */

-	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 d439ee4..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.plugin.AbstractUIPlugin;

-

-import org.eclipse.compare.internal.CompareUIPlugin;

-import org.eclipse.compare.internal.IStructureCreatorDescriptor;

-import org.eclipse.compare.structuremergeviewer.ICompareInput;

-import org.eclipse.compare.structuremergeviewer.IStructureCreator;

-

-

-/**

- * 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 descriptors for the 'Next' tool bar button. */

-	public static final ImageDescriptor DESC_DTOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.DTOOL_NEXT);

-	public static final ImageDescriptor DESC_CTOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.CTOOL_NEXT);

-	public static final ImageDescriptor DESC_ETOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.ETOOL_NEXT);

-	

-	/** Image descriptors for the 'Previous' tool bar button. */

-	public static final ImageDescriptor DESC_DTOOL_PREV= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.DTOOL_PREV);

-	public static final ImageDescriptor DESC_CTOOL_PREV= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.CTOOL_PREV);

-	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$

-	

-	/* (non Javadoc)

-	 * non inatiatiable!

-	 */

-	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.

-	 *

-	 * @param input the input on which to open the compare editor

-	 */

-	public static void openCompareEditor(CompareEditorInput input) {

-		CompareUIPlugin plugin= CompareUIPlugin.getDefault();

-		if (plugin != null)

-			plugin.openCompareEditor(input);

-	}

-			

-	/**

-	 * 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);

-	}

-		

-	public static void addStructureViewerAlias(String type, String alias) {

-		CompareUIPlugin.addStructureViewerAlias(type, alias);

-	}

-	

-	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 3106b11..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.widgets.*;

-

-import org.eclipse.jface.action.ToolBarManager;

-

-import org.eclipse.compare.internal.Splitter;

-

-/**

- * 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>.

- */

-public class CompareViewerPane extends ViewForm {

-	

-	private ToolBarManager fToolBarManager;

-

-

-	public CompareViewerPane(Composite parent, int style) {

-		super(parent, style);

-		

-		marginWidth= 0;

-		marginHeight= 0;

-		

-		CLabel label= new CLabel(this, SWT.NONE);

-		setTopLeft(label);

-		

-		MouseAdapter ml= new MouseAdapter() {

-			public void mouseDoubleClick(MouseEvent e) {

-				Control parent= getParent();

-				if (parent instanceof Splitter)

-					((Splitter)parent).setMaximizedControl(CompareViewerPane.this);

-			}

-		};	

-				

-		addMouseListener(ml);

-		label.addMouseListener(ml);	

-	}

-	

-	public void setText(String label) {

-		CLabel cl= (CLabel) getTopLeft();

-		cl.setText(label);		

-	}

-	

-	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>.

-	 */

-	public static ToolBarManager getToolBarManager(Composite parent) {

-		if (parent instanceof CompareViewerPane) {

-			CompareViewerPane pane= (CompareViewerPane) parent;

-			return pane.getToolBarManager();

-		}

-		return null;

-	}

-

-	/**

-	 * Clear tool items in <code>CompareViewerPane</code>'s control bar.

-	 */

-	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 7baa256..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare;

-

-import java.text.MessageFormat;

-

-import org.eclipse.swt.SWT;

-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> which supports viewer switching.

- * <p>

- * Clients must implement the viewer switching strategy by implementing

- * <code>getViewer</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.

- */

-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.

-	 */

-	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.

-	 */

-	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.

-	 */

-	public Viewer getViewer() {

-		return fViewer;

-	}

-	

-	/**

-	 * Sets the current viewer.

-	 */

-	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);

-		}

-	}

-

-	public String getTitleArgument() {

-		return fTitleArgument;

-	}

-

-	/**

-	 * Returns <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;

-	}

-		

-	/**

-	 * If the old viewer had focus, new setInput tries to set

-	 * focus on new viewer too.

-	 */ 

-	public void setInput(Object input) {

-

-		if (fInput == input)

-			return;

-			

-		boolean hadFocus= hasFocus2();

-		

-//		try {

-//			if (fViewer != null)

-//				fViewer.setInput(null);	// force save before switching viewer

-//		} catch (ViewerSwitchingCancelled ex) {

-//			return;

-//		}

-

-		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();

-	}

-	

-	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$

-		}

-	}

-

-	public Object getInput() {

-		return fInput;

-	}

-

-	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 ad21c2b..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java
+++ /dev/null
@@ -1,1016 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.graphics.Point;

-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.resources.IFile;

-import org.eclipse.core.resources.IFileState;

-import org.eclipse.core.runtime.CoreException;

-

-import org.eclipse.compare.internal.*;

-import org.eclipse.compare.structuremergeviewer.*;

-import org.eclipse.compare.*;

-

-/**

- * 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;

-	/** 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;

-	

-	/**

-	 * 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;

-	/** 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();

-	}

-		

-	public void setEditionTitleArgument(String titleArgument) {

-		fTitleArg= titleArgument;

-	}

-	

-	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>

-	 */

-	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.

-	 */

-	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.

-	 */

-	public void setTargetIsRight(boolean isRight) {

-		fTargetIsRight= isRight;

-	}

-		

-	/**

-	 * Controls whether the EditionSelectionDialog is in 'add' mode

-	 * or 'replace' mode (the default).

-	 *

-	 * @param addMode if true dialog is in 'add' mode.

-	 */

-	public void setAddMode(boolean addMode) {

-		fAddMode= addMode;

-	}

-	

-	/**

-	 * Controls whether the EditionSelectionDialog is in 'compare' mode

-	 * or 'add/replace' (the default) mode. 

-	 *

-	 * @param addMode if true dialog is in 'add' mode.

-	 */

-	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 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 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 });

-	}

-	

-	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

-  	 */

-	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 parent) {

-		

-		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$

-			fMemberTable= new Table(fMemberPane, SWT.H_SCROLL + SWT.V_SCROLL);

-			fMemberTable.addSelectionListener(

-				new SelectionAdapter() {

-					public void widgetSelected(SelectionEvent e) {

-						handleMemberSelect(e.item);

-					}

-				}

-			);

-			

-			fMemberPane.setContent(fMemberTable);

-			

-			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 });

-				

-		return vsplitter;

-	}

-	

-	/* (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.

-	 */

-	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 void handleDefaultSelected() {

-//		if (fSelectedItem != null)

-//			okPressed();

-//	}

-	

-	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) {

-					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();

-		

-		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);

-		if (first) {

-			fEditionTree.setSelection(new TreeItem[] {ti});

-			if (!fAddMode)

-				fEditionTree.setFocus();

-			feedInput(ti);

-		}

-		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) {

-				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)

-			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 98ddbb7..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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;

-

-import org.eclipse.compare.*;

-

-/**

- * 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 095f52f..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 bc62b5a..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 5e8d9d6..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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

-	 * <UL>

-	 * <LI>

-	 * add a child,

-	 * <LI>

-	 * remove a child,

-	 * <LI>

-	 * copy the contents of a child

-	 * </UL>

-	 * 

-	 * 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 98f9364..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 447f227..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 fee4741..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 e914a57..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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. 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.

-	 */

-	public static final String TEXT_TYPE= "txt"; //$NON-NLS-1$

-

-	/**

-	 * Type for an element whose actual type could not

-	 * be determined.

-	 */

-	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 c6f60e7..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 684c65f..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-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 6c488a1..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare;

-

-import java.io.*;

-import java.util.ArrayList;

-import java.util.Iterator;

-

-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.internal.Utilities;

-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/ZipFileStructureCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
deleted file mode 100644
index 902d5dc..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.text.IDocument;

-import org.eclipse.jface.util.Assert;

-

-import org.eclipse.core.runtime.CoreException;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.structuremergeviewer.*;

-import org.eclipse.compare.internal.Utilities;

-

-

-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;

-

-	public ZipFileStructureCreator() {

-		this(Utilities.getString("ZipStructureCreator.name")); //$NON-NLS-1$

-	}

-	

-	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.

-	 */

-	public boolean canSave() {

-		return false;

-	}

-

-	/**

-	 * Throws <code>AssertionFailedException</code> since we cannot update a zip archive.

-	 */

-	public void save(IStructureComparator structure, Object input) {

-		Assert.isTrue(false); // Cannot update zip archive

-	}

-	

-	public IStructureComparator locate(Object path, Object source) {

-		return null;

-	}

-	

-	public boolean canRewriteTree() {

-		return false;

-	}

-	

-	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 7878ff2..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
+++ /dev/null
@@ -1,937 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.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.resource.ImageDescriptor;

-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.contentmergeviewer.IMergeViewerContentProvider;

-import org.eclipse.compare.contentmergeviewer.TextMergeViewer;

-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 {

-		

-		private boolean fLeft;

-		

-		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;

-		

-		public Resizer(Control c, int dir) {

-			fDirection= dir;

-			fControl= c;

-			fControl.addMouseListener(this);

-			fLiveResize= !(fControl instanceof Sash);

-			

-			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;

-			fControl.addMouseMoveListener(this);

-		}

-		

-		public void mouseUp(MouseEvent e) {

-			fControl.removeMouseMoveListener(this);

-			if (!fLiveResize)

-				resize(e);

-		}

-		

-		public void mouseMove(MouseEvent e) {

-			if (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;

-

-	// 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 retrieves the content from the three sides by calling the methods

-	 * <code>getAncestorContent</code>, <code>getLeftContent</code>,

-	 * and <code>getRightContent</code> on the content provider.

-	 * The values returned from these calls are passed to the hook method <code>updateContent</code>.

-	 * </p>

-	 *

-	 * @param input the new input of this viewer, or <code>null</code> if none

-	 * @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);

-	}

-	

-	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,

-//						IDialogConstants.CANCEL_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;

-	}

-		

-	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);

-						

-		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$

-			}

-			

-			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$

-			}

-			

-			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) {

-		

-		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);

-		}

-	}

-	

-	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 1f7d6d2..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java
+++ /dev/null
@@ -1,136 +0,0 @@
-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 a713fb4..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 {

-	

-	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 2f75e91..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 9035817..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 56b46f4..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
+++ /dev/null
@@ -1,3537 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.InputStream;

-import java.io.IOException;

-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.FontData;

-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.text.*;

-import org.eclipse.jface.text.source.SourceViewer;

-import org.eclipse.jface.util.PropertyChangeEvent;

-import org.eclipse.jface.util.IPropertyChangeListener;

-import org.eclipse.jface.viewers.ISelection;

-import org.eclipse.jface.preference.IPreferenceStore;

-import org.eclipse.jface.preference.PreferenceConverter;

-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.texteditor.IUpdate;

-import org.eclipse.ui.IActionBars;

-import org.eclipse.ui.IWorkbenchActionConstants;

-

-import org.eclipse.compare.*;

-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.ChangePropertyAction;

-import org.eclipse.compare.internal.CompareEditor;

-import org.eclipse.compare.internal.DocLineComparator;

-import org.eclipse.compare.internal.ComparePreferencePage;

-import org.eclipse.compare.internal.CompareUIPlugin;

-import org.eclipse.compare.internal.MergeViewerAction;

-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 SYNC_SCROLLING= "SYNC_SCROLLING"; //$NON-NLS-1$

-		

-	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= 10;

-	/** Width of birds eye view */

-	private static final int BIRDS_EYE_VIEW_INSET= 1;

-

-	/** line width of change borders */

-	private static final int LW= 1;

-	/** Provide more merge controls in CompareViewerPane toolbar */

-	private static final boolean USE_MORE_CONTROLS= true;

-	/** 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 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 Object fAncestorInput;

-	private Object fLeftInput;

-	private Object fRightInput;

-	

-	private MergeSourceViewer fAncestor;

-	private MergeSourceViewer fLeft;

-	private MergeSourceViewer fRight;

-	

-	private int fLeftLineCount;

-	private int fRightLineCount;

-	

-	private boolean fLeftContentsChanged;

-	private boolean fRightContentsChanged;

-

-	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 ActionContributionItem fNextItem;	// goto next difference

-	private ActionContributionItem fPreviousItem;	// goto previous difference

-	private ActionContributionItem fCopyDiffLeftToRightItem;

-	private ActionContributionItem fCopyDiffRightToLeftItem;

-	

-	private boolean fSynchronizedScrolling= true;

-	private boolean fShowMoreInfo= false;

-	

-	private MergeSourceViewer fFocusPart;

-	

-	private boolean fSubDoc= true;

-	private IPositionUpdater fPositionUpdater;

-	private boolean fIsMotif;	

-

-	// SWT widgets

-	private BufferedCanvas fAncestorCanvas;

-	private BufferedCanvas fLeftCanvas;

-	private BufferedCanvas fRightCanvas;

-	private Canvas fScrollCanvas;

-	private ScrollBar fVScrollBar;

-	private Canvas fBirdsEyeCanvas;

-		

-	// SWT resources to be disposed

-	private Map fColors;

-	private Font fFont;

-	private Cursor fBirdsEyeCursor;

-					

-					

-	/**

-	 * 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;

-		}

-

-		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);

-		

-		String platform= SWT.getPlatform();

-		fIsMotif= "motif".equals(platform); //$NON-NLS-1$

-		

-		if (fIsMotif)

-			fMarginWidth= 0;

-			

-		fPreferenceStore= configuration.getPreferenceStore();

-		if (fPreferenceStore != null) {

-			fPreferenceChangeListener= new IPropertyChangeListener() {

-				public void propertyChange(PropertyChangeEvent event) {

-					TextMergeViewer.this.propertyChange(event);

-				}

-			};

-			fPreferenceStore.addPropertyChangeListener(fPreferenceChangeListener);

-			

-			Display display= parent.getDisplay();

-			updateFont(fPreferenceStore, display);

-			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);

-		}

-		

-		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);

-	}

-	

-	private void updateFont(IPreferenceStore ps, Display display) {

-		

-		Font oldFont= fFont;

-		

-		FontData fontData= null;

-		if (ps.contains(ComparePreferencePage.TEXT_FONT)

-					&& !ps.isDefault(ComparePreferencePage.TEXT_FONT))

-			fontData= PreferenceConverter.getFontData(ps, ComparePreferencePage.TEXT_FONT);

-		else

-			fontData= PreferenceConverter.getDefaultFontData(ps, ComparePreferencePage.TEXT_FONT);

-		if (fontData != null) {

-			fFont= new Font(display, fontData);

-			

-			if (fAncestor != null)

-				fAncestor.setFont(fFont);

-			if (fLeft != null)

-				fLeft.setFont(fFont);

-			if (fRight != null)

-				fRight.setFont(fFont);

-				

-			if (oldFont != null)

-				oldFont.dispose();

-		}

-	}

-	

-	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);

-			}

-		}

-	}

-	

-	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();

-	}

-	

-	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);

-		

-		// invalidate color cache

-		fColors= null;

-		

-		refreshBirdsEyeView();

-		invalidateLines();

-		

-		updateAllDiffBackgrounds(display);

-	}

-	

-	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) {

-		

-		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) {

-			if (fPreferenceStore != null)

-				fPreferenceStore.removePropertyChangeListener(fPreferenceChangeListener);

-			fPreferenceChangeListener= null;

-		}

-		

-		fLeftCanvas= null;

-		fRightCanvas= null;

-		fVScrollBar= null;

-		fBirdsEyeCanvas= 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();

-			}

-		}

-		

-		if (fFont != null) {

-			fFont.dispose();

-			fFont= 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) {

-		

-		// 1st row

-		if (fMarginWidth > 0) {

-			fAncestorCanvas= new BufferedCanvas(composite, SWT.NONE) {

-				public void doPaint(GC gc) {

-					paintSides(gc, fAncestor, fAncestorCanvas, false);

-				}

-			};

-		}

-									

-		fAncestor= createPart(composite);

-		fAncestor.setEditable(false);

-		

-		// 2nd row

-		if (fMarginWidth > 0) {

-			fLeftCanvas= new BufferedCanvas(composite, SWT.NONE) {

-				public void doPaint(GC gc) {

-					paintSides(gc, fLeft, fLeftCanvas, 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);

-				}

-			};

-		}

-		

-		fScrollCanvas= new Canvas(composite, SWT.V_SCROLL);

-		Rectangle trim= fScrollCanvas.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.addMouseListener(

-			new MouseAdapter() {

-				public void mouseDown(MouseEvent e) {

-					Diff diff= handlemouseInBirdsEyeView(fBirdsEyeCanvas, e.y);

-					if (diff != null && diff.fDirection != Differencer.NO_CHANGE) {

-						//fCurrentDiff= null;

-						setCurrentDiff(diff, 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 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

-	}

-	

-	/**

-	 * 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);

-				}

-			};

-			new Resizer(canvas, HORIZONTAL);

-			return canvas;

-		}

-		return super.createCenter(parent);

-	}

-	

-	/**

-	 * 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);

-				}

-			}

-		);

-		

-		if (fFont != null)

-			te.setFont(fFont);

-			

-		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.

-	 */

-	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;

-		

-		fLeftContentsChanged= false;

-		fRightContentsChanged= 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

-		fLeftInput= left;

-		setDocument(fLeft, 'L', left);

-		fLeftLineCount= fLeft.getLineCount();

-

-		fRightInput= right;

-		setDocument(fRight, 'R', right);

-		fRightLineCount= fRight.getLineCount();

-		

-		fAncestorInput= ancestor;

-		setDocument(fAncestor, 'A', ancestor);

-					

-		doDiff();

-				

-		invalidateLines();

-		updateVScrollBar();

-		refreshBirdsEyeView();

-		

-		if (!emptyInput && !fComposite.isDisposed()) {

-			// 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()) {

-			fLeftContentsChanged= true;

-			setLeftDirty(true);

-		} else if (doc == fRight.getDocument()) {

-			setRightDirty(true);

-			fRightContentsChanged= 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;			

-	}

-	

-	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;

-		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;

-		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) {

-  			y+= scrollbarHeight;

-  			fBirdsEyeCanvas.setBounds(x+scrollbarWidth, y, BIRDS_EYE_VIEW_WIDTH, height-(3*scrollbarHeight));

-  		}

-		

-		// 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);

-

-		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 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) {

-		

-		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$

-		

-		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$

-

-		

-		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);

-			tbm.appendToGroup("merge", fCopyDiffLeftToRightItem); //$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);

-			tbm.appendToGroup("merge", fCopyDiffRightToLeftItem); //$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.TEXT_FONT)) {

-			if (fPreferenceStore != null) {

-				updateFont(fPreferenceStore, fComposite.getDisplay());

-				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 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;

-

-		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;

-							

-				g.setBackground(getColor(display, getFillColor(diff)));

-				g.fillPolygon(fPts);

-	

-				g.setLineWidth(LW);

-				g.setForeground(getColor(display, getStrokeColor(diff)));

-				g.drawLine(fPts[0], fPts[1], fPts[2], fPts[3]);

-				g.drawLine(fPts[6], fPts[7], fPts[4], fPts[5]);

-			}

-		}

-	}

-	

-	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.setBackground(getColor(display, getStrokeColor(diff)));

-				if (right) {

-					g.fillRectangle(x, y-1, w2+1, LW);

-					g.fillRectangle(x+w2, y, LW, h);

-					g.fillRectangle(x, y+h-1, w2, LW);

-				} else {

-					g.fillRectangle(x+w2, y-1, w2, LW);

-					g.fillRectangle(x+w2, y, LW, h);

-					g.fillRectangle(x+w2, y+h-1, w2, LW);

-				}

-			}

-		}

-	}

-	

-	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;

-						

-		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);

-		}

-	}

-	

-	//--------------------------------------------------------------------------------

-	

-	protected void copy(boolean leftToRight) {

-		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);

-			fRightContentsChanged= false;

-		} 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);

-			fLeftContentsChanged= false;

-		}

-		doDiff();

-		invalidateLines();

-		updateVScrollBar();

-		selectFirstDiff();

-		refreshBirdsEyeView();

-	}

-

-	private void copyDiffLeftToRight() {

-		copy(fCurrentDiff, true, false, false);

-	}

-

-	private void copyDiffRightToLeft() {

-		copy(fCurrentDiff, false, false, false);

-	}

-		

-	private void copy(Diff diff, boolean leftToRight, boolean both, boolean gotoNext) {

-		

-		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:

-						s= fromDoc.get(fromStart, fromLen);

-						if (both)

-							s+= toDoc.get(toStart, toLen);

-						break;

-					}

-					if (s != null) {

-						toDoc.replace(toStart, toLen, s);						

-						toPos.setOffset(toStart);

-						toPos.setLength(s.length());

-					}	

-				

-				} catch (BadLocationException e) {

-				}

-			}

-		

-			diff.setResolved(true);

-

-			if (gotoNext) {

-				navigate(true, true, true);

-			} else {

-				revealDiff(diff, true);

-				updateControls();

-			}

-		}

-	}

-

-	//---- 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;

-	}

-}
\ No newline at end of file
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 9cabb43..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties
+++ /dev/null
@@ -1,91 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2000, 2001.

-# All Rights Reserved.

-# =====================================

-# @(#)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. Try to 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 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 28d91ee..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html
+++ /dev/null
@@ -1,35 +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 <tt>ContentMergeViewer</tt> 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.

-<p>A <tt>ContentMergeViewer</tt> accesses its model by means of a content

-provider which must implement the

-<br><tt>IMergeViewerContentProvider</tt> interface.

-<p>The <tt>TextMergeViewer</tt> is the standard concrete subclass of <tt>ContentMergeViewer</tt>.

-A text merge viewer uses the <tt>RangeDifferencer</tt> to perform a textual,

-line-by-line comparison of two (or three) input documents. For text lines

-that differ the <tt>TextMergeViewer</tt> uses an <tt>ITokenComparator</tt>

-to find longest sequences of matching and non-matching tokens. The <tt>TextMergeViewer</tt>'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 <tt>ITokenComparator</tt> interface.

-<p>The <tt>TextMergeViewer</tt> not only works on whole documents but on

-subranges of documents too. In this case the viewer's input must be an

-<tt>IDocumentRange</tt> instead of an <tt>IDocument</tt>.

-</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 85ffba1..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 b9429f0..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-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);
-					
-				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$
-						}
-					}
-				}
-			}
-		}
-	}
-	
-	private 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 4c3e7db..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties
+++ /dev/null
@@ -1,39 +0,0 @@
-# =====================================
-# (c) Copyright IBM Corp. 2000, 2001.
-# All Rights Reserved.
-# =====================================
-
-# @(#)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 b274276..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java
+++ /dev/null
@@ -1,449 +0,0 @@
-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;
-	private CompareViewerSwitchingPane fStructuredComparePane;
-
-
-	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 parent) {
-		
-		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();
-				}
-			}
-		);
-		
-		// 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);		
-		
-		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 vsplitter;
-	}
-	
-	/**
-	 * Feeds selection from member viewer to edition viewer.
-	 */
-	private void handleMemberSelect(Widget w) {
-		Object 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 c1ff3bd..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.io.*;

-import java.lang.reflect.InvocationTargetException;

-import java.util.ResourceBundle;

-import java.text.MessageFormat;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.widgets.*;

-

-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) {

-		

-		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 364785d..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 2900356..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2000, 2001.

-# All Rights Reserved.

-# =====================================

-

-# @(#)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 1a1bdd3..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 {

-

-	/** The drawable for double buffering */

-	private 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.

-	 * @private

-	 */

-	private void doubleBufferPaint(GC dest) {

-

-		Point size= getSize();

-

-		if (size.x <= 0 || size.y <= 0)

-			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 8e1b801..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java
+++ /dev/null
Binary files differ
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 1e76626..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 d3aea03..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-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;
-	}
-}
\ No newline at end of file
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 4daf9e5..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.jface.action.IAction;

-import org.eclipse.jface.viewers.ISelection;

-

-import org.eclipse.ui.IActionDelegate;

-import org.eclipse.compare.CompareConfiguration;

-import org.eclipse.compare.CompareUI;

-

-

-public class CompareAction implements IActionDelegate {

-

-	private ResourceCompareInput fInput;

-

-	public void run(IAction action) {

-		if (fInput != null) {

-			CompareUI.openCompareEditor(fInput);

-			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);

-		}

-		action.setEnabled(fInput.setSelection(selection));

-	}

-}

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 6b6c3c4..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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);

-	}

-	

-	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 parent) {

-						

-		Control c= fCompareEditorInput.createContents(parent);

-		c.setLayoutData(new GridData(GridData.FILL_BOTH));

-		

-		Shell shell= c.getShell();

-		shell.setText(fCompareEditorInput.getTitle());

-		shell.setImage(fCompareEditorInput.getTitleImage());

-

-		return c;

-	}

-		

-	/* (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 215309b..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.lang.reflect.InvocationTargetException;

-

-import org.eclipse.swt.widgets.*;

-

-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.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 IPropertyChangeListener {

-	

-	public final static String CONFIRM_SAVE_PROPERTY= "org.eclipse.compare.internal.CONFIRM_SAVE_PROPERTY"; //$NON-NLS-1$

-	

-	private IActionBars fActionBars;

-	

-	

-	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$

-				

-		CompareEditorInput cei= (CompareEditorInput) input;

-			

-		setSite(site);

-		setInput(input);

-		

-		setTitleImage(cei.getTitleImage());

-		setTitle(cei.getTitle());

-				

-		if (input instanceof IPropertyChangeNotifier)

-			((IPropertyChangeNotifier)input).addPropertyChangeListener(this);

-	}

-

-	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)

-			((CompareEditorInput) input).createContents(parent);

-	}

-	

-	/*

-	 * @see DesktopPart#dispose

-	 */

-	public void dispose() {

-	

-		IEditorInput input= getEditorInput();

-		if (input instanceof IPropertyChangeNotifier)

-			((IPropertyChangeNotifier)input).removePropertyChangeListener(this);

-								

-		super.dispose();

-	}

-			

-	/*

-	 * @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 1860065..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.util.ResourceBundle;

-

-import org.eclipse.jface.action.*;

-

-import org.eclipse.ui.*;

-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);

-		fNext= new NavigationAction(bundle, true);

-		fPrevious= new NavigationAction(bundle, false);

-		fToolbarNext= new NavigationAction(bundle, true);

-		fToolbarPrevious= new NavigationAction(bundle, false);

-	}

-

-	/*

-	 * @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);

-			}

-		}

-			

-		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 96b7c04..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2002.

- * All Rights Reserved.

- */

-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 7c7e50a..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties
+++ /dev/null
@@ -1,52 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2002.

-# All Rights Reserved.

-# =====================================

-

-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 6255c80..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.events.KeyAdapter;

-import org.eclipse.swt.events.KeyEvent;

-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;

-	

-	public CompareNavigator(CompareViewerSwitchingPane[] panes) {

-		fPanes= panes;

-	}

-

-	public CompareViewerSwitchingPane[] getPanes() {

-		return fPanes;

-	}

-	

-	public void selectChange(boolean next) {

-		

-		fLastDirection= next;

-		

-		// 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;

-	}

-}

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 e4dd225..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.swt.graphics.Color;

-import org.eclipse.swt.graphics.RGB;

-

-import org.eclipse.jface.preference.*;

-import org.eclipse.jface.util.*;

-

-import org.eclipse.ui.IWorkbench;

-import org.eclipse.ui.IWorkbenchPreferencePage;

-import org.eclipse.ui.texteditor.WorkbenchChainedTextFontFieldEditor;

-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 TEXT_FONT= PREFIX + "TextFont"; //$NON-NLS-1$

-	public static final String IGNORE_WHITESPACE= PREFIX + "IgnoreWhitespace"; //$NON-NLS-1$

-	

-	private WorkbenchChainedTextFontFieldEditor fFontEditor;

-	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.STRING, TEXT_FONT),

-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IGNORE_WHITESPACE),

-		

-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND),

-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT)

-	};

-	

-	

-	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);

-		

-		Display display= Display.getDefault();

-		Color color= display.getSystemColor(SWT.COLOR_LIST_BACKGROUND);

-		PreferenceConverter.setDefault(store,  AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND, color.getRGB());		

-		store.setDefault(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT, true);

-

-		WorkbenchChainedTextFontFieldEditor.startPropagate(store, TEXT_FONT);

-	}

-

-	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() {

-		fFontEditor.store();

-		fOverlayStore.propagate();

-		return true;

-	}

-	

-	/*

-	 * @see PreferencePage#performDefaults()

-	 */

-	protected void performDefaults() {

-		

-		fFontEditor.loadDefault();

-		

-		fOverlayStore.loadDefaults();

-		initializeFields();

-		

-		super.performDefaults();

-	}

-	

-	/*

-	 * @see DialogPage#dispose()

-	 */

-	public void dispose() {

-		

-		fFontEditor.setPreferencePage(null);

-		fFontEditor.setPreferenceStore(null);

-		

-		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) {

-		

-		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();

-		

-		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$

-

-		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$

-		

-		fFontEditor= addTextFontEditor(composite, "ComparePreferencePage.textFont.label", TEXT_FONT);	//$NON-NLS-1$

-		fFontEditor.setPreferenceStore(getPreferenceStore());

-		fFontEditor.setPreferencePage(this);

-		fFontEditor.load();

-		

-		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(80);

-		gd.heightHint= convertHeightInCharsToPixels(15);

-		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("previewAncestor.txt"),	//$NON-NLS-1$

-				new FakeInput("previewLeft.txt"),	//$NON-NLS-1$

-				new FakeInput("previewRight.txt")	//$NON-NLS-1$

-			)

-		);

-

-		return fPreviewViewer.getControl();

-	}

-			

-	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 WorkbenchChainedTextFontFieldEditor addTextFontEditor(Composite parent, String labelKey, String key) {

-		

-		String label= Utilities.getString(labelKey);

-

-		Group group= new Group(parent, SWT.NULL);

-		group.setText(label);

-		GridLayout layout= new GridLayout();

-		layout.numColumns= 3;

-		layout.marginWidth+= 3;

-		group.setLayout(layout);		

-		WorkbenchChainedTextFontFieldEditor fe= new WorkbenchChainedTextFontFieldEditor(key, "", group);	//$NON-NLS-1$

-				

-		GridData gd= new GridData(GridData.FILL_HORIZONTAL);

-		gd.horizontalSpan= 2;

-		group.setLayoutData(gd);

-		

-		return fe;

-	}

-	

-	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 filename) {

-		String separator= System.getProperty("line.separator"); //$NON-NLS-1$

-		StringBuffer buffer= new StringBuffer(512);

-		BufferedReader reader= null;

-		try {

-			reader= new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(filename)));

-			String line;

-			while ((line= reader.readLine()) != null) {

-				buffer.append(line);

-				buffer.append(separator);

-			}

-		} catch (IOException io) {

-			CompareUIPlugin.log(io);

-		} finally {

-			if (reader != null) {

-				try {

-					reader.close();

-				} catch (IOException e) {

-				}

-			}

-		}

-		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 a55ff32..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
+++ /dev/null
@@ -1,862 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.widgets.Display;

-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.operation.IRunnableWithProgress;

-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.ui.internal.SharedImages;

-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) {

-		

-		if (compareResultOK(input)) {				

-			IWorkbenchPage activePage= getActivePage();

-			if (activePage != null) {

-				try {

-					activePage.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.

-	 * <p>

-	 * Note: Images returned from this method will be automitically 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) {

-		

-		type= normalizeCase(type);

-		

-		boolean dispose= false;

-		Image image= null;

-		if (type != null)

-			image= (Image) fgImages.get(type);

-		if (image == null) {

-			ImageDescriptor id= (ImageDescriptor) fgImageDescriptors.get(type);

-			if (id != null) {

-				image= id.createImage();

-				dispose= true;

-			}

-				

-			if (image == null) {

-				if (fgComparePlugin != null) {

-					if (ITypedElement.FOLDER_TYPE.equals(type)) {

-						image= getDefault().getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);

-						//image= SharedImages.getImage(ISharedImages.IMG_OBJ_FOLDER);

-					} else {

-						image= createWorkbenchImage(type);

-						dispose= true;

-					}

-				} else {

-					id= (ImageDescriptor) fgImageDescriptors.get(normalizeCase("file")); //$NON-NLS-1$

-					image= id.createImage();

-					dispose= true;

-				}

-			}

-			if (image != null)

-				registerImage(type, image, dispose);

-		}

-		return 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 automitically 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) {

-		if (adaptable != null) {

-			Object o= adaptable.getAdapter(IWorkbenchAdapter.class);

-			if (o instanceof IWorkbenchAdapter) {

-				ImageDescriptor id= ((IWorkbenchAdapter) o).getImageDescriptor(adaptable);

-				if (id != null) {

-					Image image= (Image)fgImages2.get(id);

-					if (image == null) {

-						image= id.createImage();

-						try {

-							fgImages2.put(id, image);

-						} catch (NullPointerException ex) {

-						}

-						fgDisposeOnShutdownImages.add(image);

-

-					}

-					return image;

-				}

-			}

-		}

-		return null;

-	}

-	

-	private static Image createWorkbenchImage(String type) {

-		IEditorRegistry er= getDefault().getWorkbench().getEditorRegistry();

-		ImageDescriptor id= er.getImageDescriptor("foo." + type); //$NON-NLS-1$

-		return id.createImage();

-	}

-	

-	/**

-	 * Registers the given structure creator descriptor for one or more types.

-	 *

-	 * @param types one or more types separated by commas and whitespace

-	 * @param descriptor the descriptor to register

-	 */

-	public static void registerStructureCreator(String types, IStructureCreatorDescriptor descriptor) {

-		if (types != null) {

-			StringTokenizer tokenizer= new StringTokenizer(types, ","); //$NON-NLS-1$

-			while (tokenizer.hasMoreElements()) {

-				String extension= tokenizer.nextToken().trim();

-				fgStructureCreators.put(normalizeCase(extension), descriptor);

-			}

-		}

-	}

-	

-	/**

-	 * Returns an structure creator descriptor for the given type.

-	 *

-	 * @param type the type for which to find a descriptor

-	 * @return a descriptor for the given type, or <code>null</code> if no

-	 *   descriptor has been registered

-	 */

-	public static IStructureCreatorDescriptor getStructureCreator(String type) {

-		return (IStructureCreatorDescriptor) fgStructureCreators.get(normalizeCase(type));

-	}

-	

-	/**

-	 * Registers the given structure viewer descriptor for one or more types.

-	 *

-	 * @param types one or more types separated by commas and whitespace

-	 * @param the descriptor to register

-	 */

-	public static void registerStructureViewerDescriptor(String types, IViewerDescriptor descriptor) {

-		StringTokenizer tokenizer= new StringTokenizer(types, ","); //$NON-NLS-1$

-		while (tokenizer.hasMoreElements()) {

-			String extension= tokenizer.nextToken().trim();

-			fgStructureViewerDescriptors.put(normalizeCase(extension), descriptor);

-		}

-	}

-	

-	/**

-	 * Registers the given content merge viewer descriptor for one or more types.

-	 *

-	 * @param types one or more types separated by commas and whitespace

-	 * @param descriptor the descriptor to register

-	 */

-	public static void registerContentMergeViewerDescriptor(String types, IViewerDescriptor descriptor) {

-		StringTokenizer tokenizer= new StringTokenizer(types, ","); //$NON-NLS-1$

-		while (tokenizer.hasMoreElements()) {

-			String extension= tokenizer.nextToken().trim();

-			fgContentMergeViewerDescriptors.put(normalizeCase(extension), descriptor);

-		}

-	}

-	

-	/**

-	 * Registers the given content viewer descriptor for one or more types.

-	 *

-	 * @param types one or more types separated by commas and whitespace

-	 * @param descriptor the descriptor to register

-	 */

-	public static void registerContentViewerDescriptor(String types, IViewerDescriptor descriptor) {

-		StringTokenizer tokenizer= new StringTokenizer(types, ","); //$NON-NLS-1$

-		while (tokenizer.hasMoreElements()) {

-			String extension= tokenizer.nextToken().trim();

-			fgContentViewerDescriptors.put(normalizeCase(extension), descriptor);

-		}

-	}

-		

-	/**

-	 * 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) {

-

-		if (input.getLeft() == null || input.getRight() == null)	// we don't show the structure of additions or deletions

-			return null;

-			

-		String type= getType(input);

-		if (type == null)

-			return null;

-			

-		type= normalizeCase(type);

-			

-		IViewerDescriptor vd= (IViewerDescriptor) fgStructureViewerDescriptors.get(type);

-		if (vd == null) {

-			String alias= (String) fgStructureViewerAliases.get(type);

-			if (alias != null)

-				vd= (IViewerDescriptor) fgStructureViewerDescriptors.get(alias);

-		}

-		if (vd != null)

-			return vd.createViewer(oldViewer, parent, configuration);

-			

-		IStructureCreatorDescriptor scc= getStructureCreator(type);

-		if (scc != null) {

-			IStructureCreator sc= scc.createStructureCreator();

-			if (sc != null) {

-				StructureDiffViewer sdv= new StructureDiffViewer(parent, configuration);

-				sdv.setStructureCreator(sc);

-				return sdv;

-			}

-		}

-		return null;

-	}

-	

-	/**

-	 * 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, Object in, Composite parent, CompareConfiguration cc) {

-		

-		if (in instanceof IStreamContentAccessor) {

-			String type= ITypedElement.TEXT_TYPE;

-			

-			if (in instanceof ITypedElement) {

-				ITypedElement tin= (ITypedElement) in;

-				String ty= tin.getType();

-				if (ty != null)

-					type= ty;

-			}

-			type= normalizeCase(type);

-			

-			IViewerDescriptor vd= (IViewerDescriptor) fgContentViewerDescriptors.get(type);

-			Viewer viewer= null;

-			if (vd != null) {

-				viewer= vd.createViewer(oldViewer, parent, cc);

-				if (viewer != null)

-					return viewer;

-			}

-			// fallback

-			return new SimpleTextViewer(parent);

-		}

-

-		if (!(in instanceof ICompareInput))

-			return null;

-			

-		ICompareInput input= (ICompareInput) in;

-		String type= getType(input);

-		type= normalizeCase(type);

-		

-		if (ITypedElement.FOLDER_TYPE.equals(type))

-			return null;

-			

-		if (type != null) {

-			IViewerDescriptor vd= (IViewerDescriptor) fgContentMergeViewerDescriptors.get(type);

-			Viewer viewer= null;

-			if (vd != null) {

-				viewer= vd.createViewer(oldViewer, parent, cc);

-				if (viewer != null)

-					return viewer;

-			}

-		}

-		

-		// fallback

-		String leftType= guessType(input.getLeft());

-		String rightType= guessType(input.getRight());

-			

-		if (leftType != null || rightType != null) {

-			boolean right_text= rightType != null && ITypedElement.TEXT_TYPE.equals(rightType);

-			boolean left_text= leftType != null && ITypedElement.TEXT_TYPE.equals(leftType);

-			if ((leftType == null && right_text) || (left_text && rightType == null) || (left_text && right_text))

-				type= ITypedElement.TEXT_TYPE;

-			else

-				type= "binary"; //$NON-NLS-1$

-			

-			IViewerDescriptor vd= (IViewerDescriptor) fgContentMergeViewerDescriptors.get(normalizeCase(type));

-			if (vd != null)

-				return vd.createViewer(oldViewer, parent, cc);

-		}

-		return null;

-	}

-		

-	/**

-	 * Determines the type of the given threeway input by analyzing

-	 * the types (file extension) of the individual parts.

-	 * Returns null if no type can be determined.

-	 */

-	private static String getType(ICompareInput input) {

-		ITypedElement ancestor= input.getAncestor();

-		ITypedElement left= input.getLeft();

-		ITypedElement right= input.getRight();

-		

-		String[] types= new String[3];

-		int cnt= 0;

-		

-		if (ancestor != null) {

-			String type= ancestor.getType();

-			if (type != null)

-				types[cnt++]= type;

-		}

-		if (left != null) {

-			String type= left.getType();

-			if (type != null)

-				types[cnt++]= type;

-		}

-		if (right != null) {

-			String type= right.getType();

-			if (type != null)

-				types[cnt++]= type;

-		}

-		boolean homogenous= false;

-		switch (cnt) {

-		case 1:

-			homogenous= true;

-			break;

-		case 2:

-			homogenous= types[0].equals(types[1]);

-			break;

-		case 3:

-			homogenous= types[0].equals(types[1]) && types[1].equals(types[2]);

-			break;

-		}

-		if (homogenous)

-			return types[0];

-		return null;

-	}

-	

-	/**

-	 * Guesses the file type of the given input.

-	 * Returns ITypedElement.TEXT_TYPE if none of the first 10 lines is longer than 1000 bytes.

-	 * Returns ITypedElement.UNKNOWN_TYPE otherwise.

-	 * Returns <code>null</code> if the input isn't an <code>IStreamContentAccessor</code>.

-	 */

-	private static String guessType(ITypedElement input) {

-		if (input instanceof IStreamContentAccessor) {

-			IStreamContentAccessor sca= (IStreamContentAccessor) input;

-			InputStream is= null;

-			try {

-				is= sca.getContents();

-				if (is == null)

-					return null;

-				int lineLength= 0;

-				int lines= 0;

-				while (lines < 10) {

-					int c= is.read();

-					if (c == -1)	// EOF

-						break;

-					if (c == '\n' || c == '\r') { // reset line length

-						lineLength= 0;

-						lines++;

-					} else

-						lineLength++;

-					if (lineLength > 1000)

-						return ITypedElement.UNKNOWN_TYPE;

-				}

-				return ITypedElement.TEXT_TYPE;

-			} catch (CoreException ex) {

-				// be silent and return UNKNOWN_TYPE

-			} catch (IOException ex) {

-				// be silent and return UNKNOWN_TYPE

-			} finally {

-				if (is != null) {

-					try {

-						is.close();

-					} catch (IOException ex) {

-					}

-				}

-			}

-			return ITypedElement.UNKNOWN_TYPE;

-		}

-		return null;

-	}

-	

-	private static IViewerDescriptor getContentViewerDescriptor2(String type) {

-		return (IViewerDescriptor) fgContentMergeViewerDescriptors.get(normalizeCase(type));

-	}

-	

-	private static String normalizeCase(String s) {

-		if (NORMALIZE_CASE && s != null)

-			return s.toUpperCase();

-		return s;

-	}

-	

-	//---- alias mgmt

-	

-	private void initPreferenceStore() {

-		//System.out.println("initPreferenceStore");

-		IPreferenceStore ps= getPreferenceStore();

-		if (ps != null) {

-			String aliases= ps.getString(STRUCTUREVIEWER_ALIASES_PREFERENCE_NAME);

-			//System.out.println("  <" + aliases + ">");

-			if (aliases != null && aliases.length() > 0) {

-				StringTokenizer st= new StringTokenizer(aliases, " ");	//$NON-NLS-1$

-				while (st.hasMoreTokens()) {

-					String pair= st.nextToken();

-					int pos= pair.indexOf('.');

-					if (pos > 0) {

-						String key= pair.substring(0, pos);

-						String alias= pair.substring(pos+1);

-						fgStructureViewerAliases.put(key, alias);

-						//System.out.println("<" + key + "><" + alias + ">");

-					}

-				}

-			}

-		}		

-	}

-	

-	public static void addStructureViewerAlias(String type, String alias) {

-		//System.out.println("addStructureViewerAlias: " + type + " " + alias);

-		fgStructureViewerAliases.put(normalizeCase(alias), normalizeCase(type));

-	}

-	

-	public static void removeAllStructureViewerAliases(String type) {

-		String t= normalizeCase(type);

-		Set entrySet= fgStructureViewerAliases.entrySet();

-		for (Iterator iter= entrySet.iterator(); iter.hasNext(); ) {

-			Map.Entry entry= (Map.Entry)iter.next();

-			if (entry.getValue().equals(t))

-				iter.remove();

-		}

-	}

-	

-	/**

-	 * Returns an array of all editors that have an unsaved content. If the identical content is 

-	 * presented in more than one editor, only one of those editor parts is part of the result.

-	 * 

-	 * @return an array of all dirty editor parts.

-	 */

-	public static IEditorPart[] getDirtyEditors() {

-		Set inputs= new HashSet();

-		List result= new ArrayList(0);

-		IWorkbench workbench= getDefault().getWorkbench();

-		IWorkbenchWindow[] windows= workbench.getWorkbenchWindows();

-		for (int i= 0; i < windows.length; i++) {

-			IWorkbenchPage[] pages= windows[i].getPages();

-			for (int x= 0; x < pages.length; x++) {

-				IEditorPart[] editors= pages[x].getDirtyEditors();

-				for (int z= 0; z < editors.length; z++) {

-					IEditorPart ep= editors[z];

-					IEditorInput input= ep.getEditorInput();

-					if (!inputs.contains(input)) {

-						inputs.add(input);

-						result.add(ep);

-					}

-				}

-			}

-		}

-		return (IEditorPart[])result.toArray(new IEditorPart[result.size()]);

-	}

-		

-	public static void log(Throwable e) {

-		log(new Status(IStatus.ERROR, getPluginId(), INTERNAL_ERROR, CompareMessages.getString("ComparePlugin.internal_error"), e)); //$NON-NLS-1$

-	}

-	

-	public static void log(IStatus status) {

-		getDefault().getLog().log(status);

-	}

-	

-	public static String getPluginId() {

-		return getDefault().getDescriptor().getUniqueIdentifier();

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java
deleted file mode 100644
index dc5191d..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java
+++ /dev/null
@@ -1,13 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-public class CompareWithEditionAction extends EditionAction {

-	

-	public CompareWithEditionAction() {

-		super(false, "org.eclipse.compare.internal.CompareWithEditionAction"); //$NON-NLS-1$

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties
deleted file mode 100644
index 7a4b31a..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2000, 2001.

-# All Rights Reserved.

-# ====================================

-

-# @(#)CompareWithEditionAction.properties

-#

-# Resources for CompareWithEditionAction.java

-

-title= Compare with Local History

-

-treeTitleFormat= Local History of ''{0}''

-dateIcon= obj16/day_obj.gif

-timeIcon= obj16/resource_obj.gif

-

-treeFormat= {0}

-workspaceTreeFormat= {0} (Workspace File)

-parseErrorFormat= {0} (Parse Error)

-

-editionLabel= Local History ({0})

-workspaceEditionLabel= Workspace File

-

-targetLabel= Editor Buffer

-workspaceTargetLabel= Workspace File

-

-todayFormat= Today ({0})

-yesterdayFormat= Yesterday ({0})

-dayFormat= {0}

-

-closeButton.label=Close

-

-noLocalHistoryError= No local history available for selected resource.

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java
deleted file mode 100644
index 2e166ef..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.graphics.*;

-

-import org.eclipse.jface.resource.CompositeImageDescriptor;

-import org.eclipse.jface.resource.ImageDescriptor;

-

-/**

- * Combines an image with an overlay.

- */

-public class DiffImage extends CompositeImageDescriptor {

-

-	static final int HEIGHT= 16;

-

-	private Image fBaseImage;

-	private ImageDescriptor fOverlayImage;

-	private int fWidth;

-	private boolean fLeft= true;

-

-	public DiffImage(Image base, ImageDescriptor overlay, int w) {

-		fBaseImage= base;

-		fOverlayImage= overlay;

-		fWidth= w;

-	}

-

-	public DiffImage(Image base, ImageDescriptor overlay, int w, boolean onLeft) {

-		fBaseImage= base;

-		fOverlayImage= overlay;

-		fWidth= w;

-		fLeft= onLeft;

-	}

-

-	protected Point getSize() {

-		return new Point(fWidth, HEIGHT);

-	}

-

-	protected void drawCompositeImage(int width, int height) {

-		if (fLeft) {

-			if (fBaseImage != null) {

-				ImageData base= fBaseImage.getImageData();

-				if (base == null)

-					base= DEFAULT_IMAGE_DATA;

-				drawImage(base, fWidth - base.width, 0);

-			}

-	

-			if (fOverlayImage != null) {

-				ImageData overlay= fOverlayImage.getImageData();

-				if (overlay == null)

-					overlay= DEFAULT_IMAGE_DATA;

-				drawImage(overlay, 0, (HEIGHT - overlay.height) / 2);

-			}

-		} else {

-			if (fBaseImage != null) {

-				ImageData base= fBaseImage.getImageData();

-				if (base == null)

-					base= DEFAULT_IMAGE_DATA;

-				drawImage(base, 0, 0);

-			}

-	

-			if (fOverlayImage != null) {

-				ImageData overlay= fOverlayImage.getImageData();

-				if (overlay == null)

-					overlay= DEFAULT_IMAGE_DATA;

-				drawImage(overlay, fWidth - overlay.width, (HEIGHT - overlay.height) / 2);

-			}

-		}

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java
deleted file mode 100644
index 80b6409..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.jface.text.*;

-import org.eclipse.compare.contentmergeviewer.ITokenComparator;

-import org.eclipse.compare.rangedifferencer.IRangeComparator;

-

-/**

- * Implements the <code>IRangeComparator</code> interface for lines in a document.

- * A <code>DocLineComparator</code> is used as the input for the <code>RangeDifferencer</code>

- * engine to perform a line oriented compare on documents.

- * <p>

- * A <code>DocLineComparator</code> doesn't know anything about line separators because

- * its notion of lines is solely defined in the underlying <code>IDocument</code>.

- */

-public class DocLineComparator implements ITokenComparator {

-

-	private IDocument fDocument;

-	private int fLineOffset;

-	private int fLineCount;

-	private int fLength;

-	private boolean fIgnoreWhiteSpace;

-

-	/**

-	 * Creates a <code>DocLineComparator</code> for the given document range.

-	 * ignoreWhiteSpace controls whether comparing lines (in method

-	 * <code>rangesEqual<code>) should ignore whitespace.

-	 *

-	 * @param document the document from which the lines are taken

-	 * @param region if non-<code>null</code> only lines within this range are taken

-	 * @param ignoreWhiteSpace if <code>true</code> white space is ignored when comparing lines

-	 */

-	public DocLineComparator(IDocument document, IRegion region, boolean ignoreWhiteSpace) {

-

-		fDocument= document;

-		fIgnoreWhiteSpace= ignoreWhiteSpace;

-

-		fLineOffset= 0;

-		if (region != null) {

-			fLength= region.getLength();

-			int start= region.getOffset();

-			try {

-				fLineOffset= fDocument.getLineOfOffset(start);

-			} catch (BadLocationException ex) {

-			}

-

-			if (fLength == 0)

-				fLineCount= 0;

-			else {

-				int endLine= fDocument.getNumberOfLines();

-				try {

-					endLine= fDocument.getLineOfOffset(start + fLength);

-				} catch (BadLocationException ex) {

-				}

-				fLineCount= endLine - fLineOffset + 1;

-			}

-

-		} else {

-			fLength= document.getLength();

-			fLineCount= fDocument.getNumberOfLines();

-		}

-	}

-

-	/**

-	 * Returns the number of lines in the document.

-	 *

-	 * @return number of lines

-	 */

-	public int getRangeCount() {

-		return fLineCount;

-	}

-

-	/* (non Javadoc)

-	 * see ITokenComparator.getTokenStart

-	 */

-	public int getTokenStart(int line) {

-		try {

-			IRegion r= fDocument.getLineInformation(fLineOffset + line);

-			return r.getOffset();

-		} catch (BadLocationException ex) {

-			return fDocument.getLength();

-		}

-	}

-

-	/* (non Javadoc)

-	 * Returns the length of the given line.

-	 * see ITokenComparator.getTokenLength

-	 */

-	public int getTokenLength(int line) {

-		return getTokenStart(line+1) - getTokenStart(line);

-	}

-

-	/**

-	 * Returns <code>true</code> if a line given by the first index

-	 * matches a line specified by the other <code>IRangeComparator</code> and index.

-	 *

-	 * @param thisIndex	the number of the line within this range comparator

-	 * @param other the range comparator to compare this with

-	 * @param otherIndex the number of the line within the other comparator

-	 * @return <code>true</code> if the lines are equal

-	 */

-	public boolean rangesEqual(int thisIndex, IRangeComparator other0, int otherIndex) {

-

-		if (other0 != null && other0.getClass() == getClass()) {

-			DocLineComparator other= (DocLineComparator) other0;

-

-			if (fIgnoreWhiteSpace) {

-				String s1= extract(thisIndex);

-				String s2= other.extract(otherIndex);

-				return compare(s1, s2);

-			}

-

-			int tlen= getTokenLength(thisIndex);

-			int olen= other.getTokenLength(otherIndex);

-			if (tlen == olen) {

-				String s1= extract(thisIndex);

-				String s2= other.extract(otherIndex);

-				return s1.equals(s2);

-			}

-		}

-		return false;

-	}

-

-	/**

-	 * Aborts the comparison if the number of tokens is too large.

-	 *

-	 * @return <code>true</code> to abort a token comparison

-	 */

-	public boolean skipRangeComparison(int length, int max, IRangeComparator other) {

-		return false;

-	}

-		

-	//---- private methods

-	

-	/**

-	 * Extract a single line from the underlying document without the line separator.

-	 *

-	 * @param line the number of the line to extract

-	 * @return the contents of the line as a String

-	 */

-	private String extract(int line) {

-		if (line < fLineCount) {

-			try {

-				IRegion r= fDocument.getLineInformation(fLineOffset + line);

-				return fDocument.get(r.getOffset(), r.getLength());

-			} catch(BadLocationException e) {

-			}

-		}

-		return ""; //$NON-NLS-1$

-	}

-

-	private boolean compare(String s1, String s2) {

-		int i1= 0;

-		int i2= 0;

-		int l1= s1.length();

-		int l2= s2.length();

-		char c1= ' ';

-		char c2= ' ';

-		while (i1 < l1 || i2 < l2) {

-			if (i1 < l1) {

-				c1= s1.charAt(i1);

-				if (Character.isWhitespace(c1)) {

-					i1++;

-					continue;

-				}

-			}

-			if (i2 < l2) {

-				c2= s2.charAt(i2);

-				if (Character.isWhitespace(c2)) {

-					i2++;

-					continue;

-				}

-			}

-			if (c1 != c2)

-				return false;

-			i1++;

-			i2++;

-		}

-		return true;

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java
deleted file mode 100644
index 76491b9..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.util.*;

-

-import org.eclipse.jface.text.IDocument;

-

-/**

- * No API yet.

- */

-public class DocumentManager {

-	

-	private static final boolean DEBUG= false;

-	

-	private static ArrayList fgKeys= new ArrayList();

-	private static ArrayList fgValues= new ArrayList();

-	

-	public static IDocument get(Object o) {

-		

-		for (int i= 0; i < fgKeys.size(); i++) {

-			if (fgKeys.get(i) == o)

-				return (IDocument) fgValues.get(i);

-		}

-		return null;

-	}

-	

-	public static void put(Object o, IDocument document) {

-		if (DEBUG) System.out.println("DocumentManager.put: " + document);	//$NON-NLS-1$

-		for (int i= 0; i < fgKeys.size(); i++) {

-			if (fgKeys.get(i) == o) {

-				fgValues.set(i, document);

-				return;

-			}

-		}

-		fgKeys.add(o);

-		fgValues.add(document);	

-	}

-	

-	public static void remove(IDocument document) {

-		if (document != null) {

-			if (DEBUG) System.out.println("DocumentManager.remove: " + document);	//$NON-NLS-1$

-			for (int i= 0; i < fgValues.size(); i++) {

-				if (fgValues.get(i) == document) {

-					fgKeys.remove(i);

-					fgValues.remove(i);

-					return;

-				}

-			}

-			if (DEBUG) System.out.println("DocumentManager.remove: not found");	//$NON-NLS-1$

-		}

-	}

-	

-	public static void dump() {

-		if (DEBUG) System.out.println("DocumentManager: managed docs:" + fgValues.size());	//$NON-NLS-1$

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java
deleted file mode 100644
index a56b069..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.io.InputStream;

-import java.io.ByteArrayInputStream;

-import java.util.ArrayList;

-import java.util.ResourceBundle;

-import java.lang.reflect.InvocationTargetException;

-

-import org.eclipse.core.resources.*;

-import org.eclipse.core.runtime.*;

-

-import org.eclipse.swt.widgets.Shell;

-import org.eclipse.swt.graphics.Image;

-

-import org.eclipse.jface.action.IAction;

-import org.eclipse.jface.dialogs.MessageDialog;

-import org.eclipse.jface.dialogs.ProgressMonitorDialog;

-import org.eclipse.jface.viewers.ISelection;

-import org.eclipse.jface.text.IDocument;

-import org.eclipse.jface.text.BadLocationException;

-

-import org.eclipse.ui.*;

-import org.eclipse.ui.part.FileEditorInput;

-import org.eclipse.ui.texteditor.ITextEditor;

-import org.eclipse.ui.texteditor.IDocumentProvider;

-import org.eclipse.ui.actions.WorkspaceModifyOperation;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.ITypedElement;

-import org.eclipse.compare.IStreamContentAccessor;

-

-

-public class EditionAction implements IActionDelegate {

-

-	/**

-	 * Implements the IStreamContentAccessor and ITypedElement protocols

-	 * for a Document.

-	 */

-	class DocumentBufferNode implements ITypedElement, IStreamContentAccessor {

-		

-		private IDocument fDocument;

-		private String type;

-		private IFile fFile;

-		

-		DocumentBufferNode(IDocument document, IFile file) {

-			fDocument= document;

-			fFile= file;

-		}

-		

-		public String getName() {

-			return fFile.getName();

-		}

-		

-		public String getType() {

-			return fFile.getFileExtension();

-		}

-		

-		public Image getImage() {

-			return null;

-		}

-		

-		public InputStream getContents() {

-			return new ByteArrayInputStream(fDocument.get().getBytes());

-		}

-	}

-

-	private ISelection fSelection;

-	private String fBundleName;

-	private boolean fReplaceMode;

-	protected boolean fPrevious= false;

-	

-	EditionAction(boolean replaceMode, String bundleName) {

-		fReplaceMode= replaceMode;

-		fBundleName= bundleName;

-	}

-

-	public final void selectionChanged(IAction action, ISelection selection) {

-		fSelection= selection;

-		if (action != null) {

-			IFile[] files= getFiles(selection, fReplaceMode);

-			action.setEnabled(files.length == 1);	// we don't support multiple selection for now

-		}

-	}

-	

-	public void run(IAction action) {

-		IFile[] files= getFiles(fSelection, fReplaceMode);

-		for (int i= 0; i < files.length; i++)

-			doFromHistory(files[i]);

-	}

-

-	private void doFromHistory(final IFile file) {

-						

-		ResourceBundle bundle= ResourceBundle.getBundle(fBundleName);

-		String title= Utilities.getString(bundle, "title"); //$NON-NLS-1$

-			

-		Shell parentShell= CompareUIPlugin.getShell();

-		

-		IFileState states[]= null;

-		try {

-			states= file.getHistory(null);

-		} catch (CoreException ex) {		

-			MessageDialog.openError(parentShell, title, ex.getMessage());

-			return;

-		}

-		

-		if (states == null || states.length <= 0) {

-			String msg= Utilities.getString(bundle, "noLocalHistoryError"); //$NON-NLS-1$

-			MessageDialog.openInformation(parentShell, title, msg);

-			return;

-		}

-		

-		ITypedElement base= new ResourceNode(file);

-		

-		IDocument document= getDocument(file);

-		ITypedElement target= base;

-		if (document != null)

-			target= new DocumentBufferNode(document, file);

-	

-		ITypedElement[] editions= new ITypedElement[states.length+1];

-		editions[0]= base;

-		for (int i= 0; i < states.length; i++)

-			editions[i+1]= new HistoryItem(base, states[i]);

-

-		EditionSelectionDialog d= new EditionSelectionDialog(parentShell, bundle);

-		d.setEditionTitleArgument(file.getName());

-		d.setEditionTitleImage(CompareUIPlugin.getImage(file));

-		//d.setHideIdenticalEntries(false);

-		

-		if (fReplaceMode) {

-			

-			ITypedElement ti= null;

-			if (fPrevious)

-				ti= d.selectPreviousEdition(target, editions, null);

-			else

-				ti= d.selectEdition(target, editions, null);

-			

-			if (ti instanceof IStreamContentAccessor) {

-				IStreamContentAccessor sa= (IStreamContentAccessor)ti;

-				try {

-

-					if (document != null)

-						updateDocument(document, sa);	

-					else

-						updateWorkspace(bundle, parentShell, sa, file);

-						

-				} 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$

-				}

-			}

-		} else {

-			d.setCompareMode(true);

-

-			d.selectEdition(target, editions, null);			

-		}

-	}

-	

-	private void updateWorkspace(final ResourceBundle bundle, Shell shell,

-						final IStreamContentAccessor sa, final IFile file)

-									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, IProgressMonitor.UNKNOWN);

-					file.setContents(sa.getContents(), false, true, pm);

-				} catch (CoreException e) {

-					throw new InvocationTargetException(e);

-				} finally {

-					pm.done();

-				}

-			}

-		};

-		

-		ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(shell);				

-		pmdialog.run(false, true, operation);									

-	}

-	

-	private void updateDocument(IDocument document, IStreamContentAccessor sa) throws InvocationTargetException {

-		try {

-			InputStream is= sa.getContents();

-			String text= Utilities.readString(is);

-			document.replace(0, document.getLength(), text);

-		} catch (CoreException e) {

-			throw new InvocationTargetException(e);

-		} catch (BadLocationException e) {

-			throw new InvocationTargetException(e);

-		}

-	}

-	

-	private IDocument getDocument(IFile file) {

-		IWorkbench wb= PlatformUI.getWorkbench();

-		if (wb == null)

-			return null;

-		IWorkbenchWindow[] ws= wb.getWorkbenchWindows();

-		if (ws == null)

-			return null;

-			

-		FileEditorInput test= new FileEditorInput(file);

-		

-		for (int i= 0; i < ws.length; i++) {

-			IWorkbenchWindow w= ws[i];

-			IWorkbenchPage[] wps= w.getPages();

-			if (wps != null) {

-				for (int j= 0; j < wps.length; j++) {

-					IWorkbenchPage wp= wps[j];

-					IEditorPart ep= wp.findEditor(test);

-					if (ep instanceof ITextEditor) {

-						ITextEditor te= (ITextEditor) ep;

-						IDocumentProvider dp= te.getDocumentProvider();

-						if (dp != null) {

-							IDocument doc= dp.getDocument(ep);

-							if (doc != null)

-								return doc;

-						}

-					}

-				}

-			}

-		}

-		return null;

-	}

-	

-	private IFile[] getFiles(ISelection selection, boolean modifiable) {

-		ArrayList result= new ArrayList();

-		Object[] s= Utilities.toArray(selection);	

-		for (int i= 0; i < s.length; i++) {

-			Object o= s[i];

-			IFile file= null;

-			if (o instanceof IFile) {

-				file= (IFile) o;

-			} else if (o instanceof IAdaptable) {

-				IAdaptable a= (IAdaptable) o;

-				Object adapter= a.getAdapter(IResource.class);

-				if (adapter instanceof IFile)

-					file= (IFile) adapter;

-			}

-			if (file != null) {

-				if (modifiable) {

-					if (!file.isReadOnly())

-						result.add(file);

-				} else {

-					result.add(file);

-				}					

-			}

-		}

-		return (IFile[]) result.toArray(new IFile[result.size()]);

-	}

-

-

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java
deleted file mode 100644
index 773b049..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.io.StringWriter;

-import java.lang.reflect.InvocationTargetException;

-

-import org.eclipse.swt.widgets.Shell;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IStatus;

-import org.eclipse.core.runtime.Status;

-

-import org.eclipse.jface.dialogs.ErrorDialog;

-import org.eclipse.jface.dialogs.MessageDialog;

-

-/**

- * The default exception handler shows an error dialog when one of its handle methods

- * is called. If the passed exception is a <code>CoreException</code> an error dialog

- * pops up showing the exception's status information. For a <code>InvocationTargetException</code>

- * a normal message dialog pops up showing the exception's message. Additionally the exception

- * is written to the platform log.

- */

-public class ExceptionHandler {

-

-	private static ExceptionHandler fgInstance= new ExceptionHandler();

-	

-	/**

-	 * Logs the given exception using the platform's logging mechanism. The exception is

-	 * logged as an error with the error code <code>JavaStatusConstants.INTERNAL_ERROR</code>.

-	 */

-	public static void log(Throwable t, String message) {

-		CompareUIPlugin.log(new Status(IStatus.ERROR, CompareUIPlugin.getPluginId(), 

-			CompareUIPlugin.INTERNAL_ERROR, message, t));

-	}

-	

-	/**

-	 * Handles the given <code>CoreException</code>. The workbench shell is used as a parent

-	 * for the dialog window.

-	 * 

-	 * @param e the <code>CoreException</code> to be handled

-	 * @param title the dialog window's window title

-	 * @param message message to be displayed by the dialog window

-	 */

-	public static void handle(CoreException e, String title, String message) {

-		handle(e, CompareUIPlugin.getShell(), title, message);

-	}

-	

-	/**

-	 * Handles the given <code>CoreException</code>. 

-	 * 

-	 * @param e the <code>CoreException</code> to be handled

-	 * @param parent the dialog window's parent shell

-	 * @param title the dialog window's window title

-	 * @param message message to be displayed by the dialog window

-	 */

-	public static void handle(CoreException e, Shell parent, String title, String message) {

-		fgInstance.perform(e, parent, title, message);

-	}

-	

-	/**

-	 * Handles the given <code>InvocationTargetException</code>. The workbench shell is used 

-	 * as a parent for the dialog window.

-	 * 

-	 * @param e the <code>InvocationTargetException</code> to be handled

-	 * @param title the dialog window's window title

-	 * @param message message to be displayed by the dialog window

-	 */

-	public static void handle(InvocationTargetException e, String title, String message) {

-		handle(e, CompareUIPlugin.getShell(), title, message);

-	}

-	

-	/**

-	 * Handles the given <code>InvocationTargetException</code>. 

-	 * 

-	 * @param e the <code>InvocationTargetException</code> to be handled

-	 * @param parent the dialog window's parent shell

-	 * @param title the dialog window's window title

-	 * @param message message to be displayed by the dialog window

-	 */

-	public static void handle(InvocationTargetException e, Shell parent, String title, String message) {

-		fgInstance.perform(e, parent, title, message);

-	}

-

-	//---- Hooks for subclasses to control exception handling ------------------------------------

-	

-	protected void perform(CoreException e, Shell shell, String title, String message) {

-		CompareUIPlugin.log(e);

-		IStatus status= e.getStatus();

-		if (status != null) {

-			ErrorDialog.openError(shell, title, message, status);

-		} else {

-			displayMessageDialog(e, e.getMessage(), shell, title, message);

-		}

-	}

-

-	protected void perform(InvocationTargetException e, Shell shell, String title, String message) {

-		Throwable target= e.getTargetException();

-		if (target instanceof CoreException) {

-			perform((CoreException)target, shell, title, message);

-		} else {

-			CompareUIPlugin.log(e);

-			if (e.getMessage() != null && e.getMessage().length() > 0) {

-				displayMessageDialog(e, e.getMessage(), shell, title, message);

-			} else {

-				displayMessageDialog(e, target.getMessage(), shell, title, message);

-			}

-		}

-	}

-

-	//---- Helper methods -----------------------------------------------------------------------

-	

-	private void displayMessageDialog(Throwable t, String exceptionMessage, Shell shell, String title, String message) {

-		StringWriter msg= new StringWriter();

-		if (message != null) {

-			msg.write(message);

-			msg.write("\n\n"); //$NON-NLS-1$

-		}

-		if (exceptionMessage == null || exceptionMessage.length() == 0)

-			msg.write(CompareMessages.getString("ExceptionDialog.seeErrorLogMessage")); //$NON-NLS-1$

-		else

-			msg.write(exceptionMessage);

-		MessageDialog.openError(shell, title, msg.toString());			

-	}	

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java
deleted file mode 100644
index 88ac71d..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-public interface INavigatable {

-	

-	static final String NAVIGATOR_PROPERTY= "org.eclipse.compare.internal.Navigator"; //$NON-NLS-1$

-	

-	/**

-	 * Returns true if at end or beginning.

-	 */

-	boolean gotoDifference(boolean next);

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java
deleted file mode 100644
index d4b4cc2..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java
+++ /dev/null
@@ -1,13 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.core.runtime.IProgressMonitor;

-import org.eclipse.core.runtime.CoreException;

-

-public interface ISavable {

-	

-	void save(IProgressMonitor pm) throws CoreException;

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java
deleted file mode 100644
index e637e53..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.compare.structuremergeviewer.IStructureCreator;

-

-/**

- * A factory object for creating <code>IStructureCreator</code>s from a descriptor.

- * <p>

- * It is used when registering <code>IStructureCreator</code> for types

- * in <code>CompareUIPlugin.registerStructureCreator</code>.

- * </p>

- *

- * @see IStructureCreator

- * @see CompareUIPlugin

- */

-public interface IStructureCreatorDescriptor {

-

-	/**

-	 * Creates a new structure creator.

-	 *

-	 * @return a newly created structure creator

-	 */

-	IStructureCreator createStructureCreator(); 

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java
deleted file mode 100644
index 8d69626..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.widgets.Composite;

-

-import org.eclipse.jface.viewers.Viewer;

-import org.eclipse.compare.CompareConfiguration;

-

-/**

- * A factory object for creating a <code>Viewer</code>s from a descriptor.

- * <p>

- * It is used when registering a viewer for a specific type

- * in <code>CompareUIPlugin.registerContentViewerDescriptor</code> and

- * in <code>CompareUIPlugin.registerStructureViewerDescriptor</code>.

- *

- * @see org.eclipse.compare.structuremergeviewer.IStructureCreator

- * @see CompareUIPlugin

- */

-public interface IViewerDescriptor {

-

-	/**

-	 * Creates a new viewer from this descriptor under the given STW parent control.

-	 * If the current viewer has the same type as a new viewer

-	 * the implementation of this method is free to return the current viewer instead.

-	 *

-	 * @param currentViewer the current viewer which is going to be replaced with a new viewer.

-	 * @param parent the SWT parent control under which the new viewer has to be created.

-	 * @param config a compare configuration the new viewer might be interested in.

-	 * @return a new viewer or the current viewer.

-	 */

-	Viewer createViewer(Viewer currentViewer, Composite parent, CompareConfiguration config);

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java
deleted file mode 100644
index bcfc62b..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.util.ResourceBundle;

-

-import org.eclipse.compare.*;

-

-/**

- * Toggles the <code>ICompareConfiguration.IGNORE_WS</code> property of an

- * <code>ICompareConfiguration</code>.

- */

-public class IgnoreWhiteSpaceAction extends ChangePropertyAction {

-

-	public IgnoreWhiteSpaceAction(ResourceBundle bundle, CompareConfiguration cc) {

-		super(bundle, cc, "action.IgnoreWhiteSpace.", CompareConfiguration.IGNORE_WHITESPACE); //$NON-NLS-1$

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java
deleted file mode 100644
index 3a3ec33..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.*;

-import org.eclipse.swt.graphics.*;

-import org.eclipse.swt.widgets.*;

-

-/**

- * A <code>Canvas</code> showing a single centered SWT <code>Image</code>.

- * If the <code>Image</code> is larger than the <code>Canvas<code>,

- * <code>Scrollbars</code> will appear.

- */

-class ImageCanvas extends Canvas {

-

-	private Image fImage;

-

-	/**

-	 * Create a new ImageCanvas with the given SWT stylebits.

-	 * (SWT.H_SCROLL and SWT.V_SCROLL are automtically added).

-	 */

-	public ImageCanvas(Composite parent, int style) {

-		super(parent, style | SWT.H_SCROLL | SWT.V_SCROLL);

-

-		ScrollBar sb= getHorizontalBar();

-		sb.setIncrement(20);

-		sb.addListener(SWT.Selection, new Listener() {

-			public void handleEvent(Event e) {

-				repaint();

-			}

-		});

-

-		sb= getVerticalBar();

-		sb.setIncrement(20);

-		sb.addListener(SWT.Selection, new Listener() {

-			public void handleEvent(Event e) {

-				repaint();

-			}

-		});

-

-		addListener(SWT.Resize, new Listener() {

-			public void handleEvent(Event e) {

-				updateScrollbars();

-			}

-		});

-

-		addListener(SWT.Paint, new Listener() {

-			public void handleEvent(Event event) {

-				paint(event.gc);

-			}

-		});

-	}

-

-	/**

-	 * Set the SWT Image to use as the ImageCanvas contents.

-	 */

-	public void setImage(Image img) {

-		fImage= img;

-

-		if (!isDisposed()) {

-			getHorizontalBar().setSelection(0);

-			getVerticalBar().setSelection(0);

-			updateScrollbars();

-			getParent().layout();

-			redraw();

-		}

-	}

-

-	public void repaint() {

-		if (!isDisposed()) {

-			GC gc= new GC(this);

-			paint(gc);

-			gc.dispose();

-		}

-	}

-

-	/**

-	 * @private

-	 */

-	private void paint(GC gc) {

-		if (fImage != null) {

-			Rectangle bounds= fImage.getBounds();

-			Rectangle clientArea= getClientArea();

-

-			int x;

-			if (bounds.width < clientArea.width)

-				x= (clientArea.width - bounds.width) / 2;

-			else

-				x= -getHorizontalBar().getSelection();

-

-			int y;

-			if (bounds.height < clientArea.height)

-				y= (clientArea.height - bounds.height) / 2;

-			else

-				y= -getVerticalBar().getSelection();

-

-			gc.drawImage(fImage, x, y);

-		}

-	}

-

-	/**

-	 * @private

-	 */

-	private void updateScrollbars() {

-		Rectangle bounds= fImage != null ? fImage.getBounds() : new Rectangle(0, 0, 0, 0);

-		Point size= getSize();

-		Rectangle clientArea= getClientArea();

-

-		ScrollBar horizontal= getHorizontalBar();

-		if (bounds.width <= clientArea.width) {

-			horizontal.setVisible(false);

-			horizontal.setSelection(0);

-		} else {

-			horizontal.setPageIncrement(clientArea.width - horizontal.getIncrement());

-			int max= bounds.width + (size.x - clientArea.width);

-			horizontal.setMaximum(max);

-			horizontal.setThumb(size.x > max ? max : size.x);

-			horizontal.setVisible(true);

-		}

-

-		ScrollBar vertical= getVerticalBar();

-		if (bounds.height <= clientArea.height) {

-			vertical.setVisible(false);

-			vertical.setSelection(0);

-		} else {

-			vertical.setPageIncrement(clientArea.height - vertical.getIncrement());

-			int max= bounds.height + (size.y - clientArea.height);

-			vertical.setMaximum(max);

-			vertical.setThumb(size.y > max ? max : size.y);

-			vertical.setVisible(true);

-		}

-	}

-

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
deleted file mode 100644
index 8373bed..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.io.ByteArrayInputStream;

-import java.io.InputStream;

-import java.io.IOException;

-import java.util.ResourceBundle;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.SWTException;

-import org.eclipse.swt.graphics.Image;

-import org.eclipse.swt.widgets.Composite;

-import org.eclipse.swt.widgets.Display;

-

-import org.eclipse.core.runtime.CoreException;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.contentmergeviewer.ContentMergeViewer;

-

-/**

- */

-public class ImageMergeViewer extends ContentMergeViewer {

-	

-	private static final String BUNDLE_NAME= "org.eclipse.compare.internal.ImageMergeViewerResources"; //$NON-NLS-1$

-		

-	private Object fAncestorImage;

-	private Object fLeftImage;

-	private Object fRightImage;

-

-	private ImageCanvas fAncestor;

-	private ImageCanvas fLeft;

-	private ImageCanvas fRight;

-	

-			

-	public ImageMergeViewer(Composite parent, int styles, CompareConfiguration mp) {

-		super(styles, ResourceBundle.getBundle(BUNDLE_NAME), mp);

-		buildControl(parent);

-		String title= Utilities.getString(getResourceBundle(), "title"); //$NON-NLS-1$

-		getControl().setData(CompareUI.COMPARE_VIEWER_TITLE, title);

-	}

-

-	protected void updateContent(Object ancestor, Object left, Object right) {

-		

-		fAncestorImage= ancestor;

-		setInput(fAncestor, ancestor);

-		

-		fLeftImage= left;

-		setInput(fLeft, left);

-		

-		fRightImage= right;

-		setInput(fRight, right);

-	}

-	

-	/**

-	 * We can't modify the contents of either side we just return null.

-	 */

-	protected byte[] getContents(boolean left) {

-		return null;

-	}

-	

-	public void createControls(Composite composite) {

-		fAncestor= new ImageCanvas(composite, SWT.NO_FOCUS);

-		fLeft= new ImageCanvas(composite, SWT.NO_FOCUS);

-		fRight= new ImageCanvas(composite, SWT.NO_FOCUS);

-	}

-

-	private static void setInput(ImageCanvas canvas, Object input) {

-		if (canvas != null) {

-

-			InputStream stream= null;

-			if (input instanceof IStreamContentAccessor) {

-				IStreamContentAccessor sca= (IStreamContentAccessor) input;

-				if (sca != null) {

-					try {

-						stream= sca.getContents();

-					} catch (CoreException ex) {

-					}

-				}

-			}

-			

-			Image image= null;			

-			Display display= canvas.getDisplay();

-			if (stream != null) {

-				try {

-					image= new Image(display, stream);

-				} catch (SWTException ex) {

-				}

-			}

-

-			canvas.setImage(image);

-			if (image != null) {

-				canvas.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND));

-			} else {

-				canvas.setBackground(null);

-			}

-			

-			if (stream != null) {

-				try {

-					stream.close();

-				} catch (IOException ex) {

-				}

-			}

-		}

-	}

-	

-	protected void handleResizeAncestor(int x, int y, int width, int height) {

-		if (width > 0) {

-			fAncestor.setVisible(true);

-			fAncestor.setBounds(x, y, width, height);

-		} else {

-			fAncestor.setVisible(false);

-		}

-	}

-

-	protected void handleResizeLeftRight(int x, int y, int width1, int centerWidth, int width2, int height) {

-		fLeft.setBounds(x, y, width1, height);

-		fRight.setBounds(x+width1+centerWidth, y, width2, height);

-	}

-	

-	protected void copy(boolean leftToRight) {

-		if (leftToRight) {

-			fRightImage= fLeftImage;

-			setInput(fRight, fRightImage);

-			setRightDirty(true);

-		} else {

-			fLeftImage= fRightImage;

-			setInput(fLeft, fLeftImage);

-			setLeftDirty(true);

-		}

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java
deleted file mode 100644
index 2d40636..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.widgets.Composite;

-

-import org.eclipse.compare.*;

-import org.eclipse.jface.viewers.Viewer;

-

-/**

- * A factory object for the <code>ImageMergeViewer</code>.

- * This indirection is necessary because only objects with a default

- * constructor can be created via an extension point

- * (this precludes Viewers).

- */

-public class ImageMergeViewerCreator implements IViewerCreator {

-

-	public Viewer createViewer(Composite parent, CompareConfiguration mp) {

-		return new ImageMergeViewer(parent, SWT.NULL, mp);

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties
deleted file mode 100644
index b150dda..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2000, 2001.

-# All Rights Reserved.

-# =====================================

-

-# @(#)ImageMergeViewerResources.properties

-#

-# Resource strings for ImageMergeViewer.java

-

-title= Image Compare

-

-#####################################################

-# Actions

-#####################################################

-

-action.CopyLeftToRight.label= Copy Left to Right

-action.CopyLeftToRight.tooltip= Copy Image from Left to Right

-action.CopyLeftToRight.image= elcl16/copy_r_co.gif

-

-action.CopyRightToLeft.label= Copy Right to Left

-action.CopyRightToLeft.tooltip= Copy Image from Right to Left

-action.CopyRightToLeft.image= elcl16/copy_l_co.gif

-

-action.EnableAncestor.label= Enable Ancestor Pane

-action.EnableAncestor.tooltip= Control Visibility of Ancestor Pane

-action.EnableAncestor.image= elcl16/ancestorpane_co.gif

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java
deleted file mode 100644
index 9170ede..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.util.List;

-

-import org.eclipse.jface.viewers.IStructuredContentProvider;

-import org.eclipse.jface.viewers.Viewer;

-

-/** 

- * A specialized content provider to show a list of editor parts.

- */ 

-public class ListContentProvider implements IStructuredContentProvider {

-	List fContents;	

-

-	public ListContentProvider() {

-	}

-	

-	public Object[] getElements(Object input) {

-		if (fContents != null && fContents == input)

-			return fContents.toArray();

-		return new Object[0];

-	}

-

-	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {

-		if (newInput instanceof List) 

-			fContents= (List)newInput;

-		else

-			fContents= null;

-		// we use a fixed set.

-	}

-

-	public void dispose() {

-	}

-	

-	public boolean isDeleted(Object o) {

-		return fContents != null && !fContents.contains(o);

-	}

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java
deleted file mode 100644
index 7cd2624..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.layout.GridData;

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.jface.dialogs.IDialogConstants;

-import org.eclipse.jface.viewers.*;

-

-import org.eclipse.ui.dialogs.SelectionDialog;

-

-public class ListDialog extends SelectionDialog {

-

-	private IStructuredContentProvider fContentProvider;

-	private ILabelProvider fLabelProvider;

-	private Object fInput;

-	private TableViewer fTableViewer;

-	private boolean fAddCancelButton;

-	

-	public ListDialog(Shell parent) {

-		super(parent);

-		fAddCancelButton= false;

-	}

-

-	public void setInput(Object input) {

-		fInput= input;

-	}

-	

-	public void setContentProvider(IStructuredContentProvider sp){

-		fContentProvider= sp;

-	}

-	

-	public void setLabelProvider(ILabelProvider lp){

-		fLabelProvider= lp;

-	}

-

-	public void setAddCancelButton(boolean addCancelButton) {

-		fAddCancelButton= addCancelButton;

-	}

-	

-	public TableViewer getTableViewer(){

-		return fTableViewer;

-	}

-			

-	public boolean hasFilters(){

-		return fTableViewer.getFilters() != null && fTableViewer.getFilters().length != 0;

-	}

-	

-	public void create() {

-		setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE);

-		super.create();

-	}

-	

-	protected void createButtonsForButtonBar(Composite parent) {

-		if (! fAddCancelButton)

-			createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);

-		else

-			super.createButtonsForButtonBar(parent);	

-	}	

-	

-	protected Control createDialogArea(Composite container) {

-		Composite parent= (Composite) super.createDialogArea(container);

-		createMessageArea(parent);

-		fTableViewer= new TableViewer(parent, getTableStyle());

-		fTableViewer.setContentProvider(fContentProvider);

-		Table table= fTableViewer.getTable();

-		fTableViewer.setLabelProvider(fLabelProvider);

-		fTableViewer.setInput(fInput);

-		GridData gd= new GridData(GridData.FILL_BOTH);

-		gd.heightHint= convertHeightInCharsToPixels(15);

-		gd.widthHint= convertWidthInCharsToPixels(55);

-		table.setLayoutData(gd);

-		return parent;

-	}

-	

-	protected int getTableStyle() {

-		return SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER;

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
deleted file mode 100644
index 307a1d1..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java
deleted file mode 100644
index 52269f8..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.compare.internal;
-
-import org.eclipse.ui.texteditor.IUpdate;
-import org.eclipse.jface.action.Action;
-
-
-public abstract class MergeViewerAction extends Action implements IUpdate {
-	
-	private boolean fMutable;
-	private boolean fSelection;
-	private boolean fContent;
-	
-	public MergeViewerAction(boolean mutable, boolean selection, boolean content) {
-		fMutable= mutable;
-		fSelection= selection;
-		fContent= content;
-	}
-
-	public boolean isSelectionDependent() {
-		return fSelection;
-	}
-	
-	public boolean isContentDependent() {
-		return fContent;
-	}
-	
-	public boolean isEditableDependent() {
-		return fMutable;
-	}
-	
-	public void update() {
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java
deleted file mode 100644
index d193501..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.graphics.Image;

-

-import org.eclipse.jface.viewers.Viewer;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.structuremergeviewer.*;

-import org.eclipse.compare.contentmergeviewer.IMergeViewerContentProvider;

-

-/**

- * Adapts any <code>ContentMergeViewer</code> to work on an <code>ICompareInput</code>

- * e.g. a <code>DiffNode</code>.

- */

-public class MergeViewerContentProvider implements IMergeViewerContentProvider {

-	

-	private CompareConfiguration fCompareConfiguration;

-		

-	public MergeViewerContentProvider(CompareConfiguration cc) {

-		fCompareConfiguration= cc;

-	}

-	

-	public void dispose() {

-	}

-	

-	public void inputChanged(Viewer v, Object o1, Object o2) {

-		// we are not interested since we have no state

-	}

-	

-	//---- ancestor

-			

-	public String getAncestorLabel(Object element) {

-		return fCompareConfiguration.getAncestorLabel(element);

-	}

-	

-	public Image getAncestorImage(Object element) {

-		return fCompareConfiguration.getAncestorImage(element);

-	}

-	

-	public Object getAncestorContent(Object element) {

-		if (element instanceof ICompareInput)

-			return ((ICompareInput) element).getAncestor();

-		return null;

-	}

-	

-	public boolean showAncestor(Object element) {

-		if (element instanceof ICompareInput)

-			return (((ICompareInput)element).getKind() & Differencer.DIRECTION_MASK) == Differencer.CONFLICTING;

-		return false;

-	}

-

-	//---- left

-					

-	public String getLeftLabel(Object element) {

-		return fCompareConfiguration.getLeftLabel(element);

-	}

-	

-	public Image getLeftImage(Object element) {

-		return fCompareConfiguration.getLeftImage(element);

-	}

-	

-	public Object getLeftContent(Object element) {	

-		if (element instanceof ICompareInput)

-			return ((ICompareInput) element).getLeft();

-		return null;

-	}

-		

-	public boolean isLeftEditable(Object element) {

-		if (element instanceof ICompareInput) {

-			Object left= ((ICompareInput) element).getLeft();

-			if (left == null) {

-				IDiffElement parent= ((IDiffElement)element).getParent();

-				if (parent instanceof ICompareInput)

-					left= ((ICompareInput) parent).getLeft();

-			}

-			if (left instanceof IEditableContent)

-				return ((IEditableContent)left).isEditable();

-		}

-		return false;

-	}

-

-	public void saveLeftContent(Object element, byte[] bytes) {

-		if (element instanceof ICompareInput) {

-			ICompareInput node= (ICompareInput) element;

-			if (bytes != null) {

-				ITypedElement left= node.getLeft();

-				// #9869: problem if left is null (because no resource exists yet) nothing is done!

-				if (left == null) {

-					node.copy(false);

-					left= node.getLeft();

-				}

-				if (left instanceof IEditableContent)

-					((IEditableContent)left).setContent(bytes);

-				if (node instanceof ResourceCompareInput.MyDiffNode)

-					((ResourceCompareInput.MyDiffNode)node).fireChange();

-			} else {

-				node.copy(false);

-			}			

-		}

-	}

-	

-	//---- right

-	

-	public String getRightLabel(Object element) {

-		return fCompareConfiguration.getRightLabel(element);

-	}

-	

-	public Image getRightImage(Object element) {

-		return fCompareConfiguration.getRightImage(element);

-	}

-	

-	public Object getRightContent(Object element) {

-		if (element instanceof ICompareInput)

-			return ((ICompareInput) element).getRight();

-		return null;

-	}

-	

-	public boolean isRightEditable(Object element) {

-		if (element instanceof ICompareInput) {

-			Object right= ((ICompareInput) element).getRight();

-			if (right == null) {

-				IDiffContainer parent= ((IDiffElement)element).getParent();

-				if (parent instanceof ICompareInput)

-					right= ((ICompareInput) parent).getRight();

-			}

-			if (right instanceof IEditableContent)

-				return ((IEditableContent)right).isEditable();

-		}

-		return false;

-	}

-	

-	public void saveRightContent(Object element, byte[] bytes) {

-		if (element instanceof ICompareInput) {

-			ICompareInput node= (ICompareInput) element;

-			if (bytes != null) {

-				ITypedElement right= node.getRight();

-				// #9869: problem if right is null (because no resource exists yet) nothing is done!

-				if (right == null) {

-					node.copy(true);

-					right= node.getRight();

-				}

-				if (right instanceof IEditableContent)

-					((IEditableContent)right).setContent(bytes);

-				if (node instanceof ResourceCompareInput.MyDiffNode)

-					((ResourceCompareInput.MyDiffNode)node).fireChange();

-			} else {

-				node.copy(true);

-			}		

-		}

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java
deleted file mode 100644
index 32887e3..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.compare.CompareViewerSwitchingPane;

-

-/**

- * Used whenever the input is null or no viewer can be found.

- */

-public class NullViewer extends AbstractViewer {

-

-	private Control fDummy;

-

-	public NullViewer(Composite parent) {

-

-		fDummy= new Tree(parent, SWT.NULL);

-

-		CompareViewerSwitchingPane.clearToolBar(parent);

-	}

-

-	public Control getControl() {

-		return fDummy;

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java
deleted file mode 100644
index 232a93d..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

- 

-package org.eclipse.compare.internal;

-

-import org.eclipse.jface.preference.IPreferenceStore;

-import org.eclipse.jface.preference.PreferenceStore;

-import org.eclipse.jface.util.IPropertyChangeListener;

-import org.eclipse.jface.util.PropertyChangeEvent;

-

-/**

- * An overlaying preference store.

- */

-public class OverlayPreferenceStore  implements IPreferenceStore {

-	

-	

-	public static final class TypeDescriptor {

-		private TypeDescriptor() {

-		}

-	};

-	

-	public static final TypeDescriptor BOOLEAN= new TypeDescriptor();

-	public static final TypeDescriptor DOUBLE= new TypeDescriptor();

-	public static final TypeDescriptor FLOAT= new TypeDescriptor();

-	public static final TypeDescriptor INT= new TypeDescriptor();

-	public static final TypeDescriptor LONG= new TypeDescriptor();

-	public static final TypeDescriptor STRING= new TypeDescriptor();

-	

-	public static class OverlayKey {

-		

-		TypeDescriptor fDescriptor;

-		String fKey;

-		

-		public OverlayKey(TypeDescriptor descriptor, String key) {

-			fDescriptor= descriptor;

-			fKey= key;

-		}

-	};

-	

-	private class PropertyListener implements IPropertyChangeListener {

-				

-		/*

-		 * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent)

-		 */

-		public void propertyChange(PropertyChangeEvent event) {

-			OverlayKey key= findOverlayKey(event.getProperty());

-			if (key != null)

-				propagateProperty(fParent, key, fStore); 

-		}

-	};

-	

-	

-	private IPreferenceStore fParent;

-	private IPreferenceStore fStore;

-	private OverlayKey[] fOverlayKeys;

-	

-	private PropertyListener fPropertyListener;

-	

-	

-	public OverlayPreferenceStore(IPreferenceStore parent, OverlayKey[] overlayKeys) {

-		fParent= parent;

-		fOverlayKeys= overlayKeys;

-		fStore= new PreferenceStore();

-	}

-	

-	private OverlayKey findOverlayKey(String key) {

-		for (int i= 0; i < fOverlayKeys.length; i++) {

-			if (fOverlayKeys[i].fKey.equals(key))

-				return fOverlayKeys[i];

-		}

-		return null;

-	}

-	

-	private boolean covers(String key) {

-		return (findOverlayKey(key) != null);

-	}

-	

-	private void propagateProperty(IPreferenceStore orgin, OverlayKey key, IPreferenceStore target) {

-		

-		if (orgin.isDefault(key.fKey)) {

-			if (!target.isDefault(key.fKey))

-				target.setToDefault(key.fKey);

-			return;

-		}

-		

-		TypeDescriptor d= key.fDescriptor;

-		if (BOOLEAN == d) {

-			

-			boolean originValue= orgin.getBoolean(key.fKey);

-			boolean targetValue= target.getBoolean(key.fKey);

-			if (targetValue != originValue)

-				target.setValue(key.fKey, originValue);

-				

-		} else if (DOUBLE == d) {

-			

-			double originValue= orgin.getDouble(key.fKey);

-			double targetValue= target.getDouble(key.fKey);

-			if (targetValue != originValue)

-				target.setValue(key.fKey, originValue);

-		

-		} else if (FLOAT == d) {

-			

-			float originValue= orgin.getFloat(key.fKey);

-			float targetValue= target.getFloat(key.fKey);

-			if (targetValue != originValue)

-				target.setValue(key.fKey, originValue);

-				

-		} else if (INT == d) {

-

-			int originValue= orgin.getInt(key.fKey);

-			int targetValue= target.getInt(key.fKey);

-			if (targetValue != originValue)

-				target.setValue(key.fKey, originValue);

-

-		} else if (LONG == d) {

-

-			long originValue= orgin.getLong(key.fKey);

-			long targetValue= target.getLong(key.fKey);

-			if (targetValue != originValue)

-				target.setValue(key.fKey, originValue);

-

-		} else if (STRING == d) {

-

-			String originValue= orgin.getString(key.fKey);

-			String targetValue= target.getString(key.fKey);

-			if (targetValue != null && originValue != null && !targetValue.equals(originValue))

-				target.setValue(key.fKey, originValue);

-

-		}

-	}

-	

-	public void propagate() {

-		for (int i= 0; i < fOverlayKeys.length; i++)

-			propagateProperty(fStore, fOverlayKeys[i], fParent);

-	}

-	

-	private void loadProperty(IPreferenceStore orgin, OverlayKey key, IPreferenceStore target, boolean forceInitialization) {

-		TypeDescriptor d= key.fDescriptor;

-		if (BOOLEAN == d) {

-			

-			if (forceInitialization)

-				target.setValue(key.fKey, true);

-			target.setValue(key.fKey, orgin.getBoolean(key.fKey));

-			target.setDefault(key.fKey, orgin.getDefaultBoolean(key.fKey));

-			

-		} else if (DOUBLE == d) {

-			

-			if (forceInitialization)

-				target.setValue(key.fKey, 1.0D);

-			target.setValue(key.fKey, orgin.getDouble(key.fKey));

-			target.setDefault(key.fKey, orgin.getDefaultDouble(key.fKey));

-			

-		} else if (FLOAT == d) {

-			

-			if (forceInitialization)

-				target.setValue(key.fKey, 1.0F);

-			target.setValue(key.fKey, orgin.getFloat(key.fKey));

-			target.setDefault(key.fKey, orgin.getDefaultFloat(key.fKey));

-			

-		} else if (INT == d) {

-			

-			if (forceInitialization)

-				target.setValue(key.fKey, 1);

-			target.setValue(key.fKey, orgin.getInt(key.fKey));

-			target.setDefault(key.fKey, orgin.getDefaultInt(key.fKey));

-			

-		} else if (LONG == d) {

-			

-			if (forceInitialization)

-				target.setValue(key.fKey, 1L);

-			target.setValue(key.fKey, orgin.getLong(key.fKey));

-			target.setDefault(key.fKey, orgin.getDefaultLong(key.fKey));

-			

-		} else if (STRING == d) {

-			

-			if (forceInitialization)

-				target.setValue(key.fKey, "1");	//$NON-NLS-1$

-			target.setValue(key.fKey, orgin.getString(key.fKey));

-			target.setDefault(key.fKey, orgin.getDefaultString(key.fKey));

-			

-		}

-	}

-	

-	public void load() {

-		for (int i= 0; i < fOverlayKeys.length; i++)

-			loadProperty(fParent, fOverlayKeys[i], fStore, true);

-	}

-	

-	public void loadDefaults() {

-		for (int i= 0; i < fOverlayKeys.length; i++)

-			setToDefault(fOverlayKeys[i].fKey);

-	}

-	

-	public void start() {

-		if (fPropertyListener == null) {

-			fPropertyListener= new PropertyListener();

-			fParent.addPropertyChangeListener(fPropertyListener);

-		}

-	}

-	

-	public void stop() {

-		if (fPropertyListener != null)  {

-			fParent.removePropertyChangeListener(fPropertyListener);

-			fPropertyListener= null;

-		}

-	}

-	

-	/*

-	 * @see IPreferenceStore#addPropertyChangeListener(IPropertyChangeListener)

-	 */

-	public void addPropertyChangeListener(IPropertyChangeListener listener) {

-		fStore.addPropertyChangeListener(listener);

-	}

-	

-	/*

-	 * @see IPreferenceStore#removePropertyChangeListener(IPropertyChangeListener)

-	 */

-	public void removePropertyChangeListener(IPropertyChangeListener listener) {

-		fStore.removePropertyChangeListener(listener);

-	}

-	

-	/*

-	 * @see IPreferenceStore#firePropertyChangeEvent(String, Object, Object)

-	 */

-	public void firePropertyChangeEvent(String name, Object oldValue, Object newValue) {

-		fStore.firePropertyChangeEvent(name, oldValue, newValue);

-	}

-

-	/*

-	 * @see IPreferenceStore#contains(String)

-	 */

-	public boolean contains(String name) {

-		return fStore.contains(name);

-	}

-	

-	/*

-	 * @see IPreferenceStore#getBoolean(String)

-	 */

-	public boolean getBoolean(String name) {

-		return fStore.getBoolean(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getDefaultBoolean(String)

-	 */

-	public boolean getDefaultBoolean(String name) {

-		return fStore.getDefaultBoolean(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getDefaultDouble(String)

-	 */

-	public double getDefaultDouble(String name) {

-		return fStore.getDefaultDouble(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getDefaultFloat(String)

-	 */

-	public float getDefaultFloat(String name) {

-		return fStore.getDefaultFloat(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getDefaultInt(String)

-	 */

-	public int getDefaultInt(String name) {

-		return fStore.getDefaultInt(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getDefaultLong(String)

-	 */

-	public long getDefaultLong(String name) {

-		return fStore.getDefaultLong(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getDefaultString(String)

-	 */

-	public String getDefaultString(String name) {

-		return fStore.getDefaultString(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getDouble(String)

-	 */

-	public double getDouble(String name) {

-		return fStore.getDouble(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getFloat(String)

-	 */

-	public float getFloat(String name) {

-		return fStore.getFloat(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getInt(String)

-	 */

-	public int getInt(String name) {

-		return fStore.getInt(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getLong(String)

-	 */

-	public long getLong(String name) {

-		return fStore.getLong(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getString(String)

-	 */

-	public String getString(String name) {

-		return fStore.getString(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#isDefault(String)

-	 */

-	public boolean isDefault(String name) {

-		return fStore.isDefault(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#needsSaving()

-	 */

-	public boolean needsSaving() {

-		return fStore.needsSaving();

-	}

-

-	/*

-	 * @see IPreferenceStore#putValue(String, String)

-	 */

-	public void putValue(String name, String value) {

-		if (covers(name))

-			fStore.putValue(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setDefault(String, double)

-	 */

-	public void setDefault(String name, double value) {

-		if (covers(name))

-			fStore.setDefault(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setDefault(String, float)

-	 */

-	public void setDefault(String name, float value) {

-		if (covers(name))

-			fStore.setDefault(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setDefault(String, int)

-	 */

-	public void setDefault(String name, int value) {

-		if (covers(name))

-			fStore.setDefault(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setDefault(String, long)

-	 */

-	public void setDefault(String name, long value) {

-		if (covers(name))

-			fStore.setDefault(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setDefault(String, String)

-	 */

-	public void setDefault(String name, String value) {

-		if (covers(name))

-			fStore.setDefault(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setDefault(String, boolean)

-	 */

-	public void setDefault(String name, boolean value) {

-		if (covers(name))

-			fStore.setDefault(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setToDefault(String)

-	 */

-	public void setToDefault(String name) {

-		fStore.setToDefault(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#setValue(String, double)

-	 */

-	public void setValue(String name, double value) {

-		if (covers(name))

-			fStore.setValue(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setValue(String, float)

-	 */

-	public void setValue(String name, float value) {

-		if (covers(name))

-			fStore.setValue(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setValue(String, int)

-	 */

-	public void setValue(String name, int value) {

-		if (covers(name))

-			fStore.setValue(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setValue(String, long)

-	 */

-	public void setValue(String name, long value) {

-		if (covers(name))

-			fStore.setValue(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setValue(String, String)

-	 */

-	public void setValue(String name, String value) {

-		if (covers(name))

-			fStore.setValue(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setValue(String, boolean)

-	 */

-	public void setValue(String name, boolean value) {

-		if (covers(name))

-			fStore.setValue(name, value);

-	}

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java
deleted file mode 100644
index b4b965a..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java
+++ /dev/null
@@ -1,13 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-

-public class ReplaceWithEditionAction extends EditionAction {

-		

-	public ReplaceWithEditionAction() {

-		super(true, "org.eclipse.compare.internal.ReplaceWithEditionAction"); //$NON-NLS-1$

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties
deleted file mode 100644
index 0ee8160..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2000, 2001.

-# All Rights Reserved.

-# =====================================

-

-# @(#)ReplaceWithEditionAction.properties

-#

-# Resources for ReplaceWithEditionAction.java

-

-title= Replace from Local History

-

-treeTitleFormat= Local History of ''{0}''

-dateIcon= obj16/day_obj.gif

-timeIcon= obj16/resource_obj.gif

-

-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= Replace

-

-noLocalHistoryError= No local history available for selected resource.

-replaceError=Can''t replace resource (reason: {0}).

-

-taskName=Replacing
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java
deleted file mode 100644
index 2f590db..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java
+++ /dev/null
@@ -1,14 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-

-public class ReplaceWithPreviousEditionAction extends EditionAction {

-		

-	public ReplaceWithPreviousEditionAction() {

-		super(true, "org.eclipse.compare.internal.ReplaceWithEditionAction"); //$NON-NLS-1$

-		fPrevious= true;

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java
deleted file mode 100644
index 26e5fe3..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package org.eclipse.compare.internal;
-
-import java.util.ResourceBundle;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.dialogs.DialogSettings;
-
-
-/**
- * Base class for resizable Dialogs with persistent window bounds.
- */
-public abstract class ResizableDialog extends Dialog {
-
-	// dialog store id constants
-	private final static String DIALOG_BOUNDS_KEY= "ResizableDialogBounds"; //$NON-NLS-1$
-	private static final String X= "x"; //$NON-NLS-1$
-	private static final String Y= "y"; //$NON-NLS-1$
-	private static final String WIDTH= "width"; //$NON-NLS-1$
-	private static final String HEIGHT= "height"; //$NON-NLS-1$
-	
-	protected ResourceBundle fBundle;
-	private Rectangle fNewBounds;
-	private IDialogSettings fSettings;
-
-
-	public ResizableDialog(Shell parent, ResourceBundle bundle) {
-		super(parent);
-		setShellStyle(getShellStyle() | SWT.RESIZE);
-		
-		fBundle= bundle;
-		
-		fSettings= CompareUIPlugin.getDefault().getDialogSettings();
-	}
-	
-	protected Point getInitialSize() {
-		
-		int width= 0;
-		int height= 0;
-		
-		final Shell s= getShell();
-		if (s != null) {
-			s.addControlListener(
-				new ControlListener() {
-					public void controlMoved(ControlEvent arg0) {
-						fNewBounds= s.getBounds();
-					}
-					public void controlResized(ControlEvent arg0) {
-						fNewBounds= s.getBounds();
-					}
-				}
-			);
-		}
-		
-		IDialogSettings bounds= fSettings.getSection(DIALOG_BOUNDS_KEY); //$NON-NLS-1$
-		if (bounds == null) {
-			if (fBundle != null) {
-				width= Utilities.getInteger(fBundle, WIDTH, 0);
-				height= Utilities.getInteger(fBundle, HEIGHT, 0);
-				Shell shell= getParentShell();
-				if (shell != null) {
-					Point parentSize= shell.getSize();
-					if (width <= 0)
-						width= parentSize.x-300;
-					if (height <= 0)
-						height= parentSize.y-200;
-				}
-			} else {
-				Shell shell= getParentShell();
-				if (shell != null) {
-					Point parentSize= shell.getSize();
-					width= parentSize.x-100;
-					height= parentSize.y-100;
-				}
-			}
-			if (width < 700)
-				width= 700;
-			if (height < 500)
-				height= 500;
-		} else {
-			try {
-				width= bounds.getInt(WIDTH);
-			} catch (NumberFormatException e) {
-				width= 700;
-			}
-			try {
-				height= bounds.getInt(HEIGHT);
-			} catch (NumberFormatException e) {
-				height= 500;
-			}
-		}	
-	
-		return new Point(width, height);
-	}
-	
-	protected Point getInitialLocation(Point initialSize) {
-		Point loc= super.getInitialLocation(initialSize);
-		
-		IDialogSettings bounds= fSettings.getSection(DIALOG_BOUNDS_KEY);
-		if (bounds != null) {
-			try {
-				loc.x= bounds.getInt(X);
-			} catch (NumberFormatException e) {
-			}
-			try {
-				loc.y= bounds.getInt(Y);
-			} catch (NumberFormatException e) {
-			}
-		}
-		return loc;
-	}
-	
-	public boolean close() {
-		boolean closed= super.close();
-		if (closed && fNewBounds != null)
-			saveBounds(fNewBounds);
-		return closed;
-	}
-
-	private void saveBounds(Rectangle bounds) {
-		IDialogSettings dialogBounds= fSettings.getSection(DIALOG_BOUNDS_KEY);
-		if (dialogBounds == null) {
-			dialogBounds= new DialogSettings(DIALOG_BOUNDS_KEY);
-			fSettings.addSection(dialogBounds);
-		}
-		dialogBounds.put(X, bounds.x);
-		dialogBounds.put(Y, bounds.y);
-		dialogBounds.put(WIDTH, bounds.width);
-		dialogBounds.put(HEIGHT, bounds.height);
-	}
-}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
deleted file mode 100644
index 02a07d3..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.text.MessageFormat;

-import java.lang.reflect.InvocationTargetException;

-

-import org.eclipse.swt.widgets.Composite;

-

-import org.eclipse.jface.viewers.ISelection;

-import org.eclipse.jface.viewers.Viewer;

-

-import org.eclipse.core.resources.*;

-import org.eclipse.core.runtime.*;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.structuremergeviewer.*;

-

-

-/**

- * A two-way or three-way compare for arbitrary IResources.

- */

-class ResourceCompareInput extends CompareEditorInput {

-	

-	private static final boolean NORMALIZE_CASE= true;

-	

-	private boolean fThreeWay= false;

-	private Object fRoot;

-	private IStructureComparator fAncestor;

-	private IStructureComparator fLeft;

-	private IStructureComparator fRight;

-	private IResource fAncestorResource;

-	private IResource fLeftResource;

-	private IResource fRightResource;

-	private DiffTreeViewer fDiffViewer;

-	

-	

-	class MyDiffNode extends DiffNode {

-		

-		private boolean fDirty= false;

-		private ITypedElement fLastId;

-		private String fLastName;

-		

-		

-		public MyDiffNode(IDiffContainer parent, int description, ITypedElement ancestor, ITypedElement left, ITypedElement right) {

-			super(parent, description, ancestor, left, right);

-		}

-		public void fireChange() {

-			super.fireChange();

-			setDirty(true);

-			fDirty= true;

-			if (fDiffViewer != null)

-				fDiffViewer.refresh(this);

-		}

-		void clearDirty() {

-			fDirty= false;

-		}

-		public String getName() {

-			if (fLastName == null)

-				fLastName= super.getName();

-			if (fDirty)

-				return '<' + fLastName + '>';

-			return fLastName;

-		}

-		

-		public ITypedElement getId() {

-			ITypedElement id= super.getId();

-			if (id == null)

-				return fLastId;

-			fLastId= id;

-			return id;

-		}

-	}

-	

-	/**

-	 * Creates an compare editor input for the given selection.

-	 */

-	ResourceCompareInput(CompareConfiguration config) {

-		super(config);

-	}

-		

-	public Viewer createDiffViewer(Composite parent) {

-		Viewer v= super.createDiffViewer(parent);

-		if (v instanceof DiffTreeViewer)

-			fDiffViewer= (DiffTreeViewer) v;

-		return v;

-	}

-

-	/**

-	 * Returns true if compare can be executed for the given selection.

-	 */

-	boolean setSelection(ISelection s) {

-

-		IResource[] selection= Utilities.getResources(s);

-		if (selection.length < 2 || selection.length > 3)

-			return false;

-

-		fThreeWay= selection.length == 3;

-		

-		fLeftResource= selection[0];

-		fRightResource= selection[1];

-		if (fThreeWay) {

-			fLeftResource= selection[1];		

-			fRightResource= selection[2];

-		}

-		

-		fAncestor= null;

-		fLeft= getStructure(fLeftResource);

-		fRight= getStructure(fRightResource);

-					

-		if (incomparable(fLeft, fRight))

-			return false;

-

-		if (fThreeWay) {

-			fAncestorResource= selection[0];

-			fAncestor= getStructure(fAncestorResource);

-			

-			if (incomparable(fAncestor, fRight))

-				return false;

-		}

-

-		return true;

-	}

-	

-	/**

-	 * Returns true if the given arguments cannot be compared.

-	 */

-	private boolean incomparable(IStructureComparator c1, IStructureComparator c2) {

-		if (c1 == null || c2 == null)

-			return true;

-		return isLeaf(c1) != isLeaf(c2);

-	}

-	

-	/**

-	 * Returns true if the given arguments is a leaf.

-	 */

-	private boolean isLeaf(IStructureComparator c) {

-		if (c instanceof ITypedElement) {

-			ITypedElement te= (ITypedElement) c;

-			return !ITypedElement.FOLDER_TYPE.equals(te.getType());

-		}

-		return false;

-	}

-	

-	/**

-	 * Creates a <code>IStructureComparator</code> for the given input.

-	 * Returns <code>null</code> if no <code>IStructureComparator</code>

-	 * can be found for the <code>IResource</code>.

-	 */

-	private IStructureComparator getStructure(IResource input) {

-		

-		if (input instanceof IContainer)

-			return new BufferedResourceNode(input);

-			

-		if (input instanceof IFile) {

-			IStructureComparator rn= new BufferedResourceNode(input);

-			IFile file= (IFile) input;

-			String type= normalizeCase(file.getFileExtension());

-			if ("JAR".equals(type) || "ZIP".equals(type)) //$NON-NLS-2$ //$NON-NLS-1$

-				return new ZipFileStructureCreator().getStructure(rn);

-			return rn;

-		}

-		return null;

-	}

-	

-	/**

-	 * Performs a two-way or three-way diff on the current selection.

-	 */

-	public Object prepareInput(IProgressMonitor pm) throws InvocationTargetException {

-				

-		CompareConfiguration cc= (CompareConfiguration) getCompareConfiguration();

-	

-		try {

-			// fix for PR 1GFMLFB: ITPUI:WIN2000 - files that are out of sync with the file system appear as empty							

-			fLeftResource.refreshLocal(IResource.DEPTH_INFINITE, pm);

-			fRightResource.refreshLocal(IResource.DEPTH_INFINITE, pm);

-			if (fThreeWay && fAncestorResource != null)

-				fAncestorResource.refreshLocal(IResource.DEPTH_INFINITE, pm);

-			// end fix						

-				

-			pm.beginTask(Utilities.getString("ResourceCompare.taskName"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$

-

-			cc.setLeftLabel(buildLabel(fLeftResource));

-			cc.setLeftImage(CompareUIPlugin.getImage(fLeftResource));

-			

-			cc.setRightLabel(buildLabel(fRightResource));

-			cc.setRightImage(CompareUIPlugin.getImage(fRightResource));

-

-			String leftLabel= fLeftResource.getName();

-			String rightLabel= fRightResource.getName();

-			

-			String title;

-			if (fThreeWay) {			

-				cc.setAncestorLabel(buildLabel(fAncestorResource));

-				cc.setAncestorImage(CompareUIPlugin.getImage(fAncestorResource));

-				String format= Utilities.getString("ResourceCompare.threeWay.title"); //$NON-NLS-1$

-				String ancestorLabel= fAncestorResource.getName();

-				title= MessageFormat.format(format, new String[] {ancestorLabel, leftLabel, rightLabel} );

-			} else {

-				String format= Utilities.getString("ResourceCompare.twoWay.title"); //$NON-NLS-1$

-				title= MessageFormat.format(format, new String[] {leftLabel, rightLabel} );

-			}

-			setTitle(title);

-			

-			Differencer d= new Differencer() {

-				protected Object visit(Object parent, int description, Object ancestor, Object left, Object right) {

-					return new MyDiffNode((IDiffContainer) parent, description, (ITypedElement)ancestor, (ITypedElement)left, (ITypedElement)right);

-				}

-			};

-			

-			fRoot= d.findDifferences(fThreeWay, pm, null, fAncestor, fLeft, fRight);

-			return fRoot;

-			

-		} catch (CoreException ex) {

-			throw new InvocationTargetException(ex);

-		} finally {

-			pm.done();

-		}

-	}

-	

-	private String buildLabel(IResource r) {

-		//return r.getName();

-		String n= r.getFullPath().toString();

-		if (n.charAt(0) == IPath.SEPARATOR)

-			return n.substring(1);

-		return n;

-	}

-	

-	public void saveChanges(IProgressMonitor pm) throws CoreException {

-		super.saveChanges(pm);

-		if (fRoot instanceof DiffNode) {

-			try {

-				commit(pm, (DiffNode) fRoot);

-			} finally {

-				if (fDiffViewer != null)

-					fDiffViewer.refresh();				

-				setDirty(false);

-			}

-		}

-	}

-	

-	/*

-	 * Recursively walks the diff tree and commits all changes.

-	 */

-	private static void commit(IProgressMonitor pm, DiffNode node) throws CoreException {

-		

-		if (node instanceof MyDiffNode)		

-			((MyDiffNode)node).clearDirty();

-		

-		ITypedElement left= node.getLeft();

-		if (left instanceof BufferedResourceNode)

-			((BufferedResourceNode) left).commit(pm);

-			

-		ITypedElement right= node.getRight();

-		if (right instanceof BufferedResourceNode)

-			((BufferedResourceNode) right).commit(pm);

-

-		IDiffElement[] children= node.getChildren();

-		if (children != null) {

-			for (int i= 0; i < children.length; i++) {

-				IDiffElement element= children[i];

-				if (element instanceof DiffNode)

-					commit(pm, (DiffNode) element);

-			}

-		}

-	}

-	

-	private static String normalizeCase(String s) {

-		if (NORMALIZE_CASE && s != null)

-			return s.toUpperCase();

-		return s;

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java
deleted file mode 100644
index e109359..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.util.ResourceBundle;

-

-import org.eclipse.compare.*;

-

-/**

- * Toggles the <code>ICompareConfiguration.SHOW_PSEUDO_CONFLICTS</code> property of an

- * <code>ICompareConfiguration</code>.

- */

-public class ShowPseudoConflicts extends ChangePropertyAction {

-

-	public ShowPseudoConflicts(ResourceBundle bundle, CompareConfiguration cc) {

-		super(bundle, cc, "action.ShowPseudoConflicts.", CompareConfiguration.SHOW_PSEUDO_CONFLICTS); //$NON-NLS-1$

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java
deleted file mode 100644
index fd7a885..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.io.IOException;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.widgets.Composite;

-import org.eclipse.swt.widgets.Control;

-

-import org.eclipse.jface.viewers.*;

-import org.eclipse.jface.text.source.SourceViewer;

-import org.eclipse.jface.text.Document;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.compare.*;

-import org.eclipse.compare.structuremergeviewer.ICompareInput;

-

-

-public class SimpleTextViewer extends AbstractViewer {

-		

-	private SourceViewer fSourceViewer;

-	private ICompareInput fInput;

-	

-	

-	SimpleTextViewer(Composite parent) {

-		fSourceViewer= new SourceViewer(parent, null, SWT.H_SCROLL + SWT.V_SCROLL);

-		fSourceViewer.setEditable(false);

-	}

-		

-	public Control getControl() {

-		return fSourceViewer.getTextWidget();

-	}

-	

-	public void setInput(Object input) {

-		if (input instanceof IStreamContentAccessor) {

-			fSourceViewer.setDocument(new Document(getString(input)));

-		} else if (input instanceof ICompareInput) {

-			fInput= (ICompareInput) input;

-			ITypedElement left= ((ICompareInput) fInput).getLeft();

-			fSourceViewer.setDocument(new Document(getString(left)));

-		}

-	}

-	

-	public Object getInput() {

-		return fInput;

-	}

-	

-	private String getString(Object input) {

-		

-		if (input instanceof IStreamContentAccessor) {

-			IStreamContentAccessor sca= (IStreamContentAccessor) input;

-			try {

-				return Utilities.readString(sca.getContents());

-			} catch (CoreException ex) {

-			}

-		}

-		return ""; //$NON-NLS-1$

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Splitter.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Splitter.java
deleted file mode 100644
index 846a378..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Splitter.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.widgets.*;

-import org.eclipse.swt.custom.SashForm;

-

-public class Splitter extends SashForm {

-	

-	private static final String VISIBILITY= "org.eclipse.compare.internal.visibility"; //$NON-NLS-1$

-	

-

-	public Splitter(Composite parent, int style) {

-		super(parent, style);

-	}

-		

-	public void setVisible(Control child, boolean visible) {

-		

-		boolean wasEmpty= isEmpty();

-				

-		child.setVisible(visible);

-		child.setData(VISIBILITY, new Boolean(visible));

-		

-		if (wasEmpty != isEmpty()) {

-			Composite parent= getParent();

-			if (parent instanceof Splitter) {

-				Splitter sp= (Splitter) parent;

-				sp.setVisible(this, visible);

-				sp.layout();

-			}	

-		} else {

-			layout();

-		}

-	}

-	

-	private boolean isEmpty() {

-		Control[] controls= getChildren();

-		for (int i= 0; i < controls.length; i++)

-			if (isVisible(controls[i]))

-				return false;

-		return true;

-	}

-	

-	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;

-	}

-			

-	public void setMaximizedControl(Control control) {

-		if (control == null || control == getMaximizedControl())

-			super.setMaximizedControl(null);

-		else

-			super.setMaximizedControl(control);		

-			

-		// walk up

-		Composite parent= getParent();

-		if (parent instanceof Splitter)

-			((Splitter) parent).setMaximizedControl(this);

-		else

-			layout(true);

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java
deleted file mode 100644
index c33ac3c..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java
deleted file mode 100644
index 9fb4b93..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.widgets.Composite;

-

-import org.eclipse.jface.viewers.Viewer;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.contentmergeviewer.TextMergeViewer;

-

-/**

- * A factory object for the <code>TextMergeViewer</code>.

- * This indirection is necessary because only objects with a default

- * constructor can be created via an extension point

- * (this precludes Viewers).

- */

-public class TextMergeViewerCreator implements IViewerCreator {

-

-	public Viewer createViewer(Composite parent, CompareConfiguration mp) {

-		return new TextMergeViewer(parent, mp);

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java
deleted file mode 100644
index 554114c..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.widgets.Composite;

-

-import org.eclipse.jface.viewers.Viewer;

-

-import org.eclipse.compare.CompareConfiguration;

-import org.eclipse.compare.IViewerCreator;

-

-

-/**

- * A factory object for the <code>TextMergeViewer</code>.

- * This indirection is necessary because only objects with a default

- * constructor can be created via an extension point

- * (this precludes Viewers).

- */

-public class TextViewerCreator implements IViewerCreator {

-

-	public Viewer createViewer(Composite parent, CompareConfiguration mp) {

-		return new SimpleTextViewer(parent);

-	}

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java
deleted file mode 100644
index c52da8b..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.lang.reflect.InvocationTargetException;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.graphics.*;

-import org.eclipse.swt.layout.*;

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.jface.dialogs.*;

-import org.eclipse.jface.operation.*;

-import org.eclipse.jface.resource.JFaceResources;

-import org.eclipse.jface.util.Assert;

-

-import org.eclipse.core.runtime.*;

-import org.eclipse.compare.contentmergeviewer.*;

-

-/**

- * A modal dialog that displays progress during a long running operation.

- */

-public class TimeoutContext {

-

-	private static class ModalContextThread extends Thread {

-		

-		private boolean fWorking;

-		private IRunnableWithProgress fRunnable;

-		private Throwable fThrowable;

-		private IProgressMonitor fProgressMonitor;

-		private boolean fContinueEventDispatching= true;

-		private Display fDisplay;

-

-		private ModalContextThread(IRunnableWithProgress operation, IProgressMonitor monitor) {

-			super("TimeoutContext"); //$NON-NLS-1$

-			fRunnable= operation;

-			fProgressMonitor= monitor;

-		}

-		

-		synchronized boolean timeout(Display display) {

-			fDisplay= display;

-			return fWorking;

-		}

-		

-		public void run() {

-			try {

-				fWorking= true;

-				if (fRunnable != null)

-					fRunnable.run(fProgressMonitor);

-			} catch (InvocationTargetException e) {

-				fThrowable= e;

-			} catch (InterruptedException e) {

-				fThrowable= e;

-			} catch (RuntimeException e) {

-				fThrowable= e;

-			} catch (ThreadDeath e) {

-				// Make sure to propagate ThreadDeath, or threads will never fully terminate

-				throw e;

-			} catch (Error e) {

-				fThrowable= e;

-			} finally {

-				fWorking= false;

-	

-				if (fDisplay != null) {

-					// Make sure that all events in the asynchronous event queue

-					// are dispatched.

-					fDisplay.syncExec(

-						new Runnable() {

-							public void run() {

-								// do nothing

-							}

-						}

-					);

-					

-					// Stop event dispatching

-					fContinueEventDispatching= false;

-					

-					// Force the event loop to return from sleep () so that

-					// it stops event dispatching.

-					fDisplay.asyncExec(null);

-				}

-			}	

-		}

-		

-		public void block() {

-			while (fContinueEventDispatching)

-				if (!fDisplay.readAndDispatch())

-					fDisplay.sleep();

-		}		

-	}

-	

-	static class ProgressMonitorDialog extends org.eclipse.jface.dialogs.Dialog {

-

-		protected ProgressIndicator fProgressIndicator;

-		protected Label fTaskLabel;

-		protected Label fSubTaskLabel;

-		protected Button fCancel;

-		protected boolean fEnableCancelButton;

-		private ProgressMonitor fProgressMonitor;

-		private Cursor fArrowCursor;

-		private Cursor fWaitCursor;

-		private Shell fParentShell;

-		

-		private ProgressMonitorDialog(Shell parent, boolean cancelable, ProgressMonitor pm) {

-			super(parent);

-			fProgressMonitor= pm;

-			fParentShell= parent;

-			fEnableCancelButton= cancelable;

-			this.setBlockOnOpen(false);

-			setShellStyle(SWT.BORDER | SWT.TITLE | SWT.APPLICATION_MODAL); // no close button

-		}

-		

-		public boolean close() {

-			if (fCancel != null && !fCancel.isDisposed())

-				fCancel.setCursor(null);

-			Shell shell= getShell();

-			if (shell != null && !shell.isDisposed())

-				shell.setCursor(null);

-			if (fArrowCursor != null)

-				fArrowCursor.dispose();

-			if (fWaitCursor != null)

-				fWaitCursor.dispose();

-			fArrowCursor= null;

-			fWaitCursor= null;

-			return super.close();

-		}

-		

-		protected void configureShell(Shell shell) {

-			super.configureShell(shell);

-			shell.setText(JFaceResources.getString("ProgressMonitorDialog.title")); //$NON-NLS-1$

-			if (fWaitCursor == null)

-				fWaitCursor= new Cursor(shell.getDisplay(),SWT.CURSOR_WAIT);

-			shell.setCursor(fWaitCursor);

-		}

-		

-		protected void createButtonsForButtonBar(Composite parent) {

-			// cancel button		

-			fCancel= createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, true);

-			if(fArrowCursor == null)

-				fArrowCursor= new Cursor(fCancel.getDisplay(),SWT.CURSOR_ARROW);		

-			fCancel.setCursor(fArrowCursor);

-			fCancel.addListener(SWT.Selection,

-				new Listener() {

-					public void handleEvent(Event e) {

-						if (fCancel != null && !fCancel.isDisposed())

-							fCancel.setEnabled(false);

-						fProgressMonitor.setCanceled(true);

-					}

-				}

-			);

-			fCancel.setEnabled(fEnableCancelButton);

-		}

-		

-		protected Control createDialogArea(Composite parent) {

-		

-			Composite c= (Composite)super.createDialogArea(parent);

-			((GridLayout)c.getLayout()).numColumns= 2;

-	

-			// icon

-			Label iconLabel= new Label(c, SWT.LEFT);

-			GridData gd= new GridData();

-			iconLabel.setLayoutData(gd);

-			iconLabel.setFont(parent.getFont());

-			Image i= JFaceResources.getImageRegistry().get(org.eclipse.jface.dialogs.Dialog.DLG_IMG_INFO);

-			if (i != null)

-				iconLabel.setImage(i);

-			else

-				iconLabel.setText(JFaceResources.getString("Image_not_found")); //$NON-NLS-1$

-	

-			// label on right hand side of icon

-			fTaskLabel= new Label(c, SWT.LEFT | SWT.WRAP);

-			fTaskLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

-			fTaskLabel.setFont(parent.getFont());

-	

-			// progress indicator

-			fProgressIndicator= new ProgressIndicator(c);

-			gd= new GridData();

-			gd.heightHint= 15;

-			gd.horizontalAlignment= gd.FILL;

-			gd.grabExcessHorizontalSpace= true;

-			gd.horizontalSpan= 2;

-			fProgressIndicator.setLayoutData(gd);

-	

-			// label showing current task

-			fSubTaskLabel= new Label(c, SWT.LEFT | SWT.WRAP);

-			gd= new GridData(GridData.FILL_HORIZONTAL);

-			gd.heightHint= 35;	

-			gd.horizontalSpan= 2;

-			fSubTaskLabel.setLayoutData(gd);

-			fSubTaskLabel.setFont(parent.getFont());

-						

-			// update with values fProgressMonitor

-			String s= fProgressMonitor.fTask;

-			if (s == null)

-				s= ""; //$NON-NLS-1$

-			fTaskLabel.setText(s);

-			

-			if (fProgressMonitor.fMaxWork == IProgressMonitor.UNKNOWN)

-				fProgressIndicator.beginAnimatedTask();

-			else

-				fProgressIndicator.beginTask(fProgressMonitor.fMaxWork);

-

-			if (fProgressMonitor.fSubTask != null)

-				fSubTaskLabel.setText(fProgressMonitor.fSubTask);

-			fProgressIndicator.worked(fProgressMonitor.fWorked);

-	

-			fProgressMonitor.activate(this);

-

-			return c;

-		}

-		

-		void beginTask(final String name, final int totalWork) {

-			fParentShell.getDisplay().syncExec(

-				new Runnable() {

-					public void run() {

-						fTaskLabel.setText(name);

-						

-						if (fProgressIndicator != null && fProgressIndicator.isDisposed()) {

-							if (totalWork == IProgressMonitor.UNKNOWN)

-								fProgressIndicator.beginAnimatedTask();

-							else

-								fProgressIndicator.beginTask(totalWork);

-						}

-					}

-				}

-			);

-		}

-		

-		void setTaskName(final String name) {

-			fParentShell.getDisplay().syncExec(

-				new Runnable() {

-					public void run() {

-						if (fTaskLabel != null && fTaskLabel.isDisposed())

-							fTaskLabel.setText(name);

-					}

-				}

-			);

-		}

-

-		void setSubTaskName(final String name) {

-			fParentShell.getDisplay().syncExec(

-				new Runnable() {

-					public void run() {

-						String n= (name == null) ? "" : name;	//$NON-NLS-1$

-						if (fSubTaskLabel != null && !fSubTaskLabel.isDisposed())

-							fSubTaskLabel.setText(n);

-					}

-				}

-			);	

-		}

-		

-		void done() {

-			fParentShell.getDisplay().syncExec(

-				new Runnable() {

-					public void run() {

-						if (fProgressIndicator != null && !fProgressIndicator.isDisposed()) {

-							fProgressIndicator.sendRemainingWork();

-							fProgressIndicator.done();

-						}

-					}

-				}

-			);

-		}

-		

-		void worked(final double work) {

-			fParentShell.getDisplay().syncExec(

-				new Runnable() {

-					public void run() {

-						if (fProgressIndicator != null && !fProgressIndicator.isDisposed())

-							fProgressIndicator.worked(work);

-					}

-				}

-			);

-		}

-

-		protected Point getInitialSize() {

-			return getShell().computeSize(450, SWT.DEFAULT);

-		}

-	}

-

-	private static class ProgressMonitor implements IProgressMonitor {

-		

-		private int fMaxWork;

-		private String fTask;

-		private String fSubTask;

-		private int fWorked;

-		private ProgressMonitorDialog fProgressMonitorDialog;

-		private boolean fIsCanceled;

-		

-		public void beginTask(String name, int totalWork) {

-			

-			fTask= name;

-			fMaxWork= totalWork;

-			fWorked= 0;

-			

-			if (fProgressMonitorDialog != null)	

-				fProgressMonitorDialog.beginTask(name, totalWork);			

-		}

-		

-		void activate(ProgressMonitorDialog dialog) {

-			fProgressMonitorDialog= dialog;

-		}

-		

-		public void done() {

-			if (fProgressMonitorDialog != null)				

-				fProgressMonitorDialog.done();

-		}

-		

-		public void setTaskName(String name) {

-			fTask= name;

-			if (fProgressMonitorDialog != null)				

-				fProgressMonitorDialog.setTaskName(name);

-		}

-				

-		public boolean isCanceled() {

-			return fIsCanceled;

-		}

-		

-		public void setCanceled(boolean b) {

-			fIsCanceled= b;

-		}

-		

-		public void subTask(String name) {

-			fSubTask= name;

-			if (fProgressMonitorDialog != null)				

-				fProgressMonitorDialog.setSubTaskName(name);

-		}

-		

-		public void worked(int work) {

-			if (fProgressMonitorDialog != null)

-				internalWorked(work);

-			else

-				fWorked+= work;

-		}

-		

-		public void internalWorked(double work) {

-			if (fProgressMonitorDialog != null)				

-				fProgressMonitorDialog.worked(work);

-		}

-	}

-	

-	public static void run(boolean cancelable, int timeout, Shell parent, IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException {

-		

-		Display display= parent.getDisplay();

-		

-		ProgressMonitor pm= new ProgressMonitor();

-				

-		ModalContextThread t= new ModalContextThread(runnable, pm);

-		t.start();	// start the long running operation

-		

-		// wait until long operations terminates or timeout

-		try {

-			t.join(timeout);

-		} catch (InterruptedException e) {

-		}

-		

-		if (t.timeout(display)) {	// timeout

-			ProgressMonitorDialog dialog= new ProgressMonitorDialog(parent, cancelable, pm);

-			dialog.open();

-			t.block();

-			dialog.close();

-		}

-		

-		Throwable throwable= t.fThrowable;

-		if (throwable != null) {

-			if (throwable instanceof InvocationTargetException) {

-				throw (InvocationTargetException) throwable;

-			} else if (throwable instanceof InterruptedException) {

-				throw (InterruptedException) throwable;

-			} else if (throwable instanceof OperationCanceledException) {

-				throw new InterruptedException(throwable.getMessage());

-			} else {

-				throw new InvocationTargetException(throwable);

-			}	

-		}

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java
deleted file mode 100644
index d4253cd..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.jface.util.Assert;

-

-import org.eclipse.compare.rangedifferencer.IRangeComparator;

-import org.eclipse.compare.contentmergeviewer.ITokenComparator;

-

-/**

- * Implements the <code>ITokenComparator</code> interface for words (or tokens)

- * in a string.

- * A <code>TokenComparator</code> is used as the input for the <code>RangeDifferencer</code>

- * engine to perform a token oriented compare on strings.

- */

-public class TokenComparator implements ITokenComparator {

-

-	private boolean fShouldEscape= true;

-	private String fText;

-	private int fCount;

-	private int[] fStarts;

-	private int[] fLengths;

-

-	/**

-	 * Creates a <code>TokenComparator</code> for the given string.

-	 *

-	 * @param string the string that is split into token

-	 */

-	public TokenComparator(String text) {

-		

-		Assert.isNotNull(text);

-

-		fText= text;

-		

-		int length= fText.length();

-		fStarts= new int[length];	// pessimistic assumption!

-		fLengths= new int[length];

-		fCount= 0;

-		

-		char lastCategory= 0;	// 0: no category

-		for (int i= 0; i < length; i++) {

-			char c= fText.charAt(i);

-			

-			char category= '?';	// unspecified category

-			if (Character.isWhitespace(c))

-				category= ' ';	// white space category

-			else if (Character.isDigit(c))

-				category= '0';	// digits

-			else if (Character.isLetter(c))

-				category= 'a';	// letters

-			

-			if (category != lastCategory) {

-				// start a new token

-				fStarts[fCount++]= i;

-				lastCategory= category;

-			}

-			fLengths[fCount-1]++;

-		}

-	}

-	

-	/**

-	 * Creates a <code>TokenComparator</code> for the given string.

-	 *

-	 * @param string the string that is split into token

-	 * @param shouldEscape

-	 */

-	public TokenComparator(String s, boolean shouldEscape) {

-		this(s);

-		fShouldEscape= shouldEscape;

-	}

-

-	/**

-	 * Returns the number of token in the string.

-	 *

-	 * @return number of token in the string

-	 */

-	public int getRangeCount() {

-		return fCount;

-	}

-

-	/* (non Javadoc)

-	 * see ITokenComparator.getTokenStart

-	 */

-	public int getTokenStart(int index) {

-		if (index < fCount)

-			return fStarts[index];

-		return fText.length();

-	}

-

-	/* (non Javadoc)

-	 * see ITokenComparator.getTokenLength

-	 */

-	public int getTokenLength(int index) {

-		if (index < fCount)

-			return fLengths[index];

-		return 0;

-	}

-		

-	/**

-	 * Returns <code>true</code> if a token given by the first index

-	 * matches a token specified by the other <code>IRangeComparator</code> and index.

-	 *

-	 * @param thisIndex	the number of the token within this range comparator

-	 * @param other the range comparator to compare this with

-	 * @param otherIndex the number of the token within the other comparator

-	 * @return <code>true</code> if the token are equal

-	 */

-	public boolean rangesEqual(int thisIndex, IRangeComparator other, int otherIndex) {

-		if (other != null && getClass() == other.getClass()) {

-			TokenComparator tc= (TokenComparator) other;

-			int thisLen= getTokenLength(thisIndex);

-			int otherLen= tc.getTokenLength(otherIndex);

-			if (thisLen == otherLen)

-				return fText.regionMatches(false, getTokenStart(thisIndex), tc.fText, tc.getTokenStart(otherIndex), thisLen);

-		}

-		return false;

-	}

-

-	/**

-	 * Aborts the comparison if the number of tokens is too large.

-	 *

-	 * @return <code>true</code> to abort a token comparison

-	 */

-	public boolean skipRangeComparison(int length, int max, IRangeComparator other) {

-

-		if (!fShouldEscape)

-			return false;

-

-		if (getRangeCount() < 50 || other.getRangeCount() < 50)

-			return false;

-

-		if (max < 100)

-			return false;

-

-		if (length < 100)

-			return false;

-

-		if (max > 800)

-			return true;

-

-		if (length < max / 4)

-			return false;

-

-		return true;

-	}

-		

-//	public static void main(String args[]) {

-//		//String in= "private static boolean isWhitespace(char c) {";

-//		//String in= "for (int j= 0; j < l-1; j++) {";

-//		String in= "for do    i= 123; i++";

-//		TokenComparator tc= new TokenComparator(in, false);

-//		

-//		System.out.println("n: " + tc.getRangeCount());

-//		System.out.println(in);

-//		

-//		int p= 0;

-//		for (int i= 0; i < tc.getRangeCount(); i++) {

-//			int l= tc.getTokenLength(i);

-//			System.out.print("<");

-//			

-//			for (int j= 0; j < l-1; j++)

-//				System.out.print(" ");

-//		}

-//		System.out.println();

-//		

-//		//System.out.println("extract: <" + tc.extract(16, 1) + ">");

-//	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java
deleted file mode 100644
index 9511787..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.io.*;

-import java.text.MessageFormat;

-import java.util.*;

-

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.core.resources.ResourcesPlugin;

-

-import org.eclipse.jface.action.IAction;

-import org.eclipse.jface.resource.ImageDescriptor;

-import org.eclipse.jface.util.*;

-import org.eclipse.jface.viewers.*;

-

-import org.eclipse.core.resources.IResource;

-import org.eclipse.core.runtime.IAdaptable;

-

-import org.eclipse.ui.*;

-

-import org.eclipse.compare.CompareConfiguration;

-

-/**

- * Convenience and utility methods.

- */

-public class Utilities {

-

-	public static IActionBars findActionBars(Control c) {

-		while (c != null && !c.isDisposed()) {

-			Object data= c.getData();

-			if (data instanceof CompareEditor)

-				return ((CompareEditor)data).getActionBars();

-				

-			// PR 1GDVZV7: ITPVCM:WIN98 - CTRL + C does not work in Java source compare

-			if (data instanceof IViewPart)

-				return ((IViewPart)data).getViewSite().getActionBars();

-			// end PR 1GDVZV7

-			

-			c= c.getParent();

-		}

-		return null;

-	}

-

-	public static void setEnableComposite(Composite composite, boolean enable) {

-		Control[] children= composite.getChildren();

-		for (int i= 0; i < children.length; i++)

-			children[i].setEnabled(enable);

-	}

-

-	public static boolean getBoolean(CompareConfiguration cc, String key, boolean dflt) {

-		if (cc != null) {

-			Object value= cc.getProperty(key);

-			if (value instanceof Boolean)

-				return ((Boolean) value).booleanValue();

-		}

-		return dflt;

-	}

-	

-	public static void firePropertyChange(ListenerList ll, Object source, String property, Object old, Object newValue) {

-		if (ll != null) {

-			PropertyChangeEvent event= null;

-			Object[] listeners= ll.getListeners();

-			for (int i= 0; i < listeners.length; i++) {

-				IPropertyChangeListener l= (IPropertyChangeListener) listeners[i];

-				if (event == null)

-					event= new PropertyChangeEvent(source, property, old, newValue);

-				l.propertyChange(event);

-			}

-		}

-	}

-

-	public static boolean okToUse(Widget widget) {

-		return widget != null && !widget.isDisposed();

-	}

-	

-	public static boolean isMotif() {

-		return false;

-	}

-		

-	/**

-	 * Returns the elements of the given selection. 

-	 * Returns an empty array if the selection is empty or if 

-	 * the given selection is not of type <code>IStructuredSelection</code>.

-	 *

-	 * @param selection the selection

-	 * @return the selected elements

-	 */

-	public static Object[] toArray(ISelection selection) {

-		if (!(selection instanceof IStructuredSelection)) {

-			return new Object[0];

-		}

-		IStructuredSelection ss= (IStructuredSelection) selection;

-		return ss.toArray();

-	}

-

-	/**

-	 * Convenience method: extract all <code>IResources</code> from given selection.

-	 * Never returns null.

-	 */

-	public static IResource[] getResources(ISelection selection) {

-		

-		ArrayList tmp= new ArrayList();

-

-		if (selection instanceof IStructuredSelection) {

-		

-			Object[] s= ((IStructuredSelection)selection).toArray();

-				

-			for (int i= 0; i < s.length; i++) {

-				Object o= s[i];

-				if (o instanceof IResource) {

-					tmp.add(o);

-					continue;

-				}

-				if (o instanceof IAdaptable) {

-					IAdaptable a= (IAdaptable) o;

-					Object adapter= a.getAdapter(IResource.class);

-					if (adapter instanceof IResource)

-						tmp.add(adapter);

-					continue;

-				}

-			}

-		}

-		return (IResource[]) tmp.toArray(new IResource[tmp.size()]);

-	}

-

-	public static byte[] readBytes(InputStream in) {

-		ByteArrayOutputStream bos= new ByteArrayOutputStream();

-		try {		

-			while (true) {

-				int c= in.read();

-				if (c == -1)

-					break;

-				bos.write(c);

-			}

-					

-		} catch (IOException ex) {

-			return null;

-		

-		} finally {

-			if (in != null) {

-				try {

-					in.close();

-				} catch (IOException x) {

-				}

-			}

-			try {

-				bos.close();

-			} catch (IOException x) {

-			}

-		}

-		

-		return bos.toByteArray();

-	}

-

-	/**

-	 * Returns null if an error occurred.

-	 */

-	public static String readString(InputStream is) {

-		if (is == null)

-			return null;

-		BufferedReader reader= null;

-		try {

-			StringBuffer buffer= new StringBuffer();

-			char[] part= new char[2048];

-			int read= 0;

-			reader= new BufferedReader(new InputStreamReader(is, ResourcesPlugin.getEncoding()));

-

-			while ((read= reader.read(part)) != -1)

-				buffer.append(part, 0, read);

-			

-			return buffer.toString();

-			

-		} catch (IOException ex) {

-		} finally {

-			if (reader != null) {

-				try {

-					reader.close();

-				} catch (IOException ex) {

-				}

-			}

-		}

-		return null;

-	}

-	

-	public static String getIconPath(Display display) {

-		return "icons/full/";	//$NON-NLS-1$

-	}

-	

-	/**

-	 * Initialize the given Action from a ResourceBundle.

-	 */

-	public static void initAction(IAction a, ResourceBundle bundle, String prefix) {

-		

-		String labelKey= "label"; //$NON-NLS-1$

-		String tooltipKey= "tooltip"; //$NON-NLS-1$

-		String imageKey= "image"; //$NON-NLS-1$

-		String descriptionKey= "description"; //$NON-NLS-1$

-		

-		if (prefix != null && prefix.length() > 0) {

-			labelKey= prefix + labelKey;

-			tooltipKey= prefix + tooltipKey;

-			imageKey= prefix + imageKey;

-			descriptionKey= prefix + descriptionKey;

-		}

-		

-		a.setText(getString(bundle, labelKey, labelKey));

-		a.setToolTipText(getString(bundle, tooltipKey, null));

-		a.setDescription(getString(bundle, descriptionKey, null));

-		

-		String relPath= getString(bundle, imageKey, null);

-		if (relPath != null && relPath.trim().length() > 0) {

-			

-			String cPath;

-			String dPath;

-			String ePath;

-			

-			if (relPath.indexOf("/") >= 0) { //$NON-NLS-1$

-				String path= relPath.substring(1);

-				cPath= 'c' + path;

-				dPath= 'd' + path;

-				ePath= 'e' + path;

-			} else {

-				cPath= "clcl16/" + relPath; //$NON-NLS-1$

-				dPath= "dlcl16/" + relPath; //$NON-NLS-1$

-				ePath= "elcl16/" + relPath; //$NON-NLS-1$

-			}

-			

-			ImageDescriptor id= CompareUIPlugin.getImageDescriptor(dPath);	// we set the disabled image first (see PR 1GDDE87)

-			if (id != null)

-				a.setDisabledImageDescriptor(id);

-			id= CompareUIPlugin.getImageDescriptor(cPath);

-			if (id != null)

-				a.setHoverImageDescriptor(id);

-			id= CompareUIPlugin.getImageDescriptor(ePath);

-			if (id != null)

-				a.setImageDescriptor(id);

-		}

-	}

-	

-	public static void initToggleAction(IAction a, ResourceBundle bundle, String prefix, boolean checked) {

-

-		String tooltip= null;

-		if (checked)

-			tooltip= getString(bundle, prefix + "tooltip.checked", null);	//$NON-NLS-1$

-		else

-			tooltip= getString(bundle, prefix + "tooltip.unchecked", null);	//$NON-NLS-1$

-		if (tooltip == null)

-			tooltip= getString(bundle, prefix + "tooltip", null);	//$NON-NLS-1$

-		

-		if (tooltip != null)

-			a.setToolTipText(tooltip);

-			

-		String description= null;

-		if (checked)

-			description= getString(bundle, prefix + "description.checked", null);	//$NON-NLS-1$

-		else

-			description= getString(bundle, prefix + "description.unchecked", null);	//$NON-NLS-1$

-		if (description == null)

-			description= getString(bundle, prefix + "description", null);	//$NON-NLS-1$

-		

-		if (description != null)

-			a.setDescription(description);

-			

-	}

-

-	public static String getString(ResourceBundle bundle, String key, String dfltValue) {

-		

-		if (bundle != null) {

-			try {

-				return bundle.getString(key);

-			} catch (MissingResourceException x) {

-			}

-		}

-		return dfltValue;

-	}

-	

-	public static String getFormattedString(ResourceBundle bundle, String key, String arg) {

-		

-		if (bundle != null) {

-			try {

-				return MessageFormat.format(bundle.getString(key), new String[] { arg });

-			} catch (MissingResourceException x) {

-			}

-		}

-		return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$

-	}

-	

-	public static String getString(String key) {

-		try {

-			return CompareUIPlugin.getResourceBundle().getString(key);

-		} catch (MissingResourceException e) {

-			return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$

-		}

-	}

-	

-	public static String getFormattedString(String key, String arg) {

-		try{

-			return MessageFormat.format(CompareUIPlugin.getResourceBundle().getString(key), new String[] { arg });

-		} catch (MissingResourceException e) {

-			return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$

-		}	

-	}

-

-	public static String getString(ResourceBundle bundle, String key) {

-		return getString(bundle, key, key);

-	}

-	

-	public static int getInteger(ResourceBundle bundle, String key, int dfltValue) {

-		

-		if (bundle != null) {

-			try {

-				String s= bundle.getString(key);

-				if (s != null)

-					return Integer.parseInt(s);

-			} catch (NumberFormatException x) {

-			} catch (MissingResourceException x) {

-			}

-		}

-		return dfltValue;

-	}

-

-	/**

-	 * Answers <code>true</code> if the given selection contains resources that don't

-	 * have overlapping paths and <code>false</code> otherwise. 

-	 */

-	/*

-	public static boolean isSelectionNonOverlapping() throws TeamException {

-		IResource[] resources = getSelectedResources();

-		// allow operation for non-overlapping resource selections

-		if(resources.length>0) {

-			List validPaths = new ArrayList(2);

-			for (int i = 0; i < resources.length; i++) {

-				IResource resource = resources[i];

-				

-				// only allow cvs resources to be selected

-				if(RepositoryProvider.getProvider(resource.getProject(), CVSProviderPlugin.getTypeId()) == null) {

-					return false;

-				}

-				

-				// check if this resource overlaps other selections		

-				IPath resourceFullPath = resource.getFullPath();

-				if(!validPaths.isEmpty()) {

-					for (Iterator it = validPaths.iterator(); it.hasNext();) {

-						IPath path = (IPath) it.next();

-						if(path.isPrefixOf(resourceFullPath) || 

-					       resourceFullPath.isPrefixOf(path)) {

-							return false;

-						}

-					}

-				}

-				validPaths.add(resourceFullPath);

-				

-				// ensure that resources are managed

-				ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource);

-				if(cvsResource.isFolder()) {

-					if( ! ((ICVSFolder)cvsResource).isCVSFolder()) return false;

-				} else {

-					if( ! cvsResource.isManaged()) return false;

-				}

-			}

-			return true;

-		}

-		return false;

-	}

-	*/

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java
deleted file mode 100644
index d6a64cd..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.widgets.Composite;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.compare.*;

-

-import org.eclipse.jface.viewers.Viewer;

-

-import org.eclipse.ui.internal.ViewerActionBuilder;

-

-/**

- * Creates <code>Viewer</code>s from an <code>IConfigurationElement</code>.

- */

-public class ViewerDescriptor implements IViewerDescriptor {

-

-	private final static String CLASS_ATTRIBUTE= "class"; //$NON-NLS-1$

-	private final static String EXTENSIONS_ATTRIBUTE= "extensions"; //$NON-NLS-1$

-

-	private IConfigurationElement fConfiguration;

-	private IViewerCreator fViewerCreator;

-	private Class fViewerClass;

-

-	public ViewerDescriptor(IConfigurationElement config) {

-		fConfiguration= config;

-	}

-

-	public Viewer createViewer(Viewer currentViewer, Composite parent, CompareConfiguration mp) {

-		

-		if (currentViewer != null && currentViewer.getClass() == fViewerClass) {

-			//System.out.println("reused viewer: " + currentViewer.getClass().getName());

-			return currentViewer;

-		}

-		

-		if (fViewerCreator == null) {

-			try {

-				fViewerCreator= (IViewerCreator) fConfiguration.createExecutableExtension(CLASS_ATTRIBUTE);

-			} catch (CoreException e) {

-			}

-		}

-

-		if (fViewerCreator != null) {

-			Viewer viewer= fViewerCreator.createViewer(parent, mp);

-			if (viewer != null)

-				fViewerClass= viewer.getClass();

-			return viewer;

-		}

-

-		return null;

-	}

-

-	public String getExtension() {

-		return fConfiguration.getAttribute(EXTENSIONS_ATTRIBUTE);

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java
deleted file mode 100644
index a3874dd..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.eclipse.compare.internal;

-

-

-public class ViewerSwitchingCancelled extends Error {

-

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java
deleted file mode 100644
index 75bd62f..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.lang.reflect.InvocationTargetException;

-import java.util.Arrays;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.events.SelectionAdapter;

-import org.eclipse.swt.events.SelectionEvent;

-import org.eclipse.swt.graphics.Image;

-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.jface.action.IAction;

-import org.eclipse.jface.dialogs.Dialog;

-import org.eclipse.jface.dialogs.ProgressMonitorDialog;

-import org.eclipse.jface.operation.IRunnableWithProgress;

-import org.eclipse.jface.util.Assert;

-import org.eclipse.jface.viewers.*;

-import org.eclipse.jface.wizard.IWizard;

-import org.eclipse.jface.wizard.WizardDialog;

-

-import org.eclipse.core.resources.*;

-import org.eclipse.core.runtime.*;

-

-import org.eclipse.ui.IActionDelegate;

-import org.eclipse.ui.IEditorPart;

-

-import org.eclipse.compare.internal.*;

-

-

-public class CompareWithPatchAction implements IActionDelegate {

-

-	static class PatchWizardDialog extends WizardDialog {

-	

-		PatchWizardDialog(Shell parent, IWizard wizard) {

-			super(parent, wizard);

-			

-			setShellStyle(getShellStyle() | SWT.RESIZE);

-			setMinimumPageSize(700, 500);

-		}

-	}

-	

-	private ISelection fSelection;

-	private boolean fSavedFiles;

-	private boolean fAutobuildState;

-	

-

-	public void selectionChanged(IAction action, ISelection selection) {

-		fSelection= selection;

-		IResource[] resources= PatchWizard.getResource(fSelection);

-		action.setEnabled(resources != null && resources.length == 1);

-	}

-		

-	public void run(IAction action) {

-		PatchWizard wizard= new PatchWizard(fSelection);

-		

-		if (areAllEditorsSaved()) {

-			PatchWizardDialog dialog= new PatchWizardDialog(CompareUIPlugin.getShell(), wizard);

-			dialog.open();

-		}

-	}

-

-	private boolean areAllEditorsSaved(){

-		if (CompareUIPlugin.getDirtyEditors().length == 0)

-			return true;

-		if (! saveAllDirtyEditors())

-			return false;

-		Shell shell= CompareUIPlugin.getShell();

-		try {

-			// Save isn't cancelable.

-			IWorkspace workspace= ResourcesPlugin.getWorkspace();

-			IWorkspaceDescription description= workspace.getDescription();

-			boolean autoBuild= description.isAutoBuilding();

-			description.setAutoBuilding(false);

-			workspace.setDescription(description);

-			try {

-				new ProgressMonitorDialog(shell).run(false, false, createRunnable());

-				fSavedFiles= true;

-			} finally {

-				description.setAutoBuilding(autoBuild);

-				workspace.setDescription(description);

-			}

-			return true;

-		} catch (InvocationTargetException e) {

-			ExceptionHandler.handle(e, shell, PatchMessages.getString("PatchAction.ExceptionTitle"), PatchMessages.getString("Exception"));  //$NON-NLS-1$ //$NON-NLS-2$

-			return false;

-		} catch (CoreException e) {

-			ExceptionHandler.handle(e, shell, PatchMessages.getString("PatchAction.ExceptionTitle"), PatchMessages.getString("Exception"));  //$NON-NLS-1$ //$NON-NLS-2$

-			return false;			

-		} catch (InterruptedException e) {

-			Assert.isTrue(false); // Can't happen. Operation isn't cancelable.

-			return false;

-		}

-	}

-

-	private IRunnableWithProgress createRunnable() {

-		return new IRunnableWithProgress() {

-			public void run(IProgressMonitor pm) {

-				IEditorPart[] editorsToSave= CompareUIPlugin.getDirtyEditors();

-				pm.beginTask(PatchMessages.getString("PatchAction.SavingDirtyEditorsTask"), editorsToSave.length); //$NON-NLS-1$

-				for (int i= 0; i < editorsToSave.length; i++) {

-					editorsToSave[i].doSave(new SubProgressMonitor(pm, 1));

-					pm.worked(1);

-				}

-				pm.done();

-			}

-		};

-	}

-

-	private boolean saveAllDirtyEditors() {

-		if (ComparePreferencePage.getSaveAllEditors()) //must save everything

-			return true;

-		ListDialog dialog= new ListDialog(CompareUIPlugin.getShell()) {

-			protected Control createDialogArea(Composite parent) {

-				Composite result= (Composite) super.createDialogArea(parent);

-				final Button check= new Button(result, SWT.CHECK);

-				check.setText(PatchMessages.getString("PatchAction.AlwaysSaveQuestion")); //$NON-NLS-1$

-				check.setSelection(ComparePreferencePage.getSaveAllEditors());

-				check.addSelectionListener(

-					new SelectionAdapter() {

-						public void widgetSelected(SelectionEvent e) {

-							ComparePreferencePage.setSaveAllEditors(check.getSelection());

-						}

-					}

-				);

-				return result;

-			}

-		};

-		dialog.setTitle(PatchMessages.getString("PatchAction.SaveAllQuestion")); //$NON-NLS-1$

-		dialog.setAddCancelButton(true);

-		dialog.setLabelProvider(createDialogLabelProvider());

-		dialog.setMessage(PatchMessages.getString("PatchAction.SaveAllDescription")); //$NON-NLS-1$

-		dialog.setContentProvider(new ListContentProvider());

-		dialog.setInput(Arrays.asList(CompareUIPlugin.getDirtyEditors()));

-		return dialog.open() == Dialog.OK;

-	}

-

-	private ILabelProvider createDialogLabelProvider() {

-		return new LabelProvider() {

-			public Image getImage(Object element) {

-				return ((IEditorPart) element).getTitleImage();

-			}

-			public String getText(Object element) {

-				return ((IEditorPart) element).getTitle();

-			}

-		};

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java
deleted file mode 100644
index 5239340..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.util.*;

-

-import org.eclipse.core.runtime.IPath;

-

-import org.eclipse.compare.structuremergeviewer.Differencer;

-

-

-/* package */ class Diff {

-		

-	IPath fOldPath, fNewPath;

-	long fOldDate, fNewDate;	// if 0: no file

-	List fHunks= new ArrayList();

-	boolean fMatches= false;

-	private boolean fIsEnabled2= true;

-	String fRejected;

-

-	

- 	/* package */ Diff(IPath oldPath, long oldDate, IPath newPath, long newDate) {

-		fOldPath= oldPath;

-		fOldDate= oldPath == null ? 0 : oldDate;

-		fNewPath= newPath;

-		fNewDate= newPath == null ? 0 : newDate;	

-	}

-	

-	boolean isEnabled() {

-		return fIsEnabled2;

-	}

-	

-	void setEnabled(boolean b) {

-		fIsEnabled2= b;

-	}

-	

-	void reverse() {

-		IPath tp= fOldPath;

-		fOldPath= fNewPath;

-		fNewPath= tp;

-		

-		long t= fOldDate;

-		fOldDate= fNewDate;

-		fNewDate= t;

-		

-		Iterator iter= fHunks.iterator();

-		while (iter.hasNext()) {

-			Hunk hunk= (Hunk) iter.next();

-			hunk.reverse();

-		}

-	}

-	

-	Hunk[] getHunks() {

-		return (Hunk[]) fHunks.toArray((Hunk[]) new Hunk[fHunks.size()]);

-	}

-

-	IPath getPath() {

-		if (fOldPath != null)

-			return fOldPath;

-		return fNewPath;

-	}

-	

-	void finish() {

-		if (fHunks.size() == 1) {

-			Hunk h= (Hunk) fHunks.get(0);

-			if (h.fNewLength == 0) {

-				fNewDate= 0;

-				fNewPath= fOldPath;

-			}

-		}

-	}

-	

-	/* package */ void add(Hunk hunk) {

-		fHunks.add(hunk);

-	}

-	

-	/* package */ int getType() {

-		if (fOldDate == 0)

-			return Differencer.ADDITION;

-		if (fNewDate == 0)

-			return Differencer.DELETION;

-		return Differencer.CHANGE;

-	}

-	

-	/* package */ String getDescription(int strip) {

-		IPath path= fOldPath;

-		if (fOldDate == 0)

-			path= fNewPath;

-		if (strip > 0 && strip < path.segmentCount())

-			path= path.removeFirstSegments(strip);

-		return path.toOSString();

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java
deleted file mode 100644
index e49d5ad..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.util.List;

-

-import org.eclipse.jface.util.Assert;

-

-

-/**

- * A Hunk describes a range of changed lines and some context lines.

- */

-/* package */ class Hunk {

-	

-	Diff fParent;

-	int fOldStart, fOldLength;

-	int fNewStart, fNewLength;

-	String[] fLines;

-	boolean fMatches= false;

-	private boolean fIsEnabled2= true;

-	

-	

-	/* package */ Hunk(Diff parent, int[] oldRange, int[] newRange, List lines) {

-		

-		fParent= parent;

-		if (fParent != null)

-			fParent.add(this);

-		

-		if (oldRange[0] > 0)

-			fOldStart= oldRange[0]-1;	// line number start at 0!

-		else

-			fOldStart= 0;

-		fOldLength= oldRange[1];

-		if (newRange[0] > 0)

-			fNewStart= newRange[0]-1;	// line number start at 0!

-		else

-			fNewStart= 0;

-		fNewLength= newRange[1];

-		

-		fLines= (String[]) lines.toArray(new String[lines.size()]);

-	}

-	

-	boolean isEnabled() {

-		return fIsEnabled2;

-	}

-	

-	void setEnabled(boolean b) {

-		fIsEnabled2= b;

-	}

-	

-	void reverse() {

-		int t= fOldStart;

-		fOldStart= fNewStart;

-		fNewStart= t;

-		

-		t= fOldLength;

-		fOldLength= fNewLength;

-		fNewLength= t;

-		

-		for (int i= 0; i < fLines.length; i++) {

-			String line= fLines[i];

-			char c= line.charAt(0);

-			switch (c) {

-			case '+':

-				fLines[i]= '-' + line.substring(1);

-				break;

-			case '-':

-				fLines[i]= '+' + line.substring(1);

-				break;

-			default:

-				break;

-			}

-		}

-	}

-

-	/**

-	 * Returns the contents of this hunk.

-	 * Each line starts with a control character. Their meaning is as follows:

-	 * <ul>

-	 * <li>

-	 * '+': add the line

-	 * <li>

-	 * '-': delete the line

-	 * <li>

-	 * ' ': no change, context line

-	 * </ul>

-	 */

-	String getContent() {

-		StringBuffer sb= new StringBuffer();

-		for (int i= 0; i < fLines.length; i++) {

-			String line= fLines[i];

-			sb.append(line.substring(0, Patcher.length(line)));

-			sb.append('\n');

-		}

-		return sb.toString();

-	}

-	

-	/**

-	 * Returns a descriptive String for this hunk.

-	 * It is in the form old_start,old_length -> new_start,new_length.

-	 */

-	String getDescription() {

-		StringBuffer sb= new StringBuffer();

-		sb.append(Integer.toString(fOldStart));

-		sb.append(',');

-		sb.append(Integer.toString(fOldLength));

-		sb.append(" -> "); //$NON-NLS-1$

-		sb.append(Integer.toString(fNewStart));

-		sb.append(',');

-		sb.append(Integer.toString(fNewLength));

-		return sb.toString();

-	}

-	

-	String getRejectedDescription() {

-		StringBuffer sb= new StringBuffer();

-		sb.append("@@ -"); //$NON-NLS-1$

-		sb.append(Integer.toString(fOldStart));

-		sb.append(',');

-		sb.append(Integer.toString(fOldLength));

-		sb.append(" +"); //$NON-NLS-1$

-		sb.append(Integer.toString(fNewStart));

-		sb.append(',');

-		sb.append(Integer.toString(fNewLength));

-		sb.append(" @@"); //$NON-NLS-1$

-		return sb.toString();

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java
deleted file mode 100644
index e238378..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java
+++ /dev/null
@@ -1,623 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.io.*;

-import java.util.*;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.dnd.*;

-import org.eclipse.swt.events.*;

-import org.eclipse.swt.layout.*;

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.jface.dialogs.*;

-import org.eclipse.jface.viewers.*;

-import org.eclipse.jface.wizard.*;

-

-import org.eclipse.ui.help.*;

-import org.eclipse.ui.model.*;

-

-import org.eclipse.core.resources.*;

-import org.eclipse.core.runtime.*;

-

-import org.eclipse.compare.internal.Utilities;

-

-

-/* package */ class InputPatchPage extends WizardPage {

-

-	// constants

-	protected static final int SIZING_TEXT_FIELD_WIDTH= 250;

-	protected static final int COMBO_HISTORY_LENGTH= 5;

-	

-	private final static int SIZING_SELECTION_WIDGET_WIDTH= 400;

-	private final static int SIZING_SELECTION_WIDGET_HEIGHT= 150;

-

-	// dialog store id constants

-	private final static String PAGE_NAME= "PatchWizardPage1"; //$NON-NLS-1$

-	private final static String STORE_PATCH_FILE_ID= PAGE_NAME + ".PATCH_FILE";	//$NON-NLS-1$

-	private final static String STORE_PATCH_FILES_ID= PAGE_NAME + ".PATCH_FILES";	//$NON-NLS-1$

-	private final static String STORE_USE_CLIPBOARD_ID= PAGE_NAME + ".USE_CLIPBOARD";	//$NON-NLS-1$

-

-	// help IDs

-	private final static String PATCH_HELP_CONTEXT_ID= "PatchWizardHelpId";	//$NON-NLS-1$

-	

-	private boolean fShowError= false;

-	

-	// SWT widgets

-	private Button fUseClipboardButton;

-	private Combo fPatchFileNameField;

-	private Button fPatchFileBrowseButton;

-	private Button fUsePatchFileButton;

-	private Group fPatchFileGroup;

-	private CheckboxTreeViewer fPatchTargets;

-	private PatchWizard fPatchWizard;

-

-

-	InputPatchPage(PatchWizard pw) {

-		super("InputPatchPage", PatchMessages.getString("InputPatchPage.title"), null); //$NON-NLS-1$ //$NON-NLS-2$

-		fPatchWizard= pw;

-		setMessage(PatchMessages.getString("InputPatchPage.message")); //$NON-NLS-1$

-	}

-	

-	/**

-	 * Get a path from the supplied text widget.

-	 * @return org.eclipse.core.runtime.IPath

-	 */

-	protected IPath getPathFromText(Text textField) {

-		return (new Path(textField.getText())).makeAbsolute();

-	}

-

-	/* package */ String getPatchName() {

-		if (getUseClipboard())

-			return PatchMessages.getString("InputPatchPage.Clipboard"); //$NON-NLS-1$

-		return getPatchFilePath();

-	}

-	

-	public void createControl(Composite parent) {

-				

-		Composite composite= new Composite(parent, SWT.NULL);

-		composite.setLayout(new GridLayout());

-		composite.setLayoutData(new GridData(/* GridData.VERTICAL_ALIGN_FILL | */ GridData.HORIZONTAL_ALIGN_FILL));

-		setControl(composite);

-		

-		Label l= new Label(composite, SWT.NONE);	// a spacer

-		l.setText(PatchMessages.getString("InputPatchPage.SelectInput")); //$NON-NLS-1$

-		buildInputGroup(composite);

-		

-		new Label(composite, SWT.NONE);	// a spacer		

-		

-		buildPatchFileGroup(composite);		

-			

-		restoreWidgetValues();

-

-		updateWidgetEnablements();

-		//updatePageCompletion();

-		

-		WorkbenchHelp.setHelp(composite, PATCH_HELP_CONTEXT_ID);

-	}

-	

-	/* (non-JavaDoc)

-	 * Method declared in IWizardPage.

-	 */

-	public IWizardPage getNextPage() {

-		if (true) {

-			

-			Patcher patcher= ((PatchWizard) getWizard()).getPatcher();

-			

-			// Create a reader for the input

-			Reader reader= null;

-			if (getUseClipboard()) {

-				Control c= getControl();

-				if (c != null) {

-					Clipboard clipboard= new Clipboard(c.getDisplay());

-					Object o= clipboard.getContents(TextTransfer.getInstance());

-					clipboard.dispose();

-					if (o instanceof String)

-						reader= new StringReader((String)o);

-				}

-			} else {

-				String patchFilePath= getPatchFilePath();

-				if (patchFilePath != null) {

-					try {

-						reader= new FileReader(patchFilePath);

-					} catch (FileNotFoundException ex) {

-						MessageDialog.openError(null,

-							PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"),	//$NON-NLS-1$

-							PatchMessages.getString("InputPatchPage.PatchFileNotFound.message")); //$NON-NLS-1$

-					}

-				}

-			}

-			

-			// parse the input

-			if (reader != null) {

-				try {

-					patcher.parse(new BufferedReader(reader));

-				} catch (IOException ex) {

-					MessageDialog.openError(null,

-						PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"), //$NON-NLS-1$ 

-						PatchMessages.getString("InputPatchPage.ParseError.message")); //$NON-NLS-1$

-				}

-				

-				try {

-					reader.close();

-				} catch (IOException x) {

-				}

-			}

-			

-			Diff[] diffs= patcher.getDiffs();

-			if (diffs == null || diffs.length == 0) {

-				String source= getUseClipboard() ? "Clipboard"	//$NON-NLS-1$

-												   : "File";	//$NON-NLS-1$

-				MessageDialog.openError(null,

-					PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"),	//$NON-NLS-1$

-					PatchMessages.getString("InputPatchPage.NoDiffsFound_"+source+".message")); //$NON-NLS-1$ //$NON-NLS-2$

-				return this;

-			}

-			

-			// guess prefix count

-			int guess= guessPrefix(diffs);

-			patcher.setStripPrefixSegments(guess);

-		}

-		return super.getNextPage();

-	}

-		

-	private int guessPrefix(Diff[] diffs) {

-		/*

-		ArrayList list= new ArrayList();

-		IResource target= fPatchWizard.getTarget();

-		if (target instanceof IFile) {

-			list.add(target.getFullPath());

-		} else if (target instanceof IContainer) {

-			addLeaf(list, (IContainer) target);

-		}

-		

-		// guess prefix count

-		for (int i= 0; i < diffs.length; i++) {

-			IPath p= diffs[i].fOldPath;

-			if (p != null) {

-				int matches= match(p, list);

-				if (matches > 0) {

-					return p.segmentCount() - matches;

-				}

-			}

-		}

-		*/

-		return 0;

-	}

-	

-	private int match(IPath path, ArrayList list) {

-		Iterator iter= list.iterator();

-		while (iter.hasNext()) {

-			IPath filePath= (IPath) iter.next();

-			int matches= matchTrailingSegments(path, filePath);

-			if (matches > 0)

-				return matches;

-		}

-		return 0;

-	}

-	

-	private int matchTrailingSegments(IPath p1, IPath p2) {

-		int matches= 0;

-		int i1= p1.segmentCount()-1;

-		int i2= p2.segmentCount()-1;

-		for (; i1 >= 0 && i2 >= 0; i1--, i2--) {

-			String s1= p1.segment(i1);

-			String s2= p2.segment(i2);

-			if (!s1.equals(s2))

-				break;

-			matches++;

-		}

-		return matches;

-	}

-	

-	private void addLeaf(ArrayList list, IContainer c) {

-		IResource[] rs= null;

-		try {

-			rs= c.members();

-		} catch(CoreException ex) {

-		}

-		if (rs != null) {

-			for (int i= 0; i < rs.length; i++) {

-				IResource r= rs[i];

-				if (r instanceof IFile)

-					list.add(r.getFullPath());

-				else if (r instanceof IContainer)

-					addLeaf(list, (IContainer) r);

-			}

-		}

-	}

-

-	/* (non-JavaDoc)

-	 * Method declared in IWizardPage.

-	 */

-	public boolean canFlipToNextPage() {

-		if (true) {

-			// we can't call getNextPage to determine if flipping is allowed since computing

-			// the next page is quite expensive. So we say yes if the page is complete.

-			return isPageComplete();

-		} else {

-			return super.canFlipToNextPage();

-		}

-	}

-	

-	private void setEnablePatchFile(boolean enable) {

-		fPatchFileNameField.setEnabled(enable);

-		fPatchFileBrowseButton.setEnabled(enable);

-	}

-

-	/**

-	 *	Create the group for selecting the patch file

-	 */

-	private void buildPatchFileGroup(Composite parent) {

-		

-		fPatchFileGroup= new Group(parent, SWT.NONE);

-		fPatchFileGroup.setText(PatchMessages.getString("InputPatchPage.SelectPatch.title")); //$NON-NLS-1$

-		GridLayout layout= new GridLayout();

-		layout.numColumns= 3;

-		fPatchFileGroup.setLayout(layout);

-		fPatchFileGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

-		

-		// 1st row

-		fUsePatchFileButton= new Button(fPatchFileGroup, SWT.RADIO);

-		fUsePatchFileButton.setText(PatchMessages.getString("InputPatchPage.FileButton.text")); //$NON-NLS-1$

-		

-		fPatchFileNameField= new Combo(fPatchFileGroup, SWT.BORDER);

-		GridData gd= new GridData(GridData.FILL_HORIZONTAL);

-		//gd.horizontalIndent= 8;

-		gd.widthHint= SIZING_TEXT_FIELD_WIDTH;

-		fPatchFileNameField.setLayoutData(gd);

-		

-		fPatchFileBrowseButton= new Button(fPatchFileGroup, SWT.PUSH);

-		fPatchFileBrowseButton.setText(PatchMessages.getString("InputPatchPage.ChooseFileButton.text")); //$NON-NLS-1$

-		fPatchFileBrowseButton.setLayoutData(new GridData());

-		

-		// 2nd row

-		fUseClipboardButton= new Button(fPatchFileGroup, SWT.RADIO);

-		fUseClipboardButton.setText(PatchMessages.getString("InputPatchPage.UseClipboardButton.text")); //$NON-NLS-1$

-		gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);

-		gd.horizontalSpan= 2;

-		fUseClipboardButton.setLayoutData(gd);

-

-

-		// Add listeners

-		fUsePatchFileButton.addSelectionListener(

-			new SelectionAdapter() {

-				public void widgetSelected(SelectionEvent e) {

-					fShowError= true;

-					setEnablePatchFile(!getUseClipboard());

-					updateWidgetEnablements();

-				}

-			}

-		);

-		fPatchFileNameField.addSelectionListener(

-			new SelectionAdapter() {

-				public void widgetSelected(SelectionEvent e) {

-					setSourceName(fPatchFileNameField.getText());

-					updateWidgetEnablements();

-				}

-			}

-		);

-		fPatchFileNameField.addModifyListener(

-			new ModifyListener() {

-				public void modifyText(ModifyEvent e) {

-					fShowError= true;

-					updateWidgetEnablements();

-				}

-			}

-		);

-		fPatchFileBrowseButton.addSelectionListener(

-			new SelectionAdapter() {

-				public void widgetSelected(SelectionEvent e) {

-					handlePatchFileBrowseButtonPressed();

-					updateWidgetEnablements();

-				}

-			}

-		);

-		

-		//fPatchFileNameField.setFocus();

-	}

-

-	private void buildInputGroup(Composite parent) {

-		

-		PatchWizard pw= (PatchWizard) getWizard();

-		IResource target= pw.getTarget();

-		IWorkspace workspace= target.getWorkspace();

-		IWorkspaceRoot root= workspace.getRoot();

-		

-		Tree tree= new Tree(parent, SWT.BORDER);

-		GridData gd= new GridData(GridData.FILL_HORIZONTAL);

-		gd.heightHint= 200;

-		tree.setLayoutData(gd);

-		

-		fPatchTargets= new CheckboxTreeViewer(tree);

-		fPatchTargets.setLabelProvider(new WorkbenchLabelProvider());

-		fPatchTargets.setContentProvider(new WorkbenchContentProvider());

-		fPatchTargets.setSorter(new WorkbenchViewerSorter());

-		fPatchTargets.setInput(root);

-		if (target != null) {

-			fPatchTargets.expandToLevel(target, 0);

-			fPatchTargets.setSelection(new StructuredSelection(target));

-		}

-		

-		// register listeners

-		fPatchTargets.addSelectionChangedListener(

-			new ISelectionChangedListener() {

-				public void selectionChanged(SelectionChangedEvent event) {

-					fPatchWizard.setTargets(PatchWizard.getResource(event.getSelection()));

-					updateWidgetEnablements();

-				}

-			}

-		);

-		//fPatchFileNameField.setFocus();

-	}

-	

-	/**

-	 * Returns a content provider for <code>IResource</code>s that returns 

-	 * only children of the given resource type.

-	 */

-	private ITreeContentProvider getResourceProvider(final int resourceType) {

-		return new WorkbenchContentProvider() {

-			public Object[] getChildren(Object o) {

-				if (o instanceof IContainer) {

-					try {

-						ArrayList results= new ArrayList();

-						IResource[] members= ((IContainer)o).members();

-						for (int i= 0; i < members.length; i++)

-							// filter out the desired resource types

-							if ((members[i].getType() & resourceType) != 0)

-								results.add(members[i]);

-						return results.toArray();

-					} catch (CoreException e) {

-					}

-				}

-				// just return an empty set of children

-				return new Object[0];

-			}

-		};

-	}

-	

-	/**

-	 * Updates the enable state of this page's controls.

-	 */

-	private void updateWidgetEnablements() {

-		

-		String error= null;

-

-		ISelection selection= fPatchTargets.getSelection();

-		boolean anySelected= selection != null && !selection.isEmpty();

-		if (!anySelected)

-			error= PatchMessages.getString("InputPatchPage.NothingSelected.message"); //$NON-NLS-1$

-

-		boolean gotPatch= false;

-		if (getUseClipboard()) {

-			Control c= getControl();

-			if (c != null) {

-				Clipboard clipboard= new Clipboard(c.getDisplay());

-				Object o= clipboard.getContents(TextTransfer.getInstance());

-				clipboard.dispose();

-				if (o instanceof String) {

-					String s= ((String) o).trim();

-					if (s.length() > 0)

-						gotPatch= true;

-					else

-						error= PatchMessages.getString("InputPatchPage.ClipboardIsEmpty.message"); //$NON-NLS-1$

-				} else

-					error= PatchMessages.getString("InputPatchPage.NoTextInClipboard.message");					 //$NON-NLS-1$

-			} else

-				error= PatchMessages.getString("InputPatchPage.CouldNotReadClipboard.message");					 //$NON-NLS-1$

-		} else {

-			String path= fPatchFileNameField.getText();

-			if (path != null && path.length() > 0) {

-				File file= new File(path);

-				gotPatch= file.exists() && file.isFile() && file.length() > 0;

-				if (!gotPatch)

-					error= PatchMessages.getString("InputPatchPage.CannotLocatePatch.message") + path; //$NON-NLS-1$

-			} else {

-				error= PatchMessages.getString("InputPatchPage.NoFileName.message"); //$NON-NLS-1$

-			}

-		}

-		

-		setPageComplete(anySelected && gotPatch);

-		if (fShowError)

-			setErrorMessage(error);

-	}

-	

-	protected void handlePatchFileBrowseButtonPressed() {

-		FileDialog dialog= new FileDialog(getShell(), SWT.NONE);

-		dialog.setText(PatchMessages.getString("InputPatchPage.SelectPatchFileDialog.title"));		 //$NON-NLS-1$

-		dialog.setFilterPath(getPatchFilePath());

-		String res= dialog.open();

-		if (res == null)

-			return;

-		

-		String patchFilePath= dialog.getFileName();

-		IPath filterPath= new Path(dialog.getFilterPath());

-		IPath path= filterPath.append(patchFilePath).makeAbsolute();	

-		patchFilePath= path.toOSString();

-		//fDialogSettings.put(IUIConstants.DIALOGSTORE_LASTEXTJAR, filterPath.toOSString());

-		

-		fPatchFileNameField.setText(patchFilePath);

-		//setSourceName(patchFilePath);

-	}

-	

-	/**

-	 * Sets the source name of the import to be the supplied path.

-	 * Adds the name of the path to the list of items in the

-	 * source combo and selects it.

-	 *

-	 * @param path the path to be added

-	 */

-	protected void setSourceName(String path) {

-	

-		if (path.length() > 0) {

-	

-			String[] currentItems= fPatchFileNameField.getItems();

-			int selectionIndex= -1;

-			for (int i= 0; i < currentItems.length; i++)

-				if (currentItems[i].equals(path))

-					selectionIndex= i;

-			

-			if (selectionIndex < 0) {	// not found in history

-				int oldLength= currentItems.length;

-				String[] newItems= new String[oldLength + 1];

-				System.arraycopy(currentItems, 0, newItems, 0, oldLength);

-				newItems[oldLength]= path;

-				fPatchFileNameField.setItems(newItems);

-				selectionIndex= oldLength;

-			}

-			fPatchFileNameField.select(selectionIndex);

-	

-			//resetSelection();

-		}

-	}

-	

-	/**

-	 *	The Finish button was pressed. Try to do the required work now and answer

-	 *	a boolean indicating success. If false is returned then the wizard will

-	 *	not close.

-	 *

-	 * @return boolean

-	 */

-	public boolean finish() {

-//		if (!ensureSourceIsValid())

-//			return false;

-	

-		saveWidgetValues();

-	

-//		Iterator resourcesEnum = getSelectedResources().iterator();

-//		List fileSystemObjects = new ArrayList();

-//		while (resourcesEnum.hasNext()) {

-//			fileSystemObjects.add(

-//				((FileSystemElement) resourcesEnum.next()).getFileSystemObject());

-//		}

-//	

-//		if (fileSystemObjects.size() > 0)

-//			return importResources(fileSystemObjects);

-//	

-//		MessageDialog

-//			.openInformation(

-//				getContainer().getShell(),

-//				DataTransferMessages.getString("DataTransfer.information"), //$NON-NLS-1$

-//				DataTransferMessages.getString("FileImport.noneSelected")); //$NON-NLS-1$

-//	

-//		return false;

-

-		return true;

-	}

-	

-	/**

-	 *	Use the dialog store to restore widget values to the values that they held

-	 *	last time this wizard was used to completion

-	 */

-	private void restoreWidgetValues() {

-		

-		boolean useClipboard= false;

-		

-		IDialogSettings settings= getDialogSettings();

-		if (settings != null) {

-			

-			useClipboard= settings.getBoolean(STORE_USE_CLIPBOARD_ID);

-

-			// set filenames history

-			String[] sourceNames= settings.getArray(STORE_PATCH_FILES_ID);

-			if (sourceNames != null)

-				for (int i= 0; i < sourceNames.length; i++)

-					if (sourceNames[i] != null && sourceNames[i].length() > 0)

-						fPatchFileNameField.add(sourceNames[i]);

-			

-			// set patch file path

-			String patchFilePath= settings.get(STORE_PATCH_FILES_ID);

-			if (patchFilePath != null)

-				setSourceName(patchFilePath);

-		}

-		

-		// set 'Use Clipboard' radio buttons

-		setUseClipboard(useClipboard);

-	}

-	

-	/**

-	 * 	Since Finish was pressed, write widget values to the dialog store so that they

-	 *	will persist into the next invocation of this wizard page

-	 */

-	void saveWidgetValues() {

-		IDialogSettings settings= getDialogSettings();

-		if (settings != null) {

-			

-			settings.put(STORE_USE_CLIPBOARD_ID, getUseClipboard());

-			settings.put(STORE_PATCH_FILES_ID, getPatchFilePath());

-			

-			// update source names history

-			String[] sourceNames= settings.getArray(STORE_PATCH_FILES_ID);

-			if (sourceNames == null)

-				sourceNames= new String[0];

-	

-			sourceNames= addToHistory(sourceNames, getPatchFilePath());

-			settings.put(STORE_PATCH_FILES_ID, sourceNames);

-		}

-	}

-	

-	// static helpers

-		

-	private void setUseClipboard(boolean useClipboard) {

-		if (useClipboard)

-			fUseClipboardButton.setSelection(true);

-		else

-			fUsePatchFileButton.setSelection(true);

-		setEnablePatchFile(!useClipboard);

-	}

-	

-	private boolean getUseClipboard() {

-		if (fUseClipboardButton != null)

-			return fUseClipboardButton.getSelection();

-		return false;

-	}

-

-	private String getPatchFilePath() {

-		if (fPatchFileNameField != null)

-			return fPatchFileNameField.getText();

-		return ""; //$NON-NLS-1$

-	} 

-

-	/**

-	 * Creates a new label with a bold font.

-	 *

-	 * @param parent the parent control

-	 * @param text the label text

-	 * @return the new label control

-	 */

-	private static Label buildPlainLabel(Composite parent, String text) {

-		Label label= new Label(parent, SWT.NONE);

-		label.setText(text);

-		GridData data= new GridData();

-		data.verticalAlignment= GridData.FILL;

-		data.horizontalAlignment= GridData.FILL;

-		label.setLayoutData(data);

-		return label;

-	}

-

-	/**

-	 * Adds an entry to a history, while taking care of duplicate history items

-	 * and excessively long histories. The assumption is made that all histories

-	 * should be of length <code>COMBO_HISTORY_LENGTH</code>.

-	 *

-	 * @param history the current history

-	 * @param newEntry the entry to add to the history

-	 */

-	protected static String[] addToHistory(String[] history, String newEntry) {

-		java.util.ArrayList l= new java.util.ArrayList(java.util.Arrays.asList(history));

-

-		l.remove(newEntry);

-		l.add(0,newEntry);

-	

-		// since only one new item was added, we can be over the limit

-		// by at most one item

-		if (l.size() > COMBO_HISTORY_LENGTH)

-			l.remove(COMBO_HISTORY_LENGTH);

-		

-		return (String[]) l.toArray(new String[l.size()]);

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java
deleted file mode 100644
index 053e3b9..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.io.*;

-import java.util.*;

-

-import org.eclipse.jface.util.Assert;

-

-/* package */ class LineReader {

-

-	private boolean fHaveChar= false;

-	private int fLastChar;

-	private boolean fSawEOF= false;

-	private BufferedReader fReader;

-	private boolean fIgnoreSingleCR= false;

-	

-	

-	/* package */ LineReader(BufferedReader reader) {

-		fReader= reader;

-		Assert.isNotNull(reader);

-	}

-

-	void ignoreSingleCR() {

-		fIgnoreSingleCR= true;

-	}

-	

-    /**

-     * Reads a line of text. A line is considered to be terminated by any one

-     * of a line feed ('\n'), a carriage return ('\r'), or a carriage return

-     * followed immediately by a linefeed.

-     * @return A string containing the contents of the line including

-     *	the line-termination characters, or <code>null</code> if the end of the

-     *	stream has been reached

-     * @exception IOException If an I/O error occurs

-     */

-	/* package */ String readLine() throws IOException {

-		StringBuffer sb= null;

-				

-		while (!fSawEOF) {

-			int c= readChar();

-			if (c == -1) {

-				fSawEOF= true;

-				break;

-			}

-			if (sb == null)

-				sb= new StringBuffer();

-			sb.append((char)c);

-			if (c == '\n')

-				break;

-			if (c == '\r') {

-				c= readChar();

-				if (c == -1) {

-					fSawEOF= true;

-					break;	// EOF

-				}

-				if (c != '\n') {

-					if (fIgnoreSingleCR) {

-						sb.append((char)c);	

-						continue;

-					} else {

-						fHaveChar= true;

-						fLastChar= c;

-					}

-				} else

-					sb.append((char)c);	

-				break;

-			}

-		}

-		

-		if (sb != null)

-			return sb.toString();

-		return null;

-	}

-	

-	/* package */ void close() {

-		try {

-			fReader.close();

-		} catch (IOException ex) {

-		}

-	}

-	

-	/* package */ List readLines() {

-		try {

-			List lines= new ArrayList();

-			String line;

-			while ((line= readLine()) != null)

-				lines.add(line);

-			return lines;

-		} catch (IOException ex) {

-			//System.out.println("error while reading file: " + fileName + "(" + ex + ")");

-		} finally {

-			close();

-		}

-		return null;

-	}

-	/**

-	 * Returns the number of characters in the given string without

-	 * counting a trailing line separator.

-	 */

-	/* package */ int lineContentLength(String line) {

-		if (line == null)

-			return 0;

-		int length= line.length();

-		for (int i= length-1; i >= 0; i--) {

-			char c= line.charAt(i);

-			if (c =='\n' || c == '\r')

-				length--;

-			else

-				break;

-		}

-		return length;

-	}

-	

-	//---- private

-	

-	private int readChar() throws IOException {

-		if (fHaveChar) {

-			fHaveChar= false;

-			return fLastChar;

-		}

-		return fReader.read();

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareInput.java
deleted file mode 100644
index d99a4f8..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareInput.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.io.*;

-import java.io.ByteArrayInputStream;

-import java.text.MessageFormat;

-import java.lang.reflect.InvocationTargetException;

-

-import org.eclipse.swt.graphics.Image;

-import org.eclipse.swt.widgets.Composite;

-

-import org.eclipse.core.runtime.*;

-import org.eclipse.core.resources.*;

-

-import org.eclipse.jface.viewers.*;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.structuremergeviewer.*;

-import org.eclipse.compare.internal.*;

-

-

-/**

- * A PatchCompareInput uses a Patcher to 

- * patch selected workspace resources.

- */

-/* package */ class PatchCompareInput extends CompareEditorInput {

-	

-	static class Rejected extends DiffNode implements IStreamContentAccessor {

-		Diff fDiff;

-		String fName;

-		Rejected(IDiffContainer parent, String name, Diff diff) {

-			super(parent, Differencer.NO_CHANGE);

-			fName= name;

-			fDiff= diff;

-		}

-		public String getName() {

-			return fName + " *"; //$NON-NLS-1$

-		}

-		public String getType() {

-			return "txt"; //$NON-NLS-1$

-		}

-		public Image getImage() {

-			return CompareUI.getImage("file"); //$NON-NLS-1$

-		}

-		public InputStream getContents() {

-			return new ByteArrayInputStream(fDiff.fRejected.getBytes());

-		}

-	}

-		

-	private DiffNode fRoot;

-	private IResource fTarget;

-	private Patcher fPatcher;

-	

-	/**

-	 * Creates an compare editor input for the given selection.

-	 */

-	/* package */ PatchCompareInput(CompareConfiguration config, Patcher patcher, ISelection selection) {

-		super(config);

-		fPatcher= patcher;

-		IResource[] s= Utilities.getResources(selection);

-		if (s.length == 1)

-			fTarget= s[0];	

-	}

-	

-	/**

-	 * Performs a two-way or three-way diff on the current selection.

-	 */

-	public Object prepareInput(IProgressMonitor pm) throws InvocationTargetException {

-						

-		CompareConfiguration cc= (CompareConfiguration) getCompareConfiguration();

-		

-		try {				

-			Diff[] diffs= fPatcher.getDiffs();

-			

-			pm.beginTask(Utilities.getString("ResourceCompare.taskName"), diffs.length); //$NON-NLS-1$

-		

-			fRoot= new DiffNode(0);

-			IContainer rootFolder= null;

-			if (fTarget instanceof IContainer)

-				rootFolder= (IContainer) fTarget;

-				

-			for (int i= 0; i < diffs.length; i++) {

-				Diff diff= diffs[i];

-				if (diff.isEnabled()) {

-					IPath path= fPatcher.getPath(diff);

-					createPath(fRoot, rootFolder, path, diff, false);

-					

-					String rej= diff.fRejected;

-					if (rej != null) {

-						IPath pp= path.removeLastSegments(1);

-						pp= pp.append(path.lastSegment() + ".rej"); //$NON-NLS-1$

-						createPath(fRoot, rootFolder, pp, diff, true);

-					}

-				}

-				pm.worked(1);

-			}

-						

-			fTarget.refreshLocal(IResource.DEPTH_INFINITE, pm);

-			

-			String leftLabel= fTarget.getName();

-			cc.setLeftLabel(leftLabel);

-			cc.setLeftImage(CompareUIPlugin.getImage(fTarget));

-			

-			String rformat= PatchMessages.getString("PatchCompareInput.RightTitle.format");	//$NON-NLS-1$

-			String rightLabel= MessageFormat.format(rformat, new String[] { fPatcher.getName() } );

-			cc.setRightLabel(rightLabel);

-			//cc.setRightImage(CompareUIPlugin.getImage(fRightResource));

-			

-			String format= Utilities.getString("ResourceCompare.twoWay.title"); //$NON-NLS-1$

-			String title= MessageFormat.format(format, new String[] {leftLabel, rightLabel} );

-			setTitle(title);

-

-			return fRoot;

-			

-		} catch (CoreException ex) {

-			throw new InvocationTargetException(ex);

-		} finally {

-			pm.done();

-		}

-	}

-	

-	public void saveChanges(IProgressMonitor pm) throws CoreException {

-		if (fRoot instanceof DiffNode) {

-			try {

-				commit(pm, (DiffNode) fRoot);

-			} finally {	

-				setDirty(false);

-			}

-		}

-	}

-	

-	/*

-	 * Recursively walks the diff tree and commits all changes.

-	 */

-	private static void commit(IProgressMonitor pm, DiffNode node) throws CoreException {

-		

-		ITypedElement left= node.getLeft();

-		if (left instanceof BufferedResourceNode)

-			((BufferedResourceNode) left).commit(pm);

-			

-		ITypedElement right= node.getRight();

-		if (right instanceof BufferedResourceNode)

-			((BufferedResourceNode) right).commit(pm);

-

-		IDiffElement[] children= node.getChildren();

-		if (children != null) {

-			for (int i= 0; i < children.length; i++) {

-				IDiffElement element= children[i];

-				if (element instanceof DiffNode)

-					commit(pm, (DiffNode) element);

-			}

-		}

-	}

-	

-	private void createPath(DiffContainer root, IContainer folder, IPath path, Diff diff, boolean reject) {

-		if (path.segmentCount() > 1) {

-			IFolder f= folder.getFolder(path.uptoSegment(1));

-			IDiffElement child= root.findChild(path.segment(0));

-			if (child == null) {

-				ResourceNode rn= new ResourceNode(f);

-				child= new DiffNode(root, Differencer.CHANGE, null, rn, rn);

-			}

-			if (child instanceof DiffContainer)

-				createPath((DiffContainer)child, f, path.removeFirstSegments(1), diff, reject);

-		} else {

-			// a leaf

-			BufferedResourceNode rn= new BufferedResourceNode(folder.getFile(path));

-			if (reject) {

-				new Rejected(root, path.segment(0), diff);

-			} else {

-				new DiffNode(root, diff.getType(), null, rn, new PatchedResource(rn, diff, path, fPatcher));

-			}					

-		}

-	}

-}

-

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java
deleted file mode 100644
index cd4cb28..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java
+++ /dev/null
@@ -1,17 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import org.eclipse.jface.dialogs.MessageDialog;

-

-import org.eclipse.compare.internal.ListDialog;

-

-public class PatchErrorDialog {

-	

-	private PatchErrorDialog() {

-		// no instance.

-	}

-	

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java
deleted file mode 100644
index 8dce380..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2002.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.util.MissingResourceException;

-import java.util.ResourceBundle;

-

-public class PatchMessages {

-

-	private static final String RESOURCE_BUNDLE= "org.eclipse.compare.internal.patch.PatchMessages";//$NON-NLS-1$

-

-	private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE);

-

-	private PatchMessages() {

-	}

-

-	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/patch/PatchMessages.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties
deleted file mode 100644
index 550b9ee..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties
+++ /dev/null
@@ -1,79 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2002.

-# All Rights Reserved.

-# =====================================

-

-#

-# 'Compare with Patch' Action

-#

-PatchAction.ExceptionTitle=Saving Resources

-PatchAction.Exception=Unexpected exception. See log for details

-PatchAction.SavingDirtyEditorsTask=Saving dirty editors

-PatchAction.AlwaysSaveQuestion=&Always save all modified resources automatically prior to patching

-PatchAction.SaveAllQuestion=Save all modified resources

-PatchAction.SaveAllDescription=All modified resources must be saved before this operation.\nPress OK to confirm or Cancel otherwise

-

-#

-# PatchWizard

-#

-PatchWizard.title=Resource Patcher

-PatchWizard.unexpectedException.message= Unexpected exception while applying the patch. See log for a detailed error description.

-

-#

-# InputPatchPage

-#

-InputPatchPage.title= Patch Input Specification

-InputPatchPage.message= Define what resource to patch with which patch

-InputPatchPage.Clipboard=Clipboard

-InputPatchPage.SelectInput=Select a single file or folder to patch:

-InputPatchPage.PatchErrorDialog.title=Patch Error

-InputPatchPage.PatchErrorDialog=Patch Error

-InputPatchPage.SelectPatch.title=Select Patch

-InputPatchPage.FileButton.text=Fil&e

-InputPatchPage.ChooseFileButton.text=&Browse...

-InputPatchPage.UseClipboardButton.text=&Clipboard

-InputPatchPage.NothingSelected.message=Nothing selected to apply patch to

-InputPatchPage.ClipboardIsEmpty.message=Clipboard is empty

-InputPatchPage.NoTextInClipboard.message=Clipboard does not contain text

-InputPatchPage.CouldNotReadClipboard.message=Couldn't retrieve clipboard contents

-InputPatchPage.CannotLocatePatch.message=Can't locate patch file: 

-InputPatchPage.NoFileName.message=No file name

-InputPatchPage.SelectPatchFileDialog.title=Select Patch File

-InputPatchPage.PatchFileNotFound.message=Patch file not found.

-InputPatchPage.ParseError.message=Error while parsing patch

-InputPatchPage.NoDiffsFound_Clipboard.message=Clipboard does not contain valid patch

-InputPatchPage.NoDiffsFound_File.message=File does not contain valid patch

-

-#

-# PreviewPatchPage

-#

-PreviewPatchPage.title= Verify Patch

-PreviewPatchPage.message= The tree shows the contents of the patch.\nA checked item indicates that a patch could be applied succesfully. Uncheck an item if you want to exclude it.

-PreviewPatchPage.Left.title= Original

-PreviewPatchPage.Right.title= Result

-PreviewPatchPage.PatchOptions.title=Patch Options

-PreviewPatchPage.IgnoreSegments.text=&Ignore leading path name segments:

-PreviewPatchPage.ReversePatch.text=&Reverse patch

-PreviewPatchPage.FuzzFactor.text=&Maximum fuzz factor:

-PreviewPatchPage.FuzzFactor.tooltip=Allow context to shift this number of lines from the original place

-PreviewPatchPage.IgnoreWhitespace.text=Ignore &whitespace

-PreviewPatchPage.NoName.text=no name

-PreviewPatchPage.FileExists.error=(file already exists)

-PreviewPatchPage.FileDoesNotExist.error=(file doesn't exist)

-PreviewPatchPage.NoMatch.error=(no match)

-PreviewPatchPage.FileIsReadOnly.error=(file is read only)

-

-#

-# Patcher

-#

-Patcher.ErrorDialog.title=title

-Patcher.DeleteError.message=Error while deleting resource

-Patcher.UpdateError.message=Error while updating resource

-Patcher.RefreshError.message=Error while refreshing from local

-Patcher.Marker.message=Rejected patch

-Patcher.Task.message=Patching

-

-#

-# PatchCompareInput

-#

-PatchCompareInput.RightTitle.format= Patch: {0}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java
deleted file mode 100644
index a0e3d8d..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.lang.reflect.InvocationTargetException;

-import java.util.ArrayList;

-

-import org.eclipse.swt.graphics.Image;

-

-import org.eclipse.jface.dialogs.IDialogSettings;

-import org.eclipse.jface.viewers.*;

-import org.eclipse.jface.wizard.Wizard;

-

-import org.eclipse.core.resources.IResource;

-import org.eclipse.core.runtime.IProgressMonitor;

-import org.eclipse.core.runtime.CoreException;

-

-import org.eclipse.ui.actions.WorkspaceModifyOperation;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.internal.*;

-import org.eclipse.compare.structuremergeviewer.Differencer;

-

-

-/* package */ class PatchWizard extends Wizard {

-	

-	// dialog store id constants

-	private final static String DIALOG_SETTINGS_KEY= "PatchWizard"; //$NON-NLS-1$

-

-	private boolean fHasNewDialogSettings;

-	

-	private InputPatchPage fPatchWizardPage;

-	private PreviewPatchPage fPreviewPatchPage;

-	

-	private Patcher fPatcher;

-	private IResource fTarget;

-

-		

-	/**

-	 * Creates a wizard for applying a patch file to the workspace.

-	 */

-	/* package */ PatchWizard(ISelection selection) {

-		

-		setTargets(getResource(selection));

-

-		fPatcher= new Patcher();

-		

-		setWindowTitle(PatchMessages.getString("PatchWizard.title")); //$NON-NLS-1$

-		

-		IDialogSettings workbenchSettings= CompareUIPlugin.getDefault().getDialogSettings();

-		IDialogSettings section= workbenchSettings.getSection(DIALOG_SETTINGS_KEY); //$NON-NLS-1$

-		if (section == null)

-			fHasNewDialogSettings= true;

-		else {

-			fHasNewDialogSettings= false;

-			setDialogSettings(section);

-		}	

-	}

-	

-	static IResource[] getResource(ISelection selection) {

-		IResource[] rs= Utilities.getResources(selection);

-		ArrayList list= null;

-		for (int i= 0; i < rs.length; i++) {

-			IResource r= rs[i];

-			if (r != null && r.isAccessible()) {

-				if (list == null)

-					list= new ArrayList();

-				list.add(r);

-			}

-		}

-		if (list != null && list.size() > 0)

-			return (IResource[]) list.toArray(new IResource[list.size()]);

-		return null;

-	}

-		

-	Patcher getPatcher() {

-		return fPatcher;

-	}

-	

-	IResource getTarget() {

-		return fTarget;

-	}

-	

-	void setTargets(IResource[] targets) {

-		fTarget= targets[0];	// right now we can only deal with a single selection

-	}

-	

-	/* (non-Javadoc)

-	 * Method declared on IWizard.

-	 */

-	public void addPages() {

-		super.addPages();

-		

-		addPage(fPatchWizardPage= new InputPatchPage(this));

-		addPage(fPreviewPatchPage= new PreviewPatchPage(this));

-	}

-	

-	/* (non-Javadoc)

-	 * Method declared on IWizard.

-	 */

-	public boolean needsProgressMonitor() {

-		return true;

-	}

-

-	/* (non-Javadoc)

-	 * Method declared on IWizard.

-	 */

-	public boolean performFinish() {

-		

-		if (false) {

-			CompareConfiguration cc= new CompareConfiguration() {

-				public Image getImage(int kind) {

-					if (kind == Differencer.ADDITION)

-						kind= Differencer.DELETION;

-					else if (kind == Differencer.DELETION)

-						kind= Differencer.ADDITION;

-					return super.getImage(kind);

-				}

-				public Image getImage(Image base, int kind) {

-					if (kind == Differencer.ADDITION)

-						kind= Differencer.DELETION;

-					else if (kind == Differencer.DELETION)

-						kind= Differencer.ADDITION;

-					return super.getImage(base, kind);

-				}

-			};

-			cc.setProperty(CompareEditor.CONFIRM_SAVE_PROPERTY, new Boolean(false));

-	

-			fPatcher.setName(fPatchWizardPage.getPatchName());

-	

-			CompareUI.openCompareEditor(new PatchCompareInput(cc, fPatcher, new StructuredSelection(fTarget)));

-		} else {

-			fPatcher.setName(fPatchWizardPage.getPatchName());

-

-			try {

-				WorkspaceModifyOperation op= new WorkspaceModifyOperation() {

-					protected void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {

-						try {

-							fPatcher.applyAll(getTarget(), monitor);

-						} catch (CoreException e) {

-							throw new InvocationTargetException(e);

-						}

-					}

-				};

-				getContainer().run(true, false, op);

-

-			} catch (InvocationTargetException e) {

-				ExceptionHandler.handle(e,

-						PatchMessages.getString("PatchWizard.title"),	//$NON-NLS-1$ 

-						PatchMessages.getString("PatchWizard.unexpectedException.message"));	//$NON-NLS-1$

-			} catch (InterruptedException e) {

-				// cannot happen

-			}

-		}

-		

-		// Save the dialog settings

-		if (fHasNewDialogSettings) {

-			IDialogSettings workbenchSettings= CompareUIPlugin.getDefault().getDialogSettings();

-			IDialogSettings section= workbenchSettings.getSection(DIALOG_SETTINGS_KEY);

-			section= workbenchSettings.addNewSection(DIALOG_SETTINGS_KEY);

-			setDialogSettings(section);

-		}

-		

-		fPatchWizardPage.saveWidgetValues();

-		//fPreviewPatchPage.saveWidgetValues();

-		

-		return true;

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchedResource.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchedResource.java
deleted file mode 100644
index b4932a6..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchedResource.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.io.*;

-

-import org.eclipse.swt.graphics.Image;

-

-import org.eclipse.core.resources.ResourcesPlugin;

-import org.eclipse.core.runtime.*;

-

-import org.eclipse.compare.*;

-

-

-/* package */ class PatchedResource implements ITypedElement, IStreamContentAccessor {

-	

-	private Diff fDiff;

-	private IStreamContentAccessor fCurrent;

-	private IPath fPath;

-	private byte[] fContent;

-	private Patcher fPatcher;

-	

-	/* package */ PatchedResource(IStreamContentAccessor current, Diff diff, IPath path, Patcher patcher) {

-		fDiff= diff;

-		fCurrent= current;

-		fPath= path;

-		fPatcher= patcher;

-	}

-	

-	public InputStream getContents() throws CoreException {

-		if (fContent == null) {

-			InputStream is= null;

-			

-			try {

-				is= fCurrent.getContents();

-			} catch (CoreException ex) {

-				is= new ByteArrayInputStream(new byte[0]);

-			}

-			if (is != null) {

-				

-				try {

-					String encoding= ResourcesPlugin.getEncoding();

-					BufferedReader br= new BufferedReader(new InputStreamReader(is, encoding));

-					String s= fPatcher.patch(fDiff,br, null);

-					if (s != null)

-						fContent= s.getBytes(encoding);

-				} catch (UnsupportedEncodingException e) {

-					throw new CoreException(new Status(IStatus.ERROR, CompareUI.PLUGIN_ID, Platform.PLUGIN_ERROR, e.getMessage(), e));

-				}

-					

-				try {

-					is.close();

-				} catch (IOException ex) {

-				}

-			}

-		}

-		return new ByteArrayInputStream(fContent);

-	}

-	

-	public Image getImage() {

-		return CompareUI.getImage(getType());

-	}

-	

-	public String getName() {

-		return fPath.toOSString();

-	}

-	

-	public String getType() {

-		String type= fPath.getFileExtension();

-		if (type != null)

-			return type;

-		return ITypedElement.UNKNOWN_TYPE;

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java
deleted file mode 100644
index 9fe7f37..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java
+++ /dev/null
@@ -1,1006 +0,0 @@
-package org.eclipse.compare.internal.patch;

-

-import java.io.*;

-import java.text.*;

-import java.util.*;

-

-import org.eclipse.jface.util.Assert;

-

-import org.eclipse.core.runtime.*;

-import org.eclipse.core.resources.*;

-

-import org.eclipse.compare.structuremergeviewer.Differencer;

-import org.eclipse.compare.internal.ExceptionHandler;

-

-

-/**

- * A Patcher 

- * - knows how to parse various patch file formats into some in-memory structure,

- * - holds onto the parsed data and the options to use when applying the patches,

- * - knows how to apply the patches to files and folders.

- */

-public class Patcher {

-	

-	private static final boolean DEBUG= false;

-	

-	private static final String DEV_NULL= "/dev/null"; //$NON-NLS-1$

-	

-	private static final String REJECT_FILE_EXTENSION= ".rej"; //$NON-NLS-1$

-	

-	private static final String MARKER_TYPE= "org.eclipse.compare.rejectedPatchMarker";	//$NON-NLS-1$

-

-	// diff formats

-	private static final int CONTEXT= 0;

-	private static final int ED= 1;

-	private static final int NORMAL= 2;

-	private static final int UNIFIED= 3;

-	

-	// we recognize the following date/time formats

-	private static DateFormat[] DATE_FORMATS= new DateFormat[] {

-		new SimpleDateFormat("EEE MMM dd kk:mm:ss yyyy"), //$NON-NLS-1$

-		new SimpleDateFormat("yyyy/MM/dd kk:mm:ss"), //$NON-NLS-1$

-		new SimpleDateFormat("EEE MMM dd kk:mm:ss yyyy", Locale.US) //$NON-NLS-1$

-	};

-		

-	private String fName;

-	private Diff[] fDiffs;

-	// patch options

-	private int fStripPrefixSegments;

-	private int fFuzz;

-	private boolean fIgnoreWhitespace= false;

-	private boolean fIgnoreLineDelimiter= true;

-	private boolean fPreserveLineDelimiters= false;

-	private boolean fReverse= false;

-	

-	

-	Patcher() {

-	}

-	

-	//---- options

-	

-	void setName(String name) {

-		fName= name;

-	}

-	

-	String getName() {

-		return fName;

-	}

-	

-	/**

-	 * Returns an array of Diffs after a sucessfull call to <code>parse</code>.

-	 * If <code>parse</code> hasn't been called returns <code>null</code>.

-	 */

-	Diff[] getDiffs() {

-		return fDiffs;

-	}

-	

-	IPath getPath(Diff diff) {

-		IPath path= diff.getPath();

-		if (fStripPrefixSegments > 0 && fStripPrefixSegments < path.segmentCount())

-			path= path.removeFirstSegments(fStripPrefixSegments);

-		return path;

-	}

-

-	/**

-	 * Returns <code>true</code> if new value differs from old.

-	 */

-	boolean setStripPrefixSegments(int strip) {

-		if (strip != fStripPrefixSegments) {

-			fStripPrefixSegments= strip;

-			return true;

-		}

-		return false;

-	}

-	

-	int getStripPrefixSegments() {

-		return fStripPrefixSegments;

-	}

-	

-	/**

-	 * Returns <code>true</code> if new value differs from old.

-	 */

-	boolean setFuzz(int fuzz) {

-		if (fuzz != fFuzz) {

-			fFuzz= fuzz;

-			return true;

-		}

-		return false;

-	}

-	

-	/**

-	 * Returns <code>true</code> if new value differs from old.

-	 */

-	boolean setReversed(boolean reverse) {

-		if (fReverse != reverse) {

-			fReverse= reverse;

-			

-			for (int i= 0; i < fDiffs.length; i++)

-				fDiffs[i].reverse();

-						

-			return true;

-		}

-		return false;

-	}

-		

-	/**

-	 * Returns <code>true</code> if new value differs from old.

-	 */

-	boolean setIgnoreWhitespace(boolean ignoreWhitespace) {

-		if (ignoreWhitespace != fIgnoreWhitespace) {

-			fIgnoreWhitespace= ignoreWhitespace;

-			return true;

-		}

-		return false;

-	}

-		

-	//---- parsing patch files

-		

-	/* package */ void parse(BufferedReader reader) throws IOException {

-		List diffs= new ArrayList();

-		String line= null;

-		boolean reread= false;

-		String diffArgs= null;

-		String fileName= null;

-		

-		LineReader lr= new LineReader(reader);

-		lr.ignoreSingleCR();

-		

-		// read leading garbage

-		while (true) {

-			if (!reread)

-				line= lr.readLine();

-			reread= false;

-			if (line == null)

-				break;

-			if (line.length() < 4)

-				continue;	// too short

-								

-			// remember some infos

-			if (line.startsWith("Index: ")) { //$NON-NLS-1$

-				fileName= line.substring(7).trim();

-				continue;

-			}

-			if (line.startsWith("diff")) { //$NON-NLS-1$

-				diffArgs= line.substring(4).trim();

-				continue;

-			}

-

-			if (line.startsWith("--- ")) { //$NON-NLS-1$

-				line= readUnifiedDiff(diffs, lr, line, diffArgs, fileName);

-				diffArgs= fileName= null;

-				reread= true;

-			} else if (line.startsWith("*** ")) { //$NON-NLS-1$

-				line= readContextDiff(diffs, lr, line, diffArgs, fileName);

-				diffArgs= fileName= null;

-				reread= true;

-			}

-		}

-		

-		lr.close();

-		

-		fDiffs= (Diff[]) diffs.toArray((Diff[]) new Diff[diffs.size()]);

-	}

-

-	/**

-	 * Returns the next line that does not belong to this diff

-	 */

-	private String readUnifiedDiff(List diffs, LineReader reader, String line, String args, String fileName) throws IOException {

-								

-		String[] oldArgs= split(line.substring(4));

-

-		// read info about new file

-		line= reader.readLine();

-		if (line == null || !line.startsWith("+++ ")) //$NON-NLS-1$

-			return line;

-			

-		String[] newArgs= split(line.substring(4));

-	

-		Diff diff= new Diff(extractPath(oldArgs, 0, fileName), extractDate(oldArgs, 1),

-				   			extractPath(newArgs, 0, fileName), extractDate(newArgs, 1));

-		diffs.add(diff);

-				   

-		int[] oldRange= new int[2];

-		int[] newRange= new int[2];

-		List lines= new ArrayList();

-

-		try {

-			// read lines of hunk

-			while (true) {

-				

-				line= reader.readLine();

-				if (line == null)

-					return null;

-					

-				if (reader.lineContentLength(line) == 0) {

-					//System.out.println("Warning: found empty line in hunk; ignored");

-					//lines.add(' ' + line);

-					continue;

-				}

-				

-				char c= line.charAt(0);

-				switch (c) {

-				case '@':

-					if (line.startsWith("@@ ")) { //$NON-NLS-1$

-						// flush old hunk

-						if (lines.size() > 0) {

-							new Hunk(diff, oldRange, newRange, lines);

-							lines.clear();

-						}

-								

-						// format: @@ -oldStart,oldLength +newStart,newLength @@

-						extractPair(line, '-', oldRange);

-						extractPair(line, '+', newRange);

-						continue;

-					}

-					break;

-				case ' ':

-				case '+':

-				case '-':

-					lines.add(line);

-					continue;

-				case '\\':

-					if (line.startsWith("No newline at end of file", 2)) { //$NON-NLS-1$

-						int lastIndex= lines.size();

-						if (lastIndex > 0) {

-							line= (String) lines.get(lastIndex-1);

-							int end= line.length()-1;

-							char lc= line.charAt(end);

-							if (lc == '\n') {

-								end--;

-								if (end > 0 && line.charAt(end-1) == '\r')

-									end--;

-							} else if (lc == '\r') {

-								end--;

-							}

-							line= line.substring(0, end);

-							lines.set(lastIndex-1, line);

-						}

-						continue;

-					}

-					break;

-				default:

-					if (DEBUG) {

-						int a1= c, a2= 0;

-						if (line.length() > 1)

-							a2= line.charAt(1);

-						System.out.println("char: " + a1 + " " + a2); //$NON-NLS-1$ //$NON-NLS-2$

-					}

-					break;

-				}

-				return line;

-			}

-		} finally {

-			if (lines.size() > 0)

-				new Hunk(diff, oldRange, newRange, lines);

-			diff.finish();

-		}

-	}

-	

-	/**

-	 * Returns the next line that does not belong to this diff

-	 */

-	private String readContextDiff(List diffs, LineReader reader, String line, String args, String fileName) throws IOException {

-		

-		String[] oldArgs= split(line.substring(4));

-		

-		// read info about new file

-		line= reader.readLine();

-		if (line == null || !line.startsWith("--- ")) //$NON-NLS-1$

-			return line;

-		

-		String[] newArgs= split(line.substring(4));

-						

-		Diff diff= new Diff(extractPath(oldArgs, 0, fileName), extractDate(oldArgs, 1),

-				   			extractPath(newArgs, 0, fileName), extractDate(newArgs, 1));

-		diffs.add(diff);

-				   

-		int[] oldRange= new int[2];

-		int[] newRange= new int[2];

-		List oldLines= new ArrayList();

-		List newLines= new ArrayList();

-		List lines= oldLines;

-		

-		try {

-			// read lines of hunk

-			while (true) {

-				

-				line= reader.readLine();

-				if (line == null)

-					return line;

-				

-				int l= line.length();

-				if (l == 0)

-					continue;

-				if (l > 1) {

-					switch (line.charAt(0)) {

-					case '*':	

-						if (line.startsWith("***************")) {	// new hunk //$NON-NLS-1$

-							// flush old hunk

-							if (oldLines.size() > 0 || newLines.size() > 0) {

-								new Hunk(diff, oldRange, newRange, unifyLines(oldLines, newLines));

-								oldLines.clear();

-								newLines.clear();

-							}

-							continue;

-						}

-						if (line.startsWith("*** ")) {	// old range //$NON-NLS-1$

-							// format: *** oldStart,oldEnd ***

-							extractPair(line, ' ', oldRange);

-							oldRange[1]= oldRange[1]-oldRange[0]+1;

-							lines= oldLines;

-							continue;

-						}

-						break;

-					case ' ':	// context line

-					case '+':	// addition

-					case '!':	// change

-						if (line.charAt(1) == ' ') {

-							lines.add(line);

-							continue;

-						}

-						break;

-					case '-':

-						if (line.charAt(1) == ' ') {	// deletion

-							lines.add(line);

-							continue;

-						}

-						if (line.startsWith("--- ")) {	// new range //$NON-NLS-1$

-							// format: *** newStart,newEnd ***

-							extractPair(line, ' ', newRange);

-							newRange[1]= newRange[1]-newRange[0]+1;

-							lines= newLines;

-							continue;

-						}

-						break;

-					default:

-						break;

-					}

-				}

-				return line;

-			}

-		} finally {

-			// flush last hunk

-			if (oldLines.size() > 0 || newLines.size() > 0)

-				new Hunk(diff, oldRange, newRange, unifyLines(oldLines, newLines));

-			diff.finish();

-		}

-	}

-	

-	/**

-	 * Creates a List of lines in the unified format from

-	 * two Lists of lines in the 'classic' format.

-	 */

-	private List unifyLines(List oldLines, List newLines) {

-		List result= new ArrayList();

-

-		String[] ol= (String[]) oldLines.toArray(new String[oldLines.size()]);

-		String[] nl= (String[]) newLines.toArray(new String[newLines.size()]);

-		

-		int oi= 0, ni= 0;

-		

-		while (true) {

-			

-			char oc= 0;

-			String o= null;

-			if (oi < ol.length) {

-				o= ol[oi];

-				oc= o.charAt(0);

-			}

-			

-			char nc= 0;

-			String n= null;

-			if (ni < nl.length) {

-				n= nl[ni];

-				nc= n.charAt(0);

-			}

-			

-			// EOF

-			if (oc == 0 && nc == 0)

-				break;

-				

-			// deletion in old

-			if (oc == '-') {

-				do {

-					result.add('-' + o.substring(2));

-					oi++;

-					if (oi >= ol.length)

-						break;

-					o= ol[oi];

-				} while (o.charAt(0) == '-');

-				continue;

-			}

-			

-			// addition in new

-			if (nc == '+') {

-				do {

-					result.add('+' + n.substring(2));

-					ni++;

-					if (ni >= nl.length)

-						break;

-					n= nl[ni];

-				} while (n.charAt(0) == '+');

-				continue;

-			}

-			

-			// differing lines on both sides

-			if (oc == '!' && nc == '!') {

-				// remove old

-				do {

-					result.add('-' + o.substring(2));

-					oi++;

-					if (oi >= ol.length)

-						break;

-					o= ol[oi];

-				} while (o.charAt(0) == '!');

-				

-				// add new

-				do {

-					result.add('+' + n.substring(2));

-					ni++;

-					if (ni >= nl.length)

-						break;

-					n= nl[ni];

-				} while (n.charAt(0) == '!');

-				

-				continue;

-			}

-			

-			// context lines

-			if (oc == ' ' && nc == ' ') {

-				do {

-					Assert.isTrue(o.equals(n), "non matching context lines"); //$NON-NLS-1$

-					result.add(' ' + o.substring(2));

-					oi++;

-					ni++;

-					if (oi >= ol.length || ni >= nl.length)

-						break;

-					o= ol[oi];

-					n= nl[ni];

-				} while (o.charAt(0) == ' ' && n.charAt(0) == ' ');

-				continue;

-			}

-			

-			if (oc == ' ') {

-				do {

-					result.add(' ' + o.substring(2));

-					oi++;

-					if (oi >= ol.length)

-						break;

-					o= ol[oi];

-				} while (o.charAt(0) == ' ');

-				continue;

-			}

-

-			if (nc == ' ') {

-				do {

-					result.add(' ' + n.substring(2));

-					ni++;

-					if (ni >= nl.length)

-						break;

-					n= nl[ni];

-				} while (n.charAt(0) == ' ');

-				continue;

-			}

-			

-			Assert.isTrue(false, "unexpected char <" + oc + "> <" + nc + ">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

-		}

-		

-		return result;

-	}

-	

-	/**

-	 * Breaks the given string into tab separated substrings.

-	 * Leading and trailing whitespace is removed from each token.

-	 */ 

-	private String[] split(String line) {

-		List l= new ArrayList();

-		StringTokenizer st= new StringTokenizer(line, "\t"); //$NON-NLS-1$

-		while (st.hasMoreElements()) {

-			String token= st.nextToken().trim();

-			if (token.length() > 0)

- 				l.add(token);

-		}

-		return (String[]) l.toArray(new String[l.size()]);

-	}

-	

-	/**

-	 * @return the parsed time/date in milliseconds or -1 on error

-	 */

-	private long extractDate(String[] args, int n) {

-		if (n < args.length) {

-			String line= args[n];

-			for (int i= 0; i < DATE_FORMATS.length; i++) {

-				DATE_FORMATS[i].setLenient(true);

-				try {

-					Date date= DATE_FORMATS[i].parse(line);

-					return date.getTime();		

-				} catch (ParseException ex) {

-				}

-			}

-			// System.err.println("can't parse date: <" + line + ">");

-		}

-		return -1;

-	}

-	

-	/**

-	 * Returns null if file name is "/dev/null".

-	 */

-	private IPath extractPath(String[] args, int n, String path2) {

-		if (n < args.length) {

-			String path= args[n];

-			if (DEV_NULL.equals(path))

-				return null;

-			int pos= path.lastIndexOf(':');

-			if (pos >= 0)

-				path= path.substring(0, pos);

-			if (path2 != null && !path2.equals(path)) {

-				if (DEBUG) System.out.println("path mismatch: " + path2); //$NON-NLS-1$

-				path= path2;

-			}

-			return new Path(path);

-		}

-		return null;

-	}

-	

-	/**

-	 * Tries to extract two integers separated by a comma.

-	 * The parsing of the line starts at the position after

-	 * the first occurrence of the given character start an ends

-	 * at the first blank (or the end of the line).

-	 * If only a single number is found this is assumed to be the length of the range.

-	 * In this case the start of the range is set to 1.

-	 * If an error occurs the range -1,-1 is returned.

-	 */

-	private void extractPair(String line, char start, int[] pair) {

-		pair[0]= pair[1]= -1;

-		int startPos= line.indexOf(start);

-		if (startPos < 0) {

-			if (DEBUG) System.out.println("parsing error in extractPair: couldn't find \'" + start + "\'"); //$NON-NLS-1$ //$NON-NLS-2$

-			return;

-		}

-		line= line.substring(startPos+1);

-		int endPos= line.indexOf(' ');

-		if (endPos < 0) {

-			if (DEBUG) System.out.println("parsing error in extractPair: couldn't find end blank"); //$NON-NLS-1$

-			return;

-		}

-		line= line.substring(0, endPos);

-		int comma= line.indexOf(',');

-		if (comma >= 0) {

-			pair[0]= Integer.parseInt(line.substring(0, comma));

-			pair[1]= Integer.parseInt(line.substring(comma+1));

-		} else {

-			pair[0]= 1;

-			pair[1]= Integer.parseInt(line.substring(comma+1));

-		}

-	}

-	

-	//---- applying a patch file

-	

-	/**

-	 * Tries to patch the given lines with the specified Diff.

-	 * Any hunk that couldn't be applied is returned in the list failedHunks.

-	 */

-	/* package */ void patch(Diff diff, List lines, List failedHunks) {

-		

-		int shift= 0;

-		Iterator iter= diff.fHunks.iterator();

-		while (iter.hasNext()) {

-			Hunk hunk= (Hunk) iter.next();

-			hunk.fMatches= false;

-			shift= patch(hunk, lines, shift, failedHunks);

-		}

-	}

-

-	/**

-	 * Tries to patch the contents of the given reader with the specified Diff.

-	 * Any hunk that couldn't be applied is returned in the list failedHunks.

-	 */

-	/* package */ String patch(Diff diff, BufferedReader reader, List failedHunks) {

-		

-		List lines= new LineReader(reader).readLines();

-		if (lines == null)

-			lines= new ArrayList();

-

-		patch(diff, lines, failedHunks);

-		

-		return createString(lines);

-	}

-

-	/**

-	 * Tries to apply the specified hunk to the given lines.

-	 * If the hunk cannot be applied at the original position

-	 * the methods tries Fuzz lines before and after.

-	 * If this fails the Hunk is added to the given list of failed hunks.

-	 */

-	private int patch(Hunk hunk, List lines, int shift, List failedHunks) {

-		if (tryPatch(hunk, lines, shift)) {

-			shift+= doPatch(hunk, lines, shift);

-		} else {

-			boolean found= false;

-			int oldShift= shift;

-			

-			for (int i= shift-1; i > shift-fFuzz; i--) {

-				if (tryPatch(hunk, lines, i)) {

-					shift= i;

-					found= true;

-					break;

-				}

-			}

-			

-			if (! found) {

-				for (int i= shift+1; i < shift+fFuzz; i++) {

-					if (tryPatch(hunk, lines, i)) {

-						shift= i;

-						found= true;

-						break;

-					}

-				}

-			}

-			

-			if (found) {

-				if (DEBUG) System.out.println("patched hunk at offset: " + (shift-oldShift)); //$NON-NLS-1$

-				shift+= doPatch(hunk, lines, shift);

-			} else {

-				if (failedHunks != null) {

-					if (DEBUG) System.out.println("failed hunk"); //$NON-NLS-1$

-					failedHunks.add(hunk);

-				}

-			}

-			oldShift= oldShift;	// prevent compiler warning about unused local variable

-		}

-		return shift;

-	}

-	

-	/**

-	 * Tries to apply the given hunk on the specified lines.

-	 * The parameter shift is added to the line numbers given

-	 * in the hunk.

-	 */

-	private boolean tryPatch(Hunk hunk, List lines, int shift) {

-		int pos= hunk.fOldStart + shift;

-		int contextMatches= 0;

-		int deleteMatches= 0;

-		for (int i= 0; i < hunk.fLines.length; i++) {

-			String s= hunk.fLines[i];

-			Assert.isTrue(s.length() > 0);

-			String line= s.substring(1);

-			char controlChar= s.charAt(0);

-			if (controlChar == ' ') {	// context lines

-				while (true) {

-					if (pos < 0 || pos >= lines.size())

-						return false;

-					if (linesMatch(line, (String) lines.get(pos))) {

-						contextMatches++;

-						pos++;

-						break;

-					}

-					if (contextMatches <= 0)

-						return false;

-					pos++;

-				}

-			} else if (controlChar == '-') {

-				// deleted lines

-				while (true) {

-					if (pos < 0 || pos >= lines.size())

-						return false;

-					if (linesMatch(line, (String) lines.get(pos))) {

-						deleteMatches++;

-						pos++;

-						break;

-					}

-					if (deleteMatches <= 0)

-						return false;

-					pos++;

-				}

-			} else if (controlChar == '+') {

-				// added lines

-				// we don't have to do anything for a 'try'

-			} else

-				Assert.isTrue(false, "tryPatch: unknown control charcter: " + controlChar); //$NON-NLS-1$

-		}

-		return true;

-	}

-	

-	private int doPatch(Hunk hunk, List lines, int shift) {

-		int pos= hunk.fOldStart + shift;

-		for (int i= 0; i < hunk.fLines.length; i++) {

-			String s= hunk.fLines[i];

-			Assert.isTrue(s.length() > 0);

-			String line= s.substring(1);

-			char controlChar= s.charAt(0);

-			if (controlChar == ' ') {	// context lines

-				while (true) {

-					Assert.isTrue(pos < lines.size(), "doPatch: inconsistency in context"); //$NON-NLS-1$

-					if (linesMatch(line, (String) lines.get(pos))) {

-						pos++;

-						break;

-					}

-					pos++;

-				}

-			} else if (controlChar == '-') {

-				// deleted lines				

-				while (true) {

-					Assert.isTrue(pos < lines.size(), "doPatch: inconsistency in deleted lines"); //$NON-NLS-1$

-					if (linesMatch(line, (String) lines.get(pos))) {

-						break;

-					}

-					pos++;

-				}

-				lines.remove(pos);

-			} else if (controlChar == '+') {

-				// added lines

-				lines.add(pos,  line);

-				pos++;

-			} else

-				Assert.isTrue(false, "doPatch: unknown control character: " + controlChar); //$NON-NLS-1$

-		}

-		hunk.fMatches= true;

-		return hunk.fNewLength - hunk.fOldLength;

-	}

-

-	public void applyAll(IResource target, IProgressMonitor pm) throws CoreException {

-		

-		final int WORK_UNIT= 10;

-				

-		IFile file= null;	// file to be patched

-		IContainer container= null;

-		if (target instanceof IContainer)

-			container= (IContainer) target;

-		else if (target instanceof IFile) {

-			file= (IFile) target;

-			container= file.getParent();

-		} else {

-			Assert.isTrue(false);

-		}

-		

-		if (pm != null) {

-			String message= PatchMessages.getString("Patcher.Task.message");	//$NON-NLS-1$

-			pm.beginTask(message, fDiffs.length*WORK_UNIT);

-		}

-		

-		for (int i= 0; i < fDiffs.length; i++) {

-			

-			int workTicks= WORK_UNIT;

-			

-			Diff diff= fDiffs[i];

-			if (diff.isEnabled()) {

-				

-				IPath path= getPath(diff);

-				if (pm != null)

-					pm.subTask(path.toString());

-			

-				if (container != null)

-					file= createPath(container, path);

-				List failed= new ArrayList();

-				List result= null;

-				

-				int type= diff.getType();

-				switch (type) {

-				case Differencer.ADDITION:

-					// patch it and collect rejected hunks

-					result= apply(diff, file, true, failed);

-					store(createString(result), file, new SubProgressMonitor(pm, workTicks));

-					workTicks-= WORK_UNIT;

-					break;

-				case Differencer.DELETION:

-					file.delete(true, true, new SubProgressMonitor(pm, workTicks));

-					workTicks-= WORK_UNIT;

-					break;

-				case Differencer.CHANGE:

-					// patch it and collect rejected hunks

-					result= apply(diff, file, false, failed);

-					store(createString(result), file, new SubProgressMonitor(pm, workTicks));

-					workTicks-= WORK_UNIT;

-					break;

-				}

-

-				if (failed.size() > 0) {

-					IPath pp= null;

-					if (path.segmentCount() > 1) {

-						pp= path.removeLastSegments(1);

-						pp= pp.append(path.lastSegment() + REJECT_FILE_EXTENSION);

-					} else

-						pp= new Path(path.lastSegment() + REJECT_FILE_EXTENSION);

-					file= createPath(container, pp);

-					if (file != null) {

-						store(getRejected(failed), file, pm);

-						try {

-							IMarker marker= file.createMarker(MARKER_TYPE);

-							marker.setAttribute(marker.MESSAGE, PatchMessages.getString("Patcher.Marker.message"));	//$NON-NLS-1$

-							marker.setAttribute(marker.PRIORITY, IMarker.PRIORITY_HIGH);

-						} catch (CoreException ex) {

-						}

-					}

-				}

-			}

-			

-			if (pm != null) {

-				if (pm.isCanceled())

-					break;

-				if (workTicks > 0)

-					pm.worked(workTicks);

-			}

-		}

-	}

-	

-	/**

-	 * Reads the contents from the given file and returns them as

-	 * a List of lines.

-	 */

-	private List load(IFile file, boolean create) {

-		List lines= null;

-		if (!create && file != null) {

-			// read current contents

-			InputStream is= null;

-			try {

-				is= file.getContents();

-				

-				Reader streamReader= null;

-				try {

-					streamReader= new InputStreamReader(is, ResourcesPlugin.getEncoding());

-				} catch (UnsupportedEncodingException x) {

-					// use default encoding

-					streamReader= new InputStreamReader(is);

-				}

-				

-				BufferedReader reader= new BufferedReader(streamReader);

-				lines= new LineReader(reader).readLines();

-			} catch(CoreException ex) {

-			} finally {

-				if (is != null)

-					try {

-						is.close();

-					} catch(IOException ex) {

-					}

-			}

-		}

-		

-		if (lines == null)

-			lines= new ArrayList();

-		return lines;

-	}

-	

-	List apply(Diff diff, IFile file, boolean create, List failedHunks) {

-		

-		List lines= load(file, create);

-		patch(diff, lines, failedHunks);

-		return lines;

-	}

-	

-	/**

-	 * Converts the string into bytes and stores them in the given file.

-	 */

-	private void store(String contents, IFile file, IProgressMonitor pm) throws CoreException {

-		

-		byte[] bytes;

-		try {

-			bytes= contents.getBytes(ResourcesPlugin.getEncoding());

-		} catch (UnsupportedEncodingException x) {

-			// uses default encoding

-			bytes= contents.getBytes();

-		}

-		

-		InputStream is= new ByteArrayInputStream(bytes);

-		try {

-			if (file.exists()) {

-				file.setContents(is, false, true, pm);

-			} else {

-				file.create(is, false, pm);

-			}

-		} finally {

-			if (is != null)

-				try {

-					is.close();

-				} catch(IOException ex) {

-				}

-		}

-	}

-

-	/**

-	 * Concatenates all strings found in the given List.

-	 */

-	private String createString(List lines) {

-		StringBuffer sb= new StringBuffer();

-		Iterator iter= lines.iterator();

-		if (fPreserveLineDelimiters) {

-			while (iter.hasNext())

-				sb.append((String)iter.next());

-		} else {

-			String lineSeparator= System.getProperty("line.separator"); //$NON-NLS-1$

-			while (iter.hasNext()) {

-				String line= (String)iter.next();

-				int l= length(line);

-				if (l < line.length()) {	// line has delimiter

-					sb.append(line.substring(0, l));

-					sb.append(lineSeparator);

-				} else {

-					sb.append(line);

-				}

-			}

-		}

-		return sb.toString();

-	}

-

-	String getRejected(List failedHunks) {

-		if (failedHunks.size() <= 0)

-			return null;

-		

-		String lineSeparator= System.getProperty("line.separator"); //$NON-NLS-1$

-		StringBuffer sb= new StringBuffer();

-		Iterator iter= failedHunks.iterator();

-		while (iter.hasNext()) {

-			Hunk hunk= (Hunk) iter.next();

-			sb.append(hunk.getRejectedDescription());

-			sb.append(lineSeparator);

-			sb.append(hunk.getContent());

-		}

-		return sb.toString();

-	}

-	

-	/**

-	 * Ensures that a file with the given path exists in

-	 * the given container. Folder are created as necessary.

-	 */

-	private IFile createPath(IContainer container, IPath path) throws CoreException {

-		if (path.segmentCount() > 1) {

-			IFolder f= container.getFolder(path.uptoSegment(1));

-			if (!f.exists())

-				f.create(false, true, null);

-			return createPath(f, path.removeFirstSegments(1));

-		}

-		// a leaf

-		return container.getFile(path);

-	}

-

-	/**

-	 * Returns the given string with all whitespace characters removed.

-	 * Whitespace is defined by <code>Character.isWhitespace(...)</code>.

-	 */

-	private static String stripWhiteSpace(String s) {

-		StringBuffer sb= new StringBuffer();

-		int l= s.length();

-		for (int i= 0; i < l; i++) {

-			char c= s.charAt(i);

-			if (!Character.isWhitespace(c))

-				sb.append(c);

-		}

-		return sb.toString();

-	}

-	

-	/**

-	 * Compares two strings.

-	 * If fIgnoreWhitespace is true whitespace is ignored.

-	 */

-	private boolean linesMatch(String line1, String line2) {

-		if (fIgnoreWhitespace)

-			return stripWhiteSpace(line1).equals(stripWhiteSpace(line2));

-		if (fIgnoreLineDelimiter) {

-			int l1= length(line1);

-			int l2= length(line2);

-			if (l1 != l2)

-				return false;

-			return line1.regionMatches(0, line2, 0, l1);

-		}

-		return line1.equals(line2);

-	}

-	

-	/**

-	 * Returns the length (exluding a line delimiter CR, LF, CR/LF)

-	 * of the given string.

-	 */

-	/* package */ static int length(String s) {

-		int l= s.length();

-		if (l > 0) {

-			char c= s.charAt(l-1);

-			if (c == '\r')

-				return l-1;

-			if (c == '\n') {

-				if (l > 1 && s.charAt(l-2) == '\r')

-					return l-2;

-				return l-1;

-			}

-		}

-		return l;

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java
deleted file mode 100644
index 90c1737..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java
+++ /dev/null
@@ -1,596 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.io.*;

-import java.util.*;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.events.*;

-import org.eclipse.swt.graphics.Image;

-import org.eclipse.swt.layout.*;

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.jface.viewers.Viewer;

-import org.eclipse.jface.wizard.WizardPage;

-import org.eclipse.jface.resource.ImageDescriptor;

-

-import org.eclipse.core.resources.*;

-import org.eclipse.core.runtime.*;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.internal.*;

-import org.eclipse.compare.structuremergeviewer.*;

-

-

-/**

- * Shows the parsed patch file and any mismatches

- * between files, hunks and the currently selected

- * resources.

- */

-/* package */ class PreviewPatchPage extends WizardPage {

-	

-	/**

-	 * Used with CompareInput

-	 */

-	static class HunkInput implements ITypedElement, IStreamContentAccessor {

-		String fContent;

-		String fType;

-		

-		HunkInput(String type, String s) {

-			fType= type;

-			fContent= s;

-		}

-		public Image getImage() {

-			return null;

-		}

-		public String getName() {

-			return PatchMessages.getString("PreviewPatchPage.NoName.text"); //$NON-NLS-1$

-		}

-		public String getType() {

-			return fType;

-		}

-		public InputStream getContents() {

-			return new ByteArrayInputStream(fContent.getBytes());

-		}

-	};

-		

-	private PatchWizard fPatchWizard;

-	

-	private Tree fTree;

-	private Combo fStripPrefixSegments;

-	private CompareViewerSwitchingPane fHunkViewer;

-	private Button fIgnoreWhitespaceButton;

-	private Button fReversePatchButton;

-	private Text fFuzzField;

-	

-	private Image fNullImage;

-	private Image fAddImage;

-	private Image fDelImage;

-	private Image fErrorImage;

-	private Image fErrorAddImage;

-	private Image fErrorDelImage;

-	

-	private CompareConfiguration fCompareConfiguration;

-	

-	

-	/* package */ PreviewPatchPage(PatchWizard pw) {

-		super("PreviewPatchPage",	//$NON-NLS-1$ 

-			PatchMessages.getString("PreviewPatchPage.title"), null); //$NON-NLS-1$

-		

-		setMessage(PatchMessages.getString("PreviewPatchPage.message"));	//$NON-NLS-1$

-		

-		fPatchWizard= pw;

-		//setPageComplete(false);

-		

-		int w= 16;

-		

-		ImageDescriptor addId= CompareUIPlugin.getImageDescriptor("ovr16/add_ov.gif");	//$NON-NLS-1$

-		ImageDescriptor delId= CompareUIPlugin.getImageDescriptor("ovr16/del_ov.gif");	//$NON-NLS-1$

-

-		ImageDescriptor errId= CompareUIPlugin.getImageDescriptor("ovr16/error_ov.gif");	//$NON-NLS-1$

-		Image errIm= errId.createImage();

-		

-		fNullImage= new DiffImage(null, null, w).createImage();

-		fAddImage= new DiffImage(null, addId, w).createImage();

-		fDelImage= new DiffImage(null, delId, w).createImage();

-

-		fErrorImage= new DiffImage(errIm, null, w).createImage();

-		fErrorAddImage= new DiffImage(errIm, addId, w).createImage();

-		fErrorDelImage= new DiffImage(errIm, delId, w).createImage();

-		

-		fCompareConfiguration= new CompareConfiguration();

-		

-		fCompareConfiguration.setLeftEditable(false);

-		fCompareConfiguration.setLeftLabel(PatchMessages.getString("PreviewPatchPage.Left.title")); //$NON-NLS-1$

-		

-		fCompareConfiguration.setRightEditable(false);

-		fCompareConfiguration.setRightLabel(PatchMessages.getString("PreviewPatchPage.Right.title")); //$NON-NLS-1$

-	}

-	

-	/* (non-Javadoc)

-	 * Method declared in WizardPage

-	 */

-	public void setVisible(boolean visible) {

-		if (visible)

-			buildTree();

-		super.setVisible(visible);

-	}

-

-	Image getImage(Diff diff) {

-		if (diff.fMatches) {

-			switch (diff.getType()) {

-			case Differencer.ADDITION:

-				return fAddImage;

-			case Differencer.DELETION:

-				return fDelImage;

-			}

-			return fNullImage;

-		}

-		switch (diff.getType()) {

-		case Differencer.ADDITION:

-			return fErrorAddImage;

-		case Differencer.DELETION:

-			return fErrorDelImage;

-		}

-		return fErrorImage;

-	}

-	

-	Image getImage(Hunk hunk) {

-		if (hunk.fMatches)

-			return fNullImage;

-		return fErrorImage;

-	}

-	

-	public void createControl(Composite parent) {

-

-		Composite composite= new Composite(parent, SWT.NULL);

-		composite.setLayout(new GridLayout());

-		composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));

-

-		setControl(composite);

-		

-		buildPatchOptionsGroup(composite);

-		

-		Splitter splitter= new Splitter(composite, SWT.VERTICAL);

-		splitter.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL

-					| GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL));

-

-		

-		// top pane showing diffs and hunks in a check box tree 

-		fTree= new Tree(splitter, SWT.CHECK | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);

-		GridData gd= new GridData();

-		gd.verticalAlignment= GridData.FILL;

-		gd.horizontalAlignment= GridData.FILL;

-		gd.grabExcessHorizontalSpace= true;

-		gd.grabExcessVerticalSpace= true;

-		fTree.setLayoutData(gd);

-				

-		// bottom pane showing hunks in compare viewer 

-		fHunkViewer= new CompareViewerSwitchingPane(splitter, SWT.BORDER | SWT.FLAT) {

-			protected Viewer getViewer(Viewer oldViewer, Object input) {

-				return CompareUI.findContentViewer(oldViewer, (ICompareInput)input, this, fCompareConfiguration);

-			}

-		};

-		gd= new GridData();

-		gd.verticalAlignment= GridData.FILL;

-		gd.horizontalAlignment= GridData.FILL;

-		gd.grabExcessHorizontalSpace= true;

-		gd.grabExcessVerticalSpace= true;

-		fHunkViewer.setLayoutData(gd);

-		

-		// register listeners

-		

-		fTree.addSelectionListener(

-			new SelectionAdapter() {

-				public void widgetSelected(SelectionEvent e) {

-					TreeItem ti= (TreeItem) e.item;

-					Object data= e.item.getData();

-					if (e.detail == SWT.CHECK) {

-						boolean checked= ti.getChecked();

-						if (data instanceof Hunk) {

-							Hunk hunk= (Hunk) data;

-							checked= checked && hunk.fMatches;

-							//hunk.setEnabled(checked);

-							ti.setChecked(checked);

-							updateGrayedState(ti);

-						} else if (data instanceof Diff) {

-							updateCheckedState(ti);

-						}

-					} else {

-						if (data instanceof Hunk)

-							PreviewPatchPage.this.fHunkViewer.setInput(createInput((Hunk)data));

-						else

-							PreviewPatchPage.this.fHunkViewer.setInput(null);

-					}

-				}

-			}

-		);

-		

-		// creating tree's content

-		buildTree();

-

-		// WorkbenchHelp.setHelp(composite, new DialogPageContextComputer(this, PATCH_HELP_CONTEXT_ID));								

-	}

-	

-	/**

-	 *	Create the group for setting various patch options

-	 */

-	private void buildPatchOptionsGroup(Composite parent) {

-				

-		final Patcher patcher= fPatchWizard.getPatcher();

-		

-		Group group= new Group(parent, SWT.NONE);

-		group.setText(PatchMessages.getString("PreviewPatchPage.PatchOptions.title")); //$NON-NLS-1$

-		GridLayout layout= new GridLayout();

-		layout.numColumns= 5;

-		group.setLayout(layout);

-		group.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));

-		//fPatchFileGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

-	

-		// 1st row

-		new Label(group, SWT.NONE).setText(PatchMessages.getString("PreviewPatchPage.IgnoreSegments.text")); //$NON-NLS-1$

-

-		fStripPrefixSegments= new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.SIMPLE);

-		int prefixCnt= patcher.getStripPrefixSegments();

-		String prefix= Integer.toString(prefixCnt);

-		fStripPrefixSegments.add(prefix);

-		fStripPrefixSegments.setText(prefix);

-		

-		addSpacer(group);

-		

-		fReversePatchButton= new Button(group, SWT.CHECK);

-		fReversePatchButton.setText(PatchMessages.getString("PreviewPatchPage.ReversePatch.text")); //$NON-NLS-1$

-		

-		addSpacer(group);

-		

-		// 2nd row

-		Label l= new Label(group, SWT.NONE);

-		l.setText(PatchMessages.getString("PreviewPatchPage.FuzzFactor.text")); //$NON-NLS-1$

-		l.setToolTipText(PatchMessages.getString("PreviewPatchPage.FuzzFactor.tooltip")); //$NON-NLS-1$

-		fFuzzField= new Text(group, SWT.BORDER);

-		fFuzzField.setText("2"); //$NON-NLS-1$

-		GridData gd2= new GridData(GridData.HORIZONTAL_ALIGN_CENTER);

-		gd2.widthHint= 30;

-		fFuzzField.setLayoutData(gd2);

-

-		addSpacer(group);

-		

-		fIgnoreWhitespaceButton= new Button(group, SWT.CHECK);

-		fIgnoreWhitespaceButton.setText(PatchMessages.getString("PreviewPatchPage.IgnoreWhitespace.text")); //$NON-NLS-1$

-		

-		addSpacer(group);

-				

-		// register listeners

-			

-		if (fStripPrefixSegments != null) 

-			fStripPrefixSegments.addSelectionListener(

-				new SelectionAdapter() {

-					public void widgetSelected(SelectionEvent e) {

-						if (patcher.setStripPrefixSegments(getStripPrefixSegments()))

-							updateTree();

-					}

-				}

-			);

-		fReversePatchButton.addSelectionListener(

-			new SelectionAdapter() {

-				public void widgetSelected(SelectionEvent e) {

-					if (patcher.setReversed(fReversePatchButton.getSelection()))

-						updateTree();

-				}

-			}

-		);

-		fIgnoreWhitespaceButton.addSelectionListener(

-			new SelectionAdapter() {

-				public void widgetSelected(SelectionEvent e) {

-					if (patcher.setIgnoreWhitespace(fIgnoreWhitespaceButton.getSelection()))

-						updateTree();

-				}

-			}

-		);

-		

-		fFuzzField.addModifyListener(

-			new ModifyListener() {

-				public void modifyText(ModifyEvent e) {

-					if (patcher.setFuzz(getFuzzFactor()))

-						updateTree();

-				}

-			}

-		);

-	}

-		

-	ICompareInput createInput(Hunk hunk) {

-		

-		String[] lines= hunk.fLines;

-		StringBuffer left= new StringBuffer();

-		StringBuffer right= new StringBuffer();

-		

-		for (int i= 0; i < lines.length; i++) {

-			String line= lines[i];

-			String rest= line.substring(1);

-			switch (line.charAt(0)) {

-			case ' ':

-				left.append(rest);

-				right.append(rest);

-				break;

-			case '-':

-				left.append(rest);

-				break;

-			case '+':

-				right.append(rest);

-				break;

-			}

-		}

-		

-		Diff diff= hunk.fParent;

-		IPath path= diff.getPath();

-		String type= path.getFileExtension();

-		

-		return new DiffNode(new HunkInput(type, left.toString()), new HunkInput(type, right.toString()));

-	}		

-	

-	/**

-	 * Builds a tree from list of Diffs.

-	 * As a side effect it calculates the maximum number of segments

-	 * in all paths.

-	 */

-	private void buildTree() {

-		setPageComplete(true);

-		if (fTree != null && !fTree.isDisposed()) {

-			fTree.removeAll();

-			fHunkViewer.setInput(null);

-			

-			int length= 99;

-			

-			Diff[] diffs= fPatchWizard.getPatcher().getDiffs();			

-			if (diffs != null) {

-				for (int i= 0; i < diffs.length; i++) {

-					Diff diff= diffs[i];

-					TreeItem d= new TreeItem(fTree, SWT.NULL);

-					d.setData(diff);

-					d.setImage(getImage(diff));

-					

-					if (diff.fOldPath != null)

-						length= Math.min(length, diff.fOldPath.segmentCount());

-					if (diff.fNewPath != null)

-						length= Math.min(length, diff.fNewPath.segmentCount());

-					

-					java.util.List hunks= diff.fHunks;

-					java.util.Iterator iter= hunks.iterator();

-					while (iter.hasNext()) {

-						Hunk hunk= (Hunk) iter.next();

-						TreeItem h= new TreeItem(d, SWT.NULL);

-						h.setData(hunk);

-						h.setText(hunk.getDescription());

-					}

-				}

-			}

-			if (fStripPrefixSegments != null && length != 99)

-				for (int i= 1; i < length; i++)

-					fStripPrefixSegments.add(Integer.toString(i));

-		}

-		

-		updateTree();

-	}

-	

-	private IFile existsInSelection(IPath path) {

-		IResource target= fPatchWizard.getTarget();

-		if (target instanceof IFile) {

-			IFile file= (IFile) target;

-			if (matches(file.getFullPath(), path))

-				return file;

-		} else if (target instanceof IContainer) {

-			IContainer c= (IContainer) target;

-			if (c.exists(path))

-				return c.getFile(path);

-		}

-		return null;

-	}

-	

-	/**

-	 * Returns true if path completely matches the end of fullpath

-	 */

-	private boolean matches(IPath fullpath, IPath path) {

-		

-		for (IPath p= fullpath; path.segmentCount() <= p.segmentCount();

-												p= p.removeFirstSegments(1)) {

-			if (p.equals(path))

-				return true;

-		}

-		return false;

-	}

-	

-	/**

-	 * Updates label and checked state of tree items.

-	 */

-	private void updateTree() {

-		if (fTree == null || fTree.isDisposed())

-			return;

-		int strip= getStripPrefixSegments();

-		TreeItem[] children= fTree.getItems();

-		for (int i= 0; i < children.length; i++) {

-			TreeItem item= children[i];

-			Diff diff= (Diff) item.getData();

-			diff.fMatches= false;

-			String error= null;

-			

-			boolean create= false;	

-			IFile file= null;

-			if (diff.getType() == Differencer.ADDITION) {

-				IPath p= diff.fNewPath;

-				if (strip > 0 && strip < p.segmentCount())

-					p= p.removeFirstSegments(strip);

-				file= existsInSelection(p);

-				if (file == null) {

-					diff.fMatches= true;

-				} else {

-					// file already exists

-					error= PatchMessages.getString("PreviewPatchPage.FileExists.error"); //$NON-NLS-1$

-				}

-				create= true;

-			} else {

-				IPath p= diff.fOldPath;

-				if (strip > 0 && strip < p.segmentCount())

-					p= p.removeFirstSegments(strip);

-				file= existsInSelection(p);

-				diff.fMatches= false;

-				if (file != null) {

-					if (file.isReadOnly()) {

-						// file is readonly

-						error= PatchMessages.getString("PreviewPatchPage.FileIsReadOnly.error"); //$NON-NLS-1$

-						file= null;

-					} else {

-						diff.fMatches= true;

-					}

-				} else {

-					// file doesn't exist

-					error= PatchMessages.getString("PreviewPatchPage.FileDoesNotExist.error"); //$NON-NLS-1$

-				}

-			}

-			

-			ArrayList failedHunks= new ArrayList();

-			fPatchWizard.getPatcher().apply(diff, file, create, failedHunks);

-

-			if (failedHunks.size() > 0)

-				diff.fRejected= fPatchWizard.getPatcher().getRejected(failedHunks);

-			

-			int checkedSubs= 0;	// counts checked hunk items

-			TreeItem[] hunkItems= item.getItems();

-			for (int h= 0; h < hunkItems.length; h++) {

-				Hunk hunk= (Hunk) hunkItems[h].getData();

-				boolean failed= failedHunks.contains(hunk);

-				String hunkError= null;

-				if (failed)

-					hunkError= PatchMessages.getString("PreviewPatchPage.NoMatch.error"); //$NON-NLS-1$

-

-				boolean check= !failed;

-				hunkItems[h].setChecked(check);

-				if (check)

-					checkedSubs++;

-

-				String hunkLabel= hunk.getDescription();

-				if (hunkError != null)

-					hunkLabel+= "   " + hunkError; //$NON-NLS-1$

-				hunkItems[h].setText(hunkLabel);

-				hunkItems[h].setImage(getImage(hunk));

-			}

-			

-			String label= diff.getDescription(strip);

-			if (error != null)

-				label+= "    " + error; //$NON-NLS-1$

-			item.setText(label);

-			item.setImage(getImage(diff));

-			item.setChecked(checkedSubs > 0);

-			boolean gray= (checkedSubs > 0 &&  checkedSubs < hunkItems.length);

-			item.setGrayed(gray);

-			item.setExpanded(gray);

-		}

-		setPageComplete(updateModel());

-	}

-	

-	/**

-	 * Updates the gray state of the given diff and the checked state of its children.

-	 */

-	private void updateCheckedState(TreeItem diffItem) {

-		boolean checked= diffItem.getChecked();

-		// check whether we can enable all hunks

-		TreeItem[] hunks= diffItem.getItems();

-		int checkedCount= 0;

-		for (int i= 0; i < hunks.length; i++) {

-			Hunk hunk= (Hunk) hunks[i].getData();

-			if (checked) {

-				if (hunk.fMatches) {

-					hunks[i].setChecked(true);

-					checkedCount++;

-				}

-			} else {

-				hunks[i].setChecked(false);

-			}

-		}

-		diffItem.setGrayed(checkedCount > 0 && checkedCount < hunks.length);

-		diffItem.setChecked(checkedCount > 0);

-		

-		setPageComplete(updateModel());

-	}

-	

-	/**

-	 * Updates the gray state of the given items parent.

-	 */

-	private void updateGrayedState(TreeItem hunk) {

-		TreeItem diff= hunk.getParentItem();

-		TreeItem[] hunks= diff.getItems();

-		int checked= 0;

-		for (int i= 0; i < hunks.length; i++)

-			if (hunks[i].getChecked())

-				checked++;

-		diff.setChecked(checked > 0);

-		diff.setGrayed(checked > 0 && checked < hunks.length);

-		

-		setPageComplete(updateModel());

-	}

-	

-	private void addSpacer(Composite parent) {

-		Label label= new Label(parent, SWT.NONE);

-		GridData gd= new GridData(GridData.FILL_HORIZONTAL);

-		gd.widthHint= 20;

-		label.setLayoutData(gd);

-	}

-	

-	private int getStripPrefixSegments() {

-		int stripPrefixSegments= 0;

-		if (fStripPrefixSegments != null) {

-			String s= fStripPrefixSegments.getText();

-			try {

-				stripPrefixSegments= Integer.parseInt(s);

-			} catch(NumberFormatException ex) {

-			}

-		}

-		return stripPrefixSegments;

-	}

-	

-	private int getFuzzFactor() {

-		int fuzzFactor= 0;

-		if (fFuzzField != null) {

-			String s= fFuzzField.getText();

-			try {

-				fuzzFactor= Integer.parseInt(s);

-			} catch(NumberFormatException ex) {

-			}

-		}

-		return fuzzFactor;

-	}

-	

-	public boolean updateModel() {

-		boolean atLeastOneIsEnabled= false;

-		if (fTree != null && !fTree.isDisposed()) {

-			TreeItem [] diffItems= fTree.getItems();

-			for (int i= 0; i < diffItems.length; i++) {

-				TreeItem diffItem= diffItems[i];

-				Object data= diffItem.getData();

-				if (data instanceof Diff) {

-					Diff diff= (Diff) data;

-					boolean b= diffItem.getChecked();

-					diff.setEnabled(b);

-					if (b) {

-						TreeItem [] hunkItems= diffItem.getItems();

-						for (int j= 0; j < hunkItems.length; j++) {

-							TreeItem hunkItem= hunkItems[j];

-							data= hunkItem.getData();

-							if (data instanceof Hunk) {

-								Hunk hunk= (Hunk) data;

-								b= hunkItem.getChecked();

-								hunk.setEnabled(b);

-								if (b) {

-									atLeastOneIsEnabled= true;

-								}

-							}

-						}

-					}

-				}

-			}

-		}

-		return atLeastOneIsEnabled;

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewAncestor.txt b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewAncestor.txt
deleted file mode 100644
index 8f84839..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewAncestor.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-a

-b

-c

-d

-e

-f

-g

-h

-i

-j
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewLeft.txt b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewLeft.txt
deleted file mode 100644
index e24e0aa..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewLeft.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-a

-x

-c

-z

-e

-f

-g

-h

-i

-j
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewRight.txt b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewRight.txt
deleted file mode 100644
index b45f220..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/previewRight.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-a

-y

-c

-z

-e

-f

-g

-h

-i

-j
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/package.html b/bundles/org.eclipse.compare/compare/org/eclipse/compare/package.html
deleted file mode 100644
index fb0ad62..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/package.html
+++ /dev/null
@@ -1,50 +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>

-Provides support for performing structural and textual

-compare operations on arbitrary data and displaying the results.

-<h2>

-Package Specification</h2>

-The class <tt>CompareUI</tt> 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>A compare operation must be implemented as a subclass of <tt>CompareEditorInput</tt>.

-A <tt>CompareEditorInput</tt> runs a (potentially lengthy) compare operation

-under progress monitor control, creates a UI for drilling-down into the

-compare results, tracks the dirty state of the result in case of merge,

-and saves any changes that occured during a merge.

-<p>An instance of <tt>CompareConfiguration</tt> configures various UI aspects

-of compare/merge viewers like title labels and images, or whether a side

-of a merge viewer is editable. It is passed to the <tt>CompareEditorInput</tt>

-on creation.

-<p>When implementing a compare operation clients have to provide a tree

-of <tt>IStructureComparator</tt> (see package org.eclipse.compare.structuremergeviewer)

-and <tt>IStreamContentAccessor</tt> that can be passed as the input to

-the differencing engine (org.eclipse.compare.structuremergeviewer.Differencer).

-A <tt>ResourceNode</tt> is a convenience class that implements both interfaces

-for Eclipse workbench resources (org.eclipse.core.resources.IResource).

-It can be used without modification as the input to the differencing engine.

-<p>The <tt>EditionSelectionDialog</tt> is a simple selection dialog where

-one input element can be compared against a list of historic variants (<i>editions</i>)

-of the same input element. The dialog can be used to implement functions

-like <i>"Replace with Version"</i> or

-<br><i>"Replace with Edition"</i> on workbench 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 <i>path</i>. In this

-case the dialog compares only the subsection (as specified by the path)

-with the corresponding subsection in the list of editions. This functionality

-can be used to implement <i>"Replace with Method Edition"</i> for the Java

-language.

-<p>The <tt>EditionSelectionDialog</tt> requires that the editions implement

-the <tt>IStreamContentAccessor</tt> and <tt>IModificationDate</tt> interfaces.

-The <tt>HistoryItem</tt> is a convenience class that implements these interfaces

-for <tt>IFileState</tt> objects.

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/DifferencesIterator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/DifferencesIterator.java
deleted file mode 100644
index 4fa96b7..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/DifferencesIterator.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.rangedifferencer;

-

-import java.util.ArrayList;

-import java.util.Iterator;

-import java.util.List;

-

-/**

- * A custom iterator to iterate over a List of <code>RangeDifferences</code>.

- * It is used internally by the <code>RangeDifferencer</code>.

- */

-/* package */ class DifferencesIterator {

-

-	List fRange;

-	int fIndex;

-	RangeDifference[] fArray;	

-	RangeDifference fDifference;

-	

-	/**

-	 * Creates a differences iterator on an array of <code>RangeDifference</code>s.

-	 */

-	DifferencesIterator(RangeDifference[] differenceRanges) {

-		

-		fArray= differenceRanges;

-		fIndex= 0;

-		fRange= new ArrayList();

-		if (fIndex < fArray.length)

-			fDifference= fArray[fIndex++];

-		else

-			fDifference= null;

-	}

-

-	/**

-	  * Returns the number of RangeDifferences

-	  */

-	int getCount() {

-		return fRange.size();

-	}

-

-	/**

-	 * Appends the edit to its list and moves to the next <code>RangeDifference</code>.

-	 */

-	void next() {

-		fRange.add(fDifference);

-		if (fDifference != null) {

-			if (fIndex < fArray.length)

-				fDifference= fArray[fIndex++];

-			else

-				fDifference= null;

-		}

-	}

-

-	/**

-	 * Difference iterators are used in pairs.

-	 * This method returns the other iterator.

-	 */

-	DifferencesIterator other(DifferencesIterator right, DifferencesIterator left) {

-		if (this == right)

-			return left;

-		return right;

-	}

-

-	/**

-	  * Removes all <code>RangeDifference</code>s

-	  */

-	void removeAll() {

-		fRange.clear();

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/IRangeComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/IRangeComparator.java
deleted file mode 100644
index ce01dc1..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/IRangeComparator.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.rangedifferencer;

-

-/**

- * For breaking an object to compare into a sequence of comparable entities.

- * <p>

- * It is used by <code>RangeDifferencer</code> to find longest sequences of

- * matching and non-matching ranges.

- * <p>

- * For example, to compare two text documents and find longest common sequences

- * of matching and non-matching lines, the implementation must break the document

- * into lines. <code>getRangeCount</code> would return the number of lines in the 

- * document, and <code>rangesEqual</code> would compare a specified line given 

- * with one in another <code>IRangeComparator</code>.

- * </p>

- * <p>

- * Clients should implement this interface; there is no standard implementation.

- * </p>

- */

-public interface IRangeComparator {

-

-	/**

-	 * Returns the number of comparable entities.

-	 *

-	 * @return the number of comparable entities 

-	 */

-	int getRangeCount();

-

-	/**

-	 * Returns whether the comparable entity given by the first index

-	 * matches an entity specified by the other <code>IRangeComparator</code> and index.

-	 *

-	 * @param thisIndex the index of the comparable entity within this <code>IRangeComparator</code>

-	 * @param other the IRangeComparator to compare this with

-	 * @param otherIndex the index of the comparable entity within the other <code>IRangeComparator</code>

-	 * @return <code>true</code> if the comparable entities are equal

-	 */

-	boolean rangesEqual(int thisIndex, IRangeComparator other, int otherIndex);

-

-	/**

-	 * Returns whether a comparison should be skipped because it would be too costly (or lengthy).

-	 * 

-	 * @param length a number on which to base the decision whether to return

-	 * 	<code>true</code> or <code>false</code>

-	 * @param maxLength another number on which to base the decision whether to return

-	 *	<code>true</code> or <code>false</code>

-	 * @param other the other <code>IRangeComparator</code> to compare with

-	 * @return <code>true</code> to avoid a too lengthy range comparison

-	 */

-	boolean skipRangeComparison(int length, int maxLength, IRangeComparator other);

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/LinkedRangeDifference.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/LinkedRangeDifference.java
deleted file mode 100644
index 9374957..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/LinkedRangeDifference.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.rangedifferencer;

-

-/* package */ class LinkedRangeDifference extends RangeDifference {

-

-	static final int INSERT= 0;

-	static final int DELETE= 1;

-	static final int CHANGE= 2;

-	static final int ERROR= 3;

-

-	LinkedRangeDifference fNext;

-

-	/**

-	 * Creates a LinkedRangeDifference an initializes it to the error state

-	 */

-	LinkedRangeDifference() {

-		super(ERROR);

-		fNext= null;

-	}

-

-	/**

-	 * Constructs and links a LinkeRangeDifference to another LinkedRangeDifference

-	 */

-	LinkedRangeDifference(LinkedRangeDifference next, int operation) {

-		super(operation);

-		fNext= next;

-	}

-

-	/**

-	 * Follows the next link

-	 */

-	LinkedRangeDifference getNext() {

-		return fNext;

-	}

-

-	boolean isDelete() {

-		return kind() == DELETE;

-	}

-

-	boolean isInsert() {

-		return kind() == INSERT;

-	}

-

-	/**

-	 * Sets the next link of this LinkedRangeDifference

-	 */

-	void setNext(LinkedRangeDifference next) {

-		fNext= next;

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifference.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifference.java
deleted file mode 100644
index 2c4d62b..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifference.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.rangedifferencer;

-

-import org.eclipse.jface.*;

-import org.eclipse.jface.util.Assert;

-

-/**

- * Description of a change between two or three ranges of comparable entities.

- * <p>

- * <code>RangeDifference</code> objects are the elements of a compare result returned from

- * the <code>RangeDifferencer</code> <code>find* </code> methods.

- * Clients use these objects as they are returned from the differencer.

- * This class is not intended to be instantiated or subclassed.

- * <p>

- * Note: A range in the <code>RangeDifference</code> object is given as a start index

- * and length in terms of comparable entities. However, these entity indices and counts

- * are not necessarily character positions. For example, if an entity represents a line

- * in a document, the start index would be a line number and the count would be in lines.

- * </p>

- *

- * @see RangeDifferencer

- */

-public class RangeDifference {

-

-	/** Two-way change constant indicating no change. */

-	public final static int NOCHANGE= 0;

-	/** Two-way change constant indicating two-way change (same as <code>RIGHT</code>) */

-	public final static int CHANGE= 2;

-

-	/** Three-way change constant indicating a change in both right and left. */

-	public final static int CONFLICT= 1;

-	/** Three-way change constant indicating a change in right. */

-	public final static int RIGHT= 2;

-	/** Three-way change constant indicating a change in left. */

-	public final static int LEFT= 3;

-	/**

-	 * Three-way change constant indicating the same change in both right and left,

-	 * that is only the ancestor is different.

-	 */

-	public final static int ANCESTOR= 4;

-	

-	/** Constant indicating an unknown change kind. */

-	public final static int ERROR= 5;

-

-	/** the kind of change: NOCHANGE, CHANGE, LEFT, RIGHT, ANCESTOR, CONFLICT, ERROR */

-	int fKind;

-

-	int fLeftStart;

-	int fLeftLength;

-	int fRightStart;

-	int fRightLength;

-	int lAncestorStart;

-	int lAncestorLength;

-	

-	/**

-	 * Creates a new range difference with the given change kind.

-	 *

-	 * @param changeKind the kind of change

-	 */

-	/* package */ RangeDifference(int changeKind) {

-		fKind= changeKind;

-	}

-

-	/**

-	 * Creates a new <code>RangeDifference</code> with the given change kind

-	 * and left and right ranges.

-	 *

-	 * @param changeKind the kind of change

-	 * @param rightStart start index of entity on right side

-	 * @param rightLength number of entities on right side

-	 * @param leftStart start index of entity on left side

-	 * @param leftLength number of entities on left side

-	 */

-	/* package */ RangeDifference(int kind, int rightStart, int rightLength, int leftStart, int leftLength) {

-		fKind= kind;

-		fRightStart= rightStart;

-		fRightLength= rightLength;

-		fLeftStart= leftStart;

-		fLeftLength= leftLength;

-	}

-

-	/**

-	 * Creates a new <code>RangeDifference</code> with the given change kind

-	 * and left, right, and ancestor ranges.

-	 *

-	 * @param changeKind the kind of change

-	 * @param rightStart start index of entity on right side

-	 * @param rightLength number of entities on right side

-	 * @param leftStart start index of entity on left side

-	 * @param leftLength number of entities on left side

-	 * @param ancestorStart start index of entity on ancestor side

-	 * @param ancestorLength number of entities on ancestor side

-	 */

-	/* package */ RangeDifference(int kind, int rightStart, int rightLength, int leftStart, int leftLength,

-									int ancestorStart, int ancestorLength) {

-		this(kind, rightStart, rightLength, leftStart, leftLength);

-		lAncestorStart= ancestorStart;

-		lAncestorLength= ancestorLength;

-	}

-

-	/**

-	 * Returns the kind of difference.

-	 *

-	 * @return the kind of difference, one of

-	 * <code>NOCHANGE</code>, <code>CHANGE</code>, <code>LEFT</code>, <code>RIGHT</code>,

-	 * <code>ANCESTOR</code>, <code>CONFLICT</code>, <code>ERROR</code>

-	 */

-	public int kind() {

-		return fKind;

-	}

-

-	/**

-	 * Returns the start index of the entity range on the ancestor side.

-	 *

-	 * @return the start index of the entity range on the ancestor side

-	 */

-	public int ancestorStart() {

-		return lAncestorStart;

-	}

-

-	/**

-	 * Returns the number of entities on the ancestor side.

-	 *

-	 * @return the number of entities on the ancestor side

-	 */

-	public int ancestorLength() {

-		return lAncestorLength;

-	}

-

-	/**

-	 * Returns the end index of the entity range on the ancestor side.

-	 *

-	 * @return the end index of the entity range on the ancestor side

-	 */

-	public int ancestorEnd() {

-		return lAncestorStart + lAncestorLength;

-	}

-

-	/**

-	 * Returns the start index of the entity range on the right side.

-	 *

-	 * @return the start index of the entity range on the right side

-	 */

-	public int rightStart() {

-		return fRightStart;

-	}

-

-	/**

-	 * Returns the number of entities on the right side.

-	 *

-	 * @return the number of entities on the right side

-	 */

-	public int rightLength() {

-		return fRightLength;

-	}

-

-	/**

-	 * Returns the end index of the entity range on the right side.

-	 *

-	 * @return the end index of the entity range on the right side

-	 */

-	public int rightEnd() {

-		return fRightStart + fRightLength;

-	}

-

-	/**

-	 * Returns the start index of the entity range on the left side.

-	 *

-	 * @return the start index of the entity range on the left side

-	 */

-	public int leftStart() {

-		return fLeftStart;

-	}

-

-	/**

-	 * Returns the number of entities on the left side.

-	 *

-	 * @return the number of entities on the left side

-	 */

-	public int leftLength() {

-		return fLeftLength;

-	}

-

-	/**

-	 * Returns the end index of the entity range on the left side.

-	 *

-	 * @return the end index of the entity range on the left side

-	 */

-	public int leftEnd() {

-		return fLeftStart + fLeftLength;

-	}

-

-	/**

-	 * Returns the maximum number of entities in the left, right, and ancestor sides of this range.

-	 *

-	 * @return the maximum number of entities in the left, right, and ancestor sides of this range

-	 */

-	public int maxLength() {

-		return Math.max(fRightLength, Math.max(fLeftLength, lAncestorLength));

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifferencer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifferencer.java
deleted file mode 100644
index 43b8808..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifferencer.java
+++ /dev/null
@@ -1,532 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.rangedifferencer;

-

-import java.util.*;

-

-import org.eclipse.jface.util.Assert;

-

-import org.eclipse.core.runtime.IProgressMonitor;

-

-/**

- * A <code>RangeDifferencer</code> finds the differences between two or three <code>IRangeComparator</code>s.

- * <p>

- * To use the differencer, clients provide an <code>IRangeComparator</code>

- * that breaks their input data into a sequence of comparable entities. The differencer

- * returns the differences among these sequences as an array of <code>RangeDifference</code> objects

- * (<code>findDifferences</code> methods).

- * Every <code>RangeDifference</code> represents a single kind of difference

- * and the corresponding ranges of the underlying comparable entities in the

- * left, right, and optionally ancestor sides.

- * <p>

- * Alternatively, the <code>findRanges</code> methods not only return objects for

- * the differing ranges but for non-differing ranges too.

- * <p>

- * The algorithm used is an objectified version of one described in:

- * <it>A File Comparison Program,</it> by Webb Miller and Eugene W. Myers, 

- * Software Practice and Experience, Vol. 15, Nov. 1985.

- *

- * @see IRangeComparator

- * @see RangeDifference

- */

-public final class RangeDifferencer {

-	

-	private static final RangeDifference[] EMPTY_RESULT= new RangeDifference[0];

-	

-	/* (non Javadoc)

-	 * Non instantiatiable!

-	 */

-	private RangeDifferencer() { 

-	}

-	

-	/**

-	 * Finds the differences between two <code>IRangeComparator</code>s.

-	 * The differences are returned as an array of <code>RangeDifference</code>s.

-	 * If no differences are detected an empty array is returned.

-	 * 

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences, or an empty array if no differences were found

-	 */

-	public static RangeDifference[] findDifferences(IRangeComparator left, IRangeComparator right) {

-		return findDifferences((IProgressMonitor)null, left, right);

-	}

-	

-	/**

-	 * Finds the differences between two <code>IRangeComparator</code>s.

-	 * The differences are returned as an array of <code>RangeDifference</code>s.

-	 * If no differences are detected an empty array is returned.

-	 * 

-	 * @param pm if not <code>null</code> used to report progress

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences, or an empty array if no differences were found

-	 */

-	public static RangeDifference[] findDifferences(IProgressMonitor pm, IRangeComparator left, IRangeComparator right) {

-

-		// assert that both IRangeComparators are of the same class

-		Assert.isTrue(right.getClass().equals(left.getClass()));

-

-		int rightSize= right.getRangeCount();

-		int leftSize= left.getRangeCount();

-		//

-		// Differences matrix:

-		// only the last d of each diagonal is stored, i.e., lastDiagonal[k] = row of d    

-		//

-		int diagLen= 2 * Math.max(rightSize, leftSize); // bound on the size of edit script

-		int maxDiagonal= diagLen;

-		int lastDiagonal[]= new int[diagLen + 1]; // the row containing the last d

-		// on diagonal k (lastDiagonal[k] = row)

-		int origin= diagLen / 2; // origin of diagonal 0

-

-		// script corresponding to d[k] 

-		LinkedRangeDifference script[]= new LinkedRangeDifference[diagLen + 1];

-		int row, col;

-

-		// find common prefix

-		for (row= 0; row < rightSize && row < leftSize && rangesEqual(right, row, left, row) == true; ++row)

-			;

-

-		lastDiagonal[origin]= row;

-		script[origin]= null;

-		int lower= (row == rightSize) ? origin + 1 : origin - 1;

-		int upper= (row == leftSize) ? origin - 1 : origin + 1;

-

-		if (lower > upper)

-			return EMPTY_RESULT;

-			

-		//System.out.println("findDifferences: " + maxDiagonal + " " + lower + " " + upper);

-		

-		// for each value of the edit distance

-		for (int d= 1; d <= maxDiagonal; ++d) { // d is the current edit distance

-			

-			if (pm != null)

-				pm.worked(1);

-

-			if (right.skipRangeComparison(d, maxDiagonal, left))

-				return EMPTY_RESULT; // should be something we already found

-

-			// for each relevant diagonal (-d, -d+2 ..., d-2, d)

-			for (int k= lower; k <= upper; k += 2) { // k is the current diagonal

-				LinkedRangeDifference edit;

-

-				if (pm != null && pm.isCanceled())

-					return EMPTY_RESULT;

-

-				if (k == origin - d || k != origin + d && lastDiagonal[k + 1] >= lastDiagonal[k - 1]) {

-					//

-					// move down

-					//

-					row= lastDiagonal[k + 1] + 1;

-					edit= new LinkedRangeDifference(script[k + 1], LinkedRangeDifference.DELETE);

-				} else {

-					//

-					// move right

-					//

-					row= lastDiagonal[k - 1];

-					edit= new LinkedRangeDifference(script[k - 1], LinkedRangeDifference.INSERT);

-				}

-				col= row + k - origin;

-				edit.fRightStart= row;

-				edit.fLeftStart= col;

-				Assert.isTrue(k >= 0 && k <= maxDiagonal);

-				script[k]= edit;

-

-				// slide down the diagonal as far as possible 

-				while (row < rightSize && col < leftSize && rangesEqual(right, row, left, col) == true) {

-					++row;

-					++col;

-				}

-

-				Assert.isTrue(k >= 0 && k <= maxDiagonal); // Unreasonable value for diagonal index

-				lastDiagonal[k]= row;

-

-				if (row == rightSize && col == leftSize) {

-					//showScript(script[k], right, left);

-					return createDifferencesRanges(script[k]);

-				}

-				if (row == rightSize)

-					lower= k + 2;

-				if (col == leftSize)

-					upper= k - 2;

-			}

-			--lower;

-			++upper;

-		}

-		// too many differences

-		Assert.isTrue(false);

-		return null;

-	}

-

-	/**

-	 * Finds the differences among three <code>IRangeComparator</code>s.

-	 * The differences are returned as a list of <code>RangeDifference</code>s.

-	 * If no differences are detected an empty list is returned.

-	 * If the ancestor range comparator is <code>null</code>, a two-way

-	 * comparison is performed.

-	 * 

-	 * @param ancestor the ancestor range comparator or <code>null</code>

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences, or an empty array if no differences were found

-	 */

-	public static RangeDifference[] findDifferences(IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) {

-		return findDifferences(null, ancestor, left, right);

-	}

-	

-	/**

-	 * Finds the differences among three <code>IRangeComparator</code>s.

-	 * The differences are returned as a list of <code>RangeDifference</code>s.

-	 * If no differences are detected an empty list is returned.

-	 * If the ancestor range comparator is <code>null</code>, a two-way

-	 * comparison is performed.

-	 * 

-	 * @param pm if not <code>null</code> used to report progress

-	 * @param ancestor the ancestor range comparator or <code>null</code>

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences, or an empty array if no differences were found

-	 */

-	public static RangeDifference[] findDifferences(IProgressMonitor pm, IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) {

-

-		if (ancestor == null)

-			return findDifferences(pm, left, right);

-

-		RangeDifference[] leftAncestorScript= null;

-		RangeDifference[] rightAncestorScript= findDifferences(pm, ancestor, right);

-		if (rightAncestorScript != null)

-			leftAncestorScript= findDifferences(pm, ancestor, left);

-		if (rightAncestorScript == null || leftAncestorScript == null)

-			return null;

-

-		DifferencesIterator myIter= new DifferencesIterator(rightAncestorScript);

-		DifferencesIterator yourIter= new DifferencesIterator(leftAncestorScript);

-

-		List diff3= new ArrayList();

-		diff3.add(new RangeDifference(RangeDifference.ERROR)); // add a sentinel

-

-		int changeRangeStart= 0;

-		int changeRangeEnd= 0;

-		//

-		// Combine the two two-way edit scripts into one

-		//

-		while (myIter.fDifference != null || yourIter.fDifference != null) {

-

-			DifferencesIterator startThread;

-			myIter.removeAll();

-			yourIter.removeAll();

-			//

-			// take the next diff that is closer to the start

-			//

-			if (myIter.fDifference == null)

-				startThread= yourIter;

-			else if (yourIter.fDifference == null)

-				startThread= myIter;

-			else { // not at end of both scripts take the lowest range

-				if (myIter.fDifference.fLeftStart <= yourIter.fDifference.fLeftStart) // 2 -> common (Ancestor) change range

-					startThread= myIter;

-				else

-					startThread= yourIter;

-			}

-			changeRangeStart= startThread.fDifference.fLeftStart;

-			changeRangeEnd= startThread.fDifference.leftEnd();

-

-			startThread.next();

-			//

-			// check for overlapping changes with other thread

-			// merge overlapping changes with this range

-			//

-			DifferencesIterator other= startThread.other(myIter, yourIter);

-			while (other.fDifference != null && other.fDifference.fLeftStart <= changeRangeEnd) {

-				int newMax= other.fDifference.leftEnd();

-				other.next();

-				if (newMax >= changeRangeEnd) {

-					changeRangeEnd= newMax;

-					other= other.other(myIter, yourIter);

-				}

-			}

-			diff3.add(createRangeDifference3(myIter, yourIter, diff3, right, left, changeRangeStart, changeRangeEnd));

-		}

-

-		// remove sentinel

-		diff3.remove(0);

-		return (RangeDifference[]) diff3.toArray(EMPTY_RESULT);

-	}

-

-	/**

-	 * Finds the differences among two <code>IRangeComparator</code>s.

-	 * In contrast to <code>findDifferences</code>, the result

-	 * contains <code>RangeDifference</code> elements for non-differing ranges too.

-	 * 

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences

-	 */

-	public static RangeDifference[] findRanges(IRangeComparator left, IRangeComparator right) {

-		return findRanges((IProgressMonitor)null, left, right);

-	}

-	

-	/**

-	 * Finds the differences among two <code>IRangeComparator</code>s.

-	 * In contrast to <code>findDifferences</code>, the result

-	 * contains <code>RangeDifference</code> elements for non-differing ranges too.

-	 * 

-	 * @param pm if not <code>null</code> used to report progress

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences

-	 */

-	public static RangeDifference[] findRanges(IProgressMonitor pm, IRangeComparator left, IRangeComparator right) {

-		RangeDifference[] in= findDifferences(pm, left, right);

-		List out= new ArrayList();

-

-		RangeDifference rd;

-

-		int mstart= 0;

-		int ystart= 0;

-

-		for (int i= 0; i < in.length; i++) {

-			RangeDifference es= in[i];

-

-			rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, es.rightStart() - mstart, ystart, es.leftStart() - ystart);

-			if (rd.maxLength() != 0)

-				out.add(rd);

-

-			out.add(es);

-

-			mstart= es.rightEnd();

-			ystart= es.leftEnd();

-		}

-		rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, right.getRangeCount() - mstart, ystart, left.getRangeCount() - ystart);

-		if (rd.maxLength() > 0)

-			out.add(rd);

-

-		return (RangeDifference[]) out.toArray(EMPTY_RESULT);

-	}

-

-	/**

-	 * Finds the differences among three <code>IRangeComparator</code>s.

-	 * In contrast to <code>findDifferences</code>, the result

-	 * contains <code>RangeDifference</code> elements for non-differing ranges too.

-	 * If the ancestor range comparator is <code>null</code>, a two-way

-	 * comparison is performed.

-	 * 

-	 * @param pm if not <code>null</code> used to report progress

-	 * @param ancestor the ancestor range comparator or <code>null</code>

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences

-	 */

-	public static RangeDifference[] findRanges(IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) {

-		return findRanges(null, ancestor, left, right);

-	}

-	

-	/**

-	 * Finds the differences among three <code>IRangeComparator</code>s.

-	 * In contrast to <code>findDifferences</code>, the result

-	 * contains <code>RangeDifference</code> elements for non-differing ranges too.

-	 * If the ancestor range comparator is <code>null</code>, a two-way

-	 * comparison is performed.

-	 * 

-	 * @param pm if not <code>null</code> used to report progress

-	 * @param ancestor the ancestor range comparator or <code>null</code>

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences

-	 */

-	public static RangeDifference[] findRanges(IProgressMonitor pm, IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) {

-

-		if (ancestor == null)

-			return findRanges(pm, left, right);

-

-		RangeDifference[] in= findDifferences(pm, ancestor, left, right);

-		List out= new ArrayList();

-

-		RangeDifference rd;

-

-		int mstart= 0;

-		int ystart= 0;

-		int astart= 0;

-

-		for (int i= 0; i < in.length; i++) {

-			RangeDifference es= (RangeDifference) in[i];

-

-			rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, es.rightStart() - mstart, ystart, es.leftStart() - ystart, astart, es.ancestorStart() - astart);

-			if (rd.maxLength() > 0)

-				out.add(rd);

-

-			out.add(es);

-

-			mstart= es.rightEnd();

-			ystart= es.leftEnd();

-			astart= es.ancestorEnd();

-		}

-		rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, right.getRangeCount() - mstart, ystart, left.getRangeCount() - ystart, astart, ancestor.getRangeCount() - astart);

-		if (rd.maxLength() > 0)

-			out.add(rd);

-

-		return (RangeDifference[]) out.toArray(EMPTY_RESULT);

-	}

-

-	//---- private methods

-

-	/**

-	 * Creates a Vector of DifferencesRanges out of the LinkedRangeDifference.

-	 * It coalesces adjacent changes.

-	 * In addition, indices are changed such that the ranges are 1) open, i.e,

-	 * the end of the range is not included, and 2) are zero based.

-	 */

-	private static RangeDifference[] createDifferencesRanges(LinkedRangeDifference start) {

-

-		LinkedRangeDifference ep= reverseDifferences(start);

-		ArrayList result= new ArrayList();

-		RangeDifference es= null;

-

-		while (ep != null) {

-			es= new RangeDifference(RangeDifference.CHANGE);

-

-			if (ep.isInsert()) {

-				es.fRightStart= ep.fRightStart + 1;

-				es.fLeftStart= ep.fLeftStart;

-				RangeDifference b= ep;

-				do {

-					ep= ep.getNext();

-					es.fLeftLength++;

-				} while (ep != null && ep.isInsert() && ep.fRightStart == b.fRightStart);

-			} else {

-				es.fRightStart= ep.fRightStart;

-				es.fLeftStart= ep.fLeftStart;

-

-				RangeDifference a= ep;

-				//

-				// deleted lines

-				//

-				do {

-					a= ep;

-					ep= ep.getNext();

-					es.fRightLength++;

-				} while (ep != null && ep.isDelete() && ep.fRightStart == a.fRightStart + 1);

-

-				boolean change= (ep != null && ep.isInsert() && ep.fRightStart == a.fRightStart);

-

-				if (change) {

-					RangeDifference b= ep;

-					//

-					// replacement lines

-					//

-					do {

-						ep= ep.getNext();

-						es.fLeftLength++;

-					} while (ep != null && ep.isInsert() && ep.fRightStart == b.fRightStart);

-				} else {

-					es.fLeftLength= 0;

-				}

-				es.fLeftStart++; // meaning of range changes from "insert after", to "replace with"

-

-			}

-			//

-			// the script commands are 1 based, subtract one to make them zero based

-			//

-			es.fRightStart--;

-			es.fLeftStart--;

-			result.add(es);

-		}

-		return (RangeDifference[]) result.toArray(EMPTY_RESULT);

-	}

-

-	/**

-	 * Creates a <code>RangeDifference3</code> given the

-	 * state of two DifferenceIterators.

-	 */

-	private static RangeDifference createRangeDifference3(

-		DifferencesIterator myIter, 

-		DifferencesIterator yourIter, 

-		List diff3, 

-		IRangeComparator right, 

-		IRangeComparator left, 

-		int changeRangeStart, 

-		int changeRangeEnd) {

-

-		int rightStart, rightEnd;

-		int leftStart, leftEnd;

-		int kind= RangeDifference.ERROR;

-		RangeDifference last= (RangeDifference) diff3.get(diff3.size() - 1);

-

-		Assert.isTrue((myIter.getCount() != 0 || yourIter.getCount() != 0));	// At least one range array must be non-empty

-		//

-		// find corresponding lines to fChangeRangeStart/End in right and left

-		//

-		if (myIter.getCount() == 0) { // only left changed

-			rightStart= changeRangeStart - last.ancestorEnd() + last.rightEnd();

-			rightEnd= changeRangeEnd - last.ancestorEnd() + last.rightEnd();

-			kind= RangeDifference.LEFT;

-		} else {

-			RangeDifference f= (RangeDifference) myIter.fRange.get(0);

-			RangeDifference l= (RangeDifference) myIter.fRange.get(myIter.fRange.size() - 1);

-			rightStart= changeRangeStart - f.fLeftStart + f.fRightStart;

-			rightEnd= changeRangeEnd - l.leftEnd() + l.rightEnd();

-		}

-

-		if (yourIter.getCount() == 0) { // only right changed

-			leftStart= changeRangeStart - last.ancestorEnd() + last.leftEnd();

-			leftEnd= changeRangeEnd - last.ancestorEnd() + last.leftEnd();

-			kind= RangeDifference.RIGHT;

-		} else {

-			RangeDifference f= (RangeDifference) yourIter.fRange.get(0);

-			RangeDifference l= (RangeDifference) yourIter.fRange.get(yourIter.fRange.size() - 1);

-			leftStart= changeRangeStart - f.fLeftStart + f.fRightStart;

-			leftEnd= changeRangeEnd - l.leftEnd() + l.rightEnd();

-		}

-

-		if (kind == RangeDifference.ERROR) { // overlapping change (conflict) -> compare the changed ranges

-			if (rangeSpansEqual(right, rightStart, rightEnd - rightStart, left, leftStart, leftEnd - leftStart))

-				kind= RangeDifference.ANCESTOR;

-			else

-				kind= RangeDifference.CONFLICT;

-		}

-		return new RangeDifference(kind, rightStart, rightEnd - rightStart, leftStart, leftEnd - leftStart, changeRangeStart, changeRangeEnd - changeRangeStart);

-	}

-

-	/**

-	 * Tests if two ranges are equal

-	 */

-	private static boolean rangesEqual(IRangeComparator a, int ai, IRangeComparator b, int bi) {

-		return a.rangesEqual(ai, b, bi);

-	}

-

-	/**

-	 * Tests whether <code>right</code> and <code>left</left> changed in the same way

-	 */

-	private static boolean rangeSpansEqual(IRangeComparator right, int rightStart, int rightLen, IRangeComparator left, int leftStart, int leftLen) {

-		if (rightLen == leftLen) {

-			int i= 0;

-			for (i= 0; i < rightLen; i++) {

-				if (!rangesEqual(right, rightStart + i, left, leftStart + i))

-					break;

-			}

-			if (i == rightLen)

-				return true;

-		}

-		return false;

-	}

-

-	/**

-	 * Reverses the range differences

-	 */

-	private static LinkedRangeDifference reverseDifferences(LinkedRangeDifference start) {

-		LinkedRangeDifference ep, behind, ahead;

-

-		ahead= start;

-		ep= null;

-		while (ahead != null) {

-			behind= ep;

-			ep= ahead;

-			ahead= ahead.getNext();

-			ep.setNext(behind);

-		}

-		return ep;

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/package.html b/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/package.html
deleted file mode 100644
index 2e4ffaf..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/package.html
+++ /dev/null
@@ -1,37 +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>

-Provides support for finding the differences between

-two or three sequences of comparable entities.

-<h2>

-Package Specification</h2>

-The class <tt>Differencer</tt> finds longest sequences of matching and

-non-matching comparable entities.

-<p>Clients must supply the input to the differencer as an implementation

-of the <tt>IRangeComparator</tt> interface.

-<br>An <tt>IRangeComparator</tt> breaks the input data into a sequence

-of entities and provides a method for comparing

-<br>one entity with the entity in another <tt>IRangeComparator</tt>.

-<br>For example, to compare two text documents and find longest common

-sequences

-<br>of matching and non-matching lines, the implementation of <tt>IRangeComparator

-</tt>must break the document

-<br>into lines and provide a method for testing whether two lines are considered

-equal.

-<p>The differencer returns the differences among these sequences as an

-array of <tt>RangeDifference</tt> objects.

-<br>Every single <tt>RangeDifference</tt> describes kind of difference

-(no change, change, addition, deletion)

-<br>and the corresponding ranges of the underlying comparable entities

-in the two or three inputs.

-<p>The algorithm used is an objectified version of one described in:

-<br><i>A File Comparison Program,</i> by Webb Miller and Eugene W. Myers,

-<br>Software Practice and Experience, Vol. 15, Nov. 1985.

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java
deleted file mode 100644
index f101c35..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import java.util.Iterator;

-import java.util.ArrayList;

-import org.eclipse.swt.graphics.Image;

-

-

-/**

- * The standard implementation of a diff container element.

- * <p>

- * This class may be instantiated, or further subclassed.

- * </p>

- */

-public abstract class DiffContainer extends DiffElement implements IDiffContainer {

-

-	private static IDiffElement[] fgEmptyArray= new IDiffElement[0];

-	private ArrayList fChildren;

-	

-	/**

-	 * Creates a new container with the specified kind under the given parent. 

-	 *

-	 * @param parent under which the new container is added as a child or <code>null</code>.

-	 * @param name of the container

-	 * @param kind of difference (defined in <code>Differencer</code>).

-	 */

-	public DiffContainer(IDiffContainer parent, int kind) {

-		super(parent, kind);

-	}

-	

-	/**

-	 * Tries to find the child with the given name.

-	 * Returns <code>null</code> if no such child exists.

-	 * 

-	 * @param name of the child to find

-	 * @return the first element with a matching name

-	 */

-	public IDiffElement findChild(String name) {

-		Object[] children= getChildren();

-		for (int i= 0; i < children.length; i++) {

-			IDiffElement child= (IDiffElement) children[i];

-			if (name.equals(child.getName()))

-				return child;

-		}

-		return null;

-	}

-

-	/* (non Javadoc)

-	 * see IDiffContainer.add

-	 */

-	public void add(IDiffElement diff) {

-		if (fChildren == null)

-			fChildren= new ArrayList();

-		fChildren.add(diff);

-		diff.setParent(this);

-	}

-

-	/**

-	 * Removes the given child from this container.

-	 * If the container becomes empty it is removed from its container.

-	 */

-	/* (non Javadoc)

-	 * see IDiffContainer.removeToRoot

-	 */

-	public void removeToRoot(IDiffElement child) {

-		if (fChildren != null) {

-			fChildren.remove(child);

-			child.setParent(null);

-			if (fChildren.size() == 0) {

-				IDiffContainer p= getParent();

-				if (p != null)

-					p.removeToRoot(this);

-			}

-		}

-	}

-

-	/**

-	 * Removes the given child (non-recursively) from this container.

-	 *

-	 * @param child to remove

-	 */

-	public void remove(IDiffElement child) {

-		if (fChildren != null) {

-			fChildren.remove(child);

-			child.setParent(null);

-		}

-	}

-	

-	/* (non Javadoc)

-	 * see IDiffContainer.hasChildren

-	 */

-	public boolean hasChildren() {

-		return fChildren != null && fChildren.size() > 0;

-	}

-

-	/* (non Javadoc)

-	 * see IDiffContainer.getChildren

-	 */

-	public IDiffElement[] getChildren() {

-		if (fChildren != null)

-			return (IDiffElement[]) fChildren.toArray(fgEmptyArray);

-		return fgEmptyArray;

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffElement.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffElement.java
deleted file mode 100644
index 7174a95..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffElement.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import org.eclipse.swt.graphics.Image;

-import org.eclipse.compare.ITypedElement;

-import org.eclipse.jface.util.Assert;

-

-/**

- * An abstract base implementation of the <code>IDiffElement</code> interface.

- * <p>

- * Subclasses may add behavior and state, and may override <code>getImage</code>

- * and <code>getType</code> to suit.

- * </p>

- */

-public abstract class DiffElement implements IDiffElement {

-

-	private int fKind;

-	private IDiffContainer fParent;

-

-	/**

-	 * Creates a new <code>DiffElement</code> as a child of the given parent.

-	 * If parent is not <code>null</code> the new element is added to the parent.

-	 *

-	 * @param parent the parent of this child; if not <code>null</code> this element is automatically added as a child

-	 * @param kind the kind of change

-	 */

-	public DiffElement(IDiffContainer parent, int kind) {

-		fParent= parent;

-		fKind= kind;

-		if (parent != null)

-			parent.add(this);

-	}

-

-	/**

-	 * The <code>DiffElement</code> implementation of this <code>ITypedInput</code>

-	 * method returns <code>null</code>. Subclasses may re-implement to provide

-	 * an image for this element.

-	 */

-	public Image getImage() {

-		return null;

-	}

-

-	/**

-	 * The <code>DiffElement</code> implementation of this <code>ITypedElement</code>

-	 * method returns <code>ITypedElement.UNKNOWN_TYPE</code>. Subclasses may

-	 * re-implement to provide a type for this element.

-	 */

-	public String getType() {

-		return ITypedElement.UNKNOWN_TYPE;

-	}

-

-	/**

-	 * Sets the kind of difference for this element.

-	 *

-	 * @param kind set the kind of difference this element represents

-	 * @see Differencer

-	 */

-	public void setKind(int kind) {

-		fKind= kind;

-	}

-

-	/* (non Javadoc)

-	 * see IDiffElement.getKind

-	 */

-	public int getKind() {

-		return fKind;

-	}

-

-	/* (non Javadoc)

-	 * see IDiffElement.getParent

-	 */

-	public IDiffContainer getParent() {

-		return fParent;

-	}

-

-	/* (non Javadoc)

-	 * see IDiffElement.setParent

-	 */

-	public void setParent(IDiffContainer parent) {

-		fParent= parent;

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java
deleted file mode 100644
index a2960a2..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import java.text.MessageFormat;

-

-import org.eclipse.swt.graphics.Image;

-

-import org.eclipse.jface.util.ListenerList;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.internal.Utilities;

-

-/**

- * Diff node are used as the compare result of the differencing engine.

- * Since it implements the <code>ITypedElement</code> and <code>ICompareInput</code>

- * interfaces it can be used directly to display the

- * compare result in a <code>DiffTreeViewer</code> and as the input to any other

- * compare/merge viewer.

- * <p>

- * <code>DiffNode</code>s are typically created as the result of performing

- * a compare with the <code>Differencer</code>.

- * <p>

- * Clients typically use this class as is, but may subclass if required.

- * 

- * @see DiffTreeViewer

- * @see Differencer

- */

-public class DiffNode extends DiffContainer implements ITypedElement, ICompareInput {

-

-	private ITypedElement fAncestor;

-	private ITypedElement fLeft;

-	private ITypedElement fRight;

-	private boolean fDontExpand;

-	private ListenerList fListener;

-	private boolean fSwapSides;

-

-	

-	/**

-	 * Creates a new <code>DiffNode</code> and initializes with the given values.

-	 *

-	 * @param parent under which the new container is added as a child or <code>null</code>

-	 * @param kind of difference (defined in <code>Differencer</code>)

-	 * @param ancestor the common ancestor input to a compare

-	 * @param left the left input to a compare

-	 * @param right the right input to a compare

-	 */

-	public DiffNode(IDiffContainer parent, int kind, ITypedElement ancestor, ITypedElement left, ITypedElement right) {

-		this(parent, kind);

-		fAncestor= ancestor;

-		fLeft= left;

-		fRight= right;

-	}

-

-	/**

-	 * Creates a new <code>DiffNode</code> with diff kind <code>Differencer.CHANGE</code>

-	 * and initializes with the given values.

-	 *

-	 * @param left the left input to a compare

-	 * @param right the right input to a compare

-	 */

-	public DiffNode(ITypedElement left, ITypedElement right) {

-		this(null, Differencer.CHANGE, null, left, right);

-	}

-

-	/**

-	 * Creates a new <code>DiffNode</code> and initializes with the given values.

-	 *

-	 * @param kind of difference (defined in <code>Differencer</code>)

-	 * @param ancestor the common ancestor input to a compare

-	 * @param left the left input to a compare

-	 * @param right the right input to a compare

-	 */

-	public DiffNode(int kind, ITypedElement ancestor, ITypedElement left, ITypedElement right) {

-		this(null, kind, ancestor, left, right);

-	}

-

-	/**

-	 * Creates a new <code>DiffNode</code> with the given diff kind.

-	 *

-	 * @param kind of difference (defined in <code>Differencer</code>)

-	 */

-	public DiffNode(int kind) {

-		super(null, kind);

-	}

-

-	/**

-	 * Creates a new <code>DiffNode</code> and initializes with the given values.

-	 *

-	 * @param parent under which the new container is added as a child or <code>null</code>

-	 * @param kind of difference (defined in <code>Differencer</code>)

-	 */

-	public DiffNode(IDiffContainer parent, int kind) {

-		super(parent, kind);

-	}

-

-	/**

-	 * Registers a listener for changes of this <code>ICompareInput</code>.

-	 * Has no effect if an identical listener is already registered.

-	 *

-	 * @param listener the listener to add

-	 */

-	public void addCompareInputChangeListener(ICompareInputChangeListener listener) {

-		if (fListener == null)

-			fListener= new ListenerList();

-		fListener.add(listener);

-	}

-	

-	/**

-	 * Unregisters a <code>ICompareInput</code> listener.

-	 * Has no effect if listener is not registered.

-	 *

-	 * @param listener the listener to remove

-	 */

-	public void removeCompareInputChangeListener(ICompareInputChangeListener listener) {

-		if (fListener != null) {

-			fListener.remove(listener);

-			if (fListener.isEmpty())

-				fListener= null;

-		}

-	}

-	

-	/**

-	 * Sends out notification that a change has occured on the <code>ICompareInput</code>.

-	 */

-	protected void fireChange() {

-		if (fListener != null) {

-			Object[] listeners= fListener.getListeners();

-			for (int i= 0; i < listeners.length; i++)

-				((ICompareInputChangeListener) listeners[i]).compareInputChanged(this);

-		}

-	}

-

-	//---- getters & setters

-

-	/**

-	 * Returns <code>true</code> if this node shouldn't automatically be expanded in

-	 * a </code>DiffTreeViewer</code>.

-	 *

-	 * @return <code>true</code> if node shouldn't automatically be expanded

-	 */

-	public boolean dontExpand() {

-		return fDontExpand;

-	}

-

-	/**

-	 * Controls whether this node is not automatically expanded when displayed in

-	 * a </code>DiffTreeViewer</code>.

-	 *

-	 * @param dontExpand if <code>true</code> this node is not automatically expanded in </code>DiffTreeViewer</code>

-	 */

-	public void setDontExpand(boolean dontExpand) {

-		fDontExpand= dontExpand;

-	}

-

-	/**

-	 * Returns the first not-<code>null</code> input of this node.

-	 * Method checks the three inputs in the order: ancestor, right, left.

-	 *

-	 * @return the first not-<code>null</code> input of this node

-	 */

-	public ITypedElement getId() {

-		if (fAncestor != null)

-			return fAncestor;

-		if (fRight != null)

-			return fRight;

-		return fLeft;

-	}

-

-	/**

-	 * Returns the (non-<code>null</code>) name of the left or right side if they are identical.

-	 * Otherwise both names are concatenated (separated with a slash ('/')).

-	 * <p>

-	 * Subclasses may re-implement to provide a different name for this node.

-	 */

-	/* (non Javadoc)

-	 * see ITypedElement.getName

-	 */

-	public String getName() {

-		String right= null;

-		if (fRight != null)

-			right= fRight.getName();

-

-		String left= null;

-		if (fLeft != null)

-			left= fLeft.getName();

-

-		if (right == null && left == null) {

-			if (fAncestor != null)

-				return fAncestor.getName();

-			return Utilities.getString("DiffNode.noName"); //$NON-NLS-1$

-		}

-

-		if (right == null)

-			return left;

-		if (left == null)

-			return right;

-

-		if (right.equals(left))

-			return right;

-			

-		String s1;

-		String s2;

-		

-		if (fSwapSides) {

-			s1= left;

-			s2= right;

-		} else {

-			s1= right;

-			s2= left;

-		}

-		

-		String fmt= Utilities.getString("DiffNode.nameFormat"); //$NON-NLS-1$

-		return MessageFormat.format(fmt, new String[] { s1, s2 });

-	}

-	

-	void swapSides(boolean swap) {

-		fSwapSides= swap;

-	}

-		

-	/* (non Javadoc)

-	 * see ITypedElement.getImage

-	 */

-	public Image getImage() {

-		ITypedElement id= getId();

-		if (id != null)

-			return id.getImage();

-		return null;

-	}

-

-	/* (non Javadoc)

-	 * see ITypedElement.getType

-	 */

-	public String getType() {

-		ITypedElement id= getId();

-		if (id != null)

-			return id.getType();

-		return ITypedElement.UNKNOWN_TYPE;

-	}

-

-	/* (non Javadoc)

-	 * see ICompareInput.getAncestor

-	 */

-	public ITypedElement getAncestor() {

-		return fAncestor;

-	}

-	

-	/**

-	 * Sets the left input to the given value.

-	 *

-	 * @param left the new value for the left input

-	 */

-	public void setLeft(ITypedElement left) {

-		fLeft= left;

-	}

-	

-	/* (non Javadoc)

-	 * see ICompareInput.getLeft

-	 */

-	public ITypedElement getLeft() {

-		return fLeft;

-	}

-

-	/**

-	 * Sets the right input to the given value.

-	 *

-	 * @param right the new value for the right input

-	 */

-	public void setRight(ITypedElement right) {

-		fRight= right;

-	}

-	

-	/* (non Javadoc)

-	 * see ICompareInput.getRight

-	 */

-	public ITypedElement getRight() {

-		return fRight;

-	}

-

-	/* (non Javadoc)

-	 * see ICompareInput.copy

-	 */

-	public void copy(boolean leftToRight) {

-		//System.out.println("DiffNode.copy: " + leftToRight);

-		

-		IDiffContainer pa= getParent();

-		if (pa instanceof ICompareInput) {

-			ICompareInput parent= (ICompareInput) pa;

-			Object dstParent= leftToRight ? parent.getRight() : parent.getLeft();

-			

-			if (dstParent instanceof IEditableContent) {

-				ITypedElement dst= leftToRight ? getRight() : getLeft();

-				ITypedElement src= leftToRight ? getLeft() : getRight();

-				dst= ((IEditableContent)dstParent).replace(dst, src);

-				if (leftToRight)

-					setRight(dst);

-				else

-					setLeft(dst);

-				

-				//setKind(Differencer.NO_CHANGE);

-				

-				fireChange();

-			}

-		}

-	}

-	

-	/* (non Javadoc)

-	 * see Object.hashCode

-	 */

-	public int hashCode() {

-		String[] path= getPath(this, 0);

-		int hashCode= 1;

-		for (int i= 0; i < path.length; i++) {

-	    	String s= path[i];

-	   	 	hashCode= (31*hashCode) + (s != null ? s.hashCode() : 0);

-		}

-		return hashCode;

-	}

-	

-	/* (non Javadoc)

-	 * see Object.equals

-	 */

-	public boolean equals(Object other) {

-		if (other != null && getClass() == other.getClass()) {

-			String[] path1= getPath(this, 0);

-			String[] path2= getPath((DiffNode) other, 0);

-			if (path1.length != path2.length)

-				return false;

-			for (int i= 0; i < path1.length; i++)

-				if (! path1[i].equals(path2[i]))

-					return false;

-			return true;

-		}

-		return super.equals(other);

-	}

-	

-	private static String[] getPath(ITypedElement el, int level) {

-		String[] path= null;

-		if (el instanceof IDiffContainer) {

-			IDiffContainer parent= ((IDiffContainer)el).getParent();

-			if (parent instanceof ITypedElement)

-				path= getPath((ITypedElement)parent, level+1);

-		}

-		if (path == null)

-			path= new String[level+1];

-		path[(path.length-1)-level]= el.getName();

-		return path;

-	}

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java
deleted file mode 100644
index 918f5ef..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java
+++ /dev/null
@@ -1,708 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import java.util.Iterator;

-import java.util.ResourceBundle;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.events.DisposeEvent;

-import org.eclipse.swt.events.FocusListener;

-import org.eclipse.swt.graphics.Image;

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.jface.util.*;

-import org.eclipse.jface.action.*;

-import org.eclipse.jface.viewers.*;

-import org.eclipse.jface.preference.IPreferenceStore;

-

-import org.eclipse.compare.internal.*;

-import org.eclipse.compare.*;

-

-/**

- * A tree viewer that works on objects implementing

- * the <code>IDiffContainer</code> and <code>IDiffElement</code> interfaces.

- * <p>

- * This class may be instantiated; it is not intended to be subclassed outside

- * this package.

- * </p>

- *

- * @see IDiffContainer

- * @see IDiffElement

- */

-public class DiffTreeViewer extends TreeViewer {

-	

-	static class DiffViewerSorter extends ViewerSorter {

-	

-		public boolean isSorterProperty(Object element, Object property) {

-			return false;

-		}

-	

-		public int category(Object node) {

-			if (node instanceof DiffNode) {

-				Object o= ((DiffNode) node).getId();

-				if (o instanceof DocumentRangeNode)

-					return ((DocumentRangeNode) o).getTypeCode();

-			}

-			return 0;

-		}

-	}	

-

-	class DiffViewerContentProvider implements ITreeContentProvider {

-			

-		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {

-		}

-	

-		public boolean isDeleted(Object element) {

-			return false;

-		}

-			

-		public void dispose() {

-			inputChanged(DiffTreeViewer.this, getInput(), null);

-		}

-			

-		public Object getParent(Object element) {

-			if (element instanceof IDiffElement) 

-				return ((IDiffElement)element).getParent();

-			return null;

-		}

-		

-		public final boolean hasChildren(Object element) {

-			if (element instanceof IDiffContainer) 

-				return ((IDiffContainer)element).hasChildren();

-			return false;

-		}

-		

-		public final Object[] getChildren(Object element) {

-			if (element instanceof IDiffContainer)

-				return ((IDiffContainer)element).getChildren();

-			return new Object[0];

-		}

-		

-		public Object[] getElements(Object element) {

-			return getChildren(element);

-		}				

-	}

-	

-	/*

-	 * Takes care of swapping left and right if fLeftIsLocal

-	 * is true.

-	 */

-	class DiffViewerLabelProvider extends LabelProvider {

-		

-		public String getText(Object element) {

-			

-			if (element instanceof IDiffElement)

-				return ((IDiffElement)element).getName();

-						

-			return Utilities.getString(fBundle, "defaultLabel"); //$NON-NLS-1$

-		}

-	

-		public Image getImage(Object element) {

-			if (element instanceof IDiffElement) {

-				IDiffElement input= (IDiffElement) element;

-				

-				int kind= input.getKind();

-				if (fLeftIsLocal) {

-					switch (kind & Differencer.DIRECTION_MASK) {

-					case Differencer.LEFT:

-						kind= (kind &~ Differencer.LEFT) | Differencer.RIGHT;

-						break;

-					case Differencer.RIGHT:

-						kind= (kind &~ Differencer.RIGHT) | Differencer.LEFT;

-						break;

-					}

-				}

-				

-				return fCompareConfiguration.getImage(input.getImage(), kind);

-			}

-			return null;

-		}

-	}

-

-	static class FilterSame extends ViewerFilter {

-		public boolean select(Viewer viewer, Object parentElement, Object element) {

-			if (element instanceof IDiffElement)

-				return (((IDiffElement)element).getKind() & Differencer.PSEUDO_CONFLICT) == 0;

-			return true;

-		}

-		public boolean isFilterProperty(Object element, Object property) {

-			return false;

-		}

-	}

-	

-	private ResourceBundle fBundle;

-	private CompareConfiguration fCompareConfiguration;

-	/* package */ boolean fLeftIsLocal;

-	private ViewerFilter fViewerFilter;

-	private IPropertyChangeListener fPropertyChangeListener;

-	//private IPropertyChangeListener fPreferenceChangeListener;

-

-	private Action fCopyLeftToRightAction;

-	private Action fCopyRightToLeftAction;

-	private Action fNextAction;

-	private Action fPreviousAction;

-	private Action fEmptyMenuAction;

-	private Action fExpandAllAction;

-		

-	/**

-	 * Creates a new viewer for the given SWT tree control with the specified configuration.

-	 *

-	 * @param tree the tree control

-	 * @param configuration the configuration for this viewer

-	 */

-	public DiffTreeViewer(Tree tree, CompareConfiguration configuration) {

-		super(tree);

-		initialize(configuration);

-	}

-	

-	/**

-	 * Creates a new viewer under the given SWT parent and with the specified configuration.

-	 *

-	 * @param parent the SWT control under which to create the viewer

-	 * @param configuration the configuration for this viewer

-	 */

-	public DiffTreeViewer(Composite parent, CompareConfiguration configuration) {

-		super(new Tree(parent, SWT.MULTI));

-		initialize(configuration);

-	}

-	

-	private void initialize(CompareConfiguration configuration) {

-		

-		Control tree= getControl();

-		

-		INavigatable nav= new INavigatable() {

-			public boolean gotoDifference(boolean next) {

-				return internalNavigate(next);

-			}

-		};

-		tree.setData(INavigatable.NAVIGATOR_PROPERTY, nav);

-		

-		fLeftIsLocal= Utilities.getBoolean(configuration, "LEFT_IS_LOCAL", false); //$NON-NLS-1$

-

-		tree.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle());

-

-		Composite parent= tree.getParent();

-		

-		fBundle= ResourceBundle.getBundle("org.eclipse.compare.structuremergeviewer.DiffTreeViewerResources"); //$NON-NLS-1$

-		

-		// register for notification with the CompareConfiguration 

-		fCompareConfiguration= configuration;

-		if (fCompareConfiguration != null) {

-			fPropertyChangeListener= new IPropertyChangeListener() {

-				public void propertyChange(PropertyChangeEvent event) {

-					DiffTreeViewer.this.propertyChange(event);

-				}

-			};

-			fCompareConfiguration.addPropertyChangeListener(fPropertyChangeListener);

-		}	

-		

-		// register for notification with the Compare plugin's PreferenceStore 

-		/*

-		fPreferenceChangeListener= new IPropertyChangeListener() {

-			public void propertyChange(PropertyChangeEvent event) {

-				if (event.getProperty().equals(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS))

-					syncShowPseudoConflictFilter();			

-			}

-		};

-		IPreferenceStore ps= CompareUIPlugin.getDefault().getPreferenceStore();

-		if (ps != null)

-			ps.addPropertyChangeListener(fPreferenceChangeListener);

-		*/

-			

-	

-		setContentProvider(new DiffViewerContentProvider());

-		setLabelProvider(new DiffViewerLabelProvider());

-		

-		addSelectionChangedListener(

-			new ISelectionChangedListener() {

-				public void selectionChanged(SelectionChangedEvent se) {

-					updateActions();

-				}

-			}

-		);

-						

-		// syncShowPseudoConflictFilter();			

-				

-		setSorter(new DiffViewerSorter());

-		

-		ToolBarManager tbm= CompareViewerSwitchingPane.getToolBarManager(parent);

-		if (tbm != null) {

-			tbm.removeAll();

-			

-			tbm.add(new Separator("merge")); //$NON-NLS-1$

-			tbm.add(new Separator("modes")); //$NON-NLS-1$

-			tbm.add(new Separator("navigation")); //$NON-NLS-1$

-			

-			createToolItems(tbm);

-			updateActions();

-			

-			tbm.update(true);

-		}

-		

-		MenuManager mm= new MenuManager();

-		mm.setRemoveAllWhenShown(true);

-		mm.addMenuListener(

-			new IMenuListener() {

-				public void menuAboutToShow(IMenuManager mm) {

-					fillContextMenu(mm);

-					if (mm.isEmpty()) {

-						if (fEmptyMenuAction == null) {

-							fEmptyMenuAction=

-								new Action(Utilities.getString(fBundle, "emptyMenuItem")) {};	//$NON-NLS-1$

-							fEmptyMenuAction.setEnabled(false);

-						}

-						mm.add(fEmptyMenuAction);

-					}

-				}

-			}

-		);

-		tree.setMenu(mm.createContextMenu(tree));

-	}

-			

-	/**

-	 * Returns the viewer's name.

-	 *

-	 * @return the viewer's name

-	 */

-	public String getTitle() {

-		String title= Utilities.getString(fBundle, "title", null); //$NON-NLS-1$

-		if (title == null)

-			title= Utilities.getString("DiffTreeViewer.title"); //$NON-NLS-1$

-		return title;

-	}

-	

-	/**

-	 * Returns the resource bundle.

-	 *

-	 * @return the viewer's resource bundle

-	 */

-	protected ResourceBundle getBundle() {

-		return fBundle;

-	}

-

-	/**

-	 * Returns the compare configuration of this viewer.

-	 *

-	 * @return the compare configuration of this viewer

-	 */

-	public CompareConfiguration getCompareConfiguration() {

-		return fCompareConfiguration;

-	}

-			

-	/**

-	 * 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 (fPreferenceChangeListener != null) {

-			IPreferenceStore ps= CompareUIPlugin.getDefault().getPreferenceStore();

-			if (ps != null)

-				ps.removePropertyChangeListener(fPreferenceChangeListener);

-			fPreferenceChangeListener= null;

-		}

-		*/

-				

-		if (fCompareConfiguration != null) {

-			if (fPropertyChangeListener != null)

-				fCompareConfiguration.removePropertyChangeListener(fPropertyChangeListener);

-			fCompareConfiguration= null;

-		}

-		fPropertyChangeListener= null;

-		

-		super.handleDispose(event);

-	}

-	

-	/**

-	 * Tracks property changes of the configuration object.

-	 * Clients may extend to track their own property changes.

-	 */

-	protected void propertyChange(PropertyChangeEvent event) {

-	}

-	

-	protected void inputChanged(Object in, Object oldInput) {

-		super.inputChanged(in, oldInput);

-		

-		if (in != oldInput) {

-			initialSelection();

-			updateActions();

-		}

-	}

-	

-	/**

-	 * This hook method is called from within <code>inputChanged</code>

-	 * after a new input has been set but before any controls are updated.

-	 * This default implementation calls <code>navigate(true)<code>

-	 * to select and expand the first leaf node.

-	 * Clients can override this method and are free to decide whether

-	 * they want to call the inherited method.

-	 */

-	protected void initialSelection() {

-		navigate(true);

-	}

-

-	/**

-	 * Overridden to avoid expanding <code>DiffNode</code>s that shouldn't expand

-	 * (i.e. where the <code>dontExpand</code> method returns <code>true</code>).

-	 */

-	protected void internalExpandToLevel(Widget node, int level) {

-				

-		Object data= node.getData();

-		

-		if (dontExpand(data))

-			return;

-		

-		super.internalExpandToLevel(node, level);

-	}

-	

-	protected boolean dontExpand(Object o) {

-		return o instanceof DiffNode && ((DiffNode)o).dontExpand();

-	}

-	

-	//---- merge action support

-

-	/**

-	 * This factory method is called after the viewer's controls have been created.

-	 * It installs four actions in the given <code>ToolBarManager</code>. Two actions

-	 * allow for copying one side of a <code>DiffNode</code> to the other side.

-	 * Two other actions are for navigating from one node to the next (previous).

-	 * <p>

-	 * Clients can override this method and are free to decide whether they want to call

-	 * the inherited method.

-	 *

-	 * @param toolbarManager the toolbar manager for which to add the actions

-	 */

-	protected void createToolItems(ToolBarManager toolbarManager) {

-		

-//		fCopyLeftToRightAction= new Action() {

-//			public void run() {

-//				copySelected(true);

-//			}

-//		};

-//		Utilities.initAction(fCopyLeftToRightAction, fBundle, "action.TakeLeft.");

-//		toolbarManager.appendToGroup("merge", fCopyLeftToRightAction);

-

-//		fCopyRightToLeftAction= new Action() {

-//			public void run() {

-//				copySelected(false);

-//			}

-//		};

-//		Utilities.initAction(fCopyRightToLeftAction, fBundle, "action.TakeRight.");

-//		toolbarManager.appendToGroup("merge", fCopyRightToLeftAction);

-		

-//		fNextAction= new Action() {

-//			public void run() {

-//				navigate(true);

-//			}

-//		};

-//		Utilities.initAction(fNextAction, fBundle, "action.NextDiff."); //$NON-NLS-1$

-//		toolbarManager.appendToGroup("navigation", fNextAction); //$NON-NLS-1$

-

-//		fPreviousAction= new Action() {

-//			public void run() {

-//				navigate(false);

-//			}

-//		};

-//		Utilities.initAction(fPreviousAction, fBundle, "action.PrevDiff."); //$NON-NLS-1$

-//		toolbarManager.appendToGroup("navigation", fPreviousAction); //$NON-NLS-1$

-	}

-	

-	/**

-	 * This method is called to add actions to the viewer's context menu.

-	 * It installs actions for expanding tree nodes, copying one side of a <code>DiffNode</code> to the other side.

-	 * Clients can override this method and are free to decide whether they want to call

-	 * the inherited method.

-	 *

-	 * @param manager the menu manager for which to add the actions

-	 */

-	protected void fillContextMenu(IMenuManager manager) {

-		if (fExpandAllAction == null) {

-			fExpandAllAction= new Action() {

-				public void run() {

-					expandSelection();

-				}

-			};

-			Utilities.initAction(fExpandAllAction, fBundle, "action.ExpandAll."); //$NON-NLS-1$

-		}

-		ISelection selection= getSelection();

-		fExpandAllAction.setEnabled(selection != null && !selection.isEmpty());

-		manager.add(fExpandAllAction);

-		

-		if (fCopyLeftToRightAction != null)

-			manager.add(fCopyLeftToRightAction);

-		if (fCopyRightToLeftAction != null)

-			manager.add(fCopyRightToLeftAction);

-	}

-

-	/**

-	 * Expands to infinity all items in the selection.

-	 */

-	protected void expandSelection() {

-		ISelection selection= getSelection();

-		if (selection instanceof IStructuredSelection) {

-			Iterator elements= ((IStructuredSelection)selection).iterator();

-			while (elements.hasNext()) {

-				Object next= elements.next();

-				expandToLevel(next, ALL_LEVELS);

-			}

-		}

-	}

-

-	/**

-	 * Copies one side of all <code>DiffNode</code>s in the current selection to the other side.

-	 * Called from the (internal) actions for copying the sides of a <code>DiffNode</code>.

-	 * Clients may override. 

-	 * 

-	 * @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

-	 */

-	protected void copySelected(boolean leftToRight) {

-		ISelection selection= getSelection();

-		if (selection instanceof IStructuredSelection) {

-			Iterator e= ((IStructuredSelection) selection).iterator();

-			while (e.hasNext()) {

-				Object element= e.next();

-				if (element instanceof ICompareInput)

-					copyOne((ICompareInput) element, leftToRight);

-			}

-		}

-	}

-	

-	/**

-	 * Called to copy one side of the given node to the other.

-	 * This default implementation delegates the call to <code>ICompareInput.copy(...)</code>.

-	 * Clients may override. 

-	 * 

-	 * @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

-	 */

-	protected void copyOne(ICompareInput node, boolean leftToRight) {

-		

-		node.copy(leftToRight);

-		

-		// update node's image

-		update(new Object[] { node }, null);

-	}

-	

-	/**

-	 * Selects the next (or previous) node of the current selection.

-	 * If there is no current selection the first (last) node in the tree is selected.

-	 * Wraps around at end or beginning.

-	 * Clients may override. 

-	 *

-	 * @param next if <code>true</code> the next node is selected, otherwise the previous node

-	 */

-	protected void navigate(boolean next) {	

-		internalNavigate(next);

-	}

-	

-	//---- private

-	

-	/**

-	 * Selects the next (or previous) node of the current selection.

-	 * If there is no current selection the first (last) node in the tree is selected.

-	 * Wraps around at end or beginning.

-	 * Clients may override. 

-	 *

-	 * @param next if <code>true</code> the next node is selected, otherwise the previous node

-	 * @return <code>true</code> if at end (or beginning)

-	 */

-	private boolean internalNavigate(boolean next) {

-		

-		Control c= getControl();

-		if (!(c instanceof Tree))

-			return false;

-			

-		Tree tree= (Tree) c;

-		TreeItem item= null;

-		TreeItem children[]= tree.getSelection();

-		if (children != null && children.length > 0)

-			item= children[0];

-		if (item == null) {

-			children= tree.getItems();

-			if (children != null && children.length > 0) {

-				item= children[0];

-				if (item != null && item.getItemCount() <= 0) {

-					internalSetSelection(item);

-					return false;

-				}

-			}

-		}

-			

-		while (true) {

-			item= findNextPrev(item, next);

-			if (item == null)

-				break;

-			if (item.getItemCount() <= 0)

-				break;

-		}

-		

-		if (item != null) {

-			internalSetSelection(item);

-			return false;

-		}

-		return true;

-	}

-

-	private TreeItem findNextPrev(TreeItem item, boolean next) {

-		

-		if (item == null)

-			return null;

-		

-		TreeItem children[]= null;

-

-		if (!next) {

-		

-			TreeItem parent= item.getParentItem();

-			if (parent != null)

-				children= parent.getItems();

-			else

-				children= item.getParent().getItems();

-			

-			if (children != null && children.length > 0) {

-				// goto previous child

-				int index= 0;

-				for (; index < children.length; index++)

-					if (children[index] == item)

-						break;

-				

-				if (index > 0) {

-					

-					item= children[index-1];

-					

-					while (true) {

-						createChildren(item);

-						int n= item.getItemCount();

-						if (n <= 0)

-							break;

-							

-						item.setExpanded(true);

-						item= item.getItems()[n-1];

-					}

-

-					// previous

-					return item;

-				}

-			}

-			

-			// go up

-			return parent;

-					

-		} else {

-			item.setExpanded(true);

-			createChildren(item);

-			

-			if (item.getItemCount() > 0) {

-				// has children: go down

-				children= item.getItems();

-				return children[0];

-			}

-			

-			while (item != null) {

-				children= null;

-				TreeItem parent= item.getParentItem();

-				if (parent != null)

-					children= parent.getItems();

-				else

-					children= item.getParent().getItems();

-				

-				if (children != null && children.length > 0) {

-					// goto next child

-					int index= 0;

-					for (; index < children.length; index++)

-						if (children[index] == item)

-							break;

-					

-					if (index < children.length-1) {

-						// next

-						return children[index+1];

-					}

-				}

-				

-				// go up

-				item= parent;

-			}

-		}

-				

-		return item;

-	}

-	

-	private void internalSetSelection(TreeItem ti) {

-		if (ti != null) {

-			Object data= ti.getData();

-			if (data != null)

-				setSelection(new StructuredSelection(data), true);

-		}

-	}

-	

-	/*

-	private void syncShowPseudoConflictFilter() {

-		

-		IPreferenceStore ps= CompareUIPlugin.getDefault().getPreferenceStore();

-		boolean showPseudoConflicts= ps.getBoolean(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS);

-		

-		Control tree= getControl();

-		if (!tree.isDisposed()) {

-			if (showPseudoConflicts) {

-				if (fViewerFilter != null) {

-					removeFilter(fViewerFilter);

-				}

-			} else {

-				if (fViewerFilter == null)

-					fViewerFilter= new FilterSame();	

-				addFilter(fViewerFilter);

-			}

-		}

-	}

-	*/

-		

-	private final boolean isEditable(Object element, boolean left) {

-		if (element instanceof ICompareInput) {

-			ICompareInput diff= (ICompareInput) element;

-			Object side= left ? diff.getLeft() : diff.getRight();

-			if (side == null && diff instanceof IDiffElement) {

-				IDiffContainer container= ((IDiffElement)diff).getParent();

-				if (container instanceof ICompareInput) {

-					ICompareInput parent= (ICompareInput) container;

-					side= left ? parent.getLeft() : parent.getRight();

-				}

-			}

-			if (side instanceof IEditableContent)

-				return ((IEditableContent) side).isEditable();

-		}

-		return false;

-	}

-		

-	private void updateActions() {

-		int leftToRight= 0;

-		int rightToLeft= 0;

-		ISelection selection= getSelection();

-		if (selection instanceof IStructuredSelection) {

-			IStructuredSelection ss= (IStructuredSelection) selection;

-			Iterator e= ss.iterator();

-			while (e.hasNext()) {

-				Object element= e.next();

-				if (element instanceof ICompareInput) {

-					if (isEditable(element, false))

-						leftToRight++;

-					if (isEditable(element, true))

-						rightToLeft++;

-					if (leftToRight > 0 && rightToLeft > 0)

-						break;

-				}

-			}

-			if (fExpandAllAction != null)

-				fExpandAllAction.setEnabled(selection.isEmpty());

-		}

-		if (fCopyLeftToRightAction != null)

-			fCopyLeftToRightAction.setEnabled(leftToRight > 0);

-		if (fCopyRightToLeftAction != null)

-			fCopyRightToLeftAction.setEnabled(rightToLeft > 0);

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewerResources.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewerResources.properties
deleted file mode 100644
index 9fc63b6..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewerResources.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2000, 2001.

-# All Rights Reserved.

-# =====================================

-

-# @(#)DiffTreeViewerResources.properties

-#

-# Resource strings for DiffTreeViewer.java

-

-title= Structure Compare

-defaultLabel= <no name>

-

-#####################################################

-# Dummy menu item for empty context menu

-#####################################################

-

-emptyMenuItem= <Empty Menu>

-

-#####################################################

-# Actions

-#####################################################

-

-action.Smart.label=Smart

-action.Smart.tooltip=Try to Guess Similar Elements

-action.Smart.image=smartmode_co.gif

-

-action.ExpandAll.label=Expand All

-action.ExpandAll.tooltip=Expand All Nodes

-

-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.TakeLeft.label=Copy Left to Right

-action.TakeLeft.tooltip=Copy Selected Nodes from Left to Right

-action.TakeLeft.image=copycont_r_co.gif

-

-action.TakeRight.label=Copy Right to Left

-action.TakeRight.tooltip=Copy Selected Nodes from Right to Left

-action.TakeRight.image=copycont_l_co.gif

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java
deleted file mode 100644
index e8c8ab3..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java
+++ /dev/null
@@ -1,515 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import java.io.*;

-import java.util.*;

-import java.text.MessageFormat;

-

-import org.eclipse.jface.util.Assert;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IProgressMonitor;

-import org.eclipse.core.runtime.OperationCanceledException;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.internal.Utilities;

-

-

-/**

- * A generic two-way or three-way differencing engine.

- * <p>

- * The engine is used by calling one of the <code>findDifferences</code> methods and passing

- * in the objects to compare.

- * The engine calls the following methods on the input objects to perform the compare:

- * <UL>

- * <LI><code>getChildren</code>: for enumerating the children of an object (if any),

- * <LI><code>contentsEqual</code>: for comparing the content of leaf objects, that is, objects without children,

- * <LI><code>visit</code>: for every pair of compared object the compare result is passed in.

- * </UL>

- * Clients may use as is, or subclass to provide a custom implementation for the three hooks. 

- * However the default implementation already deals with the typical case:

- * <UL>

- * <LI><code>getChildren</code>: tries to apply the <code>IStructureComparator</code>

- * 	interface to enumerate the children,

- * <LI><code>contentsEqual</code>: tries to apply the <code>IStreamContentAccessor</code> interface

- *	to perform a byte-wise content comparison,

- * <LI><code>visit</code>: creates a <code>DiffNode</code> for any detected difference between the compared objects and

- *	links it under a parent node effectively creating a tree of differences.

- * </UL>

- * The different kind of changes detected by the engine are decoded as follows:

- * In the two-way case only NO_CHANGE, ADDITION, DELETION, and CHANGE are used.

- * In the three-way case these constants are bitwise ORed with one of directional constants

- * LEFT, RIGHT, and CONFLICTING.

- */

-public class Differencer {

-	

-	// The kind of differences.

-	/**

-	 * Difference constant (value 0) indicating no difference.

-	 */

-	public static final int NO_CHANGE= 0;

-	/**

-	 * Difference constant (value 1) indicating one side was added.

-	 */

-	public static final int ADDITION= 1;

-	/**

-	 * Difference constant (value 2) indicating one side was removed.

-	 */

-	public static final int DELETION= 2;

-	/**

-	 * Difference constant (value 3) indicating side changed.

-	 */

-	public static final int CHANGE= 3;

-

-	/**

-	 * Bit mask (value 3) for extracting the kind of difference.

-	 */

-	public static final int CHANGE_TYPE_MASK= 3;

-

-	// The direction of a three-way change.

-	/**

-	 * Three-way change constant (value 4) indicating a change on left side.

-	 */

-	public static final int LEFT= 4;

-	

-	/**

-	 * Three-way change constant (value 8) indicating a change on right side.

-	 */

-	public static final int RIGHT= 8;

-	

-	/**

-	 * Three-way change constant (value 12) indicating a change on left and

-	 * right sides.

-	 */

-	public static final int CONFLICTING= 12;

-

-	/**

-	 * Bit mask (value 12) for extracting the direction of a three-way change.

-	 */

-	public static final int DIRECTION_MASK= 12;

-

-	/**

-	 * Constant (value 16) indicating a change on left and 

-	 * right side (with respect to ancestor) but left and right are identical.

-	 */

-	public static final int PSEUDO_CONFLICT= 16;

-

-	

-	static class Node {

-		List fChildren;

-		int fCode;

-		Object fAncestor;

-		Object fLeft;

-		Object fRight;

-		

-		Node() {

-		}

-		Node(Node parent, Object ancestor, Object left, Object right) {

-			parent.add(this);

-			fAncestor= ancestor;

-			fLeft= left;

-			fRight= right;

-		}

-		void add(Node child) {

-			if (fChildren == null)

-				fChildren= new ArrayList();

-			fChildren.add(child);

-		}

-		Object visit(Differencer d, Object parent, int level) {

-			if (fCode == NO_CHANGE)

-				return null;

-			//dump(level);

-			Object data= d.visit(parent, fCode, fAncestor, fLeft, fRight);

-			if (fChildren != null) {

-				Iterator i= fChildren.iterator();

-				while (i.hasNext()) {

-					Node n= (Node) i.next();

-					n.visit(d, data, level+1);

-				}

-			}

-			return data;

-		}

-		private void dump(int level) {

-			String name= null;

-			if (fAncestor instanceof ITypedElement)

-				name= ((ITypedElement)fAncestor).getName();

-			if (name == null && fLeft instanceof ITypedElement)

-				name= ((ITypedElement)fLeft).getName();

-			if (name == null && fRight instanceof ITypedElement)

-				name= ((ITypedElement)fRight).getName();

-			if (name == null)

-				name= "???"; //$NON-NLS-1$

-			

-			for (int i= 0; i < level; i++)

-				System.out.print("  "); //$NON-NLS-1$

-			

-			System.out.println(getDiffType(fCode) + name);

-		}

-		private String getDiffType(int code) {

-			String dir= " "; //$NON-NLS-1$

-			switch (code & DIRECTION_MASK) {

-			case LEFT:

-				dir= ">"; //$NON-NLS-1$

-				break;

-			case RIGHT:

-				dir= "<"; //$NON-NLS-1$

-				break;

-			case CONFLICTING:

-				dir= "!"; //$NON-NLS-1$

-				break;

-			}

-			String change= "="; //$NON-NLS-1$

-			switch (code & CHANGE_TYPE_MASK) {

-			case ADDITION:

-				change= "+"; //$NON-NLS-1$

-				break;

-			case DELETION:

-				change= "-"; //$NON-NLS-1$

-				break;

-			case CHANGE:

-				change= "#"; //$NON-NLS-1$

-				break;

-			}

-			return dir + change + " "; //$NON-NLS-1$

-		}

-	} 

-	

-	/**

-	 * Creates a new differencing engine.

-	 */

-	public Differencer() {

-	}

-	

-	/**

-	 * Starts the differencing engine on the three input objects. If threeWay is <code>true</code> a 

-	 * three-way comparison is performed, otherwise a two-way compare (in the latter case the ancestor argument is ignored).

-	 * The progress monitor is passed to the method <code>updateProgress</code> which is called for every node or

-	 * leaf compare. The method returns the object that was returned from the top-most call to method <code>visit</code>.

-	 * At most two of the ancestor, left, and right parameters are allowed to be <code>null</code>.

-	 *

-	 * @param threeWay if <code>true</code> a three-way comparison is performed, otherwise a two-way compare

-	 * @param pm a progress monitor which is passed to method <code>updateProgress</code>

-	 * @param data a client data that is passed to the top-level call to <code>visit</code>

-	 * @param ancestor the ancestor object of the compare (may be <code>null</code>)

-	 * @param left the left object of the compare 

-	 * @param right the right object of the compare

-	 * @return the object returned from the top most call to method <code>visit</code>,

-	 *   possibly <code>null</code>

-	 */

-	public Object findDifferences(boolean threeWay, IProgressMonitor pm, Object data, Object ancestor, Object left, Object right) {

-		

-		Node root= new Node();

-		

-		int code= traverse(threeWay, root, pm, threeWay ? ancestor : null, left, right);

-				

-		if (code != NO_CHANGE) {

-			List l= root.fChildren;

-			if (l.size() > 0) {

-				Node first= (Node)l.get(0);

-				return first.visit(this, data, 0);

-			}

-		}

-		return null;

-	}

-	

-	/**

-	 * Traverse tree in postorder.

-	 */

-	private int traverse(boolean threeWay, Node parent, IProgressMonitor pm, Object ancestor, Object left, Object right) {

-				

-		Object[] ancestorChildren= getChildren(ancestor);

-		Object[] rightChildren= getChildren(right);

-		Object[] leftChildren= getChildren(left);

-		

-		int code= NO_CHANGE;

-		

-		Node node= new Node(parent, ancestor, left, right);

-			

-		boolean content= true;	// we reset this if we have at least one child

-		

-		if (((threeWay && ancestorChildren != null) || !threeWay)

-					 && rightChildren != null && leftChildren != null) {

-			// we only recurse down if no leg is null

-			// a node

-			

-			Set allSet= new HashSet(20);

-			Map ancestorSet= null;

-			Map rightSet= null;

-			Map leftSet= null;

-						

-			if (ancestorChildren != null) {

-				ancestorSet= new HashMap(10);

-				for (int i= 0; i < ancestorChildren.length; i++) {

-					Object ancestorChild= ancestorChildren[i];

-					ancestorSet.put(ancestorChild, ancestorChild);

-					allSet.add(ancestorChild);

-				}

-			}

-

-			if (rightChildren != null) {

-				rightSet= new HashMap(10);

-				for (int i= 0; i < rightChildren.length; i++) {

-					Object rightChild= rightChildren[i];

-					rightSet.put(rightChild, rightChild);

-					allSet.add(rightChild);

-				}

-			}

-

-			if (leftChildren != null) {

-				leftSet= new HashMap(10);

-				for (int i= 0; i < leftChildren.length; i++) {

-					Object leftChild= leftChildren[i];

-					leftSet.put(leftChild, leftChild);

-					allSet.add(leftChild);

-				}

-			}

-						

-			Iterator e= allSet.iterator();

-			while (e.hasNext()) {

-				Object keyChild= e.next();

-				

-				content= false;

-				

-				if (pm != null) {

-					

-					if (pm.isCanceled())

-						throw new OperationCanceledException();

-						

-					updateProgress(pm, keyChild);

-				}

-				

-				Object ancestorChild= ancestorSet != null ? ancestorSet.get(keyChild) : null;

-				Object leftChild= leftSet != null ? leftSet.get(keyChild) : null;

-				Object rightChild= rightSet != null ? rightSet.get(keyChild) : null;

-				

-				int c= traverse(threeWay, node, pm, ancestorChild, leftChild, rightChild);

-			

-				if ((c & CHANGE_TYPE_MASK) != NO_CHANGE) {

-					code|= CHANGE;	// deletions and additions of child result in a change of the container

-					code|= (c & DIRECTION_MASK);	// incoming & outgoing are just ored

-				}

-			}

-		}

-

-		if (content)			// a leaf

-			code= compare(threeWay, ancestor, left, right);

-								

-		node.fCode= code;

-							

-		return code;

-	}

-	

-	/**

-	 * Called for every node or leaf comparison.

-	 * The differencing engine passes in the input objects of the compare and the result of the compare.

-	 * The data object is the value returned from a call to the <code>visit</code> method on the parent input.

-	 * It can be considered the "parent" reference and is useful when building a tree.

-	 * <p>

-	 * The <code>Differencer</code> implementation returns a new

-	 * <code>DiffNode</code> which is initialized with the corresponding values.

-	 * Subclasses may override.

-	 *

-	 * @param data object returned from parent call to <code>visit</code>,

-	 *   possibly <code>null</code>

-	 * @param result the result of the compare operation performed on the three inputs

-	 * @param ancestor the compare ancestor of the left and right inputs

-	 * @param left the left input to the compare

-	 * @param right the right input to the compare

-	 * @return the result, possibly <code>null</code>

-	 */

-	protected Object visit(Object data, int result, Object ancestor, Object left, Object right) {

-		return new DiffNode((IDiffContainer) data, result, (ITypedElement)ancestor, (ITypedElement)left, (ITypedElement)right);

-	}

-	

-	/**

-	 * Performs a 2-way or 3-way compare of the given leaf elements and returns an integer

-	 * describing the kind of difference.

-	 */

-	private int compare(boolean threeway, Object ancestor, Object left, Object right) {

-		

-		int description= NO_CHANGE;

-		

-		if (threeway) {

-			if (ancestor == null) {

-				if (left == null) {

-					if (right == null) {

-						Assert.isTrue(false);

-						// shouldn't happen

-					} else {

-						description= RIGHT | ADDITION;

-					}

-				} else {

-					if (right == null) {

-						description= LEFT | ADDITION;

-					} else {

-						description= CONFLICTING | ADDITION;

-						if (contentsEqual(left, right))

-							description|= PSEUDO_CONFLICT;

-					}

-				}

-			} else {

-				if (left == null) {

-					if (right == null) {

-						description= CONFLICTING | DELETION | PSEUDO_CONFLICT;

-					} else {

-						if (contentsEqual(ancestor, right))		

-							description= LEFT | DELETION;

-						else

-							description= CONFLICTING | CHANGE;	

-					}

-				} else {

-					if (right == null) {

-						if (contentsEqual(ancestor, left))	

-							description= RIGHT | DELETION;

-						else

-							description= CONFLICTING | CHANGE;	

-					} else {

-						boolean ay= contentsEqual(ancestor, left);

-						boolean am= contentsEqual(ancestor, right);

-						

-						if (ay && am)

-							;

-						else if (ay && !am) {

-							description= RIGHT | CHANGE;

-						} else if (!ay && am) {

-							description= LEFT | CHANGE;

-						} else {

-							description= CONFLICTING | CHANGE;

-							if (contentsEqual(left, right))

-								description|= PSEUDO_CONFLICT;

-						}

-					}

-				}

-			}

-		} else {	// two way compare ignores ancestor

-			if (left == null) {

-				if (right == null) {

-					Assert.isTrue(false);

-					// shouldn't happen

-				} else {

-					description= ADDITION;

-				}

-			} else {

-				if (right == null) {

-					description= DELETION;

-				} else {

-					if (! contentsEqual(left, right))

-						description= CHANGE;

-				}

-			}

-		}

-							

-		return description;

-	}

-		

-	/**

-	 * Performs a content compare on the two given inputs.

-	 * <p>

-	 * The <code>Differencer</code> implementation

-	 * returns <code>true</code> if both inputs implement <code>IStreamContentAccessor</code>

-	 * and their byte contents is identical. Subclasses may override to implement 

-	 * a different content compare on the given inputs.

-	 * </p>

-	 *

-	 * @param input1 first input to contents compare

-	 * @param input2 second input to contents compare

-	 * @return <code>true</code> if content is equal

-	 */

-	protected boolean contentsEqual(Object input1, Object input2) {

-		

-		if (input1 == input2)

-			return true;

-			

-		InputStream is1= getStream(input1);

-		InputStream is2= getStream(input2);

-		

-		if (is1 == null && is2 == null)	// no byte contents

-			return true;

-		

-		try {

-			if (is1 == null || is2 == null)	// only one has contents

-				return false;

-			

-			while (true) {

-				int c1= is1.read();

-				int c2= is2.read();

-				if (c1 == -1 && c2 == -1)

-					return true;

-				if (c1 != c2)

-					break;

-				

-			}

-		} catch (IOException ex) {

-		} finally {

-			if (is1 != null) {

-				try {

-					is1.close();

-				} catch(IOException ex) {

-				}

-			}

-			if (is2 != null) {

-				try {

-					is2.close();

-				} catch(IOException ex) {

-				}

-			}

-		}

-		return false;

-	}

-	

-	/**

-	 * Tries to return an InputStream for the given object.

-	 * Returns <code>null</code> if the object not an IStreamContentAccessor

-	 * or an error occured.

-	 */

-	private InputStream getStream(Object o) {

-		if (o instanceof IStreamContentAccessor) {

-			try {

-				return ((IStreamContentAccessor)o).getContents();

-			} catch(CoreException ex) {

-			}

-		}

-		return null;

-	}

-	

-	/**

-	 * Returns the children of the given input or <code>null</code> if there are no children.

-	 * <p>

-	 * The <code>Differencer</code> implementation checks whether the input 

-	 * implements the <code>IStructureComparator</code> interface. If yes it is used

-	 * to return an array containing all children. Otherwise <code>null</code> is returned.

-	 * Subclasses may override to implement a different strategy to enumerate children.

-	 * </p>

-	 *

-	 * @param input the object for which to return children

-	 */

-	protected Object[] getChildren(Object input) {

-		if (input instanceof IStructureComparator)

-			return ((IStructureComparator)input).getChildren();

-		return null;

-	}

-	

-	/**

-	 * Called for every leaf or node compare to update progress information.

-	 * <p>

-	 * The <code>Differencer</code> implementation shows the name of the input object

-	 * as a subtask. Subclasses may override.

-	 * </p>

-	 *

-	 * @param progressMonitor the progress monitor for reporting progress

-	 * @name input a non-<code>null</code> input object

-	 */

-	protected void updateProgress(IProgressMonitor progressMonitor, Object node) {

-		if (node instanceof ITypedElement) {

-			String name= ((ITypedElement)node).getName();

-			String fmt= Utilities.getString("Differencer.progressFormat"); //$NON-NLS-1$

-			String msg= MessageFormat.format(fmt, new String[] { name });

-			progressMonitor.subTask(msg);

-			//progressMonitor.worked(1);

-		}

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java
deleted file mode 100644
index 5707300..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import java.io.ByteArrayInputStream;

-import java.io.InputStream;

-import java.util.ArrayList;

-import java.util.Iterator;

-

-import org.eclipse.jface.text.*;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.compare.*;

-import org.eclipse.compare.internal.Utilities;

-import org.eclipse.compare.contentmergeviewer.*;

-import org.eclipse.compare.contentmergeviewer.IDocumentRange;

-import org.eclipse.compare.contentmergeviewer.TextMergeViewer;

-

-

-/**

- * A document range node represents a structural element

- * when performing a structure compare of documents.

- * <code>DocumentRangeNodes</code> are created while parsing the document and represent

- * a semantic entity (e.g. a Java class or method).

- * As a consequence of the parsing a <code>DocumentRangeNode</code> maps to a range

- * of characters in the document.

- * <p>

- * Since a <code>DocumentRangeNode</code> implements the <code>IStructureComparator</code>

- * and <code>IStreamContentAccessor</code> interfaces it can be used as input to the

- * differencing engine. This makes it possible to perform

- * a structural diff on a document and have the nodes and leaves of the compare easily map

- * to character ranges within the document.

- * <p>

- * Subclasses may add additional state collected while parsing the document.

- * </p> 

- * @see Differencer

- */

-public class DocumentRangeNode

-		implements IDocumentRange, IStructureComparator, IEditableContent, IStreamContentAccessor {

-

-	private static final boolean POS_UPDATE= true;

-		

-	private IDocument fBaseDocument;

-	private Position fRange; // the range in the base document

-	private int fTypeCode;

-	private String fID;

-	private Position fAppendPosition; // a position where to insert a child textually

-	private ArrayList fChildren;

-

-	/**

-	 * Creates a new <code>DocumentRangeNode</code> for the given range within the specified

-	 * document. The <code>typeCode</code> is uninterpreted client data. The ID is used when comparing

-	 * two nodes with each other: i.e. the differencing engine performs a content compare 

-	 * on two nodes if their IDs are equal.

-	 *

-	 * @param typeCode a type code for this node

-	 * @param id an identifier for this node

-	 * @param document document on which this node is based on

-	 * @param start start position of range within document

-	 * @param length length of range

-	 */

-	public DocumentRangeNode(int typeCode, String id, IDocument document, int start, int length) {

-		

-		fTypeCode= typeCode;

-		fID= id;

-		

-		fBaseDocument= document;

-		fBaseDocument.addPositionCategory(RANGE_CATEGORY);

-		fRange= new Position(start, length);

-		

-		if (POS_UPDATE) {

-			try {

-				document.addPosition(RANGE_CATEGORY, fRange);

-			} catch (BadPositionCategoryException ex) {

-			} catch (BadLocationException ex) {

-			}

-		}

-	}

-

-	/* (non Javadoc)

-	 * see IDocumentRange.getDocument

-	 */

-	public IDocument getDocument() {

-		return fBaseDocument;

-	}

-	

-	/* (non Javadoc)

-	 * see IDocumentRange.getRange

-	 */

-	public Position getRange() {

-		return fRange;

-	}

-	

-	/**

-	 * Returns the type code of this node.

-	 * The type code is uninterpreted client data which can be set in the constructor.

-	 *

-	 * @return the type code of this node

-	 */

-	public int getTypeCode() {

-		return fTypeCode;

-	}

-	

-	/**

-	 * Returns this node's id.

-	 * It is used in <code>equals</code> and <code>hashcode</code>.

-	 *

-	 * @return the node's id

-	 */

-	public String getId() {

-		return fID;

-	}

-

-	/**

-	 * Sets this node's id.

-	 * It is used in <code>equals</code> and <code>hashcode</code>.

-	 *

-	 * @param id the new id for this node

-	 */

-	public void setId(String id) {

-		fID= id;

-	}

-

-	/**

-	 * Adds the given node as a child.

-	 *

-	 * @param node the node to add as a child

-	 */

-	public void addChild(DocumentRangeNode node) {

-		if (fChildren == null)

-			fChildren= new ArrayList();

-		fChildren.add(node);

-	}

-

-	/* (non Javadoc)

-	 * see IStructureComparator.getChildren

-	 */

-	public Object[] getChildren() {

-		if (fChildren != null)

-			return fChildren.toArray(); 

-		return new Object[0];

-	}

-

-	/**

-	 * Sets the length of the range of this node.

-	 *

-	 * @param length the length of the range

-	 */

-	public void setLength(int length) {

-		getRange().setLength(length);

-	}

-

-	/**

-	 * Sets a position within the document range that can be used to (legally) insert

-	 * text without breaking the syntax of the document.

-	 * <p>

-	 * E.g. when parsing a Java document the "append position" of a <code>DocumentRangeNode</code>

-	 * representating a Java class could be the character position just before the closing bracket.

-	 * Inserting the text of a new method there would not disturb the syntax of the class.

-	 *

-	 * @param pos the character position within the underlying document where text can be legally inserted

-	 */

-	public void setAppendPosition(int pos) {

-		if (POS_UPDATE) {

-			fBaseDocument.removePosition(fAppendPosition);

-			try {

-				Position p= new Position(pos);

-				fBaseDocument.addPosition(RANGE_CATEGORY, p);

-				fAppendPosition= p;

-			} catch (BadPositionCategoryException ex) {

-			} catch (BadLocationException ex) {

-				// ignore

-			}

-		} else {

-			fAppendPosition= new Position(pos);

-		}

-	}

-

-	/**

-	 * Returns the position that has been set with <code>setAppendPosition</code>.

-	 * If <code>setAppendPosition</code> hasn't been called, the position after the last character

-	 * of this range is returned.

-	 *

-	 * @return a position where text can be legally inserted

-	 */

-	public Position getAppendPosition() {

-		if (fAppendPosition == null) {

-			if (POS_UPDATE) {

-				try {

-					Position p= new Position(fBaseDocument.getLength());

-					fBaseDocument.addPosition(RANGE_CATEGORY, p);

-					fAppendPosition= p;

-				} catch (BadPositionCategoryException ex) {

-				} catch (BadLocationException ex) {

-					// ignore

-				}

-			} else {

-				fAppendPosition= new Position(fBaseDocument.getLength());

-			}

-		}

-		return fAppendPosition;

-	}

-

-	/**

-	 * Implementation based on <code>getID</code>.

-	 */

-	public boolean equals(Object other) {

-		if (other != null && other.getClass() == getClass()) {

-			DocumentRangeNode tn= (DocumentRangeNode) other;

-			return fTypeCode == tn.fTypeCode && fID.equals(tn.fID);

-		}

-		return super.equals(other);

-	}

-

-	/**

-	 * Implementation based on <code>getID</code>.

-	 */

-	public int hashCode() {

-		return fID.hashCode();

-	}

-

-	/**

-	 * Find corresponding position

-	 */

-	private Position findCorrespondingPosition(DocumentRangeNode otherParent, DocumentRangeNode child) {

-

-		// we try to find a predecessor of left Node which exists on the right side

-

-		if (child != null && fChildren != null) {

-			int ix= otherParent.fChildren.indexOf(child);

-			if (ix >= 0) {

-

-				for (int i= ix - 1; i >= 0; i--) {

-					DocumentRangeNode c1= (DocumentRangeNode) otherParent.fChildren.get(i);

-					int i2= fChildren.indexOf(c1);

-					if (i2 >= 0) {

-						DocumentRangeNode c= (DocumentRangeNode) fChildren.get(i2);

-						//System.out.println("  found corresponding: " + i2 + " " + c);

-						Position p= c.fRange;

-

-						//try {

-						Position po= new Position(p.getOffset() + p.getLength() + 1, 0);

-						//c.fBaseDocument.addPosition(RANGE_CATEGORY, po);

-						return po;

-						//} catch (BadLocationException ex) {

-						//}

-						//break;

-					}

-				}

-

-				for (int i= ix; i < otherParent.fChildren.size(); i++) {

-					DocumentRangeNode c1= (DocumentRangeNode) otherParent.fChildren.get(i);

-					int i2= fChildren.indexOf(c1);

-					if (i2 >= 0) {

-						DocumentRangeNode c= (DocumentRangeNode) fChildren.get(i2);

-						//System.out.println("  found corresponding: " + i2 + " " + c);

-						Position p= c.fRange;

-						//try {

-						Position po= new Position(p.getOffset(), 0);

-						//c.fBaseDocument.addPosition(RANGE_CATEGORY, po);

-						return po;

-						//} catch (BadLocationException ex) {

-						//}

-						//break;

-					}

-				}

-

-			}

-		}

-		return getAppendPosition();

-	}

-

-	private void add(String s, DocumentRangeNode parent, DocumentRangeNode child) {

-

-		Position p= findCorrespondingPosition(parent, child);

-		if (p != null) {

-			try {

-				fBaseDocument.replace(p.getOffset(), p.getLength(), s);

-			} catch (BadLocationException ex) {

-				// ignore

-			}

-		}

-	}

-	

-	/* (non Javadoc)

-	 * see IStreamContentAccessor.getContents

-	 */

-	public InputStream getContents() {

-		String s;

-		try {

-			s= fBaseDocument.get(fRange.getOffset(), fRange.getLength());

-		} catch (BadLocationException ex) {

-			s= ""; //$NON-NLS-1$

-		}

-		return new ByteArrayInputStream(s.getBytes());

-	}

-

-	/* (non Javadoc)

-	 * see IEditableContent.isEditable

-	 */

-	public boolean isEditable() {

-		return true;

-	}

-		

-	/* (non Javadoc)

-	 * see IEditableContent.replace

-	 */

-	public ITypedElement replace(ITypedElement child, ITypedElement other) {

-

-		DocumentRangeNode src= null;

-		String srcContents= ""; //$NON-NLS-1$

-		

-		if (other != null) {

-			src= (DocumentRangeNode) child;

-			

-			if (other instanceof IStreamContentAccessor) {

-				try {

-					InputStream is= ((IStreamContentAccessor)other).getContents();

-					byte[] bytes= Utilities.readBytes(is);

-					srcContents= new String(bytes);

-				} catch(CoreException ex) {

-				}

-			}

-		}

-

-		if (child != null) { // there is a destination

-			

-//			if (child instanceof DocumentRangeNode) {

-//				DocumentRangeNode drn= (DocumentRangeNode) child;

-//

-//				IDocument doc= drn.getDocument();

-//				Position range= drn.getRange();

-//				try {

-//					doc.replace(range.getOffset(), range.getLength(), srcContents);

-//				} catch (BadLocationException ex) {

-//				}

-//			}

-		} else {

-			// no destination: we have to add the contents into the parent

-			add(srcContents, null /*srcParentNode*/, src);

-		}

-		return child;

-	}

-	

-	/* (non Javadoc)

-	 * see IEditableContent.setContent

-	 */

-	public void setContent(byte[] content) {

-//		fBaseDocument.set(new String(content));

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java
deleted file mode 100644
index badc216..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import org.eclipse.compare.ITypedElement;

-import org.eclipse.swt.graphics.Image;

-

-/**

- * Interface for objects used as input to a two-way or three-way compare viewer.

- * It defines API for accessing the three sides for the compare,

- * and a name and image which is used when displaying the three way input

- * in the UI, for example, in a title bar.

- * <p>

- * Note: at most two sides of an <code>ICompareInput</code> can be <code>null</code>,

- * (as it is normal for additions or deletions) but not all three.

- * <p>

- * <code>ICompareInput</code> provides methods for registering

- * <code>ICompareInputChangeListener</code>s

- * that get informed if one (or more)

- * of the three sides of an <code>ICompareInput</code> object changes its value.

- * <p>

- * For example when accepting an incoming addition

- * the (non-<code>null</code>) left side of an <code>ICompareInput</code>

- * is copied to the right side by means of method <code>copy</code>.

- * This should trigger a call to <code>compareInputChanged</code> of registered

- * <code>ICompareInputChangeListener</code>s. 

- * <p>

- * Clients can implement this interface, or use the convenience implementation 

- * <code>DiffNode</code>.

- * </p>

- * 

- * @see StructureDiffViewer

- * @see org.eclipse.compare.contentmergeviewer.ContentMergeViewer

- * @see DiffNode

- */

-public interface ICompareInput {

-

-	/**

-	 * Returns name of input.

-	 * This name is displayed when this input is shown in a viewer.

-	 * In many cases this name is the name of one of the non-<code>null</code> sides or a combination

-	 * thereof.

-	 *

-	 * @return name of input

-	 */

-	String getName();

-	

-	/**

-	 * Returns an image representing this input.

-	 * This image is typically displayed when this input is shown in a viewer.

-	 * In many cases this image is the image of one of the non-<code>null</code> sides.

-	 *

-	 * @return image representing this input, or <code>null</code> if no icon should be shown

-	 */

-	Image getImage();

-

-	/**

-	 * Returns the kind of difference between the

-	 * three sides ancestor, left and right.

-	 * This field is only meaningful if the <code>ICompareInput</code>

-	 * is the result of another compare. In this case it is used

-	 * together with <code>getImage</code> to compose a icon

-	 * which reflects the kind of difference between the two or three elements.

-	 *

-	 * @return kind of difference (see <code>Differencer</code>)

-	 */

-	int getKind();

-	

-	/**

-	 * Returns the ancestor side of this input.

-	 * Returns <code>null</code> if this input has no ancestor

-	 * or in the two-way compare case.

-	 *

-	 * @return the ancestor of this input, or <code>null</code>

-	 */

-	ITypedElement getAncestor();

-	

-	/**

-	 * Returns the left side of this input.

-	 * Returns <code>null</code> if there is no left side (deletion or addition).

-	 *

-	 * @return the left side of this input, or <code>null</code>

-	 */

-	ITypedElement getLeft();

-	

-	/**

-	 * Returns the right side of this input.

-	 * Returns <code>null</code> if there is no right side (deletion or addition).

-	 *

-	 * @return the right side of this input, or <code>null</code>

-	 */

-	ITypedElement getRight();

-	

-	/**

-	 * Registers the given listener for notification.

-	 * If the identical listener is already registered the method has no effect.

-	 *

-	 * @param listener the listener to register for changes of this input

-	 */

-	void addCompareInputChangeListener(ICompareInputChangeListener listener);

-	

-	/**

-	 * Unregisters the given listener.

-	 * If the identical listener is not registered the method has no effect.

-	 *

-	 * @param listener the listener to unregister

-	 */

-	void removeCompareInputChangeListener(ICompareInputChangeListener listener);

-	

-	/**

-	 * Copy one side (source) to the other side (destination) depending on the 

-	 * value of <code>leftToRight</code>. This method is called from

-	 * a merge viewer if a corresponding action ("take left" or "take right")

-	 * has been pressed.

-	 * <p>

-	 * The implementation should handle the following cases:

-	 * <UL>

-	 * <LI>

-	 * if the source side is <code>null</code> the destination must be deleted,

-	 * <LI>

-	 * if the destination is <code>null</code> the destination must be created

-	 * and filled with the contents from the source,

-	 * <LI>

-	 * if both sides are non-<code>null</code> the contents of source must be copied to destination.

-	 * </UL>

-	 * In addition the implementation should send out notification to the registered

-	 * <code>ICompareInputChangeListener</code>.

-	 * 

-	 * @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

-	 */

-	void copy(boolean leftToRight);

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java
deleted file mode 100644
index ba8d967..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-/**

- * Listener that gets informed if one (or more)

- * of the three sides of an <code>ICompareInput</code> object changes its value.

- * <p>

- * For example when accepting an incoming addition

- * the (non-null) left side of an <code>ICompareInput</code>

- * is copied to the right side (which was <code>null</code>).

- * This triggers a call to <code>compareInputChanged</code> of registered

- * <code>ICompareInputChangeListener</code>. 

- * <p>

- * Note however, that listener are not informed if the content of one of the sides changes.

- * <p>

- * Clients may implement this interface. It is also implemented by viewers that take 

- * an <code>ICompareInput</code> as input.

- * </p>

- */

-public interface ICompareInputChangeListener {

-	

-	/**

-	 * Called whenever the value (not the content) of one or more of the three sides 

- 	 * of a <code>ICompareInput</code> has changed.

-	 *

-	 * @param source the <code>ICompareInput</code> that has changed

-	 */

-	void compareInputChanged(ICompareInput source);

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java
deleted file mode 100644
index c87f30c..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import java.util.Iterator;

-

-/**

- * <code>IDiffContainer</code> is a <code>IDiffElement</code> with children.

- * <p>

- * <code>IDiffContainer</code> are the inner nodes displayed

- * by the <code>DiffTreeViewer</code>.

- * <code>IDiffContainer</code> are typically created as the result of performing

- * a compare with the <code>Differencer</code>.

- * <p>

- * Clients may implement this interface, or use one of the standard implementations,

- * <code>DiffContainer</code> or <code>DiffNode</code>.

- *

- * @see Differencer

- * @see DiffTreeViewer

- */

-public interface IDiffContainer extends IDiffElement {

-

-	/**

-	 * Returns whether this container has at least one child.

-	 * In some cases this methods avoids having to call the

-	 * potential more costly <code>getChildren</code> method.

-	 * 

-	 * @return <code>true</code> if this container has at least one child 

-	 */

-	boolean hasChildren();

-

-	/**

-	 * Returns the children of this container.

-	 * If this container has no children an empty array is returned (not <code>null</code>).

-	 * 

-	 * @return the children of this container as an array

-	 */

-	IDiffElement[] getChildren();

-

-	/**

-	 * Adds the given child to this container.

-	 * If the child is already contained in this container, this method has no effect.

-	 *

-	 * @param child the child to be added to this container

-	 */

-	void add(IDiffElement child);

-	

-	/**

-	 * Removes the given child from this container.

-	 * If the container becomes empty it is removed from its container.

-	 * If the child is not contained in this container, this method has no effect.

-	 *

-	 * @param child the child to be removed from this container

-	 */

-	void removeToRoot(IDiffElement child);

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java
deleted file mode 100644
index 32e858a..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import org.eclipse.compare.ITypedElement;

-

-/**

- * An <code>IDiffElement</code> is used in the <code>DiffTreeViewer</code>

- * to display the kind of change detected as the result of a two-way or three-way compare.

- * <p>

- * The base interface <code>ITypedElement</code> provides a name, a type, and an image.

- * <code>IDiffElement</code> adds API for maintaining a parent relationship.

- * <p>

- * <code>DiffTreeViewer</code> works on a tree of <code>IDiffElements</code>.

- * Leaf elements must implement the

- * <code>IDiffElement</code> interface, inner nodes the <code>IDiffContainer</code> interface.

- * <p>

- * <code>IDiffElement</code>s are typically created as the result of performing

- * a compare with the <code>Differencer</code>.

- * <p>

- * Clients may implement this interface, or use one of the standard implementations,

- * <code>DiffElement</code>, <code>DiffContainer</code>, or <code>DiffNode</code>.

- *

- * @see DiffTreeViewer

- * @see DiffElement

- * @see DiffContainer

- * @see DiffNode

- */

-public interface IDiffElement extends ITypedElement {

-	

-	/**

-	 * Returns the kind of difference as defined in <code>Differencer</code>.

-	 *

-	 * @return the kind of difference as defined in <code>Differencer</code>

-	 */

-	int getKind();

-

-	/**

-	 * Returns the parent of this element.

-	 * If the object is the root of a hierarchy <code>null</code> is returned.

-	 *

-	 * @return the parent of this element, or <code>null</code> if the element has no parent

-	 */

-	IDiffContainer getParent();

-

-	/**

-	 * Sets the parent of this element.

-	 *

-	 * @param parent the new parent of this element, or <code>null</code> if this

-	 *   element is to have no parent

-	 */

-	void setParent(IDiffContainer parent);

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java
deleted file mode 100644
index 6862653..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import java.util.Iterator;

-

-import org.eclipse.compare.ITypedElement;

-

-/**

- * Interface used to compare hierarchical structures.

- * It is used by the differencing engine.

- * <p>

- * Clients typically implement this interface in an adaptor class which 

- * wrappers the objects to be compared.

- *

- * @see org.eclipse.compare.ResourceNode

- * @see Differencer

- */

-public interface IStructureComparator {

-

-	/**

-	 * Returns an iterator for all children of this object or <code>null</code>

-	 * if there are no children.

-	 *

-	 * @return an array with all children of this object, or an empty array if there are no children

-	 */

-	Object[] getChildren();

-

-	/**

-	 * Returns whether some other object is "equal to" this one

-	 * with respect to a structural comparison. For example, when comparing

-	 * Java class methods, <code>equals</code> would return <code>true</code>

-	 * if two methods have the same signature (the argument names and the 

-	 * method body might differ).

-	 *

-	 * @param other the reference object with which to compare

-	 * @return <code>true</code> if this object is the same as the other argument; <code>false</code> otherwise

-	 * @see java.lang.Object#equals

-	 */

-	boolean equals(Object other);

-}

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator.java
deleted file mode 100644
index d3e9f3c..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import org.eclipse.compare.ITypedElement;

-import org.eclipse.jface.text.IDocument;

-

-/**

- * For creating a hierarchical structure of <code>IStructureComparators</code> for a

- * given input object.

- * In addition, it provides methods for locating a path in the hierarchical structure

- * and to map a node of this structure back to the corresponding input object.

- * <p>

- * Structure creators are used in the following contexts:

- * <ul>

- * <li>

- * the <code>StructureDiffViewer</code> uses an <code>IStructureCreator</code> to

- * build two (or three) tree structures of its input elements (method <code>getStructure</code>).

- * These trees are then compared with each other by means of the differencing engine and displayed

- * with the <code>DiffTreeViewer</code>,

- * </li>

- * <li>

- * the <code>ReplaceWithEditionDialog</code> uses an <code>IStructureCreator</code>

- * to map a path back to a range of characters in the textual representation.

- * </li>

- * </ul>

- * A <code>IStructureCreator</code> provides methods for rewriting the tree produced by the differencing

- * engine to support "smart" structural differencing. E.g. certain patterns of pairs of "addition"

- * and "deletion" nodes can be detected as renames and merged into a single node.

- * </p>

- * <p>

- * Clients may implement this interface; there is no standard implementation.

- * </p>

- *

- * @see StructureDiffViewer

- * @see org.eclipse.compare.EditionSelectionDialog

- * @see Differencer

- */

-public interface IStructureCreator {

-

-	/**

-	 * Returns a descriptive name which can be used in the UI of the <code>StructureDiffViewer</code>.

-	 *

-	 * @return a descriptive name for this <code>IStructureCreator</code>

-	 */

-	String getName();

-

-	/**

-	 * Creates a tree structure consisting of <code>IStructureComparator</code>s

-	 * from the given object and returns its root object.

-	 * Implementing this method typically involves parsing the input object.

-	 * In case of an error (e.g. a parsing error) the value <code>null</code> is returned.

-	 *

-	 * @param input the object from which to create the tree of <code>IStructureComparator</code>

-	 * @return the root node of the structure or <code>null</code> in case of error

-	 */

-	IStructureComparator getStructure(Object input);

-

-	/**

-	 * Creates the single node specified by path from the given input object.

-	 * In case of an error (e.g. a parsing error) the value <code>null</code> is returned.

-	 * This method is similar to <code>getStructure</code> but in

-	 * contrast to <code>getStructure</code> only a single node without any children must be returned.

-	 * This method is used in the <code>ReplaceWithEditionDialog</code> to locate a sub element

-	 * (e.g. a method) within an input object (e.g. a file containing source code).

-	 * <p>

-	 * One (not optimized) approach to implement this method is calling <code>getStructure(input)</code>

-	 * to build the full tree, and then finding that node within the tree that is specified

-	 * by <code>path</code>.

-	 * <p>

-	 * The syntax of <code>path</code> is not specified, because it is treated by the compare subsystem

-	 * as an opaque entity and is not further interpreted. Clients using this functionality

-	 * will pass a value of <code>path</code> to the <code>selectEdition</code>

-	 * method of <code>ReplaceWithEditionDialog</code> and will receive this value unchanged

-	 * as an argument to <code>locate</code>.

-	 *

-	 * @param path specifies a sub object within the input object

-	 * @param input the object from which to create the <code>IStructureComparator</code>

-	 * @return the single node specified by <code>path</code> or <code>null</code>

-	 *

-	 * @see org.eclipse.compare.EditionSelectionDialog#selectEdition

-	 */

-	IStructureComparator locate(Object path, Object input);

-

-	/**

-	 * Returns the contents of the given node as a string for the purpose

-	 * of performing a content comparison only (that is the string will not be visible in the UI).

-	 * If <code>ignoreWhitespace</code> is <code>true</code> all character sequences considered

-	 * whitespace should be removed from the returned string.

-	 *

-	 * @param node the node for which to return a string representation

-	 * @param ignoreWhitespace if <code>true</code> the returned string should not contain whitespace

-	 * @return the string contents of the given node

-	 */

-	String getContents(Object node, boolean ignoreWhitespace);

-

-	/**

-	 * FIXME: need better name?

-	 * Called whenever a copy operation has been performed on a tree node.

-	 *

-	 * @param node the node for which to save the new content

-	 * @param input the object from which the structure tree was created in <code>getStructure</code>

-	 */

-	void save(IStructureComparator node, Object input);

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
deleted file mode 100644
index 7a76674..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import org.eclipse.swt.events.DisposeEvent;

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.jface.util.PropertyChangeEvent;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.internal.*;

-

-

-/**

- * A diff tree viewer that can be configured with a <code>IStructureCreator</code>

- * to retrieve a hierarchical structure from the input object (an <code>ICompareInput</code>)

- * and perform a two-way or three-way compare on it.

- * <p>

- * This <code>DiffTreeViewer</code> supports the so called "smart" mode of the structure creator

- * by installing a button in the viewer's pane title bar.

- * <p>

- * This class may be instantiated; it is not intended to be subclassed outside

- * this package.

- * </p>

- *

- * @see IStructureCreator

- * @see ICompareInput

- */

-public class StructureDiffViewer extends DiffTreeViewer {

-		

-	private Differencer fDifferencer;

-	private boolean fThreeWay= false;

-	

-	private ITypedElement fAncestorInput;

-	private ITypedElement fLeftInput;

-	private ITypedElement fRightInput;

-	

-	private IStructureComparator fAncestorStructure;

-	private IStructureComparator fLeftStructure;

-	private IStructureComparator fRightStructure;

-	

-	private IStructureCreator fStructureCreator;

-	private IDiffContainer fRoot;

-	private IContentChangeListener fContentChangedListener;

-	private ICompareInputChangeListener fThreeWayInputChangedListener;

-	private CompareViewerSwitchingPane fParent;

-		

-	/**

-	 * Creates a new viewer for the given SWT tree control with the specified configuration.

-	 *

-	 * @param tree the tree control

-	 * @param configuration the configuration for this viewer

-	 */

-	public StructureDiffViewer(Tree tree, CompareConfiguration configuration) {

-		super(tree, configuration);

-		Composite c= tree.getParent();

-		if (c instanceof CompareViewerSwitchingPane)

-			fParent= (CompareViewerSwitchingPane) c;

-		initialize();

-	}

-	

-	/**

-	 * Creates a new viewer under the given SWT parent with the specified configuration.

-	 *

-	 * @param parent the SWT control under which to create the viewer

-	 * @param configuration the configuration for this viewer

-	 */

-	public StructureDiffViewer(Composite parent, CompareConfiguration configuration) {

-		super(parent, configuration);

-		if (parent instanceof CompareViewerSwitchingPane)

-			fParent= (CompareViewerSwitchingPane) parent;

-		initialize();

-	}

-	

-	private void initialize() {

-		

-		setAutoExpandLevel(3);

-		

-		fContentChangedListener= new IContentChangeListener() {

-			public void contentChanged(IContentChangeNotifier changed) {

-				StructureDiffViewer.this.contentChanged(changed);

-			}

-		};

-		fThreeWayInputChangedListener= new ICompareInputChangeListener() {

-			public void compareInputChanged(ICompareInput input) {

-				StructureDiffViewer.this.compareInputChanged(input);

-			}

-		};

-	}

-	

-	/**

-	 * Configures the <code>StructureDiffViewer</code> with a structure creator.

-	 * The structure creator is used to create a hierarchical structure

-	 * for each side of the viewer's input element of type <code>ICompareInput</code>.

-	 * <p>

-	 * If the structure creator's <code>canRewriteTree</code> returns <code>true</code>

-	 * the "smart" button in the viewer's pane control bar is enabled.

-	 *

-	 * @param structureCreator the new structure creator

-	 */

-	public void setStructureCreator(IStructureCreator structureCreator) {

-		if (fStructureCreator != structureCreator) {

-			fStructureCreator= structureCreator;

-			Control tree= getControl();

-			if (tree != null && !tree.isDisposed())

-				tree.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle());

-		}

-	}

-	

-	/**

-	 * Returns the structure creator or <code>null</code> if no

-	 * structure creator has been set with <code>setStructureCreator</code>.

-	 *

-	 * @return the structure creator or <code>null</code>

-	 */

-	public IStructureCreator getStructureCreator() {

-		return fStructureCreator;

-	}

-	

-	/**

-	 * Reimplemented to get the descriptive title for this viewer from the <code>IStructureCreator</code>.

-	 */

-	public String getTitle() {

-		if (fStructureCreator != null)

-			return fStructureCreator.getName();

-		return super.getTitle();

-	}

-	

-	/**

-	 * Overridden because the input of this viewer is not identical to the root of the tree.

-	 * The tree's root is a IDiffContainer that was returned from the method <code>diff</code>.

-	 * 

-	 * @return the root of the diff tree produced by method <code>diff</code>

-	 */

-	protected Object getRoot() {

-		return fRoot;

-	}

-	

-	/**

-	 * Overridden to create the comparable structures from the input object

-	 * and to feed them through the differencing engine. Note: for this viewer

-	 * the value from <code>getInput</code> is not identical to <code>getRoot</code>.

-	 */

-	protected void inputChanged(Object input, Object oldInput) {

-		if (input instanceof ICompareInput) {

-			compareInputChanged((ICompareInput) input);

-			if (input != oldInput)

-				initialSelection();

-		}

-	}

-	

-	protected void initialSelection() {

-		expandToLevel(2);

-	}

-

-	/* (non Javadoc)

-	 * Overridden to unregister all listeners.

-	 */

-	protected void handleDispose(DisposeEvent event) {

-		

-		compareInputChanged(null);

-		

-		fContentChangedListener= null;

-		fThreeWayInputChangedListener= null;

-				

-		super.handleDispose(event);

-	}

-	

-	/**

-	 * Recreates the comparable structures for the input sides.

-	 */

-	protected void compareInputChanged(ICompareInput input) {

-		ITypedElement t= null;

-		boolean changed= false;

-		

-		if (input != null)

-			t= input.getAncestor();

-			

-		fThreeWay= (t != null);

-		

-		if (t != fAncestorInput) {

-			if (fAncestorInput instanceof IContentChangeNotifier)

-				((IContentChangeNotifier)fAncestorInput).removeContentChangeListener(fContentChangedListener);

-			fAncestorInput= t;

-			if (fAncestorInput != null) {

-				fAncestorStructure= fStructureCreator.getStructure(fAncestorInput);

-				changed= true;

-			} else

-				fAncestorStructure= null;

-			if (fAncestorInput instanceof IContentChangeNotifier)

-				((IContentChangeNotifier)fAncestorInput).addContentChangeListener(fContentChangedListener);

-		}

-		

-		if (input != null)

-			t= input.getLeft();

-		if (t != fLeftInput) {

-			if (fLeftInput instanceof IContentChangeNotifier)

-				((IContentChangeNotifier)fLeftInput).removeContentChangeListener(fContentChangedListener);

-			fLeftInput= t;

-			if (fLeftInput != null) {

-				fLeftStructure= fStructureCreator.getStructure(fLeftInput);

-				changed= true;

-			} else

-				fLeftStructure= null;

-			if (fLeftInput instanceof IContentChangeNotifier)

-				((IContentChangeNotifier)fLeftInput).addContentChangeListener(fContentChangedListener);

-		}

-		

-		if (input != null)

-			t= input.getRight();

-		if (t != fRightInput) {

-			if (fRightInput instanceof IContentChangeNotifier)

-				((IContentChangeNotifier)fRightInput).removeContentChangeListener(fContentChangedListener);

-			fRightInput= t;

-			if (fRightInput != null) {

-				fRightStructure= fStructureCreator.getStructure(fRightInput);

-				changed= true;

-			} else

-				fRightStructure= null;

-			if (fRightInput instanceof IContentChangeNotifier)

-				((IContentChangeNotifier)fRightInput).addContentChangeListener(fContentChangedListener);

-		}

-		

-		if (changed)

-			diff();

-	}

-	

-	/**

-	 * Calls <code>diff</code> whenever the byte contents changes.

-	 */

-	protected void contentChanged(IContentChangeNotifier changed) {

-		

-		if (fStructureCreator == null)

-			return;

-			

-		if (changed != null) {

-			if (changed == fAncestorInput) {

-				fAncestorStructure= fStructureCreator.getStructure(fAncestorInput);

-			} else if (changed == fLeftInput) {

-				fLeftStructure= fStructureCreator.getStructure(fLeftInput);

-			} else if (changed == fRightInput) {

-				fRightStructure= fStructureCreator.getStructure(fRightInput);

-			} else

-				return;

-		} else {

-			fAncestorStructure= fStructureCreator.getStructure(fAncestorInput);

-			fLeftStructure= fStructureCreator.getStructure(fLeftInput);

-			fRightStructure= fStructureCreator.getStructure(fRightInput);

-		}

-		

-		diff();

-	}

-

-	protected void preDiffHook(IStructureComparator ancestor, IStructureComparator left, IStructureComparator right) {

-		// we do nothing here

-	}

-	

-	/**

-	 * Runs the difference engine and refreshes the tree.

-	 */

-	protected void diff() {

-		

-		preDiffHook(fAncestorStructure, fLeftStructure, fRightStructure);

-							

-		String message= null;

-		

-		if ((fThreeWay && fAncestorStructure == null) || fLeftStructure == null || fRightStructure == null) {

-			// could not get structure of one (or more) of the legs

-			fRoot= null;

-			message= CompareMessages.getString("StructureDiffViewer.StructureError");	//$NON-NLS-1$

-			

-		} else {	// calculate difference of the two (or three) structures

-

-			if (fDifferencer == null)

-				fDifferencer= new Differencer() {

-					protected boolean contentsEqual(Object o1, Object o2) {

-						return StructureDiffViewer.this.contentsEqual(o1, o2);

-					}

-					protected Object visit(Object data, int result, Object ancestor, Object left, Object right) {

-						Object o= super.visit(data, result, ancestor, left, right);

-						if (fLeftIsLocal && o instanceof DiffNode)

-							((DiffNode)o).swapSides(fLeftIsLocal);

-						return o;

-					}

-				};

-			

-			fRoot= (IDiffContainer) fDifferencer.findDifferences(fThreeWay, null, null,

-					fAncestorStructure, fLeftStructure, fRightStructure);

-					

-			if (fRoot == null || fRoot.getChildren().length == 0) {

-				message= CompareMessages.getString("StructureDiffViewer.NoStructuralDifferences");	//$NON-NLS-1$

-			} else {

-				postDiffHook(fDifferencer, fRoot);

-			}

-		}

-		if (fParent != null)

-			fParent.setTitleArgument(message);

-			

-		refresh(getRoot());

-	}

-	

-	protected void postDiffHook(Differencer differencer, IDiffContainer root) {

-		// we do nothing here

-	}

-	

-	/**

-	 * Performs a byte compare on the given objects.

-	 * Called from the difference engine.

-	 * Returns <code>null</code> if no structure creator has been set.

-	 */

-	private boolean contentsEqual(Object o1, Object o2) {

-		if (fStructureCreator != null) {

-			boolean ignoreWhiteSpace= Utilities.getBoolean(getCompareConfiguration(), CompareConfiguration.IGNORE_WHITESPACE, false);		

-			String s1= fStructureCreator.getContents(o1, ignoreWhiteSpace);

-			String s2= fStructureCreator.getContents(o2, ignoreWhiteSpace);

-			if (s1 == null || s2 == null)

-				return false;

-			return s1.equals(s2);

-		}

-		return false;

-	}

-	

-	/**

-	 * Tracks property changes of the configuration object.

-	 * Clients may override to track their own property changes.

-	 * In this case they must call the inherited method.

-	 */

-	protected void propertyChange(PropertyChangeEvent event) {

-		String key= event.getProperty();

-		if (key.equals(CompareConfiguration.IGNORE_WHITESPACE))

-			diff();

-		else

-			super.propertyChange(event);

-	}

-		

-	/**

-	 * Overridden to call the <code>save</code> method on the structure creator after

-	 * nodes have been copied from one side to the other side of an 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

-	 */

-	protected void copySelected(boolean leftToRight) {

-		super.copySelected(leftToRight);

-		

-		if (fStructureCreator != null)

-			fStructureCreator.save(

-							leftToRight ? fRightStructure : fLeftStructure,

-							leftToRight ? fRightInput : fLeftInput);

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/package.html b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/package.html
deleted file mode 100644
index b0cc1b3..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/package.html
+++ /dev/null
@@ -1,50 +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>

-Provides support for finding and displaying the differences

-between hierarchically structured data.

-<h2>

-Package Specification</h2>

-The class <tt>Differencer</tt> is a differencing engine for hierarchically

-structured data. It takes two or three inputs and performs a two-way or

-three-way compare on them.

-<p>If the input elements to the differencing engine implement the <tt>IStructureComparator</tt>

-interface the engine recursively applies itself&nbsp; to the children of

-the input element. Leaf elements must implement the <tt>IStreamContentAccessor</tt>

-interface (see package <tt>org.eclipse.compare</tt>) so that the

-differencer can perform a bytewise comparison on them.

-<p>By default the differencing engine returns the result of the compare

-as a tree of <tt>DiffNode</tt> objects. Every <tt>DiffNode</tt> describes

-the changes among the two or three inputs.

-<p>A tree of <tt>DiffNodes</tt> can be displayed in a <tt>DiffTreeViewer</tt>.

-The <tt>DiffTreeViewer</tt> requires that inner nodes of the tree implement

-the <tt>IDiffContainer</tt> interface and leafs the <tt>IDiffElement</tt>

-interface.

-<p>The typical steps to compare hierarchically structured data and to display

-the differences would be to:

-<ul>

-<li>

-map the input data into a tree of <tt>IStructureComparator</tt> and <tt>IStreamContentAccessor</tt>s,</li>

-

-<li>

-perform the compare operation by means of the <tt>Differencer</tt>, and</li>

-

-<li>

-feed the differencing result into the <tt>DiffTreeViewer</tt>.</li>

-

-</ul>

-The <tt>StructureDiffViewer</tt> is a specialized <tt>DiffTreeViewer</tt>

-that automates the three steps from above. It takes a single input object

-of type <tt>ICompareInput</tt> from which it retrieves the two or three

-input elements to compare. Then it uses a <tt>IStructureCreator</tt> to

-extract a tree of <tt>IStructureComparator</tt> and <tt>IStreamContentAccessor</tt>

-from them. These trees are then compared with the differencing engine and

-the result is displayed in the tree viewer.

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/doc/hglegal.htm b/bundles/org.eclipse.compare/doc/hglegal.htm
deleted file mode 100644
index b071dbd..0000000
--- a/bundles/org.eclipse.compare/doc/hglegal.htm
+++ /dev/null
@@ -1,14 +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.73 [en] (Win98; U) [Netscape]">

-   <title>Legal Notices</title>

-</head>

-<body>

-

-<h3>

-<a NAME="Notices"></a>Notices</h3>

-(c) Copyright IBM Corp. 2000, 2001. All Rights Reserved.

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/doc/ngibmcpy.gif b/bundles/org.eclipse.compare/doc/ngibmcpy.gif
deleted file mode 100644
index 360f8e9..0000000
--- a/bundles/org.eclipse.compare/doc/ngibmcpy.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/doc/org_eclipse_compare.html b/bundles/org.eclipse.compare/doc/org_eclipse_compare.html
deleted file mode 100644
index c0e152c..0000000
--- a/bundles/org.eclipse.compare/doc/org_eclipse_compare.html
+++ /dev/null
@@ -1,43 +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]">

-   <title>Compare Infrastructure Extension Points</title>

-</head>

-<body link="#0000FF" vlink="#800080">

-

-<center>

-<h1>

-IBM Eclipse Platform Compare</h1></center>

-This document lists all of the extension points that the compare plug-in

-makes available to tool developers.

-<p>All XML sub-elements defined in the individual extension point documents

-may appear more than once inside an extension element. For example, an

-<tt>org.eclipse.compare.contentMergeViewers</tt> extension may contain

-several instances of <tt>viewer</tt> elements. Although making one extension

-per sub-element is not technically incorrect, we recommend grouping for

-consistent style. It can also improve platform startup time because there

-will be fewer extensions to process.

-<br>

-<hr WIDTH="100%">

-<h1>

-Extension Points</h1>

-The following extension points can be used to extend the capabilities of

-the compare infrastructure:

-<ul>

-<li>

-<a href="org_eclipse_compare_contentMergeViewers.html">org.eclipse.compare.contentMergeViewers</a></li>

-

-<li>

-<a href="org_eclipse_compare_contentViewers.html">org.eclipse.compare.contentViewers</a></li>

-

-<li>

-<a href="org_eclipse_compare_structureMergeViewers.html">org.eclipse.compare.structureMergeViewers</a></li>

-

-<li>

-<a href="org_eclipse_compare_structureCreators.html">org.eclipse.compare.structureCreators</a></li>

-</ul>

-<a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corp. 2000, 2001.  All Rights Reserved." BORDER=0 height=12 width=195></a>

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/doc/org_eclipse_compare_contentMergeViewers.html b/bundles/org.eclipse.compare/doc/org_eclipse_compare_contentMergeViewers.html
deleted file mode 100644
index aebc43e..0000000
--- a/bundles/org.eclipse.compare/doc/org_eclipse_compare_contentMergeViewers.html
+++ /dev/null
@@ -1,55 +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]">

-   <title>Compare Extension Points: contentMergeViewers</title>

-</head>

-<body link="#0000FF" vlink="#800080">

-

-<center>

-<h1>

-ContentMergeViewers</h1></center>

-<b><i>Identifier: </i></b>org.eclipse.compare.contentMergeViewers

-<p><b><i>Description: </i></b>This extension point allows to plug in a

-compare/merge viewer for specific content types. The viewer must extend

-<tt>org.eclipse.jface.viewers.Viewer</tt>.

-<br>However since viewers don't have a default constructor the extension

-point must implement a factory object for viewers: the interface <tt>org.eclipse.compare.IViewerCreator</tt>.

-<p><b><i>Configuration Markup:</i></b>

-<p><tt>&nbsp;&nbsp; &lt;!ELEMENT viewer EMPTY></tt>

-<br><tt>&nbsp;&nbsp; &lt;!ATTLIST viewer</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp; ></tt>

-<ul>

-<li>

-<b>id</b> - a unique identifier that can be used to reference the viewer</li>

-

-<li>

-<b>class</b> - name of a class that implements a factory for the content

-merge viewer and implements <tt>org.eclipse.compare.IViewerCreator</tt></li>

-

-<li>

-<b>extensions </b>- a comma separated list of file extensions e.g . "java,

-gif"</li>

-</ul>

-<b><i>Examples:</i></b>

-<br>The following is an example of compare/merge viewer for text files

-(extension "txt"):

-<p>&lt;extension point = "org.eclipse.compare.contentMergeViewers">

-<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;viewer

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id="org.eclipse.compare.contentmergeviewer.TextMergeViewer"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.eclipse.compare.internal.TextMergeViewerCreator"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions="txt"

-<br>&nbsp;&nbsp;&nbsp; />

-<br>&lt;/extension>

-<p><b><i>Supplied Implementation:</i></b>

-<br>The Compare UI plugin defines content viewers for text, binary contents,

-and images.

-<p><a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corp. 2000, 2001.  All Rights Reserved." BORDER=0 height=12 width=195></a>

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/doc/org_eclipse_compare_contentViewers.html b/bundles/org.eclipse.compare/doc/org_eclipse_compare_contentViewers.html
deleted file mode 100644
index 1a877ed..0000000
--- a/bundles/org.eclipse.compare/doc/org_eclipse_compare_contentViewers.html
+++ /dev/null
@@ -1,56 +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]">

-   <title>Compare Extension Points: contentViewers</title>

-</head>

-<body link="#0000FF" vlink="#800080">

-

-<center>

-<h1>

-ContentViewers</h1></center>

-<b><i>Identifier: </i></b>org.eclipse.compare.contentViewers

-<p><b><i>Description: </i></b>This extension point allows to plug in a

-viewer for specific content types. These viewers are used in the EditionSelectionDialog

-when presenting an edition of a resource or a subsection thereof. The viewer

-must extend

-<tt>org.eclipse.jface.viewers.Viewer</tt> and must accept a

-viewer input of type <tt>IStreamContentAccessor</tt>.

-<br>However since viewers don't have a default constructor the extension

-point must implement a factory object for viewers: the interface <tt>org.eclipse.compare.IViewerCreator</tt>.

-<p><b><i>Configuration Markup:</i></b>

-<p><tt>&nbsp;&nbsp; &lt;!ELEMENT viewer EMPTY></tt>

-<br><tt>&nbsp;&nbsp; &lt;!ATTLIST viewer</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp; ></tt>

-<ul>

-<li>

-<b>id</b> - a unique identifier that can be used to reference the viewer</li>

-

-<li>

-<b>class</b> - name of a class that implements a factory for the content

-merge viewer and implements <tt>org.eclipse.compare.IViewerCreator</tt></li>

-

-<li>

-<b>extensions </b>- a comma separated list of file extensions e.g . "java,

-gif"</li>

-</ul>

-<b><i>Examples:</i></b>

-<br>The following is an example of a viewer for text files (extension "txt"):

-<p>&lt;extension point = "org.eclipse.compare.contentViewers">

-<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;viewer

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id="org.eclipse.compare.internal.TextViewer"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.eclipse.compare.internal.TextViewerCreator"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions="txt"

-<br>&nbsp;&nbsp;&nbsp; />

-<br>&lt;/extension>

-<p><b><i>Supplied Implementation:</i></b>

-<br>The Compare UI plugin defines content viewers for text and images.

-<p><a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corp. 2000, 2001.  All Rights Reserved." BORDER=0 height=12 width=195></a>

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/doc/org_eclipse_compare_structureCreators.html b/bundles/org.eclipse.compare/doc/org_eclipse_compare_structureCreators.html
deleted file mode 100644
index d48dd73..0000000
--- a/bundles/org.eclipse.compare/doc/org_eclipse_compare_structureCreators.html
+++ /dev/null
@@ -1,53 +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]">

-   <title>Compare Extension Points: structureCreators</title>

-</head>

-<body link="#0000FF" vlink="#800080">

-

-<center>

-<h1>

-StructureCreators</h1></center>

-<b><i>Identifier: </i></b>org.eclipse.compare.structureCreators

-<p><b><i>Description: </i></b>This extension point allows to plug in an

-object that produces a tree structure of <tt>IStructureComparator</tt>

-for a given content.

-<p><b><i>Configuration Markup:</i></b>

-<p><tt>&nbsp;&nbsp; &lt;!ELEMENT structureCreator EMPTY></tt>

-<br><tt>&nbsp;&nbsp; &lt;!ATTLIST structureCreator</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp; ></tt>

-<ul>

-<li>

-<b>id</b> - a unique identifier that can be used to reference the structure

-creator</li>

-

-<li>

-<b>class</b> - name of a class that implements the strcuture creator and

-implements <tt>org.eclipse.compare.structuremergeviewer.IStructureComparator</tt></li>

-

-<li>

-<b>extensions </b>- a comma separated list of file extensions e.g . "java,

-properties"</li>

-</ul>

-<b><i>Examples:</i></b>

-<br>The following is an example of a structure creator for java files (extension

-"java"):

-<p>&lt;extension point = "org.eclipse.compare.structureCreators">

-<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;structureCreator

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id="org.eclipse.compare.JavaStructureCreator"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.eclipse.compare.JavaStructureCreator"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions="java"

-<br>&nbsp;&nbsp;&nbsp; />

-<br>&lt;/extension>

-<p><b><i>Supplied Implementation:</i></b>

-<br>The Compare UI plugin defines a structure creator for zip archives.

-<p><a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corp. 2000, 2001.  All Rights Reserved." BORDER=0 height=12 width=195></a>

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/doc/org_eclipse_compare_structureMergeViewers.html b/bundles/org.eclipse.compare/doc/org_eclipse_compare_structureMergeViewers.html
deleted file mode 100644
index 187fc44..0000000
--- a/bundles/org.eclipse.compare/doc/org_eclipse_compare_structureMergeViewers.html
+++ /dev/null
@@ -1,53 +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]">

-   <title>Compare Extension Points: structureMergeViewers</title>

-</head>

-<body link="#0000FF" vlink="#800080">

-

-<center>

-<h1>

-StructureMergeViewers</h1></center>

-<b><i>Identifier: </i></b>org.eclipse.compare.structureMergeViewers

-<p><b><i>Description: </i></b>This extension point allows to plug in a

-compare/merge viewer for structured content. The viewer must extend <tt>org.eclipse.jface.viewers.Viewer</tt>.

-However since viewers don't have a default constructor the extension point

-must implement a factory object for viewers: the interface <tt>org.eclipse.compare.IViewerCreator</tt>.

-<p><b><i>Configuration Markup:</i></b>

-<p><tt>&nbsp;&nbsp; &lt;!ELEMENT viewer EMPTY></tt>

-<br><tt>&nbsp;&nbsp; &lt;!ATTLIST viewer</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp; ></tt>

-<ul>

-<li>

-<b>id</b> - a unique identifier that can be used to reference the viewer</li>

-

-<li>

-<b>class</b> - name of a class that implements a factory for the strcuture

-merge viewer and implements <tt>org.eclipse.compare.IViewerCreator</tt></li>

-

-<li>

-<b>extensions </b>- a comma separated list of file extensions e.g . "zip,

-jar"</li>

-</ul>

-<b><i>Examples:</i></b>

-<br>The following is an example of compare/merge viewer for zip files (extension

-"zip"):

-<p>&lt;extension point = "org.eclipse.compare.structureMergeViewers">

-<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;viewer

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id="org.eclipse.compare.ZipCompareViewer"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.eclipse.compare.ZipCompareViewerCreator"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions="zip"

-<br>&nbsp;&nbsp;&nbsp; />

-<br>&lt;/extension>

-<p><b><i>Supplied Implementation:</i></b>

-<br>The Compare UI plugin defines a structure compare viewer for zip archives.

-<p><a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corp. 2000, 2001.  All Rights Reserved." BORDER=0 height=12 width=195></a>

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/ancestorpane_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/ancestorpane_co.gif
deleted file mode 100644
index 0088c97..0000000
--- a/bundles/org.eclipse.compare/icons/full/clcl16/ancestorpane_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif
deleted file mode 100644
index 6c83c45..0000000
--- a/bundles/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif
deleted file mode 100644
index a3a444a..0000000
--- a/bundles/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif
deleted file mode 100644
index 706dc02..0000000
--- a/bundles/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif
deleted file mode 100644
index b95e26a..0000000
--- a/bundles/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/next_nav.gif b/bundles/org.eclipse.compare/icons/full/clcl16/next_nav.gif
deleted file mode 100644
index 8392f33..0000000
--- a/bundles/org.eclipse.compare/icons/full/clcl16/next_nav.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/prev_nav.gif b/bundles/org.eclipse.compare/icons/full/clcl16/prev_nav.gif
deleted file mode 100644
index 9b278e6..0000000
--- a/bundles/org.eclipse.compare/icons/full/clcl16/prev_nav.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif
deleted file mode 100644
index c2a47b6..0000000
--- a/bundles/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif
deleted file mode 100644
index 3aabbce..0000000
--- a/bundles/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif b/bundles/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif
deleted file mode 100644
index 2045dae..0000000
--- a/bundles/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif b/bundles/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif
deleted file mode 100644
index ecde52e..0000000
--- a/bundles/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif b/bundles/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif
deleted file mode 100644
index 097ecdd..0000000
--- a/bundles/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/cview16/compare_view.gif b/bundles/org.eclipse.compare/icons/full/cview16/compare_view.gif
deleted file mode 100644
index 41800a0..0000000
--- a/bundles/org.eclipse.compare/icons/full/cview16/compare_view.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif
deleted file mode 100644
index 6e00dee..0000000
--- a/bundles/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif
deleted file mode 100644
index cb11ac9..0000000
--- a/bundles/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif
deleted file mode 100644
index 202b041..0000000
--- a/bundles/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif
deleted file mode 100644
index 4e9a3eb..0000000
--- a/bundles/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif
deleted file mode 100644
index e84103f..0000000
--- a/bundles/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/next_nav.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/next_nav.gif
deleted file mode 100644
index 6cbeced..0000000
--- a/bundles/org.eclipse.compare/icons/full/dlcl16/next_nav.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif
deleted file mode 100644
index a3441a0..0000000
--- a/bundles/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif
deleted file mode 100644
index 6f55d90..0000000
--- a/bundles/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif
deleted file mode 100644
index 2a8541c..0000000
--- a/bundles/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif b/bundles/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif
deleted file mode 100644
index ecab864..0000000
--- a/bundles/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif b/bundles/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif
deleted file mode 100644
index c76fcc7..0000000
--- a/bundles/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif b/bundles/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif
deleted file mode 100644
index 55147cc..0000000
--- a/bundles/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif
deleted file mode 100644
index 3ce77c8..0000000
--- a/bundles/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif
deleted file mode 100644
index d9f5900..0000000
--- a/bundles/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif
deleted file mode 100644
index 61289f1..0000000
--- a/bundles/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif
deleted file mode 100644
index 4fdde61..0000000
--- a/bundles/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif
deleted file mode 100644
index feb14bf..0000000
--- a/bundles/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/next_nav.gif b/bundles/org.eclipse.compare/icons/full/elcl16/next_nav.gif
deleted file mode 100644
index 03b7af3..0000000
--- a/bundles/org.eclipse.compare/icons/full/elcl16/next_nav.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/prev_nav.gif b/bundles/org.eclipse.compare/icons/full/elcl16/prev_nav.gif
deleted file mode 100644
index dd65c52..0000000
--- a/bundles/org.eclipse.compare/icons/full/elcl16/prev_nav.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif
deleted file mode 100644
index e0a262e..0000000
--- a/bundles/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif
deleted file mode 100644
index 3e45390..0000000
--- a/bundles/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif b/bundles/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif
deleted file mode 100644
index 4c25322..0000000
--- a/bundles/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/etool16/conflict_edit.gif b/bundles/org.eclipse.compare/icons/full/etool16/conflict_edit.gif
deleted file mode 100644
index b4451ec..0000000
--- a/bundles/org.eclipse.compare/icons/full/etool16/conflict_edit.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif b/bundles/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif
deleted file mode 100644
index f816c9e..0000000
--- a/bundles/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/eview16/compare_view.gif b/bundles/org.eclipse.compare/icons/full/eview16/compare_view.gif
deleted file mode 100644
index 1030b6e..0000000
--- a/bundles/org.eclipse.compare/icons/full/eview16/compare_view.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/obj16/day_obj.gif b/bundles/org.eclipse.compare/icons/full/obj16/day_obj.gif
deleted file mode 100644
index 96aae05..0000000
--- a/bundles/org.eclipse.compare/icons/full/obj16/day_obj.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/obj16/resource_obj.gif b/bundles/org.eclipse.compare/icons/full/obj16/resource_obj.gif
deleted file mode 100644
index d1e679e..0000000
--- a/bundles/org.eclipse.compare/icons/full/obj16/resource_obj.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/add_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/add_ov.gif
deleted file mode 100644
index 2a81156..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/add_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/chg_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/chg_ov.gif
deleted file mode 100644
index 67b25c4..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/chg_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif
deleted file mode 100644
index e049755..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif
deleted file mode 100644
index 020fc54..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif
deleted file mode 100644
index 39ed511..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/del_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/del_ov.gif
deleted file mode 100644
index 675c20f..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/del_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/error_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/error_ov.gif
deleted file mode 100644
index 95e4db6..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/error_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif
deleted file mode 100644
index 0dc3ea8..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif
deleted file mode 100644
index f719405..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/indel_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/indel_ov.gif
deleted file mode 100644
index 3e107d2..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/indel_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif
deleted file mode 100644
index 780da98..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif
deleted file mode 100644
index 4f6a316..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif
deleted file mode 100644
index ab48981..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif
deleted file mode 100644
index 14ba011..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif
deleted file mode 100644
index 0aca3c4..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif
deleted file mode 100644
index c377537..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif
deleted file mode 100644
index 11c2d5d..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif
deleted file mode 100644
index 704d706..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif b/bundles/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif
deleted file mode 100644
index 95ec301..0000000
--- a/bundles/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugin.properties b/bundles/org.eclipse.compare/plugin.properties
deleted file mode 100644
index 18971a0..0000000
--- a/bundles/org.eclipse.compare/plugin.properties
+++ /dev/null
@@ -1,130 +0,0 @@
-#########################################

-# (c) Copyright IBM Corp. 2000, 2001.

-# All Rights Reserved.

-#########################################

-#

-# Resource strings for Compare Plug-in

-#

-pluginName= Compare Support

-providerName=Eclipse.org

-

-#

-# Extension point names

-#

-structureCreators= Structure Creator

-structureMergeViewers= Structure Merge Viewer

-contentMergeViewers= Content Merge Viewer

-contentViewers= Content Viewer

-

-#

-# CompareUIPlugin

-#

-CompareUIPlugin.dialogTitle=Compare

-CompareUIPlugin.noActiveWorkbenchPage=Can't find active workbench page

-CompareUIPlugin.compareFailed=Compare Failed

-CompareUIPlugin.openEditorError=Problems Opening Editor

-CompareUIPlugin.noDifferences=There are no differences between the selected inputs.

-

-#

-# Compare Editor

-#

-defaultCompareEditor.name= Default Compare Editor

-CompareEditor.saveError.title= Save Error

-CompareEditor.cantSaveError= Can''t save contents ({0})

-CompareEditor.invalidInput=Invalid Input: Must be CompareEditorInput

-

-#

-# Context menu & actions

-#

-CompareWithMenu.label= Comp&are With

-

-CompareWithEachOtherAction.label= &Each Other

-CompareWithEachOtherAction.tooltip= Compare the Selected Resources

-

-CompareWithPatchAction.label= P&atch...

-CompareWithPatchAction.tooltip= Compare the Selected Resource with a Patch

-

-CompareWithHistoryAction.label= &Local History...

-CompareWithHistoryAction.tooltip= Compare the Selected Resource with Local History

-

-ReplaceWithMenu.label= Rep&lace With

-

-ReplaceFromHistoryAction.label= &Local History...

-ReplaceFromHistoryAction.tooltip= Replace the Selected Resource with Local History

-

-ReplaceWithPreviousFromHistoryAction.label= &Previous From Local History

-ReplaceWithPreviousFromHistoryAction.tooltip= Replace the Selected Resource with the Previous from Local History

-

-addFromHistoryAction.label= Restore From Local Histor&y...

-addFromHistoryAction.tooltip= Restore Deleted Files From Local History

-

-#

-# Preference Page

-#

-ComparePreferencePage.name= Compare

-ComparePreferencePage.initiallyShowAncestorPane.label= Initially show a&ncestor pane

-ComparePreferencePage.showPseudoConflicts.label= Show &pseudo conflicts

-ComparePreferencePage.synchronizeScrolling.label= Synchronize &scrolling between panes in compare viewers

-ComparePreferencePage.textFont.label= Text &font

-ComparePreferencePage.showMoreInfo.label= Show additional compare &information in the status line

-ComparePreferencePage.preview.label= Preview:

-ComparePreferencePage.ancestor.label= Common Ancestor

-ComparePreferencePage.left.label= Local

-ComparePreferencePage.right.label= Remote

-ComparePreferencePage.structureCompare.label= &Open structure compare automatically

-ComparePreferencePage.generalTab.label= &General

-ComparePreferencePage.textCompareTab.label= &Text Compare

-ComparePreferencePage.backgroundColor1.label= Bac&kground Color:

-ComparePreferencePage.backgroundColor2.label= S&ystem Default

-ComparePreferencePage.backgroundColor3.label= C&ustom

-ComparePreferencePage.ignoreWhitespace.label= Ignore &Whitespace

-#

-# Toolbar actions

-#

-action.IgnoreWhiteSpace.label=Ignore White Space

-action.IgnoreWhiteSpace.tooltip=Ignore White Space Where Applicable

-action.IgnoreWhiteSpace.image=etool16/ignorews_edit.gif

-

-action.Next.label=Next Difference

-action.Next.tooltip=Go to Next Difference

-action.Next.image=elcl16/next_nav.gif

-

-action.Previous.label=Previous Difference

-action.Previous.tooltip=Go to Previous Difference

-action.Previous.image=elcl16/prev_nav.gif

-

-#

-# Built in Structure Creators

-#

-ZipStructureCreator.name=Zip Archive Compare

-

-#

-# Compare Dialog

-#

-CompareDialog.commit.label=Commit

-CompareDialog.saveErrorTitle=Save Error 

-CompareDialog.saveErrorMessage=Can't save

-

-#

-# Compare With Each Other

-#

-ResourceCompare.taskName=Operation in Progress...

-ResourceCompare.twoWay.title=Compare ({0}-{1})

-ResourceCompare.threeWay.title=Compare ({0}-{1}-{2})

-

-#

-# DiffTreeViewer & DiffNodes

-#

-DiffTreeViewer.title= Structure Compare

-DiffNode.noName= <no name>

-DiffNode.nameFormat= {0} / {1}

-

-#

-# Differencing engine

-#

-Differencer.progressFormat= Comparing {0}

-

-#

-# Patch: rejected patch markers

-#

-rejectedPatchMarker.name= Rejected Patch

diff --git a/bundles/org.eclipse.compare/plugin.xml b/bundles/org.eclipse.compare/plugin.xml
deleted file mode 100644
index 3d67a73..0000000
--- a/bundles/org.eclipse.compare/plugin.xml
+++ /dev/null
@@ -1,195 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-

-<!-- ======================================================================= -->

-<!-- Compare UI Plugin                                                       -->

-<!-- ======================================================================= -->

-

-<plugin

-	name="%pluginName"

-	id="org.eclipse.compare"

-	version="2.0.0"

-	provider-name="%providerName"

-	class="org.eclipse.compare.internal.CompareUIPlugin">

-

-	<requires>

-      <import plugin="org.eclipse.ui"/>

-      <import plugin="org.eclipse.core.resources"/>

-	</requires>

-

-	<runtime>

-		<library name="compare.jar" >

-			<export name="*"/>

-		</library>

-	</runtime>

-		   

-<!-- Compare extension point definitions -->

-

-	<extension-point

-		name="%structureCreators"

-		id="structureCreators"/>

-		

-	<extension-point

-		name="%structureMergeViewers"

-		id="structureMergeViewers"/>

-		

-	<extension-point

-		name="%contentMergeViewers"

-		id="contentMergeViewers"/>

-

-	<extension-point

-		name="%contentViewers"

-		id="contentViewers"/>

-

-<!-- Extensions -->

-

-	<extension point="org.eclipse.core.resources.markers"

-		id="rejectedPatchMarker" name="%rejectedPatchMarker.name">

-		<super type="org.eclipse.core.resources.taskmarker"/>

-		<persistent value="true"/>

-	</extension>

-

-	<extension point="org.eclipse.ui.editors">

-    	<editor id="org.eclipse.compare.CompareEditor"

-      		name="%defaultCompareEditor.name"

- 			icon="icons/full/cview16/compare_view.gif"     	  

-      		class="org.eclipse.compare.internal.CompareEditor"

-			contributorClass="org.eclipse.compare.internal.CompareEditorContributor">

-    	</editor>

-	</extension>

-

-	<extension

-		point="org.eclipse.ui.preferencePages">

-		<page name="%ComparePreferencePage.name"

-			id="org.eclipse.compare.internal.ComparePreferencePage"

-			class="org.eclipse.compare.internal.ComparePreferencePage"

-			category= "org.eclipse.ui.preferencePages.Workbench">

-		</page>	

-	</extension>

-

-	<extension point="org.eclipse.ui.popupMenus">

-	

-		<objectContribution

-			id="org.eclipse.compare.CompareAction"

-			objectClass="org.eclipse.core.resources.IResource" adaptable="true">

-			<menu

-				id="replaceWithMenu"

-				path="additions"

-				label="%ReplaceWithMenu.label">

-				<separator name="replaceWithGroup"/>

-			</menu>

-			<menu

-				id="compareWithMenu"

-				path="additions"

-				label="%CompareWithMenu.label">

-				<separator name="compareWithGroup"/>

-			</menu>

-			<action

-				id="compareWithEachOther"

-				label="%CompareWithEachOtherAction.label"

-				tooltip="%CompareWithEachOtherAction.tooltip"

-				menubarPath="compareWithMenu/compareWithGroup"

-				enablesFor="2+"

-				class="org.eclipse.compare.internal.CompareAction">

-			</action>

-			<action

-				id="compareWithPatch"

-				label="%CompareWithPatchAction.label"

-				tooltip="%CompareWithPatchAction.tooltip"

-				menubarPath="compareWithMenu/compareWithGroup"

-				enablesFor="1"

-				class="org.eclipse.compare.internal.patch.CompareWithPatchAction">

-			</action>

-		</objectContribution>

-		

-		<objectContribution

-			id="org.eclipse.compare.ReplaceWithEditionAction"

-			objectClass="org.eclipse.core.resources.IFile" adaptable="true">

-			<menu

-				id="replaceWithMenu"

-				path="additions"

-				label="%ReplaceWithMenu.label">

-				<separator name="replaceWithGroup"/>

-			</menu>

-			<action

-				id="replaceFromHistory"

-				label="%ReplaceFromHistoryAction.label"

-				tooltip="%ReplaceFromHistoryAction.tooltip"

-				menubarPath="replaceWithMenu/replaceWithGroup"

-				enablesFor="1"

-				class="org.eclipse.compare.internal.ReplaceWithEditionAction">

-			</action>

-			<action

-				id="replaceWithPreviousFromHistory"

-				label="%ReplaceWithPreviousFromHistoryAction.label"

-				tooltip="%ReplaceWithPreviousFromHistoryAction.tooltip"

-				menubarPath="replaceWithMenu/replaceWithGroup"

-				enablesFor="1"

-				class="org.eclipse.compare.internal.ReplaceWithPreviousEditionAction">

-			</action>

-		</objectContribution>

-		

-		<objectContribution

-			id="org.eclipse.compare.CompareWithEditionAction"

-			objectClass="org.eclipse.core.resources.IFile" adaptable="true">

-			<menu

-				id="compareWithMenu"

-				path="additions"

-				label="%CompareWithMenu.label">

-				<separator name="compareWithGroup"/>

-			</menu>

-			<action

-				id="compareWithHistory"

-				label="%CompareWithHistoryAction.label"

-				tooltip="%CompareWithHistoryAction.tooltip"

-				menubarPath="compareWithMenu/compareWithGroup"

-				enablesFor="1"

-				class="org.eclipse.compare.internal.CompareWithEditionAction">

-			</action>

-		</objectContribution>

-			

-		<objectContribution

-			id="org.eclipse.compare.AddFromHistoryAction"

-			objectClass="org.eclipse.core.resources.IContainer" adaptable="true">

-			<action

-				id="addFromHistoryAction"

-				label="%addFromHistoryAction.label"

-				tooltip="%addFromHistoryAction.tooltip"

-				menubarPath="replaceWithMenu"

-				enablesFor="1"

-				class="org.eclipse.compare.internal.AddFromHistoryAction">

-			</action>

-		</objectContribution>

-

-	</extension>

-

-	<extension point="org.eclipse.compare.structureCreators">

-		<structureCreator

-			extensions="zip"

-			class="org.eclipse.compare.ZipFileStructureCreator">

-		</structureCreator>

-	</extension>

-	

-	<extension point="org.eclipse.compare.contentMergeViewers">

-		<viewer

-			extensions="class,exe,dll,binary,zip,jar"

-			class="org.eclipse.compare.internal.BinaryCompareViewerCreator">

-		</viewer>

-		<viewer

-			extensions="txt"

-			class="org.eclipse.compare.internal.TextMergeViewerCreator">

-		</viewer>

-		<viewer

-			extensions="gif,jpg"

-			class="org.eclipse.compare.internal.ImageMergeViewerCreator">

-		</viewer>

-	</extension>

-	

-	<extension point="org.eclipse.compare.contentViewers">

-		<viewer

-			extensions="txt"

-			class="org.eclipse.compare.internal.TextViewerCreator">

-		</viewer>

-	</extension>

-

-</plugin>

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.classpath b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.classpath
deleted file mode 100644
index 1e3546d..0000000
--- a/bundles/org.eclipse.compare/plugins/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="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>

-    <classpathentry kind="src" path="/org.eclipse.swt"/>

-    <classpathentry kind="output" path="bin"/>

-</classpath>

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.cvsignore b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.cvsignore
deleted file mode 100644
index 092357e..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-bin

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.project b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.project
deleted file mode 100644
index 88d7c29..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/.project
+++ /dev/null
@@ -1,23 +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>

-	</buildSpec>

-	<natures>

-		<nature>org.eclipse.jdt.core.javanature</nature>

-		<nature>org.eclipse.team.cvs.core.cvsnature</nature>

-	</natures>

-</projectDescription>

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/about.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/about.html
deleted file mode 100644
index 768324e..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/about.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<html>

-<head>

-<title>About</title>

-<style type="text/css">

-p, table, td, th { font-family: arial, helvetica, geneva; font-size: 10pt}

-pre { font-family: "Courier New", Courier, mono; font-size: 10pt}

-h2 { font-family: arial, helvetica, geneva; font-size: 18pt; font-weight: bold ; line-height: 14px}

-code { font-family: "Courier New", Courier, mono; font-size: 10pt}

-sup { font-family: arial,helvetica,geneva; font-size: 10px}

-h3 { font-family: arial, helvetica, geneva; font-size: 14pt; font-weight: bold}

-li { font-family: arial, helvetica, geneva; font-size: 10pt}

-h1 { font-family: arial, helvetica, geneva; font-size: 28px; font-weight: bold}

-body { font-family: arial, helvetica, geneva; font-size: 10pt; clip: rect(   ); margin-top: 5mm; margin-left: 3mm}

-</style>

-</head>

-<body lang="EN-US" link="blue" vlink="purple">

-<table border="0" cellspacing="5" cellpadding="2" width="100%" >

-  <tr> 

-    <td align="LEFT" valign="TOP" colspan="2" bgcolor="#0080C0"><b><font color="#FFFFFF">About This Content</font></b></td>

-  </tr>

-  <tr> 

-    <td> 

-<p>11th December, 2001</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

-<a href="http://www.eclipse.org/legal/cpl-v05.html">Common Public License Version 0.5</a> &quot;CPL&quot;.  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>

-</td></tr></table>

-</body>

-</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/build.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/build.properties
deleted file mode 100644
index 68f93ee..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/build.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-source.compare.jar = compare/

-bin.includes = icons/,\

-               plugin.xml,\

-               *.jar,\

-               plugin.properties,\

-               notice.html,\

-               about.html

-src.includes=about.html

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/buildnotes_compare.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/buildnotes_compare.html
deleted file mode 100644
index 28405b0..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/buildnotes_compare.html
+++ /dev/null
@@ -1,1056 +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 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/plugins/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java
deleted file mode 100644
index d64b122..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java
deleted file mode 100644
index c2c62db..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java
+++ /dev/null
@@ -1,425 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.

-	 */

-	public static final String IGNORE_WHITESPACE= "IGNORE_WHITESPACE"; //$NON-NLS-1$

-	/**

-	 * Name of the show pseudo conflicts property.

-	 */

-	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$

-		

-//		ImageDescriptor tmp= fgImages[Differencer.ADDITION];

-//		fgImages[Differencer.ADDITION]= fgImages[Differencer.DELETION];

-//		fgImages[Differencer.DELETION]= tmp;

-	}

-

-	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.

-	 */

-	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.

-	 */

-	public CompareConfiguration() {

-		this(CompareUIPlugin.getDefault().getPreferenceStore());

-	}

-	

-	/**

-	 * Returns the preference store of this configuration.

-	 * @return the preference store of this configuration.

-	 */

-	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

-	 */

-	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() {

-	}

-

-	/**

-	 * 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/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
deleted file mode 100644
index fdbe766..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
+++ /dev/null
@@ -1,792 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare; 

-

-import java.lang.reflect.InvocationTargetException;

-

-import java.util.List;

-import java.util.ArrayList;

-import java.util.ResourceBundle;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.events.*;

-import org.eclipse.swt.graphics.Point;

-import org.eclipse.swt.widgets.*;

-import org.eclipse.swt.graphics.Image;

-

-import org.eclipse.core.resources.IResource;

-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.swt.custom.BusyIndicator;

-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.contentmergeviewer.ContentMergeViewer;

-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.

-	 */

-	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 ISelection fSelection2;

-	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 fTitle;

-	}

-	

-	/* (non Javadoc)

-	 * see IEditorInput.getName

-	 */

-	public String getName() {

-		return fTitle;

-	}

-			

-	/**

-	 * 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() {

-		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>.

-	 *

-	 * @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());

-				}

-			}

-		);

-		

-		// setup the wiring for second pane

-		fStructurePane1.addOpenListener(

-			new IOpenListener() {

-				public void open(OpenEvent oe) {

-					feed2(oe.getSelection());

-				}

-			}

-		);

-		fStructurePane1.addSelectionChangedListener(

-			new ISelectionChangedListener() {

-				public void selectionChanged(SelectionChangedEvent e) {

-					ISelection s= e.getSelection();

-					if (s == null || s.isEmpty())

-						feed2(s);

-				}

-			}

-		);

-

-		// setup the wiring for third pane

-		fStructurePane2.addOpenListener(

-			new IOpenListener() {

-				public void open(OpenEvent oe) {

-					feed3(oe.getSelection());

-				}

-			}

-		);

-		fStructurePane2.addSelectionChangedListener(

-			new ISelectionChangedListener() {

-				public void selectionChanged(SelectionChangedEvent e) {

-					ISelection s= e.getSelection();

-					if (s == null || s.isEmpty())

-						feed3(s);

-				}

-			}

-		);

-		

-		// now deal with activation/deactivation

-		Listener activationListener= new Listener() {

-			int fOldOpenStrategy;

-			

-			public void handleEvent(Event event) {

-				if (event.widget instanceof CompareViewerSwitchingPane) {

-					

-					switch (event.type) {

-					case SWT.Activate:

-						fFocusPane= (CompareViewerSwitchingPane) event.widget;

-						fOldOpenStrategy= OpenStrategy.getOpenMethod();

-						OpenStrategy.setOpenMethod(OpenStrategy.SINGLE_CLICK | OpenStrategy.ARROW_KEYS_OPEN);

-						break;

-					case SWT.Deactivate:

-						OpenStrategy.setOpenMethod(fOldOpenStrategy);

-						break;

-					}

-				}

-			}

-		};

-		fStructureInputPane.addListener(SWT.Activate, activationListener);

-		fStructurePane1.addListener(SWT.Activate, activationListener);

-		fStructurePane2.addListener(SWT.Activate, activationListener);

-		fContentInputPane.addListener(SWT.Activate, activationListener);

-		

-		fStructureInputPane.addListener(SWT.Deactivate, activationListener);

-		fStructurePane1.addListener(SWT.Deactivate, activationListener);

-		fStructurePane2.addListener(SWT.Deactivate, activationListener);

-		fContentInputPane.addListener(SWT.Deactivate, activationListener);

-		

-

-		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

-	 */

-	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/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java
deleted file mode 100644
index d439ee4..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.plugin.AbstractUIPlugin;

-

-import org.eclipse.compare.internal.CompareUIPlugin;

-import org.eclipse.compare.internal.IStructureCreatorDescriptor;

-import org.eclipse.compare.structuremergeviewer.ICompareInput;

-import org.eclipse.compare.structuremergeviewer.IStructureCreator;

-

-

-/**

- * 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 descriptors for the 'Next' tool bar button. */

-	public static final ImageDescriptor DESC_DTOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.DTOOL_NEXT);

-	public static final ImageDescriptor DESC_CTOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.CTOOL_NEXT);

-	public static final ImageDescriptor DESC_ETOOL_NEXT= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.ETOOL_NEXT);

-	

-	/** Image descriptors for the 'Previous' tool bar button. */

-	public static final ImageDescriptor DESC_DTOOL_PREV= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.DTOOL_PREV);

-	public static final ImageDescriptor DESC_CTOOL_PREV= CompareUIPlugin.getImageDescriptor(CompareUIPlugin.CTOOL_PREV);

-	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$

-	

-	/* (non Javadoc)

-	 * non inatiatiable!

-	 */

-	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.

-	 *

-	 * @param input the input on which to open the compare editor

-	 */

-	public static void openCompareEditor(CompareEditorInput input) {

-		CompareUIPlugin plugin= CompareUIPlugin.getDefault();

-		if (plugin != null)

-			plugin.openCompareEditor(input);

-	}

-			

-	/**

-	 * 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);

-	}

-		

-	public static void addStructureViewerAlias(String type, String alias) {

-		CompareUIPlugin.addStructureViewerAlias(type, alias);

-	}

-	

-	public static void removeAllStructureViewerAliases(String type) {

-		CompareUIPlugin.removeAllStructureViewerAliases(type);

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java
deleted file mode 100644
index 3106b11..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.widgets.*;

-

-import org.eclipse.jface.action.ToolBarManager;

-

-import org.eclipse.compare.internal.Splitter;

-

-/**

- * 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>.

- */

-public class CompareViewerPane extends ViewForm {

-	

-	private ToolBarManager fToolBarManager;

-

-

-	public CompareViewerPane(Composite parent, int style) {

-		super(parent, style);

-		

-		marginWidth= 0;

-		marginHeight= 0;

-		

-		CLabel label= new CLabel(this, SWT.NONE);

-		setTopLeft(label);

-		

-		MouseAdapter ml= new MouseAdapter() {

-			public void mouseDoubleClick(MouseEvent e) {

-				Control parent= getParent();

-				if (parent instanceof Splitter)

-					((Splitter)parent).setMaximizedControl(CompareViewerPane.this);

-			}

-		};	

-				

-		addMouseListener(ml);

-		label.addMouseListener(ml);	

-	}

-	

-	public void setText(String label) {

-		CLabel cl= (CLabel) getTopLeft();

-		cl.setText(label);		

-	}

-	

-	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>.

-	 */

-	public static ToolBarManager getToolBarManager(Composite parent) {

-		if (parent instanceof CompareViewerPane) {

-			CompareViewerPane pane= (CompareViewerPane) parent;

-			return pane.getToolBarManager();

-		}

-		return null;

-	}

-

-	/**

-	 * Clear tool items in <code>CompareViewerPane</code>'s control bar.

-	 */

-	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/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
deleted file mode 100644
index 7baa256..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare;

-

-import java.text.MessageFormat;

-

-import org.eclipse.swt.SWT;

-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> which supports viewer switching.

- * <p>

- * Clients must implement the viewer switching strategy by implementing

- * <code>getViewer</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.

- */

-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.

-	 */

-	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.

-	 */

-	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.

-	 */

-	public Viewer getViewer() {

-		return fViewer;

-	}

-	

-	/**

-	 * Sets the current viewer.

-	 */

-	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);

-		}

-	}

-

-	public String getTitleArgument() {

-		return fTitleArgument;

-	}

-

-	/**

-	 * Returns <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;

-	}

-		

-	/**

-	 * If the old viewer had focus, new setInput tries to set

-	 * focus on new viewer too.

-	 */ 

-	public void setInput(Object input) {

-

-		if (fInput == input)

-			return;

-			

-		boolean hadFocus= hasFocus2();

-		

-//		try {

-//			if (fViewer != null)

-//				fViewer.setInput(null);	// force save before switching viewer

-//		} catch (ViewerSwitchingCancelled ex) {

-//			return;

-//		}

-

-		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();

-	}

-	

-	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$

-		}

-	}

-

-	public Object getInput() {

-		return fInput;

-	}

-

-	abstract protected Viewer getViewer(Viewer oldViewer, Object input);

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java
deleted file mode 100644
index ad21c2b..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java
+++ /dev/null
@@ -1,1016 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.graphics.Point;

-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.resources.IFile;

-import org.eclipse.core.resources.IFileState;

-import org.eclipse.core.runtime.CoreException;

-

-import org.eclipse.compare.internal.*;

-import org.eclipse.compare.structuremergeviewer.*;

-import org.eclipse.compare.*;

-

-/**

- * 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;

-	/** 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;

-	

-	/**

-	 * 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;

-	/** 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();

-	}

-		

-	public void setEditionTitleArgument(String titleArgument) {

-		fTitleArg= titleArgument;

-	}

-	

-	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>

-	 */

-	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.

-	 */

-	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.

-	 */

-	public void setTargetIsRight(boolean isRight) {

-		fTargetIsRight= isRight;

-	}

-		

-	/**

-	 * Controls whether the EditionSelectionDialog is in 'add' mode

-	 * or 'replace' mode (the default).

-	 *

-	 * @param addMode if true dialog is in 'add' mode.

-	 */

-	public void setAddMode(boolean addMode) {

-		fAddMode= addMode;

-	}

-	

-	/**

-	 * Controls whether the EditionSelectionDialog is in 'compare' mode

-	 * or 'add/replace' (the default) mode. 

-	 *

-	 * @param addMode if true dialog is in 'add' mode.

-	 */

-	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 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 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 });

-	}

-	

-	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

-  	 */

-	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 parent) {

-		

-		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$

-			fMemberTable= new Table(fMemberPane, SWT.H_SCROLL + SWT.V_SCROLL);

-			fMemberTable.addSelectionListener(

-				new SelectionAdapter() {

-					public void widgetSelected(SelectionEvent e) {

-						handleMemberSelect(e.item);

-					}

-				}

-			);

-			

-			fMemberPane.setContent(fMemberTable);

-			

-			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 });

-				

-		return vsplitter;

-	}

-	

-	/* (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.

-	 */

-	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 void handleDefaultSelected() {

-//		if (fSelectedItem != null)

-//			okPressed();

-//	}

-	

-	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) {

-					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();

-		

-		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);

-		if (first) {

-			fEditionTree.setSelection(new TreeItem[] {ti});

-			if (!fAddMode)

-				fEditionTree.setFocus();

-			feedInput(ti);

-		}

-		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) {

-				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)

-			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/plugins/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java
deleted file mode 100644
index 98ddbb7..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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;

-

-import org.eclipse.compare.*;

-

-/**

- * 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/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java
deleted file mode 100644
index 095f52f..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java
deleted file mode 100644
index bc62b5a..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java
deleted file mode 100644
index 5e8d9d6..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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

-	 * <UL>

-	 * <LI>

-	 * add a child,

-	 * <LI>

-	 * remove a child,

-	 * <LI>

-	 * copy the contents of a child

-	 * </UL>

-	 * 

-	 * 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/plugins/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java
deleted file mode 100644
index 98f9364..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java
deleted file mode 100644
index 447f227..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java
deleted file mode 100644
index fee4741..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IStreamContentAccessor.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java
deleted file mode 100644
index e914a57..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ITypedElement.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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. 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.

-	 */

-	public static final String TEXT_TYPE= "txt"; //$NON-NLS-1$

-

-	/**

-	 * Type for an element whose actual type could not

-	 * be determined.

-	 */

-	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/plugins/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java
deleted file mode 100644
index c6f60e7..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/IViewerCreator.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java
deleted file mode 100644
index 684c65f..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java
deleted file mode 100644
index 6c488a1..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare;

-

-import java.io.*;

-import java.util.ArrayList;

-import java.util.Iterator;

-

-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.internal.Utilities;

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
deleted file mode 100644
index 902d5dc..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.text.IDocument;

-import org.eclipse.jface.util.Assert;

-

-import org.eclipse.core.runtime.CoreException;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.structuremergeviewer.*;

-import org.eclipse.compare.internal.Utilities;

-

-

-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;

-

-	public ZipFileStructureCreator() {

-		this(Utilities.getString("ZipStructureCreator.name")); //$NON-NLS-1$

-	}

-	

-	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.

-	 */

-	public boolean canSave() {

-		return false;

-	}

-

-	/**

-	 * Throws <code>AssertionFailedException</code> since we cannot update a zip archive.

-	 */

-	public void save(IStructureComparator structure, Object input) {

-		Assert.isTrue(false); // Cannot update zip archive

-	}

-	

-	public IStructureComparator locate(Object path, Object source) {

-		return null;

-	}

-	

-	public boolean canRewriteTree() {

-		return false;

-	}

-	

-	public void rewriteTree(Differencer diff, IDiffContainer root) {

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
deleted file mode 100644
index 7878ff2..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
+++ /dev/null
@@ -1,937 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.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.resource.ImageDescriptor;

-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.contentmergeviewer.IMergeViewerContentProvider;

-import org.eclipse.compare.contentmergeviewer.TextMergeViewer;

-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 {

-		

-		private boolean fLeft;

-		

-		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;

-		

-		public Resizer(Control c, int dir) {

-			fDirection= dir;

-			fControl= c;

-			fControl.addMouseListener(this);

-			fLiveResize= !(fControl instanceof Sash);

-			

-			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;

-			fControl.addMouseMoveListener(this);

-		}

-		

-		public void mouseUp(MouseEvent e) {

-			fControl.removeMouseMoveListener(this);

-			if (!fLiveResize)

-				resize(e);

-		}

-		

-		public void mouseMove(MouseEvent e) {

-			if (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;

-

-	// 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 retrieves the content from the three sides by calling the methods

-	 * <code>getAncestorContent</code>, <code>getLeftContent</code>,

-	 * and <code>getRightContent</code> on the content provider.

-	 * The values returned from these calls are passed to the hook method <code>updateContent</code>.

-	 * </p>

-	 *

-	 * @param input the new input of this viewer, or <code>null</code> if none

-	 * @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);

-	}

-	

-	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,

-//						IDialogConstants.CANCEL_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;

-	}

-		

-	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);

-						

-		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$

-			}

-			

-			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$

-			}

-			

-			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) {

-		

-		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);

-		}

-	}

-	

-	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/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java
deleted file mode 100644
index 1f7d6d2..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/DelayedProgressMonitor.java
+++ /dev/null
@@ -1,136 +0,0 @@
-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java
deleted file mode 100644
index a713fb4..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 {

-	

-	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/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java
deleted file mode 100644
index 2f75e91..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java
deleted file mode 100644
index 9035817..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
deleted file mode 100644
index 56b46f4..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
+++ /dev/null
@@ -1,3537 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.InputStream;

-import java.io.IOException;

-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.FontData;

-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.text.*;

-import org.eclipse.jface.text.source.SourceViewer;

-import org.eclipse.jface.util.PropertyChangeEvent;

-import org.eclipse.jface.util.IPropertyChangeListener;

-import org.eclipse.jface.viewers.ISelection;

-import org.eclipse.jface.preference.IPreferenceStore;

-import org.eclipse.jface.preference.PreferenceConverter;

-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.texteditor.IUpdate;

-import org.eclipse.ui.IActionBars;

-import org.eclipse.ui.IWorkbenchActionConstants;

-

-import org.eclipse.compare.*;

-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.ChangePropertyAction;

-import org.eclipse.compare.internal.CompareEditor;

-import org.eclipse.compare.internal.DocLineComparator;

-import org.eclipse.compare.internal.ComparePreferencePage;

-import org.eclipse.compare.internal.CompareUIPlugin;

-import org.eclipse.compare.internal.MergeViewerAction;

-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 SYNC_SCROLLING= "SYNC_SCROLLING"; //$NON-NLS-1$

-		

-	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= 10;

-	/** Width of birds eye view */

-	private static final int BIRDS_EYE_VIEW_INSET= 1;

-

-	/** line width of change borders */

-	private static final int LW= 1;

-	/** Provide more merge controls in CompareViewerPane toolbar */

-	private static final boolean USE_MORE_CONTROLS= true;

-	/** 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 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 Object fAncestorInput;

-	private Object fLeftInput;

-	private Object fRightInput;

-	

-	private MergeSourceViewer fAncestor;

-	private MergeSourceViewer fLeft;

-	private MergeSourceViewer fRight;

-	

-	private int fLeftLineCount;

-	private int fRightLineCount;

-	

-	private boolean fLeftContentsChanged;

-	private boolean fRightContentsChanged;

-

-	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 ActionContributionItem fNextItem;	// goto next difference

-	private ActionContributionItem fPreviousItem;	// goto previous difference

-	private ActionContributionItem fCopyDiffLeftToRightItem;

-	private ActionContributionItem fCopyDiffRightToLeftItem;

-	

-	private boolean fSynchronizedScrolling= true;

-	private boolean fShowMoreInfo= false;

-	

-	private MergeSourceViewer fFocusPart;

-	

-	private boolean fSubDoc= true;

-	private IPositionUpdater fPositionUpdater;

-	private boolean fIsMotif;	

-

-	// SWT widgets

-	private BufferedCanvas fAncestorCanvas;

-	private BufferedCanvas fLeftCanvas;

-	private BufferedCanvas fRightCanvas;

-	private Canvas fScrollCanvas;

-	private ScrollBar fVScrollBar;

-	private Canvas fBirdsEyeCanvas;

-		

-	// SWT resources to be disposed

-	private Map fColors;

-	private Font fFont;

-	private Cursor fBirdsEyeCursor;

-					

-					

-	/**

-	 * 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;

-		}

-

-		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);

-		

-		String platform= SWT.getPlatform();

-		fIsMotif= "motif".equals(platform); //$NON-NLS-1$

-		

-		if (fIsMotif)

-			fMarginWidth= 0;

-			

-		fPreferenceStore= configuration.getPreferenceStore();

-		if (fPreferenceStore != null) {

-			fPreferenceChangeListener= new IPropertyChangeListener() {

-				public void propertyChange(PropertyChangeEvent event) {

-					TextMergeViewer.this.propertyChange(event);

-				}

-			};

-			fPreferenceStore.addPropertyChangeListener(fPreferenceChangeListener);

-			

-			Display display= parent.getDisplay();

-			updateFont(fPreferenceStore, display);

-			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);

-		}

-		

-		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);

-	}

-	

-	private void updateFont(IPreferenceStore ps, Display display) {

-		

-		Font oldFont= fFont;

-		

-		FontData fontData= null;

-		if (ps.contains(ComparePreferencePage.TEXT_FONT)

-					&& !ps.isDefault(ComparePreferencePage.TEXT_FONT))

-			fontData= PreferenceConverter.getFontData(ps, ComparePreferencePage.TEXT_FONT);

-		else

-			fontData= PreferenceConverter.getDefaultFontData(ps, ComparePreferencePage.TEXT_FONT);

-		if (fontData != null) {

-			fFont= new Font(display, fontData);

-			

-			if (fAncestor != null)

-				fAncestor.setFont(fFont);

-			if (fLeft != null)

-				fLeft.setFont(fFont);

-			if (fRight != null)

-				fRight.setFont(fFont);

-				

-			if (oldFont != null)

-				oldFont.dispose();

-		}

-	}

-	

-	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);

-			}

-		}

-	}

-	

-	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();

-	}

-	

-	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);

-		

-		// invalidate color cache

-		fColors= null;

-		

-		refreshBirdsEyeView();

-		invalidateLines();

-		

-		updateAllDiffBackgrounds(display);

-	}

-	

-	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) {

-		

-		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) {

-			if (fPreferenceStore != null)

-				fPreferenceStore.removePropertyChangeListener(fPreferenceChangeListener);

-			fPreferenceChangeListener= null;

-		}

-		

-		fLeftCanvas= null;

-		fRightCanvas= null;

-		fVScrollBar= null;

-		fBirdsEyeCanvas= 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();

-			}

-		}

-		

-		if (fFont != null) {

-			fFont.dispose();

-			fFont= 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) {

-		

-		// 1st row

-		if (fMarginWidth > 0) {

-			fAncestorCanvas= new BufferedCanvas(composite, SWT.NONE) {

-				public void doPaint(GC gc) {

-					paintSides(gc, fAncestor, fAncestorCanvas, false);

-				}

-			};

-		}

-									

-		fAncestor= createPart(composite);

-		fAncestor.setEditable(false);

-		

-		// 2nd row

-		if (fMarginWidth > 0) {

-			fLeftCanvas= new BufferedCanvas(composite, SWT.NONE) {

-				public void doPaint(GC gc) {

-					paintSides(gc, fLeft, fLeftCanvas, 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);

-				}

-			};

-		}

-		

-		fScrollCanvas= new Canvas(composite, SWT.V_SCROLL);

-		Rectangle trim= fScrollCanvas.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.addMouseListener(

-			new MouseAdapter() {

-				public void mouseDown(MouseEvent e) {

-					Diff diff= handlemouseInBirdsEyeView(fBirdsEyeCanvas, e.y);

-					if (diff != null && diff.fDirection != Differencer.NO_CHANGE) {

-						//fCurrentDiff= null;

-						setCurrentDiff(diff, 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 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

-	}

-	

-	/**

-	 * 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);

-				}

-			};

-			new Resizer(canvas, HORIZONTAL);

-			return canvas;

-		}

-		return super.createCenter(parent);

-	}

-	

-	/**

-	 * 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);

-				}

-			}

-		);

-		

-		if (fFont != null)

-			te.setFont(fFont);

-			

-		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.

-	 */

-	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;

-		

-		fLeftContentsChanged= false;

-		fRightContentsChanged= 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

-		fLeftInput= left;

-		setDocument(fLeft, 'L', left);

-		fLeftLineCount= fLeft.getLineCount();

-

-		fRightInput= right;

-		setDocument(fRight, 'R', right);

-		fRightLineCount= fRight.getLineCount();

-		

-		fAncestorInput= ancestor;

-		setDocument(fAncestor, 'A', ancestor);

-					

-		doDiff();

-				

-		invalidateLines();

-		updateVScrollBar();

-		refreshBirdsEyeView();

-		

-		if (!emptyInput && !fComposite.isDisposed()) {

-			// 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()) {

-			fLeftContentsChanged= true;

-			setLeftDirty(true);

-		} else if (doc == fRight.getDocument()) {

-			setRightDirty(true);

-			fRightContentsChanged= 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;			

-	}

-	

-	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;

-		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;

-		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) {

-  			y+= scrollbarHeight;

-  			fBirdsEyeCanvas.setBounds(x+scrollbarWidth, y, BIRDS_EYE_VIEW_WIDTH, height-(3*scrollbarHeight));

-  		}

-		

-		// 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);

-

-		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 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) {

-		

-		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$

-		

-		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$

-

-		

-		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);

-			tbm.appendToGroup("merge", fCopyDiffLeftToRightItem); //$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);

-			tbm.appendToGroup("merge", fCopyDiffRightToLeftItem); //$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.TEXT_FONT)) {

-			if (fPreferenceStore != null) {

-				updateFont(fPreferenceStore, fComposite.getDisplay());

-				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 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;

-

-		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;

-							

-				g.setBackground(getColor(display, getFillColor(diff)));

-				g.fillPolygon(fPts);

-	

-				g.setLineWidth(LW);

-				g.setForeground(getColor(display, getStrokeColor(diff)));

-				g.drawLine(fPts[0], fPts[1], fPts[2], fPts[3]);

-				g.drawLine(fPts[6], fPts[7], fPts[4], fPts[5]);

-			}

-		}

-	}

-	

-	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.setBackground(getColor(display, getStrokeColor(diff)));

-				if (right) {

-					g.fillRectangle(x, y-1, w2+1, LW);

-					g.fillRectangle(x+w2, y, LW, h);

-					g.fillRectangle(x, y+h-1, w2, LW);

-				} else {

-					g.fillRectangle(x+w2, y-1, w2, LW);

-					g.fillRectangle(x+w2, y, LW, h);

-					g.fillRectangle(x+w2, y+h-1, w2, LW);

-				}

-			}

-		}

-	}

-	

-	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;

-						

-		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);

-		}

-	}

-	

-	//--------------------------------------------------------------------------------

-	

-	protected void copy(boolean leftToRight) {

-		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);

-			fRightContentsChanged= false;

-		} 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);

-			fLeftContentsChanged= false;

-		}

-		doDiff();

-		invalidateLines();

-		updateVScrollBar();

-		selectFirstDiff();

-		refreshBirdsEyeView();

-	}

-

-	private void copyDiffLeftToRight() {

-		copy(fCurrentDiff, true, false, false);

-	}

-

-	private void copyDiffRightToLeft() {

-		copy(fCurrentDiff, false, false, false);

-	}

-		

-	private void copy(Diff diff, boolean leftToRight, boolean both, boolean gotoNext) {

-		

-		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:

-						s= fromDoc.get(fromStart, fromLen);

-						if (both)

-							s+= toDoc.get(toStart, toLen);

-						break;

-					}

-					if (s != null) {

-						toDoc.replace(toStart, toLen, s);						

-						toPos.setOffset(toStart);

-						toPos.setLength(s.length());

-					}	

-				

-				} catch (BadLocationException e) {

-				}

-			}

-		

-			diff.setResolved(true);

-

-			if (gotoNext) {

-				navigate(true, true, true);

-			} else {

-				revealDiff(diff, true);

-				updateControls();

-			}

-		}

-	}

-

-	//---- 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;

-	}

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties
deleted file mode 100644
index 9cabb43..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewerResources.properties
+++ /dev/null
@@ -1,91 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2000, 2001.

-# All Rights Reserved.

-# =====================================

-# @(#)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. Try to 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 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/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html
deleted file mode 100644
index 28d91ee..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/package.html
+++ /dev/null
@@ -1,35 +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 <tt>ContentMergeViewer</tt> 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.

-<p>A <tt>ContentMergeViewer</tt> accesses its model by means of a content

-provider which must implement the

-<br><tt>IMergeViewerContentProvider</tt> interface.

-<p>The <tt>TextMergeViewer</tt> is the standard concrete subclass of <tt>ContentMergeViewer</tt>.

-A text merge viewer uses the <tt>RangeDifferencer</tt> to perform a textual,

-line-by-line comparison of two (or three) input documents. For text lines

-that differ the <tt>TextMergeViewer</tt> uses an <tt>ITokenComparator</tt>

-to find longest sequences of matching and non-matching tokens. The <tt>TextMergeViewer</tt>'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 <tt>ITokenComparator</tt> interface.

-<p>The <tt>TextMergeViewer</tt> not only works on whole documents but on

-subranges of documents too. In this case the viewer's input must be an

-<tt>IDocumentRange</tt> instead of an <tt>IDocument</tt>.

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java
deleted file mode 100644
index 85ffba1..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
deleted file mode 100644
index b9429f0..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-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);
-					
-				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$
-						}
-					}
-				}
-			}
-		}
-	}
-	
-	private 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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties
deleted file mode 100644
index 4c3e7db..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties
+++ /dev/null
@@ -1,39 +0,0 @@
-# =====================================
-# (c) Copyright IBM Corp. 2000, 2001.
-# All Rights Reserved.
-# =====================================
-
-# @(#)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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java
deleted file mode 100644
index b274276..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java
+++ /dev/null
@@ -1,449 +0,0 @@
-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;
-	private CompareViewerSwitchingPane fStructuredComparePane;
-
-
-	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 parent) {
-		
-		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();
-				}
-			}
-		);
-		
-		// 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);		
-		
-		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 vsplitter;
-	}
-	
-	/**
-	 * Feeds selection from member viewer to edition viewer.
-	 */
-	private void handleMemberSelect(Widget w) {
-		Object 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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
deleted file mode 100644
index c1ff3bd..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.io.*;

-import java.lang.reflect.InvocationTargetException;

-import java.util.ResourceBundle;

-import java.text.MessageFormat;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.widgets.*;

-

-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) {

-		

-		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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java
deleted file mode 100644
index 364785d..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties
deleted file mode 100644
index 2900356..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2000, 2001.

-# All Rights Reserved.

-# =====================================

-

-# @(#)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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java
deleted file mode 100644
index 1a1bdd3..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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 {

-

-	/** The drawable for double buffering */

-	private 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.

-	 * @private

-	 */

-	private void doubleBufferPaint(GC dest) {

-

-		Point size= getSize();

-

-		if (size.x <= 0 || size.y <= 0)

-			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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java
deleted file mode 100644
index 8e1b801..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java
deleted file mode 100644
index 1e76626..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java
deleted file mode 100644
index d3aea03..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-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;
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
deleted file mode 100644
index 4daf9e5..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.jface.action.IAction;

-import org.eclipse.jface.viewers.ISelection;

-

-import org.eclipse.ui.IActionDelegate;

-import org.eclipse.compare.CompareConfiguration;

-import org.eclipse.compare.CompareUI;

-

-

-public class CompareAction implements IActionDelegate {

-

-	private ResourceCompareInput fInput;

-

-	public void run(IAction action) {

-		if (fInput != null) {

-			CompareUI.openCompareEditor(fInput);

-			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);

-		}

-		action.setEnabled(fInput.setSelection(selection));

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java
deleted file mode 100644
index 6b6c3c4..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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);

-	}

-	

-	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 parent) {

-						

-		Control c= fCompareEditorInput.createContents(parent);

-		c.setLayoutData(new GridData(GridData.FILL_BOTH));

-		

-		Shell shell= c.getShell();

-		shell.setText(fCompareEditorInput.getTitle());

-		shell.setImage(fCompareEditorInput.getTitleImage());

-

-		return c;

-	}

-		

-	/* (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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java
deleted file mode 100644
index 215309b..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.lang.reflect.InvocationTargetException;

-

-import org.eclipse.swt.widgets.*;

-

-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.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 IPropertyChangeListener {

-	

-	public final static String CONFIRM_SAVE_PROPERTY= "org.eclipse.compare.internal.CONFIRM_SAVE_PROPERTY"; //$NON-NLS-1$

-	

-	private IActionBars fActionBars;

-	

-	

-	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$

-				

-		CompareEditorInput cei= (CompareEditorInput) input;

-			

-		setSite(site);

-		setInput(input);

-		

-		setTitleImage(cei.getTitleImage());

-		setTitle(cei.getTitle());

-				

-		if (input instanceof IPropertyChangeNotifier)

-			((IPropertyChangeNotifier)input).addPropertyChangeListener(this);

-	}

-

-	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)

-			((CompareEditorInput) input).createContents(parent);

-	}

-	

-	/*

-	 * @see DesktopPart#dispose

-	 */

-	public void dispose() {

-	

-		IEditorInput input= getEditorInput();

-		if (input instanceof IPropertyChangeNotifier)

-			((IPropertyChangeNotifier)input).removePropertyChangeListener(this);

-								

-		super.dispose();

-	}

-			

-	/*

-	 * @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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
deleted file mode 100644
index 1860065..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.util.ResourceBundle;

-

-import org.eclipse.jface.action.*;

-

-import org.eclipse.ui.*;

-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);

-		fNext= new NavigationAction(bundle, true);

-		fPrevious= new NavigationAction(bundle, false);

-		fToolbarNext= new NavigationAction(bundle, true);

-		fToolbarPrevious= new NavigationAction(bundle, false);

-	}

-

-	/*

-	 * @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);

-			}

-		}

-			

-		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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java
deleted file mode 100644
index 96b7c04..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2002.

- * All Rights Reserved.

- */

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties
deleted file mode 100644
index 7c7e50a..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties
+++ /dev/null
@@ -1,52 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2002.

-# All Rights Reserved.

-# =====================================

-

-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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java
deleted file mode 100644
index 6255c80..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.events.KeyAdapter;

-import org.eclipse.swt.events.KeyEvent;

-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;

-	

-	public CompareNavigator(CompareViewerSwitchingPane[] panes) {

-		fPanes= panes;

-	}

-

-	public CompareViewerSwitchingPane[] getPanes() {

-		return fPanes;

-	}

-	

-	public void selectChange(boolean next) {

-		

-		fLastDirection= next;

-		

-		// 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;

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
deleted file mode 100644
index e4dd225..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.swt.graphics.Color;

-import org.eclipse.swt.graphics.RGB;

-

-import org.eclipse.jface.preference.*;

-import org.eclipse.jface.util.*;

-

-import org.eclipse.ui.IWorkbench;

-import org.eclipse.ui.IWorkbenchPreferencePage;

-import org.eclipse.ui.texteditor.WorkbenchChainedTextFontFieldEditor;

-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 TEXT_FONT= PREFIX + "TextFont"; //$NON-NLS-1$

-	public static final String IGNORE_WHITESPACE= PREFIX + "IgnoreWhitespace"; //$NON-NLS-1$

-	

-	private WorkbenchChainedTextFontFieldEditor fFontEditor;

-	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.STRING, TEXT_FONT),

-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IGNORE_WHITESPACE),

-		

-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND),

-		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT)

-	};

-	

-	

-	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);

-		

-		Display display= Display.getDefault();

-		Color color= display.getSystemColor(SWT.COLOR_LIST_BACKGROUND);

-		PreferenceConverter.setDefault(store,  AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND, color.getRGB());		

-		store.setDefault(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT, true);

-

-		WorkbenchChainedTextFontFieldEditor.startPropagate(store, TEXT_FONT);

-	}

-

-	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() {

-		fFontEditor.store();

-		fOverlayStore.propagate();

-		return true;

-	}

-	

-	/*

-	 * @see PreferencePage#performDefaults()

-	 */

-	protected void performDefaults() {

-		

-		fFontEditor.loadDefault();

-		

-		fOverlayStore.loadDefaults();

-		initializeFields();

-		

-		super.performDefaults();

-	}

-	

-	/*

-	 * @see DialogPage#dispose()

-	 */

-	public void dispose() {

-		

-		fFontEditor.setPreferencePage(null);

-		fFontEditor.setPreferenceStore(null);

-		

-		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) {

-		

-		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();

-		

-		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$

-

-		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$

-		

-		fFontEditor= addTextFontEditor(composite, "ComparePreferencePage.textFont.label", TEXT_FONT);	//$NON-NLS-1$

-		fFontEditor.setPreferenceStore(getPreferenceStore());

-		fFontEditor.setPreferencePage(this);

-		fFontEditor.load();

-		

-		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(80);

-		gd.heightHint= convertHeightInCharsToPixels(15);

-		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("previewAncestor.txt"),	//$NON-NLS-1$

-				new FakeInput("previewLeft.txt"),	//$NON-NLS-1$

-				new FakeInput("previewRight.txt")	//$NON-NLS-1$

-			)

-		);

-

-		return fPreviewViewer.getControl();

-	}

-			

-	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 WorkbenchChainedTextFontFieldEditor addTextFontEditor(Composite parent, String labelKey, String key) {

-		

-		String label= Utilities.getString(labelKey);

-

-		Group group= new Group(parent, SWT.NULL);

-		group.setText(label);

-		GridLayout layout= new GridLayout();

-		layout.numColumns= 3;

-		layout.marginWidth+= 3;

-		group.setLayout(layout);		

-		WorkbenchChainedTextFontFieldEditor fe= new WorkbenchChainedTextFontFieldEditor(key, "", group);	//$NON-NLS-1$

-				

-		GridData gd= new GridData(GridData.FILL_HORIZONTAL);

-		gd.horizontalSpan= 2;

-		group.setLayoutData(gd);

-		

-		return fe;

-	}

-	

-	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 filename) {

-		String separator= System.getProperty("line.separator"); //$NON-NLS-1$

-		StringBuffer buffer= new StringBuffer(512);

-		BufferedReader reader= null;

-		try {

-			reader= new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(filename)));

-			String line;

-			while ((line= reader.readLine()) != null) {

-				buffer.append(line);

-				buffer.append(separator);

-			}

-		} catch (IOException io) {

-			CompareUIPlugin.log(io);

-		} finally {

-			if (reader != null) {

-				try {

-					reader.close();

-				} catch (IOException e) {

-				}

-			}

-		}

-		return buffer.toString();

-	}

-}
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
deleted file mode 100644
index a55ff32..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
+++ /dev/null
@@ -1,862 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-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.widgets.Display;

-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.operation.IRunnableWithProgress;

-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.ui.internal.SharedImages;

-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) {

-		

-		if (compareResultOK(input)) {				

-			IWorkbenchPage activePage= getActivePage();

-			if (activePage != null) {

-				try {

-					activePage.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.

-	 * <p>

-	 * Note: Images returned from this method will be automitically 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) {

-		

-		type= normalizeCase(type);

-		

-		boolean dispose= false;

-		Image image= null;

-		if (type != null)

-			image= (Image) fgImages.get(type);

-		if (image == null) {

-			ImageDescriptor id= (ImageDescriptor) fgImageDescriptors.get(type);

-			if (id != null) {

-				image= id.createImage();

-				dispose= true;

-			}

-				

-			if (image == null) {

-				if (fgComparePlugin != null) {

-					if (ITypedElement.FOLDER_TYPE.equals(type)) {

-						image= getDefault().getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);

-						//image= SharedImages.getImage(ISharedImages.IMG_OBJ_FOLDER);

-					} else {

-						image= createWorkbenchImage(type);

-						dispose= true;

-					}

-				} else {

-					id= (ImageDescriptor) fgImageDescriptors.get(normalizeCase("file")); //$NON-NLS-1$

-					image= id.createImage();

-					dispose= true;

-				}

-			}

-			if (image != null)

-				registerImage(type, image, dispose);

-		}

-		return 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 automitically 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) {

-		if (adaptable != null) {

-			Object o= adaptable.getAdapter(IWorkbenchAdapter.class);

-			if (o instanceof IWorkbenchAdapter) {

-				ImageDescriptor id= ((IWorkbenchAdapter) o).getImageDescriptor(adaptable);

-				if (id != null) {

-					Image image= (Image)fgImages2.get(id);

-					if (image == null) {

-						image= id.createImage();

-						try {

-							fgImages2.put(id, image);

-						} catch (NullPointerException ex) {

-						}

-						fgDisposeOnShutdownImages.add(image);

-

-					}

-					return image;

-				}

-			}

-		}

-		return null;

-	}

-	

-	private static Image createWorkbenchImage(String type) {

-		IEditorRegistry er= getDefault().getWorkbench().getEditorRegistry();

-		ImageDescriptor id= er.getImageDescriptor("foo." + type); //$NON-NLS-1$

-		return id.createImage();

-	}

-	

-	/**

-	 * Registers the given structure creator descriptor for one or more types.

-	 *

-	 * @param types one or more types separated by commas and whitespace

-	 * @param descriptor the descriptor to register

-	 */

-	public static void registerStructureCreator(String types, IStructureCreatorDescriptor descriptor) {

-		if (types != null) {

-			StringTokenizer tokenizer= new StringTokenizer(types, ","); //$NON-NLS-1$

-			while (tokenizer.hasMoreElements()) {

-				String extension= tokenizer.nextToken().trim();

-				fgStructureCreators.put(normalizeCase(extension), descriptor);

-			}

-		}

-	}

-	

-	/**

-	 * Returns an structure creator descriptor for the given type.

-	 *

-	 * @param type the type for which to find a descriptor

-	 * @return a descriptor for the given type, or <code>null</code> if no

-	 *   descriptor has been registered

-	 */

-	public static IStructureCreatorDescriptor getStructureCreator(String type) {

-		return (IStructureCreatorDescriptor) fgStructureCreators.get(normalizeCase(type));

-	}

-	

-	/**

-	 * Registers the given structure viewer descriptor for one or more types.

-	 *

-	 * @param types one or more types separated by commas and whitespace

-	 * @param the descriptor to register

-	 */

-	public static void registerStructureViewerDescriptor(String types, IViewerDescriptor descriptor) {

-		StringTokenizer tokenizer= new StringTokenizer(types, ","); //$NON-NLS-1$

-		while (tokenizer.hasMoreElements()) {

-			String extension= tokenizer.nextToken().trim();

-			fgStructureViewerDescriptors.put(normalizeCase(extension), descriptor);

-		}

-	}

-	

-	/**

-	 * Registers the given content merge viewer descriptor for one or more types.

-	 *

-	 * @param types one or more types separated by commas and whitespace

-	 * @param descriptor the descriptor to register

-	 */

-	public static void registerContentMergeViewerDescriptor(String types, IViewerDescriptor descriptor) {

-		StringTokenizer tokenizer= new StringTokenizer(types, ","); //$NON-NLS-1$

-		while (tokenizer.hasMoreElements()) {

-			String extension= tokenizer.nextToken().trim();

-			fgContentMergeViewerDescriptors.put(normalizeCase(extension), descriptor);

-		}

-	}

-	

-	/**

-	 * Registers the given content viewer descriptor for one or more types.

-	 *

-	 * @param types one or more types separated by commas and whitespace

-	 * @param descriptor the descriptor to register

-	 */

-	public static void registerContentViewerDescriptor(String types, IViewerDescriptor descriptor) {

-		StringTokenizer tokenizer= new StringTokenizer(types, ","); //$NON-NLS-1$

-		while (tokenizer.hasMoreElements()) {

-			String extension= tokenizer.nextToken().trim();

-			fgContentViewerDescriptors.put(normalizeCase(extension), descriptor);

-		}

-	}

-		

-	/**

-	 * 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) {

-

-		if (input.getLeft() == null || input.getRight() == null)	// we don't show the structure of additions or deletions

-			return null;

-			

-		String type= getType(input);

-		if (type == null)

-			return null;

-			

-		type= normalizeCase(type);

-			

-		IViewerDescriptor vd= (IViewerDescriptor) fgStructureViewerDescriptors.get(type);

-		if (vd == null) {

-			String alias= (String) fgStructureViewerAliases.get(type);

-			if (alias != null)

-				vd= (IViewerDescriptor) fgStructureViewerDescriptors.get(alias);

-		}

-		if (vd != null)

-			return vd.createViewer(oldViewer, parent, configuration);

-			

-		IStructureCreatorDescriptor scc= getStructureCreator(type);

-		if (scc != null) {

-			IStructureCreator sc= scc.createStructureCreator();

-			if (sc != null) {

-				StructureDiffViewer sdv= new StructureDiffViewer(parent, configuration);

-				sdv.setStructureCreator(sc);

-				return sdv;

-			}

-		}

-		return null;

-	}

-	

-	/**

-	 * 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, Object in, Composite parent, CompareConfiguration cc) {

-		

-		if (in instanceof IStreamContentAccessor) {

-			String type= ITypedElement.TEXT_TYPE;

-			

-			if (in instanceof ITypedElement) {

-				ITypedElement tin= (ITypedElement) in;

-				String ty= tin.getType();

-				if (ty != null)

-					type= ty;

-			}

-			type= normalizeCase(type);

-			

-			IViewerDescriptor vd= (IViewerDescriptor) fgContentViewerDescriptors.get(type);

-			Viewer viewer= null;

-			if (vd != null) {

-				viewer= vd.createViewer(oldViewer, parent, cc);

-				if (viewer != null)

-					return viewer;

-			}

-			// fallback

-			return new SimpleTextViewer(parent);

-		}

-

-		if (!(in instanceof ICompareInput))

-			return null;

-			

-		ICompareInput input= (ICompareInput) in;

-		String type= getType(input);

-		type= normalizeCase(type);

-		

-		if (ITypedElement.FOLDER_TYPE.equals(type))

-			return null;

-			

-		if (type != null) {

-			IViewerDescriptor vd= (IViewerDescriptor) fgContentMergeViewerDescriptors.get(type);

-			Viewer viewer= null;

-			if (vd != null) {

-				viewer= vd.createViewer(oldViewer, parent, cc);

-				if (viewer != null)

-					return viewer;

-			}

-		}

-		

-		// fallback

-		String leftType= guessType(input.getLeft());

-		String rightType= guessType(input.getRight());

-			

-		if (leftType != null || rightType != null) {

-			boolean right_text= rightType != null && ITypedElement.TEXT_TYPE.equals(rightType);

-			boolean left_text= leftType != null && ITypedElement.TEXT_TYPE.equals(leftType);

-			if ((leftType == null && right_text) || (left_text && rightType == null) || (left_text && right_text))

-				type= ITypedElement.TEXT_TYPE;

-			else

-				type= "binary"; //$NON-NLS-1$

-			

-			IViewerDescriptor vd= (IViewerDescriptor) fgContentMergeViewerDescriptors.get(normalizeCase(type));

-			if (vd != null)

-				return vd.createViewer(oldViewer, parent, cc);

-		}

-		return null;

-	}

-		

-	/**

-	 * Determines the type of the given threeway input by analyzing

-	 * the types (file extension) of the individual parts.

-	 * Returns null if no type can be determined.

-	 */

-	private static String getType(ICompareInput input) {

-		ITypedElement ancestor= input.getAncestor();

-		ITypedElement left= input.getLeft();

-		ITypedElement right= input.getRight();

-		

-		String[] types= new String[3];

-		int cnt= 0;

-		

-		if (ancestor != null) {

-			String type= ancestor.getType();

-			if (type != null)

-				types[cnt++]= type;

-		}

-		if (left != null) {

-			String type= left.getType();

-			if (type != null)

-				types[cnt++]= type;

-		}

-		if (right != null) {

-			String type= right.getType();

-			if (type != null)

-				types[cnt++]= type;

-		}

-		boolean homogenous= false;

-		switch (cnt) {

-		case 1:

-			homogenous= true;

-			break;

-		case 2:

-			homogenous= types[0].equals(types[1]);

-			break;

-		case 3:

-			homogenous= types[0].equals(types[1]) && types[1].equals(types[2]);

-			break;

-		}

-		if (homogenous)

-			return types[0];

-		return null;

-	}

-	

-	/**

-	 * Guesses the file type of the given input.

-	 * Returns ITypedElement.TEXT_TYPE if none of the first 10 lines is longer than 1000 bytes.

-	 * Returns ITypedElement.UNKNOWN_TYPE otherwise.

-	 * Returns <code>null</code> if the input isn't an <code>IStreamContentAccessor</code>.

-	 */

-	private static String guessType(ITypedElement input) {

-		if (input instanceof IStreamContentAccessor) {

-			IStreamContentAccessor sca= (IStreamContentAccessor) input;

-			InputStream is= null;

-			try {

-				is= sca.getContents();

-				if (is == null)

-					return null;

-				int lineLength= 0;

-				int lines= 0;

-				while (lines < 10) {

-					int c= is.read();

-					if (c == -1)	// EOF

-						break;

-					if (c == '\n' || c == '\r') { // reset line length

-						lineLength= 0;

-						lines++;

-					} else

-						lineLength++;

-					if (lineLength > 1000)

-						return ITypedElement.UNKNOWN_TYPE;

-				}

-				return ITypedElement.TEXT_TYPE;

-			} catch (CoreException ex) {

-				// be silent and return UNKNOWN_TYPE

-			} catch (IOException ex) {

-				// be silent and return UNKNOWN_TYPE

-			} finally {

-				if (is != null) {

-					try {

-						is.close();

-					} catch (IOException ex) {

-					}

-				}

-			}

-			return ITypedElement.UNKNOWN_TYPE;

-		}

-		return null;

-	}

-	

-	private static IViewerDescriptor getContentViewerDescriptor2(String type) {

-		return (IViewerDescriptor) fgContentMergeViewerDescriptors.get(normalizeCase(type));

-	}

-	

-	private static String normalizeCase(String s) {

-		if (NORMALIZE_CASE && s != null)

-			return s.toUpperCase();

-		return s;

-	}

-	

-	//---- alias mgmt

-	

-	private void initPreferenceStore() {

-		//System.out.println("initPreferenceStore");

-		IPreferenceStore ps= getPreferenceStore();

-		if (ps != null) {

-			String aliases= ps.getString(STRUCTUREVIEWER_ALIASES_PREFERENCE_NAME);

-			//System.out.println("  <" + aliases + ">");

-			if (aliases != null && aliases.length() > 0) {

-				StringTokenizer st= new StringTokenizer(aliases, " ");	//$NON-NLS-1$

-				while (st.hasMoreTokens()) {

-					String pair= st.nextToken();

-					int pos= pair.indexOf('.');

-					if (pos > 0) {

-						String key= pair.substring(0, pos);

-						String alias= pair.substring(pos+1);

-						fgStructureViewerAliases.put(key, alias);

-						//System.out.println("<" + key + "><" + alias + ">");

-					}

-				}

-			}

-		}		

-	}

-	

-	public static void addStructureViewerAlias(String type, String alias) {

-		//System.out.println("addStructureViewerAlias: " + type + " " + alias);

-		fgStructureViewerAliases.put(normalizeCase(alias), normalizeCase(type));

-	}

-	

-	public static void removeAllStructureViewerAliases(String type) {

-		String t= normalizeCase(type);

-		Set entrySet= fgStructureViewerAliases.entrySet();

-		for (Iterator iter= entrySet.iterator(); iter.hasNext(); ) {

-			Map.Entry entry= (Map.Entry)iter.next();

-			if (entry.getValue().equals(t))

-				iter.remove();

-		}

-	}

-	

-	/**

-	 * Returns an array of all editors that have an unsaved content. If the identical content is 

-	 * presented in more than one editor, only one of those editor parts is part of the result.

-	 * 

-	 * @return an array of all dirty editor parts.

-	 */

-	public static IEditorPart[] getDirtyEditors() {

-		Set inputs= new HashSet();

-		List result= new ArrayList(0);

-		IWorkbench workbench= getDefault().getWorkbench();

-		IWorkbenchWindow[] windows= workbench.getWorkbenchWindows();

-		for (int i= 0; i < windows.length; i++) {

-			IWorkbenchPage[] pages= windows[i].getPages();

-			for (int x= 0; x < pages.length; x++) {

-				IEditorPart[] editors= pages[x].getDirtyEditors();

-				for (int z= 0; z < editors.length; z++) {

-					IEditorPart ep= editors[z];

-					IEditorInput input= ep.getEditorInput();

-					if (!inputs.contains(input)) {

-						inputs.add(input);

-						result.add(ep);

-					}

-				}

-			}

-		}

-		return (IEditorPart[])result.toArray(new IEditorPart[result.size()]);

-	}

-		

-	public static void log(Throwable e) {

-		log(new Status(IStatus.ERROR, getPluginId(), INTERNAL_ERROR, CompareMessages.getString("ComparePlugin.internal_error"), e)); //$NON-NLS-1$

-	}

-	

-	public static void log(IStatus status) {

-		getDefault().getLog().log(status);

-	}

-	

-	public static String getPluginId() {

-		return getDefault().getDescriptor().getUniqueIdentifier();

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java
deleted file mode 100644
index dc5191d..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java
+++ /dev/null
@@ -1,13 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-public class CompareWithEditionAction extends EditionAction {

-	

-	public CompareWithEditionAction() {

-		super(false, "org.eclipse.compare.internal.CompareWithEditionAction"); //$NON-NLS-1$

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties
deleted file mode 100644
index 7a4b31a..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2000, 2001.

-# All Rights Reserved.

-# ====================================

-

-# @(#)CompareWithEditionAction.properties

-#

-# Resources for CompareWithEditionAction.java

-

-title= Compare with Local History

-

-treeTitleFormat= Local History of ''{0}''

-dateIcon= obj16/day_obj.gif

-timeIcon= obj16/resource_obj.gif

-

-treeFormat= {0}

-workspaceTreeFormat= {0} (Workspace File)

-parseErrorFormat= {0} (Parse Error)

-

-editionLabel= Local History ({0})

-workspaceEditionLabel= Workspace File

-

-targetLabel= Editor Buffer

-workspaceTargetLabel= Workspace File

-

-todayFormat= Today ({0})

-yesterdayFormat= Yesterday ({0})

-dayFormat= {0}

-

-closeButton.label=Close

-

-noLocalHistoryError= No local history available for selected resource.

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java
deleted file mode 100644
index 2e166ef..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.graphics.*;

-

-import org.eclipse.jface.resource.CompositeImageDescriptor;

-import org.eclipse.jface.resource.ImageDescriptor;

-

-/**

- * Combines an image with an overlay.

- */

-public class DiffImage extends CompositeImageDescriptor {

-

-	static final int HEIGHT= 16;

-

-	private Image fBaseImage;

-	private ImageDescriptor fOverlayImage;

-	private int fWidth;

-	private boolean fLeft= true;

-

-	public DiffImage(Image base, ImageDescriptor overlay, int w) {

-		fBaseImage= base;

-		fOverlayImage= overlay;

-		fWidth= w;

-	}

-

-	public DiffImage(Image base, ImageDescriptor overlay, int w, boolean onLeft) {

-		fBaseImage= base;

-		fOverlayImage= overlay;

-		fWidth= w;

-		fLeft= onLeft;

-	}

-

-	protected Point getSize() {

-		return new Point(fWidth, HEIGHT);

-	}

-

-	protected void drawCompositeImage(int width, int height) {

-		if (fLeft) {

-			if (fBaseImage != null) {

-				ImageData base= fBaseImage.getImageData();

-				if (base == null)

-					base= DEFAULT_IMAGE_DATA;

-				drawImage(base, fWidth - base.width, 0);

-			}

-	

-			if (fOverlayImage != null) {

-				ImageData overlay= fOverlayImage.getImageData();

-				if (overlay == null)

-					overlay= DEFAULT_IMAGE_DATA;

-				drawImage(overlay, 0, (HEIGHT - overlay.height) / 2);

-			}

-		} else {

-			if (fBaseImage != null) {

-				ImageData base= fBaseImage.getImageData();

-				if (base == null)

-					base= DEFAULT_IMAGE_DATA;

-				drawImage(base, 0, 0);

-			}

-	

-			if (fOverlayImage != null) {

-				ImageData overlay= fOverlayImage.getImageData();

-				if (overlay == null)

-					overlay= DEFAULT_IMAGE_DATA;

-				drawImage(overlay, fWidth - overlay.width, (HEIGHT - overlay.height) / 2);

-			}

-		}

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java
deleted file mode 100644
index 80b6409..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.jface.text.*;

-import org.eclipse.compare.contentmergeviewer.ITokenComparator;

-import org.eclipse.compare.rangedifferencer.IRangeComparator;

-

-/**

- * Implements the <code>IRangeComparator</code> interface for lines in a document.

- * A <code>DocLineComparator</code> is used as the input for the <code>RangeDifferencer</code>

- * engine to perform a line oriented compare on documents.

- * <p>

- * A <code>DocLineComparator</code> doesn't know anything about line separators because

- * its notion of lines is solely defined in the underlying <code>IDocument</code>.

- */

-public class DocLineComparator implements ITokenComparator {

-

-	private IDocument fDocument;

-	private int fLineOffset;

-	private int fLineCount;

-	private int fLength;

-	private boolean fIgnoreWhiteSpace;

-

-	/**

-	 * Creates a <code>DocLineComparator</code> for the given document range.

-	 * ignoreWhiteSpace controls whether comparing lines (in method

-	 * <code>rangesEqual<code>) should ignore whitespace.

-	 *

-	 * @param document the document from which the lines are taken

-	 * @param region if non-<code>null</code> only lines within this range are taken

-	 * @param ignoreWhiteSpace if <code>true</code> white space is ignored when comparing lines

-	 */

-	public DocLineComparator(IDocument document, IRegion region, boolean ignoreWhiteSpace) {

-

-		fDocument= document;

-		fIgnoreWhiteSpace= ignoreWhiteSpace;

-

-		fLineOffset= 0;

-		if (region != null) {

-			fLength= region.getLength();

-			int start= region.getOffset();

-			try {

-				fLineOffset= fDocument.getLineOfOffset(start);

-			} catch (BadLocationException ex) {

-			}

-

-			if (fLength == 0)

-				fLineCount= 0;

-			else {

-				int endLine= fDocument.getNumberOfLines();

-				try {

-					endLine= fDocument.getLineOfOffset(start + fLength);

-				} catch (BadLocationException ex) {

-				}

-				fLineCount= endLine - fLineOffset + 1;

-			}

-

-		} else {

-			fLength= document.getLength();

-			fLineCount= fDocument.getNumberOfLines();

-		}

-	}

-

-	/**

-	 * Returns the number of lines in the document.

-	 *

-	 * @return number of lines

-	 */

-	public int getRangeCount() {

-		return fLineCount;

-	}

-

-	/* (non Javadoc)

-	 * see ITokenComparator.getTokenStart

-	 */

-	public int getTokenStart(int line) {

-		try {

-			IRegion r= fDocument.getLineInformation(fLineOffset + line);

-			return r.getOffset();

-		} catch (BadLocationException ex) {

-			return fDocument.getLength();

-		}

-	}

-

-	/* (non Javadoc)

-	 * Returns the length of the given line.

-	 * see ITokenComparator.getTokenLength

-	 */

-	public int getTokenLength(int line) {

-		return getTokenStart(line+1) - getTokenStart(line);

-	}

-

-	/**

-	 * Returns <code>true</code> if a line given by the first index

-	 * matches a line specified by the other <code>IRangeComparator</code> and index.

-	 *

-	 * @param thisIndex	the number of the line within this range comparator

-	 * @param other the range comparator to compare this with

-	 * @param otherIndex the number of the line within the other comparator

-	 * @return <code>true</code> if the lines are equal

-	 */

-	public boolean rangesEqual(int thisIndex, IRangeComparator other0, int otherIndex) {

-

-		if (other0 != null && other0.getClass() == getClass()) {

-			DocLineComparator other= (DocLineComparator) other0;

-

-			if (fIgnoreWhiteSpace) {

-				String s1= extract(thisIndex);

-				String s2= other.extract(otherIndex);

-				return compare(s1, s2);

-			}

-

-			int tlen= getTokenLength(thisIndex);

-			int olen= other.getTokenLength(otherIndex);

-			if (tlen == olen) {

-				String s1= extract(thisIndex);

-				String s2= other.extract(otherIndex);

-				return s1.equals(s2);

-			}

-		}

-		return false;

-	}

-

-	/**

-	 * Aborts the comparison if the number of tokens is too large.

-	 *

-	 * @return <code>true</code> to abort a token comparison

-	 */

-	public boolean skipRangeComparison(int length, int max, IRangeComparator other) {

-		return false;

-	}

-		

-	//---- private methods

-	

-	/**

-	 * Extract a single line from the underlying document without the line separator.

-	 *

-	 * @param line the number of the line to extract

-	 * @return the contents of the line as a String

-	 */

-	private String extract(int line) {

-		if (line < fLineCount) {

-			try {

-				IRegion r= fDocument.getLineInformation(fLineOffset + line);

-				return fDocument.get(r.getOffset(), r.getLength());

-			} catch(BadLocationException e) {

-			}

-		}

-		return ""; //$NON-NLS-1$

-	}

-

-	private boolean compare(String s1, String s2) {

-		int i1= 0;

-		int i2= 0;

-		int l1= s1.length();

-		int l2= s2.length();

-		char c1= ' ';

-		char c2= ' ';

-		while (i1 < l1 || i2 < l2) {

-			if (i1 < l1) {

-				c1= s1.charAt(i1);

-				if (Character.isWhitespace(c1)) {

-					i1++;

-					continue;

-				}

-			}

-			if (i2 < l2) {

-				c2= s2.charAt(i2);

-				if (Character.isWhitespace(c2)) {

-					i2++;

-					continue;

-				}

-			}

-			if (c1 != c2)

-				return false;

-			i1++;

-			i2++;

-		}

-		return true;

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java
deleted file mode 100644
index 76491b9..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.util.*;

-

-import org.eclipse.jface.text.IDocument;

-

-/**

- * No API yet.

- */

-public class DocumentManager {

-	

-	private static final boolean DEBUG= false;

-	

-	private static ArrayList fgKeys= new ArrayList();

-	private static ArrayList fgValues= new ArrayList();

-	

-	public static IDocument get(Object o) {

-		

-		for (int i= 0; i < fgKeys.size(); i++) {

-			if (fgKeys.get(i) == o)

-				return (IDocument) fgValues.get(i);

-		}

-		return null;

-	}

-	

-	public static void put(Object o, IDocument document) {

-		if (DEBUG) System.out.println("DocumentManager.put: " + document);	//$NON-NLS-1$

-		for (int i= 0; i < fgKeys.size(); i++) {

-			if (fgKeys.get(i) == o) {

-				fgValues.set(i, document);

-				return;

-			}

-		}

-		fgKeys.add(o);

-		fgValues.add(document);	

-	}

-	

-	public static void remove(IDocument document) {

-		if (document != null) {

-			if (DEBUG) System.out.println("DocumentManager.remove: " + document);	//$NON-NLS-1$

-			for (int i= 0; i < fgValues.size(); i++) {

-				if (fgValues.get(i) == document) {

-					fgKeys.remove(i);

-					fgValues.remove(i);

-					return;

-				}

-			}

-			if (DEBUG) System.out.println("DocumentManager.remove: not found");	//$NON-NLS-1$

-		}

-	}

-	

-	public static void dump() {

-		if (DEBUG) System.out.println("DocumentManager: managed docs:" + fgValues.size());	//$NON-NLS-1$

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java
deleted file mode 100644
index a56b069..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.io.InputStream;

-import java.io.ByteArrayInputStream;

-import java.util.ArrayList;

-import java.util.ResourceBundle;

-import java.lang.reflect.InvocationTargetException;

-

-import org.eclipse.core.resources.*;

-import org.eclipse.core.runtime.*;

-

-import org.eclipse.swt.widgets.Shell;

-import org.eclipse.swt.graphics.Image;

-

-import org.eclipse.jface.action.IAction;

-import org.eclipse.jface.dialogs.MessageDialog;

-import org.eclipse.jface.dialogs.ProgressMonitorDialog;

-import org.eclipse.jface.viewers.ISelection;

-import org.eclipse.jface.text.IDocument;

-import org.eclipse.jface.text.BadLocationException;

-

-import org.eclipse.ui.*;

-import org.eclipse.ui.part.FileEditorInput;

-import org.eclipse.ui.texteditor.ITextEditor;

-import org.eclipse.ui.texteditor.IDocumentProvider;

-import org.eclipse.ui.actions.WorkspaceModifyOperation;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.ITypedElement;

-import org.eclipse.compare.IStreamContentAccessor;

-

-

-public class EditionAction implements IActionDelegate {

-

-	/**

-	 * Implements the IStreamContentAccessor and ITypedElement protocols

-	 * for a Document.

-	 */

-	class DocumentBufferNode implements ITypedElement, IStreamContentAccessor {

-		

-		private IDocument fDocument;

-		private String type;

-		private IFile fFile;

-		

-		DocumentBufferNode(IDocument document, IFile file) {

-			fDocument= document;

-			fFile= file;

-		}

-		

-		public String getName() {

-			return fFile.getName();

-		}

-		

-		public String getType() {

-			return fFile.getFileExtension();

-		}

-		

-		public Image getImage() {

-			return null;

-		}

-		

-		public InputStream getContents() {

-			return new ByteArrayInputStream(fDocument.get().getBytes());

-		}

-	}

-

-	private ISelection fSelection;

-	private String fBundleName;

-	private boolean fReplaceMode;

-	protected boolean fPrevious= false;

-	

-	EditionAction(boolean replaceMode, String bundleName) {

-		fReplaceMode= replaceMode;

-		fBundleName= bundleName;

-	}

-

-	public final void selectionChanged(IAction action, ISelection selection) {

-		fSelection= selection;

-		if (action != null) {

-			IFile[] files= getFiles(selection, fReplaceMode);

-			action.setEnabled(files.length == 1);	// we don't support multiple selection for now

-		}

-	}

-	

-	public void run(IAction action) {

-		IFile[] files= getFiles(fSelection, fReplaceMode);

-		for (int i= 0; i < files.length; i++)

-			doFromHistory(files[i]);

-	}

-

-	private void doFromHistory(final IFile file) {

-						

-		ResourceBundle bundle= ResourceBundle.getBundle(fBundleName);

-		String title= Utilities.getString(bundle, "title"); //$NON-NLS-1$

-			

-		Shell parentShell= CompareUIPlugin.getShell();

-		

-		IFileState states[]= null;

-		try {

-			states= file.getHistory(null);

-		} catch (CoreException ex) {		

-			MessageDialog.openError(parentShell, title, ex.getMessage());

-			return;

-		}

-		

-		if (states == null || states.length <= 0) {

-			String msg= Utilities.getString(bundle, "noLocalHistoryError"); //$NON-NLS-1$

-			MessageDialog.openInformation(parentShell, title, msg);

-			return;

-		}

-		

-		ITypedElement base= new ResourceNode(file);

-		

-		IDocument document= getDocument(file);

-		ITypedElement target= base;

-		if (document != null)

-			target= new DocumentBufferNode(document, file);

-	

-		ITypedElement[] editions= new ITypedElement[states.length+1];

-		editions[0]= base;

-		for (int i= 0; i < states.length; i++)

-			editions[i+1]= new HistoryItem(base, states[i]);

-

-		EditionSelectionDialog d= new EditionSelectionDialog(parentShell, bundle);

-		d.setEditionTitleArgument(file.getName());

-		d.setEditionTitleImage(CompareUIPlugin.getImage(file));

-		//d.setHideIdenticalEntries(false);

-		

-		if (fReplaceMode) {

-			

-			ITypedElement ti= null;

-			if (fPrevious)

-				ti= d.selectPreviousEdition(target, editions, null);

-			else

-				ti= d.selectEdition(target, editions, null);

-			

-			if (ti instanceof IStreamContentAccessor) {

-				IStreamContentAccessor sa= (IStreamContentAccessor)ti;

-				try {

-

-					if (document != null)

-						updateDocument(document, sa);	

-					else

-						updateWorkspace(bundle, parentShell, sa, file);

-						

-				} 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$

-				}

-			}

-		} else {

-			d.setCompareMode(true);

-

-			d.selectEdition(target, editions, null);			

-		}

-	}

-	

-	private void updateWorkspace(final ResourceBundle bundle, Shell shell,

-						final IStreamContentAccessor sa, final IFile file)

-									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, IProgressMonitor.UNKNOWN);

-					file.setContents(sa.getContents(), false, true, pm);

-				} catch (CoreException e) {

-					throw new InvocationTargetException(e);

-				} finally {

-					pm.done();

-				}

-			}

-		};

-		

-		ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(shell);				

-		pmdialog.run(false, true, operation);									

-	}

-	

-	private void updateDocument(IDocument document, IStreamContentAccessor sa) throws InvocationTargetException {

-		try {

-			InputStream is= sa.getContents();

-			String text= Utilities.readString(is);

-			document.replace(0, document.getLength(), text);

-		} catch (CoreException e) {

-			throw new InvocationTargetException(e);

-		} catch (BadLocationException e) {

-			throw new InvocationTargetException(e);

-		}

-	}

-	

-	private IDocument getDocument(IFile file) {

-		IWorkbench wb= PlatformUI.getWorkbench();

-		if (wb == null)

-			return null;

-		IWorkbenchWindow[] ws= wb.getWorkbenchWindows();

-		if (ws == null)

-			return null;

-			

-		FileEditorInput test= new FileEditorInput(file);

-		

-		for (int i= 0; i < ws.length; i++) {

-			IWorkbenchWindow w= ws[i];

-			IWorkbenchPage[] wps= w.getPages();

-			if (wps != null) {

-				for (int j= 0; j < wps.length; j++) {

-					IWorkbenchPage wp= wps[j];

-					IEditorPart ep= wp.findEditor(test);

-					if (ep instanceof ITextEditor) {

-						ITextEditor te= (ITextEditor) ep;

-						IDocumentProvider dp= te.getDocumentProvider();

-						if (dp != null) {

-							IDocument doc= dp.getDocument(ep);

-							if (doc != null)

-								return doc;

-						}

-					}

-				}

-			}

-		}

-		return null;

-	}

-	

-	private IFile[] getFiles(ISelection selection, boolean modifiable) {

-		ArrayList result= new ArrayList();

-		Object[] s= Utilities.toArray(selection);	

-		for (int i= 0; i < s.length; i++) {

-			Object o= s[i];

-			IFile file= null;

-			if (o instanceof IFile) {

-				file= (IFile) o;

-			} else if (o instanceof IAdaptable) {

-				IAdaptable a= (IAdaptable) o;

-				Object adapter= a.getAdapter(IResource.class);

-				if (adapter instanceof IFile)

-					file= (IFile) adapter;

-			}

-			if (file != null) {

-				if (modifiable) {

-					if (!file.isReadOnly())

-						result.add(file);

-				} else {

-					result.add(file);

-				}					

-			}

-		}

-		return (IFile[]) result.toArray(new IFile[result.size()]);

-	}

-

-

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java
deleted file mode 100644
index 773b049..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.io.StringWriter;

-import java.lang.reflect.InvocationTargetException;

-

-import org.eclipse.swt.widgets.Shell;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IStatus;

-import org.eclipse.core.runtime.Status;

-

-import org.eclipse.jface.dialogs.ErrorDialog;

-import org.eclipse.jface.dialogs.MessageDialog;

-

-/**

- * The default exception handler shows an error dialog when one of its handle methods

- * is called. If the passed exception is a <code>CoreException</code> an error dialog

- * pops up showing the exception's status information. For a <code>InvocationTargetException</code>

- * a normal message dialog pops up showing the exception's message. Additionally the exception

- * is written to the platform log.

- */

-public class ExceptionHandler {

-

-	private static ExceptionHandler fgInstance= new ExceptionHandler();

-	

-	/**

-	 * Logs the given exception using the platform's logging mechanism. The exception is

-	 * logged as an error with the error code <code>JavaStatusConstants.INTERNAL_ERROR</code>.

-	 */

-	public static void log(Throwable t, String message) {

-		CompareUIPlugin.log(new Status(IStatus.ERROR, CompareUIPlugin.getPluginId(), 

-			CompareUIPlugin.INTERNAL_ERROR, message, t));

-	}

-	

-	/**

-	 * Handles the given <code>CoreException</code>. The workbench shell is used as a parent

-	 * for the dialog window.

-	 * 

-	 * @param e the <code>CoreException</code> to be handled

-	 * @param title the dialog window's window title

-	 * @param message message to be displayed by the dialog window

-	 */

-	public static void handle(CoreException e, String title, String message) {

-		handle(e, CompareUIPlugin.getShell(), title, message);

-	}

-	

-	/**

-	 * Handles the given <code>CoreException</code>. 

-	 * 

-	 * @param e the <code>CoreException</code> to be handled

-	 * @param parent the dialog window's parent shell

-	 * @param title the dialog window's window title

-	 * @param message message to be displayed by the dialog window

-	 */

-	public static void handle(CoreException e, Shell parent, String title, String message) {

-		fgInstance.perform(e, parent, title, message);

-	}

-	

-	/**

-	 * Handles the given <code>InvocationTargetException</code>. The workbench shell is used 

-	 * as a parent for the dialog window.

-	 * 

-	 * @param e the <code>InvocationTargetException</code> to be handled

-	 * @param title the dialog window's window title

-	 * @param message message to be displayed by the dialog window

-	 */

-	public static void handle(InvocationTargetException e, String title, String message) {

-		handle(e, CompareUIPlugin.getShell(), title, message);

-	}

-	

-	/**

-	 * Handles the given <code>InvocationTargetException</code>. 

-	 * 

-	 * @param e the <code>InvocationTargetException</code> to be handled

-	 * @param parent the dialog window's parent shell

-	 * @param title the dialog window's window title

-	 * @param message message to be displayed by the dialog window

-	 */

-	public static void handle(InvocationTargetException e, Shell parent, String title, String message) {

-		fgInstance.perform(e, parent, title, message);

-	}

-

-	//---- Hooks for subclasses to control exception handling ------------------------------------

-	

-	protected void perform(CoreException e, Shell shell, String title, String message) {

-		CompareUIPlugin.log(e);

-		IStatus status= e.getStatus();

-		if (status != null) {

-			ErrorDialog.openError(shell, title, message, status);

-		} else {

-			displayMessageDialog(e, e.getMessage(), shell, title, message);

-		}

-	}

-

-	protected void perform(InvocationTargetException e, Shell shell, String title, String message) {

-		Throwable target= e.getTargetException();

-		if (target instanceof CoreException) {

-			perform((CoreException)target, shell, title, message);

-		} else {

-			CompareUIPlugin.log(e);

-			if (e.getMessage() != null && e.getMessage().length() > 0) {

-				displayMessageDialog(e, e.getMessage(), shell, title, message);

-			} else {

-				displayMessageDialog(e, target.getMessage(), shell, title, message);

-			}

-		}

-	}

-

-	//---- Helper methods -----------------------------------------------------------------------

-	

-	private void displayMessageDialog(Throwable t, String exceptionMessage, Shell shell, String title, String message) {

-		StringWriter msg= new StringWriter();

-		if (message != null) {

-			msg.write(message);

-			msg.write("\n\n"); //$NON-NLS-1$

-		}

-		if (exceptionMessage == null || exceptionMessage.length() == 0)

-			msg.write(CompareMessages.getString("ExceptionDialog.seeErrorLogMessage")); //$NON-NLS-1$

-		else

-			msg.write(exceptionMessage);

-		MessageDialog.openError(shell, title, msg.toString());			

-	}	

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java
deleted file mode 100644
index 88ac71d..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-public interface INavigatable {

-	

-	static final String NAVIGATOR_PROPERTY= "org.eclipse.compare.internal.Navigator"; //$NON-NLS-1$

-	

-	/**

-	 * Returns true if at end or beginning.

-	 */

-	boolean gotoDifference(boolean next);

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java
deleted file mode 100644
index d4b4cc2..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java
+++ /dev/null
@@ -1,13 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.core.runtime.IProgressMonitor;

-import org.eclipse.core.runtime.CoreException;

-

-public interface ISavable {

-	

-	void save(IProgressMonitor pm) throws CoreException;

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java
deleted file mode 100644
index e637e53..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.compare.structuremergeviewer.IStructureCreator;

-

-/**

- * A factory object for creating <code>IStructureCreator</code>s from a descriptor.

- * <p>

- * It is used when registering <code>IStructureCreator</code> for types

- * in <code>CompareUIPlugin.registerStructureCreator</code>.

- * </p>

- *

- * @see IStructureCreator

- * @see CompareUIPlugin

- */

-public interface IStructureCreatorDescriptor {

-

-	/**

-	 * Creates a new structure creator.

-	 *

-	 * @return a newly created structure creator

-	 */

-	IStructureCreator createStructureCreator(); 

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java
deleted file mode 100644
index 8d69626..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.widgets.Composite;

-

-import org.eclipse.jface.viewers.Viewer;

-import org.eclipse.compare.CompareConfiguration;

-

-/**

- * A factory object for creating a <code>Viewer</code>s from a descriptor.

- * <p>

- * It is used when registering a viewer for a specific type

- * in <code>CompareUIPlugin.registerContentViewerDescriptor</code> and

- * in <code>CompareUIPlugin.registerStructureViewerDescriptor</code>.

- *

- * @see org.eclipse.compare.structuremergeviewer.IStructureCreator

- * @see CompareUIPlugin

- */

-public interface IViewerDescriptor {

-

-	/**

-	 * Creates a new viewer from this descriptor under the given STW parent control.

-	 * If the current viewer has the same type as a new viewer

-	 * the implementation of this method is free to return the current viewer instead.

-	 *

-	 * @param currentViewer the current viewer which is going to be replaced with a new viewer.

-	 * @param parent the SWT parent control under which the new viewer has to be created.

-	 * @param config a compare configuration the new viewer might be interested in.

-	 * @return a new viewer or the current viewer.

-	 */

-	Viewer createViewer(Viewer currentViewer, Composite parent, CompareConfiguration config);

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java
deleted file mode 100644
index bcfc62b..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.util.ResourceBundle;

-

-import org.eclipse.compare.*;

-

-/**

- * Toggles the <code>ICompareConfiguration.IGNORE_WS</code> property of an

- * <code>ICompareConfiguration</code>.

- */

-public class IgnoreWhiteSpaceAction extends ChangePropertyAction {

-

-	public IgnoreWhiteSpaceAction(ResourceBundle bundle, CompareConfiguration cc) {

-		super(bundle, cc, "action.IgnoreWhiteSpace.", CompareConfiguration.IGNORE_WHITESPACE); //$NON-NLS-1$

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java
deleted file mode 100644
index 3a3ec33..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.*;

-import org.eclipse.swt.graphics.*;

-import org.eclipse.swt.widgets.*;

-

-/**

- * A <code>Canvas</code> showing a single centered SWT <code>Image</code>.

- * If the <code>Image</code> is larger than the <code>Canvas<code>,

- * <code>Scrollbars</code> will appear.

- */

-class ImageCanvas extends Canvas {

-

-	private Image fImage;

-

-	/**

-	 * Create a new ImageCanvas with the given SWT stylebits.

-	 * (SWT.H_SCROLL and SWT.V_SCROLL are automtically added).

-	 */

-	public ImageCanvas(Composite parent, int style) {

-		super(parent, style | SWT.H_SCROLL | SWT.V_SCROLL);

-

-		ScrollBar sb= getHorizontalBar();

-		sb.setIncrement(20);

-		sb.addListener(SWT.Selection, new Listener() {

-			public void handleEvent(Event e) {

-				repaint();

-			}

-		});

-

-		sb= getVerticalBar();

-		sb.setIncrement(20);

-		sb.addListener(SWT.Selection, new Listener() {

-			public void handleEvent(Event e) {

-				repaint();

-			}

-		});

-

-		addListener(SWT.Resize, new Listener() {

-			public void handleEvent(Event e) {

-				updateScrollbars();

-			}

-		});

-

-		addListener(SWT.Paint, new Listener() {

-			public void handleEvent(Event event) {

-				paint(event.gc);

-			}

-		});

-	}

-

-	/**

-	 * Set the SWT Image to use as the ImageCanvas contents.

-	 */

-	public void setImage(Image img) {

-		fImage= img;

-

-		if (!isDisposed()) {

-			getHorizontalBar().setSelection(0);

-			getVerticalBar().setSelection(0);

-			updateScrollbars();

-			getParent().layout();

-			redraw();

-		}

-	}

-

-	public void repaint() {

-		if (!isDisposed()) {

-			GC gc= new GC(this);

-			paint(gc);

-			gc.dispose();

-		}

-	}

-

-	/**

-	 * @private

-	 */

-	private void paint(GC gc) {

-		if (fImage != null) {

-			Rectangle bounds= fImage.getBounds();

-			Rectangle clientArea= getClientArea();

-

-			int x;

-			if (bounds.width < clientArea.width)

-				x= (clientArea.width - bounds.width) / 2;

-			else

-				x= -getHorizontalBar().getSelection();

-

-			int y;

-			if (bounds.height < clientArea.height)

-				y= (clientArea.height - bounds.height) / 2;

-			else

-				y= -getVerticalBar().getSelection();

-

-			gc.drawImage(fImage, x, y);

-		}

-	}

-

-	/**

-	 * @private

-	 */

-	private void updateScrollbars() {

-		Rectangle bounds= fImage != null ? fImage.getBounds() : new Rectangle(0, 0, 0, 0);

-		Point size= getSize();

-		Rectangle clientArea= getClientArea();

-

-		ScrollBar horizontal= getHorizontalBar();

-		if (bounds.width <= clientArea.width) {

-			horizontal.setVisible(false);

-			horizontal.setSelection(0);

-		} else {

-			horizontal.setPageIncrement(clientArea.width - horizontal.getIncrement());

-			int max= bounds.width + (size.x - clientArea.width);

-			horizontal.setMaximum(max);

-			horizontal.setThumb(size.x > max ? max : size.x);

-			horizontal.setVisible(true);

-		}

-

-		ScrollBar vertical= getVerticalBar();

-		if (bounds.height <= clientArea.height) {

-			vertical.setVisible(false);

-			vertical.setSelection(0);

-		} else {

-			vertical.setPageIncrement(clientArea.height - vertical.getIncrement());

-			int max= bounds.height + (size.y - clientArea.height);

-			vertical.setMaximum(max);

-			vertical.setThumb(size.y > max ? max : size.y);

-			vertical.setVisible(true);

-		}

-	}

-

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
deleted file mode 100644
index 8373bed..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.io.ByteArrayInputStream;

-import java.io.InputStream;

-import java.io.IOException;

-import java.util.ResourceBundle;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.SWTException;

-import org.eclipse.swt.graphics.Image;

-import org.eclipse.swt.widgets.Composite;

-import org.eclipse.swt.widgets.Display;

-

-import org.eclipse.core.runtime.CoreException;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.contentmergeviewer.ContentMergeViewer;

-

-/**

- */

-public class ImageMergeViewer extends ContentMergeViewer {

-	

-	private static final String BUNDLE_NAME= "org.eclipse.compare.internal.ImageMergeViewerResources"; //$NON-NLS-1$

-		

-	private Object fAncestorImage;

-	private Object fLeftImage;

-	private Object fRightImage;

-

-	private ImageCanvas fAncestor;

-	private ImageCanvas fLeft;

-	private ImageCanvas fRight;

-	

-			

-	public ImageMergeViewer(Composite parent, int styles, CompareConfiguration mp) {

-		super(styles, ResourceBundle.getBundle(BUNDLE_NAME), mp);

-		buildControl(parent);

-		String title= Utilities.getString(getResourceBundle(), "title"); //$NON-NLS-1$

-		getControl().setData(CompareUI.COMPARE_VIEWER_TITLE, title);

-	}

-

-	protected void updateContent(Object ancestor, Object left, Object right) {

-		

-		fAncestorImage= ancestor;

-		setInput(fAncestor, ancestor);

-		

-		fLeftImage= left;

-		setInput(fLeft, left);

-		

-		fRightImage= right;

-		setInput(fRight, right);

-	}

-	

-	/**

-	 * We can't modify the contents of either side we just return null.

-	 */

-	protected byte[] getContents(boolean left) {

-		return null;

-	}

-	

-	public void createControls(Composite composite) {

-		fAncestor= new ImageCanvas(composite, SWT.NO_FOCUS);

-		fLeft= new ImageCanvas(composite, SWT.NO_FOCUS);

-		fRight= new ImageCanvas(composite, SWT.NO_FOCUS);

-	}

-

-	private static void setInput(ImageCanvas canvas, Object input) {

-		if (canvas != null) {

-

-			InputStream stream= null;

-			if (input instanceof IStreamContentAccessor) {

-				IStreamContentAccessor sca= (IStreamContentAccessor) input;

-				if (sca != null) {

-					try {

-						stream= sca.getContents();

-					} catch (CoreException ex) {

-					}

-				}

-			}

-			

-			Image image= null;			

-			Display display= canvas.getDisplay();

-			if (stream != null) {

-				try {

-					image= new Image(display, stream);

-				} catch (SWTException ex) {

-				}

-			}

-

-			canvas.setImage(image);

-			if (image != null) {

-				canvas.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND));

-			} else {

-				canvas.setBackground(null);

-			}

-			

-			if (stream != null) {

-				try {

-					stream.close();

-				} catch (IOException ex) {

-				}

-			}

-		}

-	}

-	

-	protected void handleResizeAncestor(int x, int y, int width, int height) {

-		if (width > 0) {

-			fAncestor.setVisible(true);

-			fAncestor.setBounds(x, y, width, height);

-		} else {

-			fAncestor.setVisible(false);

-		}

-	}

-

-	protected void handleResizeLeftRight(int x, int y, int width1, int centerWidth, int width2, int height) {

-		fLeft.setBounds(x, y, width1, height);

-		fRight.setBounds(x+width1+centerWidth, y, width2, height);

-	}

-	

-	protected void copy(boolean leftToRight) {

-		if (leftToRight) {

-			fRightImage= fLeftImage;

-			setInput(fRight, fRightImage);

-			setRightDirty(true);

-		} else {

-			fLeftImage= fRightImage;

-			setInput(fLeft, fLeftImage);

-			setLeftDirty(true);

-		}

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java
deleted file mode 100644
index 2d40636..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.widgets.Composite;

-

-import org.eclipse.compare.*;

-import org.eclipse.jface.viewers.Viewer;

-

-/**

- * A factory object for the <code>ImageMergeViewer</code>.

- * This indirection is necessary because only objects with a default

- * constructor can be created via an extension point

- * (this precludes Viewers).

- */

-public class ImageMergeViewerCreator implements IViewerCreator {

-

-	public Viewer createViewer(Composite parent, CompareConfiguration mp) {

-		return new ImageMergeViewer(parent, SWT.NULL, mp);

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties
deleted file mode 100644
index b150dda..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2000, 2001.

-# All Rights Reserved.

-# =====================================

-

-# @(#)ImageMergeViewerResources.properties

-#

-# Resource strings for ImageMergeViewer.java

-

-title= Image Compare

-

-#####################################################

-# Actions

-#####################################################

-

-action.CopyLeftToRight.label= Copy Left to Right

-action.CopyLeftToRight.tooltip= Copy Image from Left to Right

-action.CopyLeftToRight.image= elcl16/copy_r_co.gif

-

-action.CopyRightToLeft.label= Copy Right to Left

-action.CopyRightToLeft.tooltip= Copy Image from Right to Left

-action.CopyRightToLeft.image= elcl16/copy_l_co.gif

-

-action.EnableAncestor.label= Enable Ancestor Pane

-action.EnableAncestor.tooltip= Control Visibility of Ancestor Pane

-action.EnableAncestor.image= elcl16/ancestorpane_co.gif

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java
deleted file mode 100644
index 9170ede..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.util.List;

-

-import org.eclipse.jface.viewers.IStructuredContentProvider;

-import org.eclipse.jface.viewers.Viewer;

-

-/** 

- * A specialized content provider to show a list of editor parts.

- */ 

-public class ListContentProvider implements IStructuredContentProvider {

-	List fContents;	

-

-	public ListContentProvider() {

-	}

-	

-	public Object[] getElements(Object input) {

-		if (fContents != null && fContents == input)

-			return fContents.toArray();

-		return new Object[0];

-	}

-

-	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {

-		if (newInput instanceof List) 

-			fContents= (List)newInput;

-		else

-			fContents= null;

-		// we use a fixed set.

-	}

-

-	public void dispose() {

-	}

-	

-	public boolean isDeleted(Object o) {

-		return fContents != null && !fContents.contains(o);

-	}

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java
deleted file mode 100644
index 7cd2624..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.layout.GridData;

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.jface.dialogs.IDialogConstants;

-import org.eclipse.jface.viewers.*;

-

-import org.eclipse.ui.dialogs.SelectionDialog;

-

-public class ListDialog extends SelectionDialog {

-

-	private IStructuredContentProvider fContentProvider;

-	private ILabelProvider fLabelProvider;

-	private Object fInput;

-	private TableViewer fTableViewer;

-	private boolean fAddCancelButton;

-	

-	public ListDialog(Shell parent) {

-		super(parent);

-		fAddCancelButton= false;

-	}

-

-	public void setInput(Object input) {

-		fInput= input;

-	}

-	

-	public void setContentProvider(IStructuredContentProvider sp){

-		fContentProvider= sp;

-	}

-	

-	public void setLabelProvider(ILabelProvider lp){

-		fLabelProvider= lp;

-	}

-

-	public void setAddCancelButton(boolean addCancelButton) {

-		fAddCancelButton= addCancelButton;

-	}

-	

-	public TableViewer getTableViewer(){

-		return fTableViewer;

-	}

-			

-	public boolean hasFilters(){

-		return fTableViewer.getFilters() != null && fTableViewer.getFilters().length != 0;

-	}

-	

-	public void create() {

-		setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE);

-		super.create();

-	}

-	

-	protected void createButtonsForButtonBar(Composite parent) {

-		if (! fAddCancelButton)

-			createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);

-		else

-			super.createButtonsForButtonBar(parent);	

-	}	

-	

-	protected Control createDialogArea(Composite container) {

-		Composite parent= (Composite) super.createDialogArea(container);

-		createMessageArea(parent);

-		fTableViewer= new TableViewer(parent, getTableStyle());

-		fTableViewer.setContentProvider(fContentProvider);

-		Table table= fTableViewer.getTable();

-		fTableViewer.setLabelProvider(fLabelProvider);

-		fTableViewer.setInput(fInput);

-		GridData gd= new GridData(GridData.FILL_BOTH);

-		gd.heightHint= convertHeightInCharsToPixels(15);

-		gd.widthHint= convertWidthInCharsToPixels(55);

-		table.setLayoutData(gd);

-		return parent;

-	}

-	

-	protected int getTableStyle() {

-		return SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER;

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
deleted file mode 100644
index 307a1d1..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java
deleted file mode 100644
index 52269f8..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package org.eclipse.compare.internal;
-
-import org.eclipse.ui.texteditor.IUpdate;
-import org.eclipse.jface.action.Action;
-
-
-public abstract class MergeViewerAction extends Action implements IUpdate {
-	
-	private boolean fMutable;
-	private boolean fSelection;
-	private boolean fContent;
-	
-	public MergeViewerAction(boolean mutable, boolean selection, boolean content) {
-		fMutable= mutable;
-		fSelection= selection;
-		fContent= content;
-	}
-
-	public boolean isSelectionDependent() {
-		return fSelection;
-	}
-	
-	public boolean isContentDependent() {
-		return fContent;
-	}
-	
-	public boolean isEditableDependent() {
-		return fMutable;
-	}
-	
-	public void update() {
-	}
-}
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java
deleted file mode 100644
index d193501..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.graphics.Image;

-

-import org.eclipse.jface.viewers.Viewer;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.structuremergeviewer.*;

-import org.eclipse.compare.contentmergeviewer.IMergeViewerContentProvider;

-

-/**

- * Adapts any <code>ContentMergeViewer</code> to work on an <code>ICompareInput</code>

- * e.g. a <code>DiffNode</code>.

- */

-public class MergeViewerContentProvider implements IMergeViewerContentProvider {

-	

-	private CompareConfiguration fCompareConfiguration;

-		

-	public MergeViewerContentProvider(CompareConfiguration cc) {

-		fCompareConfiguration= cc;

-	}

-	

-	public void dispose() {

-	}

-	

-	public void inputChanged(Viewer v, Object o1, Object o2) {

-		// we are not interested since we have no state

-	}

-	

-	//---- ancestor

-			

-	public String getAncestorLabel(Object element) {

-		return fCompareConfiguration.getAncestorLabel(element);

-	}

-	

-	public Image getAncestorImage(Object element) {

-		return fCompareConfiguration.getAncestorImage(element);

-	}

-	

-	public Object getAncestorContent(Object element) {

-		if (element instanceof ICompareInput)

-			return ((ICompareInput) element).getAncestor();

-		return null;

-	}

-	

-	public boolean showAncestor(Object element) {

-		if (element instanceof ICompareInput)

-			return (((ICompareInput)element).getKind() & Differencer.DIRECTION_MASK) == Differencer.CONFLICTING;

-		return false;

-	}

-

-	//---- left

-					

-	public String getLeftLabel(Object element) {

-		return fCompareConfiguration.getLeftLabel(element);

-	}

-	

-	public Image getLeftImage(Object element) {

-		return fCompareConfiguration.getLeftImage(element);

-	}

-	

-	public Object getLeftContent(Object element) {	

-		if (element instanceof ICompareInput)

-			return ((ICompareInput) element).getLeft();

-		return null;

-	}

-		

-	public boolean isLeftEditable(Object element) {

-		if (element instanceof ICompareInput) {

-			Object left= ((ICompareInput) element).getLeft();

-			if (left == null) {

-				IDiffElement parent= ((IDiffElement)element).getParent();

-				if (parent instanceof ICompareInput)

-					left= ((ICompareInput) parent).getLeft();

-			}

-			if (left instanceof IEditableContent)

-				return ((IEditableContent)left).isEditable();

-		}

-		return false;

-	}

-

-	public void saveLeftContent(Object element, byte[] bytes) {

-		if (element instanceof ICompareInput) {

-			ICompareInput node= (ICompareInput) element;

-			if (bytes != null) {

-				ITypedElement left= node.getLeft();

-				// #9869: problem if left is null (because no resource exists yet) nothing is done!

-				if (left == null) {

-					node.copy(false);

-					left= node.getLeft();

-				}

-				if (left instanceof IEditableContent)

-					((IEditableContent)left).setContent(bytes);

-				if (node instanceof ResourceCompareInput.MyDiffNode)

-					((ResourceCompareInput.MyDiffNode)node).fireChange();

-			} else {

-				node.copy(false);

-			}			

-		}

-	}

-	

-	//---- right

-	

-	public String getRightLabel(Object element) {

-		return fCompareConfiguration.getRightLabel(element);

-	}

-	

-	public Image getRightImage(Object element) {

-		return fCompareConfiguration.getRightImage(element);

-	}

-	

-	public Object getRightContent(Object element) {

-		if (element instanceof ICompareInput)

-			return ((ICompareInput) element).getRight();

-		return null;

-	}

-	

-	public boolean isRightEditable(Object element) {

-		if (element instanceof ICompareInput) {

-			Object right= ((ICompareInput) element).getRight();

-			if (right == null) {

-				IDiffContainer parent= ((IDiffElement)element).getParent();

-				if (parent instanceof ICompareInput)

-					right= ((ICompareInput) parent).getRight();

-			}

-			if (right instanceof IEditableContent)

-				return ((IEditableContent)right).isEditable();

-		}

-		return false;

-	}

-	

-	public void saveRightContent(Object element, byte[] bytes) {

-		if (element instanceof ICompareInput) {

-			ICompareInput node= (ICompareInput) element;

-			if (bytes != null) {

-				ITypedElement right= node.getRight();

-				// #9869: problem if right is null (because no resource exists yet) nothing is done!

-				if (right == null) {

-					node.copy(true);

-					right= node.getRight();

-				}

-				if (right instanceof IEditableContent)

-					((IEditableContent)right).setContent(bytes);

-				if (node instanceof ResourceCompareInput.MyDiffNode)

-					((ResourceCompareInput.MyDiffNode)node).fireChange();

-			} else {

-				node.copy(true);

-			}		

-		}

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java
deleted file mode 100644
index 32887e3..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.compare.CompareViewerSwitchingPane;

-

-/**

- * Used whenever the input is null or no viewer can be found.

- */

-public class NullViewer extends AbstractViewer {

-

-	private Control fDummy;

-

-	public NullViewer(Composite parent) {

-

-		fDummy= new Tree(parent, SWT.NULL);

-

-		CompareViewerSwitchingPane.clearToolBar(parent);

-	}

-

-	public Control getControl() {

-		return fDummy;

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java
deleted file mode 100644
index 232a93d..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

- 

-package org.eclipse.compare.internal;

-

-import org.eclipse.jface.preference.IPreferenceStore;

-import org.eclipse.jface.preference.PreferenceStore;

-import org.eclipse.jface.util.IPropertyChangeListener;

-import org.eclipse.jface.util.PropertyChangeEvent;

-

-/**

- * An overlaying preference store.

- */

-public class OverlayPreferenceStore  implements IPreferenceStore {

-	

-	

-	public static final class TypeDescriptor {

-		private TypeDescriptor() {

-		}

-	};

-	

-	public static final TypeDescriptor BOOLEAN= new TypeDescriptor();

-	public static final TypeDescriptor DOUBLE= new TypeDescriptor();

-	public static final TypeDescriptor FLOAT= new TypeDescriptor();

-	public static final TypeDescriptor INT= new TypeDescriptor();

-	public static final TypeDescriptor LONG= new TypeDescriptor();

-	public static final TypeDescriptor STRING= new TypeDescriptor();

-	

-	public static class OverlayKey {

-		

-		TypeDescriptor fDescriptor;

-		String fKey;

-		

-		public OverlayKey(TypeDescriptor descriptor, String key) {

-			fDescriptor= descriptor;

-			fKey= key;

-		}

-	};

-	

-	private class PropertyListener implements IPropertyChangeListener {

-				

-		/*

-		 * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent)

-		 */

-		public void propertyChange(PropertyChangeEvent event) {

-			OverlayKey key= findOverlayKey(event.getProperty());

-			if (key != null)

-				propagateProperty(fParent, key, fStore); 

-		}

-	};

-	

-	

-	private IPreferenceStore fParent;

-	private IPreferenceStore fStore;

-	private OverlayKey[] fOverlayKeys;

-	

-	private PropertyListener fPropertyListener;

-	

-	

-	public OverlayPreferenceStore(IPreferenceStore parent, OverlayKey[] overlayKeys) {

-		fParent= parent;

-		fOverlayKeys= overlayKeys;

-		fStore= new PreferenceStore();

-	}

-	

-	private OverlayKey findOverlayKey(String key) {

-		for (int i= 0; i < fOverlayKeys.length; i++) {

-			if (fOverlayKeys[i].fKey.equals(key))

-				return fOverlayKeys[i];

-		}

-		return null;

-	}

-	

-	private boolean covers(String key) {

-		return (findOverlayKey(key) != null);

-	}

-	

-	private void propagateProperty(IPreferenceStore orgin, OverlayKey key, IPreferenceStore target) {

-		

-		if (orgin.isDefault(key.fKey)) {

-			if (!target.isDefault(key.fKey))

-				target.setToDefault(key.fKey);

-			return;

-		}

-		

-		TypeDescriptor d= key.fDescriptor;

-		if (BOOLEAN == d) {

-			

-			boolean originValue= orgin.getBoolean(key.fKey);

-			boolean targetValue= target.getBoolean(key.fKey);

-			if (targetValue != originValue)

-				target.setValue(key.fKey, originValue);

-				

-		} else if (DOUBLE == d) {

-			

-			double originValue= orgin.getDouble(key.fKey);

-			double targetValue= target.getDouble(key.fKey);

-			if (targetValue != originValue)

-				target.setValue(key.fKey, originValue);

-		

-		} else if (FLOAT == d) {

-			

-			float originValue= orgin.getFloat(key.fKey);

-			float targetValue= target.getFloat(key.fKey);

-			if (targetValue != originValue)

-				target.setValue(key.fKey, originValue);

-				

-		} else if (INT == d) {

-

-			int originValue= orgin.getInt(key.fKey);

-			int targetValue= target.getInt(key.fKey);

-			if (targetValue != originValue)

-				target.setValue(key.fKey, originValue);

-

-		} else if (LONG == d) {

-

-			long originValue= orgin.getLong(key.fKey);

-			long targetValue= target.getLong(key.fKey);

-			if (targetValue != originValue)

-				target.setValue(key.fKey, originValue);

-

-		} else if (STRING == d) {

-

-			String originValue= orgin.getString(key.fKey);

-			String targetValue= target.getString(key.fKey);

-			if (targetValue != null && originValue != null && !targetValue.equals(originValue))

-				target.setValue(key.fKey, originValue);

-

-		}

-	}

-	

-	public void propagate() {

-		for (int i= 0; i < fOverlayKeys.length; i++)

-			propagateProperty(fStore, fOverlayKeys[i], fParent);

-	}

-	

-	private void loadProperty(IPreferenceStore orgin, OverlayKey key, IPreferenceStore target, boolean forceInitialization) {

-		TypeDescriptor d= key.fDescriptor;

-		if (BOOLEAN == d) {

-			

-			if (forceInitialization)

-				target.setValue(key.fKey, true);

-			target.setValue(key.fKey, orgin.getBoolean(key.fKey));

-			target.setDefault(key.fKey, orgin.getDefaultBoolean(key.fKey));

-			

-		} else if (DOUBLE == d) {

-			

-			if (forceInitialization)

-				target.setValue(key.fKey, 1.0D);

-			target.setValue(key.fKey, orgin.getDouble(key.fKey));

-			target.setDefault(key.fKey, orgin.getDefaultDouble(key.fKey));

-			

-		} else if (FLOAT == d) {

-			

-			if (forceInitialization)

-				target.setValue(key.fKey, 1.0F);

-			target.setValue(key.fKey, orgin.getFloat(key.fKey));

-			target.setDefault(key.fKey, orgin.getDefaultFloat(key.fKey));

-			

-		} else if (INT == d) {

-			

-			if (forceInitialization)

-				target.setValue(key.fKey, 1);

-			target.setValue(key.fKey, orgin.getInt(key.fKey));

-			target.setDefault(key.fKey, orgin.getDefaultInt(key.fKey));

-			

-		} else if (LONG == d) {

-			

-			if (forceInitialization)

-				target.setValue(key.fKey, 1L);

-			target.setValue(key.fKey, orgin.getLong(key.fKey));

-			target.setDefault(key.fKey, orgin.getDefaultLong(key.fKey));

-			

-		} else if (STRING == d) {

-			

-			if (forceInitialization)

-				target.setValue(key.fKey, "1");	//$NON-NLS-1$

-			target.setValue(key.fKey, orgin.getString(key.fKey));

-			target.setDefault(key.fKey, orgin.getDefaultString(key.fKey));

-			

-		}

-	}

-	

-	public void load() {

-		for (int i= 0; i < fOverlayKeys.length; i++)

-			loadProperty(fParent, fOverlayKeys[i], fStore, true);

-	}

-	

-	public void loadDefaults() {

-		for (int i= 0; i < fOverlayKeys.length; i++)

-			setToDefault(fOverlayKeys[i].fKey);

-	}

-	

-	public void start() {

-		if (fPropertyListener == null) {

-			fPropertyListener= new PropertyListener();

-			fParent.addPropertyChangeListener(fPropertyListener);

-		}

-	}

-	

-	public void stop() {

-		if (fPropertyListener != null)  {

-			fParent.removePropertyChangeListener(fPropertyListener);

-			fPropertyListener= null;

-		}

-	}

-	

-	/*

-	 * @see IPreferenceStore#addPropertyChangeListener(IPropertyChangeListener)

-	 */

-	public void addPropertyChangeListener(IPropertyChangeListener listener) {

-		fStore.addPropertyChangeListener(listener);

-	}

-	

-	/*

-	 * @see IPreferenceStore#removePropertyChangeListener(IPropertyChangeListener)

-	 */

-	public void removePropertyChangeListener(IPropertyChangeListener listener) {

-		fStore.removePropertyChangeListener(listener);

-	}

-	

-	/*

-	 * @see IPreferenceStore#firePropertyChangeEvent(String, Object, Object)

-	 */

-	public void firePropertyChangeEvent(String name, Object oldValue, Object newValue) {

-		fStore.firePropertyChangeEvent(name, oldValue, newValue);

-	}

-

-	/*

-	 * @see IPreferenceStore#contains(String)

-	 */

-	public boolean contains(String name) {

-		return fStore.contains(name);

-	}

-	

-	/*

-	 * @see IPreferenceStore#getBoolean(String)

-	 */

-	public boolean getBoolean(String name) {

-		return fStore.getBoolean(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getDefaultBoolean(String)

-	 */

-	public boolean getDefaultBoolean(String name) {

-		return fStore.getDefaultBoolean(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getDefaultDouble(String)

-	 */

-	public double getDefaultDouble(String name) {

-		return fStore.getDefaultDouble(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getDefaultFloat(String)

-	 */

-	public float getDefaultFloat(String name) {

-		return fStore.getDefaultFloat(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getDefaultInt(String)

-	 */

-	public int getDefaultInt(String name) {

-		return fStore.getDefaultInt(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getDefaultLong(String)

-	 */

-	public long getDefaultLong(String name) {

-		return fStore.getDefaultLong(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getDefaultString(String)

-	 */

-	public String getDefaultString(String name) {

-		return fStore.getDefaultString(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getDouble(String)

-	 */

-	public double getDouble(String name) {

-		return fStore.getDouble(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getFloat(String)

-	 */

-	public float getFloat(String name) {

-		return fStore.getFloat(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getInt(String)

-	 */

-	public int getInt(String name) {

-		return fStore.getInt(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getLong(String)

-	 */

-	public long getLong(String name) {

-		return fStore.getLong(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#getString(String)

-	 */

-	public String getString(String name) {

-		return fStore.getString(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#isDefault(String)

-	 */

-	public boolean isDefault(String name) {

-		return fStore.isDefault(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#needsSaving()

-	 */

-	public boolean needsSaving() {

-		return fStore.needsSaving();

-	}

-

-	/*

-	 * @see IPreferenceStore#putValue(String, String)

-	 */

-	public void putValue(String name, String value) {

-		if (covers(name))

-			fStore.putValue(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setDefault(String, double)

-	 */

-	public void setDefault(String name, double value) {

-		if (covers(name))

-			fStore.setDefault(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setDefault(String, float)

-	 */

-	public void setDefault(String name, float value) {

-		if (covers(name))

-			fStore.setDefault(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setDefault(String, int)

-	 */

-	public void setDefault(String name, int value) {

-		if (covers(name))

-			fStore.setDefault(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setDefault(String, long)

-	 */

-	public void setDefault(String name, long value) {

-		if (covers(name))

-			fStore.setDefault(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setDefault(String, String)

-	 */

-	public void setDefault(String name, String value) {

-		if (covers(name))

-			fStore.setDefault(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setDefault(String, boolean)

-	 */

-	public void setDefault(String name, boolean value) {

-		if (covers(name))

-			fStore.setDefault(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setToDefault(String)

-	 */

-	public void setToDefault(String name) {

-		fStore.setToDefault(name);

-	}

-

-	/*

-	 * @see IPreferenceStore#setValue(String, double)

-	 */

-	public void setValue(String name, double value) {

-		if (covers(name))

-			fStore.setValue(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setValue(String, float)

-	 */

-	public void setValue(String name, float value) {

-		if (covers(name))

-			fStore.setValue(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setValue(String, int)

-	 */

-	public void setValue(String name, int value) {

-		if (covers(name))

-			fStore.setValue(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setValue(String, long)

-	 */

-	public void setValue(String name, long value) {

-		if (covers(name))

-			fStore.setValue(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setValue(String, String)

-	 */

-	public void setValue(String name, String value) {

-		if (covers(name))

-			fStore.setValue(name, value);

-	}

-

-	/*

-	 * @see IPreferenceStore#setValue(String, boolean)

-	 */

-	public void setValue(String name, boolean value) {

-		if (covers(name))

-			fStore.setValue(name, value);

-	}

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java
deleted file mode 100644
index b4b965a..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java
+++ /dev/null
@@ -1,13 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-

-public class ReplaceWithEditionAction extends EditionAction {

-		

-	public ReplaceWithEditionAction() {

-		super(true, "org.eclipse.compare.internal.ReplaceWithEditionAction"); //$NON-NLS-1$

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties
deleted file mode 100644
index 0ee8160..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2000, 2001.

-# All Rights Reserved.

-# =====================================

-

-# @(#)ReplaceWithEditionAction.properties

-#

-# Resources for ReplaceWithEditionAction.java

-

-title= Replace from Local History

-

-treeTitleFormat= Local History of ''{0}''

-dateIcon= obj16/day_obj.gif

-timeIcon= obj16/resource_obj.gif

-

-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= Replace

-

-noLocalHistoryError= No local history available for selected resource.

-replaceError=Can''t replace resource (reason: {0}).

-

-taskName=Replacing
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java
deleted file mode 100644
index 2f590db..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java
+++ /dev/null
@@ -1,14 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-

-public class ReplaceWithPreviousEditionAction extends EditionAction {

-		

-	public ReplaceWithPreviousEditionAction() {

-		super(true, "org.eclipse.compare.internal.ReplaceWithEditionAction"); //$NON-NLS-1$

-		fPrevious= true;

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java
deleted file mode 100644
index 26e5fe3..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package org.eclipse.compare.internal;
-
-import java.util.ResourceBundle;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.Shell;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.dialogs.DialogSettings;
-
-
-/**
- * Base class for resizable Dialogs with persistent window bounds.
- */
-public abstract class ResizableDialog extends Dialog {
-
-	// dialog store id constants
-	private final static String DIALOG_BOUNDS_KEY= "ResizableDialogBounds"; //$NON-NLS-1$
-	private static final String X= "x"; //$NON-NLS-1$
-	private static final String Y= "y"; //$NON-NLS-1$
-	private static final String WIDTH= "width"; //$NON-NLS-1$
-	private static final String HEIGHT= "height"; //$NON-NLS-1$
-	
-	protected ResourceBundle fBundle;
-	private Rectangle fNewBounds;
-	private IDialogSettings fSettings;
-
-
-	public ResizableDialog(Shell parent, ResourceBundle bundle) {
-		super(parent);
-		setShellStyle(getShellStyle() | SWT.RESIZE);
-		
-		fBundle= bundle;
-		
-		fSettings= CompareUIPlugin.getDefault().getDialogSettings();
-	}
-	
-	protected Point getInitialSize() {
-		
-		int width= 0;
-		int height= 0;
-		
-		final Shell s= getShell();
-		if (s != null) {
-			s.addControlListener(
-				new ControlListener() {
-					public void controlMoved(ControlEvent arg0) {
-						fNewBounds= s.getBounds();
-					}
-					public void controlResized(ControlEvent arg0) {
-						fNewBounds= s.getBounds();
-					}
-				}
-			);
-		}
-		
-		IDialogSettings bounds= fSettings.getSection(DIALOG_BOUNDS_KEY); //$NON-NLS-1$
-		if (bounds == null) {
-			if (fBundle != null) {
-				width= Utilities.getInteger(fBundle, WIDTH, 0);
-				height= Utilities.getInteger(fBundle, HEIGHT, 0);
-				Shell shell= getParentShell();
-				if (shell != null) {
-					Point parentSize= shell.getSize();
-					if (width <= 0)
-						width= parentSize.x-300;
-					if (height <= 0)
-						height= parentSize.y-200;
-				}
-			} else {
-				Shell shell= getParentShell();
-				if (shell != null) {
-					Point parentSize= shell.getSize();
-					width= parentSize.x-100;
-					height= parentSize.y-100;
-				}
-			}
-			if (width < 700)
-				width= 700;
-			if (height < 500)
-				height= 500;
-		} else {
-			try {
-				width= bounds.getInt(WIDTH);
-			} catch (NumberFormatException e) {
-				width= 700;
-			}
-			try {
-				height= bounds.getInt(HEIGHT);
-			} catch (NumberFormatException e) {
-				height= 500;
-			}
-		}	
-	
-		return new Point(width, height);
-	}
-	
-	protected Point getInitialLocation(Point initialSize) {
-		Point loc= super.getInitialLocation(initialSize);
-		
-		IDialogSettings bounds= fSettings.getSection(DIALOG_BOUNDS_KEY);
-		if (bounds != null) {
-			try {
-				loc.x= bounds.getInt(X);
-			} catch (NumberFormatException e) {
-			}
-			try {
-				loc.y= bounds.getInt(Y);
-			} catch (NumberFormatException e) {
-			}
-		}
-		return loc;
-	}
-	
-	public boolean close() {
-		boolean closed= super.close();
-		if (closed && fNewBounds != null)
-			saveBounds(fNewBounds);
-		return closed;
-	}
-
-	private void saveBounds(Rectangle bounds) {
-		IDialogSettings dialogBounds= fSettings.getSection(DIALOG_BOUNDS_KEY);
-		if (dialogBounds == null) {
-			dialogBounds= new DialogSettings(DIALOG_BOUNDS_KEY);
-			fSettings.addSection(dialogBounds);
-		}
-		dialogBounds.put(X, bounds.x);
-		dialogBounds.put(Y, bounds.y);
-		dialogBounds.put(WIDTH, bounds.width);
-		dialogBounds.put(HEIGHT, bounds.height);
-	}
-}
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
deleted file mode 100644
index 02a07d3..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.text.MessageFormat;

-import java.lang.reflect.InvocationTargetException;

-

-import org.eclipse.swt.widgets.Composite;

-

-import org.eclipse.jface.viewers.ISelection;

-import org.eclipse.jface.viewers.Viewer;

-

-import org.eclipse.core.resources.*;

-import org.eclipse.core.runtime.*;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.structuremergeviewer.*;

-

-

-/**

- * A two-way or three-way compare for arbitrary IResources.

- */

-class ResourceCompareInput extends CompareEditorInput {

-	

-	private static final boolean NORMALIZE_CASE= true;

-	

-	private boolean fThreeWay= false;

-	private Object fRoot;

-	private IStructureComparator fAncestor;

-	private IStructureComparator fLeft;

-	private IStructureComparator fRight;

-	private IResource fAncestorResource;

-	private IResource fLeftResource;

-	private IResource fRightResource;

-	private DiffTreeViewer fDiffViewer;

-	

-	

-	class MyDiffNode extends DiffNode {

-		

-		private boolean fDirty= false;

-		private ITypedElement fLastId;

-		private String fLastName;

-		

-		

-		public MyDiffNode(IDiffContainer parent, int description, ITypedElement ancestor, ITypedElement left, ITypedElement right) {

-			super(parent, description, ancestor, left, right);

-		}

-		public void fireChange() {

-			super.fireChange();

-			setDirty(true);

-			fDirty= true;

-			if (fDiffViewer != null)

-				fDiffViewer.refresh(this);

-		}

-		void clearDirty() {

-			fDirty= false;

-		}

-		public String getName() {

-			if (fLastName == null)

-				fLastName= super.getName();

-			if (fDirty)

-				return '<' + fLastName + '>';

-			return fLastName;

-		}

-		

-		public ITypedElement getId() {

-			ITypedElement id= super.getId();

-			if (id == null)

-				return fLastId;

-			fLastId= id;

-			return id;

-		}

-	}

-	

-	/**

-	 * Creates an compare editor input for the given selection.

-	 */

-	ResourceCompareInput(CompareConfiguration config) {

-		super(config);

-	}

-		

-	public Viewer createDiffViewer(Composite parent) {

-		Viewer v= super.createDiffViewer(parent);

-		if (v instanceof DiffTreeViewer)

-			fDiffViewer= (DiffTreeViewer) v;

-		return v;

-	}

-

-	/**

-	 * Returns true if compare can be executed for the given selection.

-	 */

-	boolean setSelection(ISelection s) {

-

-		IResource[] selection= Utilities.getResources(s);

-		if (selection.length < 2 || selection.length > 3)

-			return false;

-

-		fThreeWay= selection.length == 3;

-		

-		fLeftResource= selection[0];

-		fRightResource= selection[1];

-		if (fThreeWay) {

-			fLeftResource= selection[1];		

-			fRightResource= selection[2];

-		}

-		

-		fAncestor= null;

-		fLeft= getStructure(fLeftResource);

-		fRight= getStructure(fRightResource);

-					

-		if (incomparable(fLeft, fRight))

-			return false;

-

-		if (fThreeWay) {

-			fAncestorResource= selection[0];

-			fAncestor= getStructure(fAncestorResource);

-			

-			if (incomparable(fAncestor, fRight))

-				return false;

-		}

-

-		return true;

-	}

-	

-	/**

-	 * Returns true if the given arguments cannot be compared.

-	 */

-	private boolean incomparable(IStructureComparator c1, IStructureComparator c2) {

-		if (c1 == null || c2 == null)

-			return true;

-		return isLeaf(c1) != isLeaf(c2);

-	}

-	

-	/**

-	 * Returns true if the given arguments is a leaf.

-	 */

-	private boolean isLeaf(IStructureComparator c) {

-		if (c instanceof ITypedElement) {

-			ITypedElement te= (ITypedElement) c;

-			return !ITypedElement.FOLDER_TYPE.equals(te.getType());

-		}

-		return false;

-	}

-	

-	/**

-	 * Creates a <code>IStructureComparator</code> for the given input.

-	 * Returns <code>null</code> if no <code>IStructureComparator</code>

-	 * can be found for the <code>IResource</code>.

-	 */

-	private IStructureComparator getStructure(IResource input) {

-		

-		if (input instanceof IContainer)

-			return new BufferedResourceNode(input);

-			

-		if (input instanceof IFile) {

-			IStructureComparator rn= new BufferedResourceNode(input);

-			IFile file= (IFile) input;

-			String type= normalizeCase(file.getFileExtension());

-			if ("JAR".equals(type) || "ZIP".equals(type)) //$NON-NLS-2$ //$NON-NLS-1$

-				return new ZipFileStructureCreator().getStructure(rn);

-			return rn;

-		}

-		return null;

-	}

-	

-	/**

-	 * Performs a two-way or three-way diff on the current selection.

-	 */

-	public Object prepareInput(IProgressMonitor pm) throws InvocationTargetException {

-				

-		CompareConfiguration cc= (CompareConfiguration) getCompareConfiguration();

-	

-		try {

-			// fix for PR 1GFMLFB: ITPUI:WIN2000 - files that are out of sync with the file system appear as empty							

-			fLeftResource.refreshLocal(IResource.DEPTH_INFINITE, pm);

-			fRightResource.refreshLocal(IResource.DEPTH_INFINITE, pm);

-			if (fThreeWay && fAncestorResource != null)

-				fAncestorResource.refreshLocal(IResource.DEPTH_INFINITE, pm);

-			// end fix						

-				

-			pm.beginTask(Utilities.getString("ResourceCompare.taskName"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$

-

-			cc.setLeftLabel(buildLabel(fLeftResource));

-			cc.setLeftImage(CompareUIPlugin.getImage(fLeftResource));

-			

-			cc.setRightLabel(buildLabel(fRightResource));

-			cc.setRightImage(CompareUIPlugin.getImage(fRightResource));

-

-			String leftLabel= fLeftResource.getName();

-			String rightLabel= fRightResource.getName();

-			

-			String title;

-			if (fThreeWay) {			

-				cc.setAncestorLabel(buildLabel(fAncestorResource));

-				cc.setAncestorImage(CompareUIPlugin.getImage(fAncestorResource));

-				String format= Utilities.getString("ResourceCompare.threeWay.title"); //$NON-NLS-1$

-				String ancestorLabel= fAncestorResource.getName();

-				title= MessageFormat.format(format, new String[] {ancestorLabel, leftLabel, rightLabel} );

-			} else {

-				String format= Utilities.getString("ResourceCompare.twoWay.title"); //$NON-NLS-1$

-				title= MessageFormat.format(format, new String[] {leftLabel, rightLabel} );

-			}

-			setTitle(title);

-			

-			Differencer d= new Differencer() {

-				protected Object visit(Object parent, int description, Object ancestor, Object left, Object right) {

-					return new MyDiffNode((IDiffContainer) parent, description, (ITypedElement)ancestor, (ITypedElement)left, (ITypedElement)right);

-				}

-			};

-			

-			fRoot= d.findDifferences(fThreeWay, pm, null, fAncestor, fLeft, fRight);

-			return fRoot;

-			

-		} catch (CoreException ex) {

-			throw new InvocationTargetException(ex);

-		} finally {

-			pm.done();

-		}

-	}

-	

-	private String buildLabel(IResource r) {

-		//return r.getName();

-		String n= r.getFullPath().toString();

-		if (n.charAt(0) == IPath.SEPARATOR)

-			return n.substring(1);

-		return n;

-	}

-	

-	public void saveChanges(IProgressMonitor pm) throws CoreException {

-		super.saveChanges(pm);

-		if (fRoot instanceof DiffNode) {

-			try {

-				commit(pm, (DiffNode) fRoot);

-			} finally {

-				if (fDiffViewer != null)

-					fDiffViewer.refresh();				

-				setDirty(false);

-			}

-		}

-	}

-	

-	/*

-	 * Recursively walks the diff tree and commits all changes.

-	 */

-	private static void commit(IProgressMonitor pm, DiffNode node) throws CoreException {

-		

-		if (node instanceof MyDiffNode)		

-			((MyDiffNode)node).clearDirty();

-		

-		ITypedElement left= node.getLeft();

-		if (left instanceof BufferedResourceNode)

-			((BufferedResourceNode) left).commit(pm);

-			

-		ITypedElement right= node.getRight();

-		if (right instanceof BufferedResourceNode)

-			((BufferedResourceNode) right).commit(pm);

-

-		IDiffElement[] children= node.getChildren();

-		if (children != null) {

-			for (int i= 0; i < children.length; i++) {

-				IDiffElement element= children[i];

-				if (element instanceof DiffNode)

-					commit(pm, (DiffNode) element);

-			}

-		}

-	}

-	

-	private static String normalizeCase(String s) {

-		if (NORMALIZE_CASE && s != null)

-			return s.toUpperCase();

-		return s;

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java
deleted file mode 100644
index e109359..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.util.ResourceBundle;

-

-import org.eclipse.compare.*;

-

-/**

- * Toggles the <code>ICompareConfiguration.SHOW_PSEUDO_CONFLICTS</code> property of an

- * <code>ICompareConfiguration</code>.

- */

-public class ShowPseudoConflicts extends ChangePropertyAction {

-

-	public ShowPseudoConflicts(ResourceBundle bundle, CompareConfiguration cc) {

-		super(bundle, cc, "action.ShowPseudoConflicts.", CompareConfiguration.SHOW_PSEUDO_CONFLICTS); //$NON-NLS-1$

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java
deleted file mode 100644
index fd7a885..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.io.IOException;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.widgets.Composite;

-import org.eclipse.swt.widgets.Control;

-

-import org.eclipse.jface.viewers.*;

-import org.eclipse.jface.text.source.SourceViewer;

-import org.eclipse.jface.text.Document;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.compare.*;

-import org.eclipse.compare.structuremergeviewer.ICompareInput;

-

-

-public class SimpleTextViewer extends AbstractViewer {

-		

-	private SourceViewer fSourceViewer;

-	private ICompareInput fInput;

-	

-	

-	SimpleTextViewer(Composite parent) {

-		fSourceViewer= new SourceViewer(parent, null, SWT.H_SCROLL + SWT.V_SCROLL);

-		fSourceViewer.setEditable(false);

-	}

-		

-	public Control getControl() {

-		return fSourceViewer.getTextWidget();

-	}

-	

-	public void setInput(Object input) {

-		if (input instanceof IStreamContentAccessor) {

-			fSourceViewer.setDocument(new Document(getString(input)));

-		} else if (input instanceof ICompareInput) {

-			fInput= (ICompareInput) input;

-			ITypedElement left= ((ICompareInput) fInput).getLeft();

-			fSourceViewer.setDocument(new Document(getString(left)));

-		}

-	}

-	

-	public Object getInput() {

-		return fInput;

-	}

-	

-	private String getString(Object input) {

-		

-		if (input instanceof IStreamContentAccessor) {

-			IStreamContentAccessor sca= (IStreamContentAccessor) input;

-			try {

-				return Utilities.readString(sca.getContents());

-			} catch (CoreException ex) {

-			}

-		}

-		return ""; //$NON-NLS-1$

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Splitter.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Splitter.java
deleted file mode 100644
index 846a378..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Splitter.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.widgets.*;

-import org.eclipse.swt.custom.SashForm;

-

-public class Splitter extends SashForm {

-	

-	private static final String VISIBILITY= "org.eclipse.compare.internal.visibility"; //$NON-NLS-1$

-	

-

-	public Splitter(Composite parent, int style) {

-		super(parent, style);

-	}

-		

-	public void setVisible(Control child, boolean visible) {

-		

-		boolean wasEmpty= isEmpty();

-				

-		child.setVisible(visible);

-		child.setData(VISIBILITY, new Boolean(visible));

-		

-		if (wasEmpty != isEmpty()) {

-			Composite parent= getParent();

-			if (parent instanceof Splitter) {

-				Splitter sp= (Splitter) parent;

-				sp.setVisible(this, visible);

-				sp.layout();

-			}	

-		} else {

-			layout();

-		}

-	}

-	

-	private boolean isEmpty() {

-		Control[] controls= getChildren();

-		for (int i= 0; i < controls.length; i++)

-			if (isVisible(controls[i]))

-				return false;

-		return true;

-	}

-	

-	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;

-	}

-			

-	public void setMaximizedControl(Control control) {

-		if (control == null || control == getMaximizedControl())

-			super.setMaximizedControl(null);

-		else

-			super.setMaximizedControl(control);		

-			

-		// walk up

-		Composite parent= getParent();

-		if (parent instanceof Splitter)

-			((Splitter) parent).setMaximizedControl(this);

-		else

-			layout(true);

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java
deleted file mode 100644
index c33ac3c..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java
deleted file mode 100644
index 9fb4b93..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.widgets.Composite;

-

-import org.eclipse.jface.viewers.Viewer;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.contentmergeviewer.TextMergeViewer;

-

-/**

- * A factory object for the <code>TextMergeViewer</code>.

- * This indirection is necessary because only objects with a default

- * constructor can be created via an extension point

- * (this precludes Viewers).

- */

-public class TextMergeViewerCreator implements IViewerCreator {

-

-	public Viewer createViewer(Composite parent, CompareConfiguration mp) {

-		return new TextMergeViewer(parent, mp);

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java
deleted file mode 100644
index 554114c..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.widgets.Composite;

-

-import org.eclipse.jface.viewers.Viewer;

-

-import org.eclipse.compare.CompareConfiguration;

-import org.eclipse.compare.IViewerCreator;

-

-

-/**

- * A factory object for the <code>TextMergeViewer</code>.

- * This indirection is necessary because only objects with a default

- * constructor can be created via an extension point

- * (this precludes Viewers).

- */

-public class TextViewerCreator implements IViewerCreator {

-

-	public Viewer createViewer(Composite parent, CompareConfiguration mp) {

-		return new SimpleTextViewer(parent);

-	}

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java
deleted file mode 100644
index c52da8b..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.lang.reflect.InvocationTargetException;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.graphics.*;

-import org.eclipse.swt.layout.*;

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.jface.dialogs.*;

-import org.eclipse.jface.operation.*;

-import org.eclipse.jface.resource.JFaceResources;

-import org.eclipse.jface.util.Assert;

-

-import org.eclipse.core.runtime.*;

-import org.eclipse.compare.contentmergeviewer.*;

-

-/**

- * A modal dialog that displays progress during a long running operation.

- */

-public class TimeoutContext {

-

-	private static class ModalContextThread extends Thread {

-		

-		private boolean fWorking;

-		private IRunnableWithProgress fRunnable;

-		private Throwable fThrowable;

-		private IProgressMonitor fProgressMonitor;

-		private boolean fContinueEventDispatching= true;

-		private Display fDisplay;

-

-		private ModalContextThread(IRunnableWithProgress operation, IProgressMonitor monitor) {

-			super("TimeoutContext"); //$NON-NLS-1$

-			fRunnable= operation;

-			fProgressMonitor= monitor;

-		}

-		

-		synchronized boolean timeout(Display display) {

-			fDisplay= display;

-			return fWorking;

-		}

-		

-		public void run() {

-			try {

-				fWorking= true;

-				if (fRunnable != null)

-					fRunnable.run(fProgressMonitor);

-			} catch (InvocationTargetException e) {

-				fThrowable= e;

-			} catch (InterruptedException e) {

-				fThrowable= e;

-			} catch (RuntimeException e) {

-				fThrowable= e;

-			} catch (ThreadDeath e) {

-				// Make sure to propagate ThreadDeath, or threads will never fully terminate

-				throw e;

-			} catch (Error e) {

-				fThrowable= e;

-			} finally {

-				fWorking= false;

-	

-				if (fDisplay != null) {

-					// Make sure that all events in the asynchronous event queue

-					// are dispatched.

-					fDisplay.syncExec(

-						new Runnable() {

-							public void run() {

-								// do nothing

-							}

-						}

-					);

-					

-					// Stop event dispatching

-					fContinueEventDispatching= false;

-					

-					// Force the event loop to return from sleep () so that

-					// it stops event dispatching.

-					fDisplay.asyncExec(null);

-				}

-			}	

-		}

-		

-		public void block() {

-			while (fContinueEventDispatching)

-				if (!fDisplay.readAndDispatch())

-					fDisplay.sleep();

-		}		

-	}

-	

-	static class ProgressMonitorDialog extends org.eclipse.jface.dialogs.Dialog {

-

-		protected ProgressIndicator fProgressIndicator;

-		protected Label fTaskLabel;

-		protected Label fSubTaskLabel;

-		protected Button fCancel;

-		protected boolean fEnableCancelButton;

-		private ProgressMonitor fProgressMonitor;

-		private Cursor fArrowCursor;

-		private Cursor fWaitCursor;

-		private Shell fParentShell;

-		

-		private ProgressMonitorDialog(Shell parent, boolean cancelable, ProgressMonitor pm) {

-			super(parent);

-			fProgressMonitor= pm;

-			fParentShell= parent;

-			fEnableCancelButton= cancelable;

-			this.setBlockOnOpen(false);

-			setShellStyle(SWT.BORDER | SWT.TITLE | SWT.APPLICATION_MODAL); // no close button

-		}

-		

-		public boolean close() {

-			if (fCancel != null && !fCancel.isDisposed())

-				fCancel.setCursor(null);

-			Shell shell= getShell();

-			if (shell != null && !shell.isDisposed())

-				shell.setCursor(null);

-			if (fArrowCursor != null)

-				fArrowCursor.dispose();

-			if (fWaitCursor != null)

-				fWaitCursor.dispose();

-			fArrowCursor= null;

-			fWaitCursor= null;

-			return super.close();

-		}

-		

-		protected void configureShell(Shell shell) {

-			super.configureShell(shell);

-			shell.setText(JFaceResources.getString("ProgressMonitorDialog.title")); //$NON-NLS-1$

-			if (fWaitCursor == null)

-				fWaitCursor= new Cursor(shell.getDisplay(),SWT.CURSOR_WAIT);

-			shell.setCursor(fWaitCursor);

-		}

-		

-		protected void createButtonsForButtonBar(Composite parent) {

-			// cancel button		

-			fCancel= createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, true);

-			if(fArrowCursor == null)

-				fArrowCursor= new Cursor(fCancel.getDisplay(),SWT.CURSOR_ARROW);		

-			fCancel.setCursor(fArrowCursor);

-			fCancel.addListener(SWT.Selection,

-				new Listener() {

-					public void handleEvent(Event e) {

-						if (fCancel != null && !fCancel.isDisposed())

-							fCancel.setEnabled(false);

-						fProgressMonitor.setCanceled(true);

-					}

-				}

-			);

-			fCancel.setEnabled(fEnableCancelButton);

-		}

-		

-		protected Control createDialogArea(Composite parent) {

-		

-			Composite c= (Composite)super.createDialogArea(parent);

-			((GridLayout)c.getLayout()).numColumns= 2;

-	

-			// icon

-			Label iconLabel= new Label(c, SWT.LEFT);

-			GridData gd= new GridData();

-			iconLabel.setLayoutData(gd);

-			iconLabel.setFont(parent.getFont());

-			Image i= JFaceResources.getImageRegistry().get(org.eclipse.jface.dialogs.Dialog.DLG_IMG_INFO);

-			if (i != null)

-				iconLabel.setImage(i);

-			else

-				iconLabel.setText(JFaceResources.getString("Image_not_found")); //$NON-NLS-1$

-	

-			// label on right hand side of icon

-			fTaskLabel= new Label(c, SWT.LEFT | SWT.WRAP);

-			fTaskLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

-			fTaskLabel.setFont(parent.getFont());

-	

-			// progress indicator

-			fProgressIndicator= new ProgressIndicator(c);

-			gd= new GridData();

-			gd.heightHint= 15;

-			gd.horizontalAlignment= gd.FILL;

-			gd.grabExcessHorizontalSpace= true;

-			gd.horizontalSpan= 2;

-			fProgressIndicator.setLayoutData(gd);

-	

-			// label showing current task

-			fSubTaskLabel= new Label(c, SWT.LEFT | SWT.WRAP);

-			gd= new GridData(GridData.FILL_HORIZONTAL);

-			gd.heightHint= 35;	

-			gd.horizontalSpan= 2;

-			fSubTaskLabel.setLayoutData(gd);

-			fSubTaskLabel.setFont(parent.getFont());

-						

-			// update with values fProgressMonitor

-			String s= fProgressMonitor.fTask;

-			if (s == null)

-				s= ""; //$NON-NLS-1$

-			fTaskLabel.setText(s);

-			

-			if (fProgressMonitor.fMaxWork == IProgressMonitor.UNKNOWN)

-				fProgressIndicator.beginAnimatedTask();

-			else

-				fProgressIndicator.beginTask(fProgressMonitor.fMaxWork);

-

-			if (fProgressMonitor.fSubTask != null)

-				fSubTaskLabel.setText(fProgressMonitor.fSubTask);

-			fProgressIndicator.worked(fProgressMonitor.fWorked);

-	

-			fProgressMonitor.activate(this);

-

-			return c;

-		}

-		

-		void beginTask(final String name, final int totalWork) {

-			fParentShell.getDisplay().syncExec(

-				new Runnable() {

-					public void run() {

-						fTaskLabel.setText(name);

-						

-						if (fProgressIndicator != null && fProgressIndicator.isDisposed()) {

-							if (totalWork == IProgressMonitor.UNKNOWN)

-								fProgressIndicator.beginAnimatedTask();

-							else

-								fProgressIndicator.beginTask(totalWork);

-						}

-					}

-				}

-			);

-		}

-		

-		void setTaskName(final String name) {

-			fParentShell.getDisplay().syncExec(

-				new Runnable() {

-					public void run() {

-						if (fTaskLabel != null && fTaskLabel.isDisposed())

-							fTaskLabel.setText(name);

-					}

-				}

-			);

-		}

-

-		void setSubTaskName(final String name) {

-			fParentShell.getDisplay().syncExec(

-				new Runnable() {

-					public void run() {

-						String n= (name == null) ? "" : name;	//$NON-NLS-1$

-						if (fSubTaskLabel != null && !fSubTaskLabel.isDisposed())

-							fSubTaskLabel.setText(n);

-					}

-				}

-			);	

-		}

-		

-		void done() {

-			fParentShell.getDisplay().syncExec(

-				new Runnable() {

-					public void run() {

-						if (fProgressIndicator != null && !fProgressIndicator.isDisposed()) {

-							fProgressIndicator.sendRemainingWork();

-							fProgressIndicator.done();

-						}

-					}

-				}

-			);

-		}

-		

-		void worked(final double work) {

-			fParentShell.getDisplay().syncExec(

-				new Runnable() {

-					public void run() {

-						if (fProgressIndicator != null && !fProgressIndicator.isDisposed())

-							fProgressIndicator.worked(work);

-					}

-				}

-			);

-		}

-

-		protected Point getInitialSize() {

-			return getShell().computeSize(450, SWT.DEFAULT);

-		}

-	}

-

-	private static class ProgressMonitor implements IProgressMonitor {

-		

-		private int fMaxWork;

-		private String fTask;

-		private String fSubTask;

-		private int fWorked;

-		private ProgressMonitorDialog fProgressMonitorDialog;

-		private boolean fIsCanceled;

-		

-		public void beginTask(String name, int totalWork) {

-			

-			fTask= name;

-			fMaxWork= totalWork;

-			fWorked= 0;

-			

-			if (fProgressMonitorDialog != null)	

-				fProgressMonitorDialog.beginTask(name, totalWork);			

-		}

-		

-		void activate(ProgressMonitorDialog dialog) {

-			fProgressMonitorDialog= dialog;

-		}

-		

-		public void done() {

-			if (fProgressMonitorDialog != null)				

-				fProgressMonitorDialog.done();

-		}

-		

-		public void setTaskName(String name) {

-			fTask= name;

-			if (fProgressMonitorDialog != null)				

-				fProgressMonitorDialog.setTaskName(name);

-		}

-				

-		public boolean isCanceled() {

-			return fIsCanceled;

-		}

-		

-		public void setCanceled(boolean b) {

-			fIsCanceled= b;

-		}

-		

-		public void subTask(String name) {

-			fSubTask= name;

-			if (fProgressMonitorDialog != null)				

-				fProgressMonitorDialog.setSubTaskName(name);

-		}

-		

-		public void worked(int work) {

-			if (fProgressMonitorDialog != null)

-				internalWorked(work);

-			else

-				fWorked+= work;

-		}

-		

-		public void internalWorked(double work) {

-			if (fProgressMonitorDialog != null)				

-				fProgressMonitorDialog.worked(work);

-		}

-	}

-	

-	public static void run(boolean cancelable, int timeout, Shell parent, IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException {

-		

-		Display display= parent.getDisplay();

-		

-		ProgressMonitor pm= new ProgressMonitor();

-				

-		ModalContextThread t= new ModalContextThread(runnable, pm);

-		t.start();	// start the long running operation

-		

-		// wait until long operations terminates or timeout

-		try {

-			t.join(timeout);

-		} catch (InterruptedException e) {

-		}

-		

-		if (t.timeout(display)) {	// timeout

-			ProgressMonitorDialog dialog= new ProgressMonitorDialog(parent, cancelable, pm);

-			dialog.open();

-			t.block();

-			dialog.close();

-		}

-		

-		Throwable throwable= t.fThrowable;

-		if (throwable != null) {

-			if (throwable instanceof InvocationTargetException) {

-				throw (InvocationTargetException) throwable;

-			} else if (throwable instanceof InterruptedException) {

-				throw (InterruptedException) throwable;

-			} else if (throwable instanceof OperationCanceledException) {

-				throw new InterruptedException(throwable.getMessage());

-			} else {

-				throw new InvocationTargetException(throwable);

-			}	

-		}

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java
deleted file mode 100644
index d4253cd..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.jface.util.Assert;

-

-import org.eclipse.compare.rangedifferencer.IRangeComparator;

-import org.eclipse.compare.contentmergeviewer.ITokenComparator;

-

-/**

- * Implements the <code>ITokenComparator</code> interface for words (or tokens)

- * in a string.

- * A <code>TokenComparator</code> is used as the input for the <code>RangeDifferencer</code>

- * engine to perform a token oriented compare on strings.

- */

-public class TokenComparator implements ITokenComparator {

-

-	private boolean fShouldEscape= true;

-	private String fText;

-	private int fCount;

-	private int[] fStarts;

-	private int[] fLengths;

-

-	/**

-	 * Creates a <code>TokenComparator</code> for the given string.

-	 *

-	 * @param string the string that is split into token

-	 */

-	public TokenComparator(String text) {

-		

-		Assert.isNotNull(text);

-

-		fText= text;

-		

-		int length= fText.length();

-		fStarts= new int[length];	// pessimistic assumption!

-		fLengths= new int[length];

-		fCount= 0;

-		

-		char lastCategory= 0;	// 0: no category

-		for (int i= 0; i < length; i++) {

-			char c= fText.charAt(i);

-			

-			char category= '?';	// unspecified category

-			if (Character.isWhitespace(c))

-				category= ' ';	// white space category

-			else if (Character.isDigit(c))

-				category= '0';	// digits

-			else if (Character.isLetter(c))

-				category= 'a';	// letters

-			

-			if (category != lastCategory) {

-				// start a new token

-				fStarts[fCount++]= i;

-				lastCategory= category;

-			}

-			fLengths[fCount-1]++;

-		}

-	}

-	

-	/**

-	 * Creates a <code>TokenComparator</code> for the given string.

-	 *

-	 * @param string the string that is split into token

-	 * @param shouldEscape

-	 */

-	public TokenComparator(String s, boolean shouldEscape) {

-		this(s);

-		fShouldEscape= shouldEscape;

-	}

-

-	/**

-	 * Returns the number of token in the string.

-	 *

-	 * @return number of token in the string

-	 */

-	public int getRangeCount() {

-		return fCount;

-	}

-

-	/* (non Javadoc)

-	 * see ITokenComparator.getTokenStart

-	 */

-	public int getTokenStart(int index) {

-		if (index < fCount)

-			return fStarts[index];

-		return fText.length();

-	}

-

-	/* (non Javadoc)

-	 * see ITokenComparator.getTokenLength

-	 */

-	public int getTokenLength(int index) {

-		if (index < fCount)

-			return fLengths[index];

-		return 0;

-	}

-		

-	/**

-	 * Returns <code>true</code> if a token given by the first index

-	 * matches a token specified by the other <code>IRangeComparator</code> and index.

-	 *

-	 * @param thisIndex	the number of the token within this range comparator

-	 * @param other the range comparator to compare this with

-	 * @param otherIndex the number of the token within the other comparator

-	 * @return <code>true</code> if the token are equal

-	 */

-	public boolean rangesEqual(int thisIndex, IRangeComparator other, int otherIndex) {

-		if (other != null && getClass() == other.getClass()) {

-			TokenComparator tc= (TokenComparator) other;

-			int thisLen= getTokenLength(thisIndex);

-			int otherLen= tc.getTokenLength(otherIndex);

-			if (thisLen == otherLen)

-				return fText.regionMatches(false, getTokenStart(thisIndex), tc.fText, tc.getTokenStart(otherIndex), thisLen);

-		}

-		return false;

-	}

-

-	/**

-	 * Aborts the comparison if the number of tokens is too large.

-	 *

-	 * @return <code>true</code> to abort a token comparison

-	 */

-	public boolean skipRangeComparison(int length, int max, IRangeComparator other) {

-

-		if (!fShouldEscape)

-			return false;

-

-		if (getRangeCount() < 50 || other.getRangeCount() < 50)

-			return false;

-

-		if (max < 100)

-			return false;

-

-		if (length < 100)

-			return false;

-

-		if (max > 800)

-			return true;

-

-		if (length < max / 4)

-			return false;

-

-		return true;

-	}

-		

-//	public static void main(String args[]) {

-//		//String in= "private static boolean isWhitespace(char c) {";

-//		//String in= "for (int j= 0; j < l-1; j++) {";

-//		String in= "for do    i= 123; i++";

-//		TokenComparator tc= new TokenComparator(in, false);

-//		

-//		System.out.println("n: " + tc.getRangeCount());

-//		System.out.println(in);

-//		

-//		int p= 0;

-//		for (int i= 0; i < tc.getRangeCount(); i++) {

-//			int l= tc.getTokenLength(i);

-//			System.out.print("<");

-//			

-//			for (int j= 0; j < l-1; j++)

-//				System.out.print(" ");

-//		}

-//		System.out.println();

-//		

-//		//System.out.println("extract: <" + tc.extract(16, 1) + ">");

-//	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java
deleted file mode 100644
index 9511787..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import java.io.*;

-import java.text.MessageFormat;

-import java.util.*;

-

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.core.resources.ResourcesPlugin;

-

-import org.eclipse.jface.action.IAction;

-import org.eclipse.jface.resource.ImageDescriptor;

-import org.eclipse.jface.util.*;

-import org.eclipse.jface.viewers.*;

-

-import org.eclipse.core.resources.IResource;

-import org.eclipse.core.runtime.IAdaptable;

-

-import org.eclipse.ui.*;

-

-import org.eclipse.compare.CompareConfiguration;

-

-/**

- * Convenience and utility methods.

- */

-public class Utilities {

-

-	public static IActionBars findActionBars(Control c) {

-		while (c != null && !c.isDisposed()) {

-			Object data= c.getData();

-			if (data instanceof CompareEditor)

-				return ((CompareEditor)data).getActionBars();

-				

-			// PR 1GDVZV7: ITPVCM:WIN98 - CTRL + C does not work in Java source compare

-			if (data instanceof IViewPart)

-				return ((IViewPart)data).getViewSite().getActionBars();

-			// end PR 1GDVZV7

-			

-			c= c.getParent();

-		}

-		return null;

-	}

-

-	public static void setEnableComposite(Composite composite, boolean enable) {

-		Control[] children= composite.getChildren();

-		for (int i= 0; i < children.length; i++)

-			children[i].setEnabled(enable);

-	}

-

-	public static boolean getBoolean(CompareConfiguration cc, String key, boolean dflt) {

-		if (cc != null) {

-			Object value= cc.getProperty(key);

-			if (value instanceof Boolean)

-				return ((Boolean) value).booleanValue();

-		}

-		return dflt;

-	}

-	

-	public static void firePropertyChange(ListenerList ll, Object source, String property, Object old, Object newValue) {

-		if (ll != null) {

-			PropertyChangeEvent event= null;

-			Object[] listeners= ll.getListeners();

-			for (int i= 0; i < listeners.length; i++) {

-				IPropertyChangeListener l= (IPropertyChangeListener) listeners[i];

-				if (event == null)

-					event= new PropertyChangeEvent(source, property, old, newValue);

-				l.propertyChange(event);

-			}

-		}

-	}

-

-	public static boolean okToUse(Widget widget) {

-		return widget != null && !widget.isDisposed();

-	}

-	

-	public static boolean isMotif() {

-		return false;

-	}

-		

-	/**

-	 * Returns the elements of the given selection. 

-	 * Returns an empty array if the selection is empty or if 

-	 * the given selection is not of type <code>IStructuredSelection</code>.

-	 *

-	 * @param selection the selection

-	 * @return the selected elements

-	 */

-	public static Object[] toArray(ISelection selection) {

-		if (!(selection instanceof IStructuredSelection)) {

-			return new Object[0];

-		}

-		IStructuredSelection ss= (IStructuredSelection) selection;

-		return ss.toArray();

-	}

-

-	/**

-	 * Convenience method: extract all <code>IResources</code> from given selection.

-	 * Never returns null.

-	 */

-	public static IResource[] getResources(ISelection selection) {

-		

-		ArrayList tmp= new ArrayList();

-

-		if (selection instanceof IStructuredSelection) {

-		

-			Object[] s= ((IStructuredSelection)selection).toArray();

-				

-			for (int i= 0; i < s.length; i++) {

-				Object o= s[i];

-				if (o instanceof IResource) {

-					tmp.add(o);

-					continue;

-				}

-				if (o instanceof IAdaptable) {

-					IAdaptable a= (IAdaptable) o;

-					Object adapter= a.getAdapter(IResource.class);

-					if (adapter instanceof IResource)

-						tmp.add(adapter);

-					continue;

-				}

-			}

-		}

-		return (IResource[]) tmp.toArray(new IResource[tmp.size()]);

-	}

-

-	public static byte[] readBytes(InputStream in) {

-		ByteArrayOutputStream bos= new ByteArrayOutputStream();

-		try {		

-			while (true) {

-				int c= in.read();

-				if (c == -1)

-					break;

-				bos.write(c);

-			}

-					

-		} catch (IOException ex) {

-			return null;

-		

-		} finally {

-			if (in != null) {

-				try {

-					in.close();

-				} catch (IOException x) {

-				}

-			}

-			try {

-				bos.close();

-			} catch (IOException x) {

-			}

-		}

-		

-		return bos.toByteArray();

-	}

-

-	/**

-	 * Returns null if an error occurred.

-	 */

-	public static String readString(InputStream is) {

-		if (is == null)

-			return null;

-		BufferedReader reader= null;

-		try {

-			StringBuffer buffer= new StringBuffer();

-			char[] part= new char[2048];

-			int read= 0;

-			reader= new BufferedReader(new InputStreamReader(is, ResourcesPlugin.getEncoding()));

-

-			while ((read= reader.read(part)) != -1)

-				buffer.append(part, 0, read);

-			

-			return buffer.toString();

-			

-		} catch (IOException ex) {

-		} finally {

-			if (reader != null) {

-				try {

-					reader.close();

-				} catch (IOException ex) {

-				}

-			}

-		}

-		return null;

-	}

-	

-	public static String getIconPath(Display display) {

-		return "icons/full/";	//$NON-NLS-1$

-	}

-	

-	/**

-	 * Initialize the given Action from a ResourceBundle.

-	 */

-	public static void initAction(IAction a, ResourceBundle bundle, String prefix) {

-		

-		String labelKey= "label"; //$NON-NLS-1$

-		String tooltipKey= "tooltip"; //$NON-NLS-1$

-		String imageKey= "image"; //$NON-NLS-1$

-		String descriptionKey= "description"; //$NON-NLS-1$

-		

-		if (prefix != null && prefix.length() > 0) {

-			labelKey= prefix + labelKey;

-			tooltipKey= prefix + tooltipKey;

-			imageKey= prefix + imageKey;

-			descriptionKey= prefix + descriptionKey;

-		}

-		

-		a.setText(getString(bundle, labelKey, labelKey));

-		a.setToolTipText(getString(bundle, tooltipKey, null));

-		a.setDescription(getString(bundle, descriptionKey, null));

-		

-		String relPath= getString(bundle, imageKey, null);

-		if (relPath != null && relPath.trim().length() > 0) {

-			

-			String cPath;

-			String dPath;

-			String ePath;

-			

-			if (relPath.indexOf("/") >= 0) { //$NON-NLS-1$

-				String path= relPath.substring(1);

-				cPath= 'c' + path;

-				dPath= 'd' + path;

-				ePath= 'e' + path;

-			} else {

-				cPath= "clcl16/" + relPath; //$NON-NLS-1$

-				dPath= "dlcl16/" + relPath; //$NON-NLS-1$

-				ePath= "elcl16/" + relPath; //$NON-NLS-1$

-			}

-			

-			ImageDescriptor id= CompareUIPlugin.getImageDescriptor(dPath);	// we set the disabled image first (see PR 1GDDE87)

-			if (id != null)

-				a.setDisabledImageDescriptor(id);

-			id= CompareUIPlugin.getImageDescriptor(cPath);

-			if (id != null)

-				a.setHoverImageDescriptor(id);

-			id= CompareUIPlugin.getImageDescriptor(ePath);

-			if (id != null)

-				a.setImageDescriptor(id);

-		}

-	}

-	

-	public static void initToggleAction(IAction a, ResourceBundle bundle, String prefix, boolean checked) {

-

-		String tooltip= null;

-		if (checked)

-			tooltip= getString(bundle, prefix + "tooltip.checked", null);	//$NON-NLS-1$

-		else

-			tooltip= getString(bundle, prefix + "tooltip.unchecked", null);	//$NON-NLS-1$

-		if (tooltip == null)

-			tooltip= getString(bundle, prefix + "tooltip", null);	//$NON-NLS-1$

-		

-		if (tooltip != null)

-			a.setToolTipText(tooltip);

-			

-		String description= null;

-		if (checked)

-			description= getString(bundle, prefix + "description.checked", null);	//$NON-NLS-1$

-		else

-			description= getString(bundle, prefix + "description.unchecked", null);	//$NON-NLS-1$

-		if (description == null)

-			description= getString(bundle, prefix + "description", null);	//$NON-NLS-1$

-		

-		if (description != null)

-			a.setDescription(description);

-			

-	}

-

-	public static String getString(ResourceBundle bundle, String key, String dfltValue) {

-		

-		if (bundle != null) {

-			try {

-				return bundle.getString(key);

-			} catch (MissingResourceException x) {

-			}

-		}

-		return dfltValue;

-	}

-	

-	public static String getFormattedString(ResourceBundle bundle, String key, String arg) {

-		

-		if (bundle != null) {

-			try {

-				return MessageFormat.format(bundle.getString(key), new String[] { arg });

-			} catch (MissingResourceException x) {

-			}

-		}

-		return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$

-	}

-	

-	public static String getString(String key) {

-		try {

-			return CompareUIPlugin.getResourceBundle().getString(key);

-		} catch (MissingResourceException e) {

-			return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$

-		}

-	}

-	

-	public static String getFormattedString(String key, String arg) {

-		try{

-			return MessageFormat.format(CompareUIPlugin.getResourceBundle().getString(key), new String[] { arg });

-		} catch (MissingResourceException e) {

-			return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$

-		}	

-	}

-

-	public static String getString(ResourceBundle bundle, String key) {

-		return getString(bundle, key, key);

-	}

-	

-	public static int getInteger(ResourceBundle bundle, String key, int dfltValue) {

-		

-		if (bundle != null) {

-			try {

-				String s= bundle.getString(key);

-				if (s != null)

-					return Integer.parseInt(s);

-			} catch (NumberFormatException x) {

-			} catch (MissingResourceException x) {

-			}

-		}

-		return dfltValue;

-	}

-

-	/**

-	 * Answers <code>true</code> if the given selection contains resources that don't

-	 * have overlapping paths and <code>false</code> otherwise. 

-	 */

-	/*

-	public static boolean isSelectionNonOverlapping() throws TeamException {

-		IResource[] resources = getSelectedResources();

-		// allow operation for non-overlapping resource selections

-		if(resources.length>0) {

-			List validPaths = new ArrayList(2);

-			for (int i = 0; i < resources.length; i++) {

-				IResource resource = resources[i];

-				

-				// only allow cvs resources to be selected

-				if(RepositoryProvider.getProvider(resource.getProject(), CVSProviderPlugin.getTypeId()) == null) {

-					return false;

-				}

-				

-				// check if this resource overlaps other selections		

-				IPath resourceFullPath = resource.getFullPath();

-				if(!validPaths.isEmpty()) {

-					for (Iterator it = validPaths.iterator(); it.hasNext();) {

-						IPath path = (IPath) it.next();

-						if(path.isPrefixOf(resourceFullPath) || 

-					       resourceFullPath.isPrefixOf(path)) {

-							return false;

-						}

-					}

-				}

-				validPaths.add(resourceFullPath);

-				

-				// ensure that resources are managed

-				ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource);

-				if(cvsResource.isFolder()) {

-					if( ! ((ICVSFolder)cvsResource).isCVSFolder()) return false;

-				} else {

-					if( ! cvsResource.isManaged()) return false;

-				}

-			}

-			return true;

-		}

-		return false;

-	}

-	*/

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java
deleted file mode 100644
index d6a64cd..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal;

-

-import org.eclipse.swt.widgets.Composite;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IConfigurationElement;

-import org.eclipse.compare.*;

-

-import org.eclipse.jface.viewers.Viewer;

-

-import org.eclipse.ui.internal.ViewerActionBuilder;

-

-/**

- * Creates <code>Viewer</code>s from an <code>IConfigurationElement</code>.

- */

-public class ViewerDescriptor implements IViewerDescriptor {

-

-	private final static String CLASS_ATTRIBUTE= "class"; //$NON-NLS-1$

-	private final static String EXTENSIONS_ATTRIBUTE= "extensions"; //$NON-NLS-1$

-

-	private IConfigurationElement fConfiguration;

-	private IViewerCreator fViewerCreator;

-	private Class fViewerClass;

-

-	public ViewerDescriptor(IConfigurationElement config) {

-		fConfiguration= config;

-	}

-

-	public Viewer createViewer(Viewer currentViewer, Composite parent, CompareConfiguration mp) {

-		

-		if (currentViewer != null && currentViewer.getClass() == fViewerClass) {

-			//System.out.println("reused viewer: " + currentViewer.getClass().getName());

-			return currentViewer;

-		}

-		

-		if (fViewerCreator == null) {

-			try {

-				fViewerCreator= (IViewerCreator) fConfiguration.createExecutableExtension(CLASS_ATTRIBUTE);

-			} catch (CoreException e) {

-			}

-		}

-

-		if (fViewerCreator != null) {

-			Viewer viewer= fViewerCreator.createViewer(parent, mp);

-			if (viewer != null)

-				fViewerClass= viewer.getClass();

-			return viewer;

-		}

-

-		return null;

-	}

-

-	public String getExtension() {

-		return fConfiguration.getAttribute(EXTENSIONS_ATTRIBUTE);

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java
deleted file mode 100644
index a3874dd..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.eclipse.compare.internal;

-

-

-public class ViewerSwitchingCancelled extends Error {

-

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Attic/LineReader.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Attic/LineReader.java
deleted file mode 100644
index 053e3b9..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Attic/LineReader.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.io.*;

-import java.util.*;

-

-import org.eclipse.jface.util.Assert;

-

-/* package */ class LineReader {

-

-	private boolean fHaveChar= false;

-	private int fLastChar;

-	private boolean fSawEOF= false;

-	private BufferedReader fReader;

-	private boolean fIgnoreSingleCR= false;

-	

-	

-	/* package */ LineReader(BufferedReader reader) {

-		fReader= reader;

-		Assert.isNotNull(reader);

-	}

-

-	void ignoreSingleCR() {

-		fIgnoreSingleCR= true;

-	}

-	

-    /**

-     * Reads a line of text. A line is considered to be terminated by any one

-     * of a line feed ('\n'), a carriage return ('\r'), or a carriage return

-     * followed immediately by a linefeed.

-     * @return A string containing the contents of the line including

-     *	the line-termination characters, or <code>null</code> if the end of the

-     *	stream has been reached

-     * @exception IOException If an I/O error occurs

-     */

-	/* package */ String readLine() throws IOException {

-		StringBuffer sb= null;

-				

-		while (!fSawEOF) {

-			int c= readChar();

-			if (c == -1) {

-				fSawEOF= true;

-				break;

-			}

-			if (sb == null)

-				sb= new StringBuffer();

-			sb.append((char)c);

-			if (c == '\n')

-				break;

-			if (c == '\r') {

-				c= readChar();

-				if (c == -1) {

-					fSawEOF= true;

-					break;	// EOF

-				}

-				if (c != '\n') {

-					if (fIgnoreSingleCR) {

-						sb.append((char)c);	

-						continue;

-					} else {

-						fHaveChar= true;

-						fLastChar= c;

-					}

-				} else

-					sb.append((char)c);	

-				break;

-			}

-		}

-		

-		if (sb != null)

-			return sb.toString();

-		return null;

-	}

-	

-	/* package */ void close() {

-		try {

-			fReader.close();

-		} catch (IOException ex) {

-		}

-	}

-	

-	/* package */ List readLines() {

-		try {

-			List lines= new ArrayList();

-			String line;

-			while ((line= readLine()) != null)

-				lines.add(line);

-			return lines;

-		} catch (IOException ex) {

-			//System.out.println("error while reading file: " + fileName + "(" + ex + ")");

-		} finally {

-			close();

-		}

-		return null;

-	}

-	/**

-	 * Returns the number of characters in the given string without

-	 * counting a trailing line separator.

-	 */

-	/* package */ int lineContentLength(String line) {

-		if (line == null)

-			return 0;

-		int length= line.length();

-		for (int i= length-1; i >= 0; i--) {

-			char c= line.charAt(i);

-			if (c =='\n' || c == '\r')

-				length--;

-			else

-				break;

-		}

-		return length;

-	}

-	

-	//---- private

-	

-	private int readChar() throws IOException {

-		if (fHaveChar) {

-			fHaveChar= false;

-			return fLastChar;

-		}

-		return fReader.read();

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java
deleted file mode 100644
index 75bd62f..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.lang.reflect.InvocationTargetException;

-import java.util.Arrays;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.events.SelectionAdapter;

-import org.eclipse.swt.events.SelectionEvent;

-import org.eclipse.swt.graphics.Image;

-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.jface.action.IAction;

-import org.eclipse.jface.dialogs.Dialog;

-import org.eclipse.jface.dialogs.ProgressMonitorDialog;

-import org.eclipse.jface.operation.IRunnableWithProgress;

-import org.eclipse.jface.util.Assert;

-import org.eclipse.jface.viewers.*;

-import org.eclipse.jface.wizard.IWizard;

-import org.eclipse.jface.wizard.WizardDialog;

-

-import org.eclipse.core.resources.*;

-import org.eclipse.core.runtime.*;

-

-import org.eclipse.ui.IActionDelegate;

-import org.eclipse.ui.IEditorPart;

-

-import org.eclipse.compare.internal.*;

-

-

-public class CompareWithPatchAction implements IActionDelegate {

-

-	static class PatchWizardDialog extends WizardDialog {

-	

-		PatchWizardDialog(Shell parent, IWizard wizard) {

-			super(parent, wizard);

-			

-			setShellStyle(getShellStyle() | SWT.RESIZE);

-			setMinimumPageSize(700, 500);

-		}

-	}

-	

-	private ISelection fSelection;

-	private boolean fSavedFiles;

-	private boolean fAutobuildState;

-	

-

-	public void selectionChanged(IAction action, ISelection selection) {

-		fSelection= selection;

-		IResource[] resources= PatchWizard.getResource(fSelection);

-		action.setEnabled(resources != null && resources.length == 1);

-	}

-		

-	public void run(IAction action) {

-		PatchWizard wizard= new PatchWizard(fSelection);

-		

-		if (areAllEditorsSaved()) {

-			PatchWizardDialog dialog= new PatchWizardDialog(CompareUIPlugin.getShell(), wizard);

-			dialog.open();

-		}

-	}

-

-	private boolean areAllEditorsSaved(){

-		if (CompareUIPlugin.getDirtyEditors().length == 0)

-			return true;

-		if (! saveAllDirtyEditors())

-			return false;

-		Shell shell= CompareUIPlugin.getShell();

-		try {

-			// Save isn't cancelable.

-			IWorkspace workspace= ResourcesPlugin.getWorkspace();

-			IWorkspaceDescription description= workspace.getDescription();

-			boolean autoBuild= description.isAutoBuilding();

-			description.setAutoBuilding(false);

-			workspace.setDescription(description);

-			try {

-				new ProgressMonitorDialog(shell).run(false, false, createRunnable());

-				fSavedFiles= true;

-			} finally {

-				description.setAutoBuilding(autoBuild);

-				workspace.setDescription(description);

-			}

-			return true;

-		} catch (InvocationTargetException e) {

-			ExceptionHandler.handle(e, shell, PatchMessages.getString("PatchAction.ExceptionTitle"), PatchMessages.getString("Exception"));  //$NON-NLS-1$ //$NON-NLS-2$

-			return false;

-		} catch (CoreException e) {

-			ExceptionHandler.handle(e, shell, PatchMessages.getString("PatchAction.ExceptionTitle"), PatchMessages.getString("Exception"));  //$NON-NLS-1$ //$NON-NLS-2$

-			return false;			

-		} catch (InterruptedException e) {

-			Assert.isTrue(false); // Can't happen. Operation isn't cancelable.

-			return false;

-		}

-	}

-

-	private IRunnableWithProgress createRunnable() {

-		return new IRunnableWithProgress() {

-			public void run(IProgressMonitor pm) {

-				IEditorPart[] editorsToSave= CompareUIPlugin.getDirtyEditors();

-				pm.beginTask(PatchMessages.getString("PatchAction.SavingDirtyEditorsTask"), editorsToSave.length); //$NON-NLS-1$

-				for (int i= 0; i < editorsToSave.length; i++) {

-					editorsToSave[i].doSave(new SubProgressMonitor(pm, 1));

-					pm.worked(1);

-				}

-				pm.done();

-			}

-		};

-	}

-

-	private boolean saveAllDirtyEditors() {

-		if (ComparePreferencePage.getSaveAllEditors()) //must save everything

-			return true;

-		ListDialog dialog= new ListDialog(CompareUIPlugin.getShell()) {

-			protected Control createDialogArea(Composite parent) {

-				Composite result= (Composite) super.createDialogArea(parent);

-				final Button check= new Button(result, SWT.CHECK);

-				check.setText(PatchMessages.getString("PatchAction.AlwaysSaveQuestion")); //$NON-NLS-1$

-				check.setSelection(ComparePreferencePage.getSaveAllEditors());

-				check.addSelectionListener(

-					new SelectionAdapter() {

-						public void widgetSelected(SelectionEvent e) {

-							ComparePreferencePage.setSaveAllEditors(check.getSelection());

-						}

-					}

-				);

-				return result;

-			}

-		};

-		dialog.setTitle(PatchMessages.getString("PatchAction.SaveAllQuestion")); //$NON-NLS-1$

-		dialog.setAddCancelButton(true);

-		dialog.setLabelProvider(createDialogLabelProvider());

-		dialog.setMessage(PatchMessages.getString("PatchAction.SaveAllDescription")); //$NON-NLS-1$

-		dialog.setContentProvider(new ListContentProvider());

-		dialog.setInput(Arrays.asList(CompareUIPlugin.getDirtyEditors()));

-		return dialog.open() == Dialog.OK;

-	}

-

-	private ILabelProvider createDialogLabelProvider() {

-		return new LabelProvider() {

-			public Image getImage(Object element) {

-				return ((IEditorPart) element).getTitleImage();

-			}

-			public String getText(Object element) {

-				return ((IEditorPart) element).getTitle();

-			}

-		};

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java
deleted file mode 100644
index 5239340..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.util.*;

-

-import org.eclipse.core.runtime.IPath;

-

-import org.eclipse.compare.structuremergeviewer.Differencer;

-

-

-/* package */ class Diff {

-		

-	IPath fOldPath, fNewPath;

-	long fOldDate, fNewDate;	// if 0: no file

-	List fHunks= new ArrayList();

-	boolean fMatches= false;

-	private boolean fIsEnabled2= true;

-	String fRejected;

-

-	

- 	/* package */ Diff(IPath oldPath, long oldDate, IPath newPath, long newDate) {

-		fOldPath= oldPath;

-		fOldDate= oldPath == null ? 0 : oldDate;

-		fNewPath= newPath;

-		fNewDate= newPath == null ? 0 : newDate;	

-	}

-	

-	boolean isEnabled() {

-		return fIsEnabled2;

-	}

-	

-	void setEnabled(boolean b) {

-		fIsEnabled2= b;

-	}

-	

-	void reverse() {

-		IPath tp= fOldPath;

-		fOldPath= fNewPath;

-		fNewPath= tp;

-		

-		long t= fOldDate;

-		fOldDate= fNewDate;

-		fNewDate= t;

-		

-		Iterator iter= fHunks.iterator();

-		while (iter.hasNext()) {

-			Hunk hunk= (Hunk) iter.next();

-			hunk.reverse();

-		}

-	}

-	

-	Hunk[] getHunks() {

-		return (Hunk[]) fHunks.toArray((Hunk[]) new Hunk[fHunks.size()]);

-	}

-

-	IPath getPath() {

-		if (fOldPath != null)

-			return fOldPath;

-		return fNewPath;

-	}

-	

-	void finish() {

-		if (fHunks.size() == 1) {

-			Hunk h= (Hunk) fHunks.get(0);

-			if (h.fNewLength == 0) {

-				fNewDate= 0;

-				fNewPath= fOldPath;

-			}

-		}

-	}

-	

-	/* package */ void add(Hunk hunk) {

-		fHunks.add(hunk);

-	}

-	

-	/* package */ int getType() {

-		if (fOldDate == 0)

-			return Differencer.ADDITION;

-		if (fNewDate == 0)

-			return Differencer.DELETION;

-		return Differencer.CHANGE;

-	}

-	

-	/* package */ String getDescription(int strip) {

-		IPath path= fOldPath;

-		if (fOldDate == 0)

-			path= fNewPath;

-		if (strip > 0 && strip < path.segmentCount())

-			path= path.removeFirstSegments(strip);

-		return path.toOSString();

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java
deleted file mode 100644
index e49d5ad..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.util.List;

-

-import org.eclipse.jface.util.Assert;

-

-

-/**

- * A Hunk describes a range of changed lines and some context lines.

- */

-/* package */ class Hunk {

-	

-	Diff fParent;

-	int fOldStart, fOldLength;

-	int fNewStart, fNewLength;

-	String[] fLines;

-	boolean fMatches= false;

-	private boolean fIsEnabled2= true;

-	

-	

-	/* package */ Hunk(Diff parent, int[] oldRange, int[] newRange, List lines) {

-		

-		fParent= parent;

-		if (fParent != null)

-			fParent.add(this);

-		

-		if (oldRange[0] > 0)

-			fOldStart= oldRange[0]-1;	// line number start at 0!

-		else

-			fOldStart= 0;

-		fOldLength= oldRange[1];

-		if (newRange[0] > 0)

-			fNewStart= newRange[0]-1;	// line number start at 0!

-		else

-			fNewStart= 0;

-		fNewLength= newRange[1];

-		

-		fLines= (String[]) lines.toArray(new String[lines.size()]);

-	}

-	

-	boolean isEnabled() {

-		return fIsEnabled2;

-	}

-	

-	void setEnabled(boolean b) {

-		fIsEnabled2= b;

-	}

-	

-	void reverse() {

-		int t= fOldStart;

-		fOldStart= fNewStart;

-		fNewStart= t;

-		

-		t= fOldLength;

-		fOldLength= fNewLength;

-		fNewLength= t;

-		

-		for (int i= 0; i < fLines.length; i++) {

-			String line= fLines[i];

-			char c= line.charAt(0);

-			switch (c) {

-			case '+':

-				fLines[i]= '-' + line.substring(1);

-				break;

-			case '-':

-				fLines[i]= '+' + line.substring(1);

-				break;

-			default:

-				break;

-			}

-		}

-	}

-

-	/**

-	 * Returns the contents of this hunk.

-	 * Each line starts with a control character. Their meaning is as follows:

-	 * <ul>

-	 * <li>

-	 * '+': add the line

-	 * <li>

-	 * '-': delete the line

-	 * <li>

-	 * ' ': no change, context line

-	 * </ul>

-	 */

-	String getContent() {

-		StringBuffer sb= new StringBuffer();

-		for (int i= 0; i < fLines.length; i++) {

-			String line= fLines[i];

-			sb.append(line.substring(0, Patcher.length(line)));

-			sb.append('\n');

-		}

-		return sb.toString();

-	}

-	

-	/**

-	 * Returns a descriptive String for this hunk.

-	 * It is in the form old_start,old_length -> new_start,new_length.

-	 */

-	String getDescription() {

-		StringBuffer sb= new StringBuffer();

-		sb.append(Integer.toString(fOldStart));

-		sb.append(',');

-		sb.append(Integer.toString(fOldLength));

-		sb.append(" -> "); //$NON-NLS-1$

-		sb.append(Integer.toString(fNewStart));

-		sb.append(',');

-		sb.append(Integer.toString(fNewLength));

-		return sb.toString();

-	}

-	

-	String getRejectedDescription() {

-		StringBuffer sb= new StringBuffer();

-		sb.append("@@ -"); //$NON-NLS-1$

-		sb.append(Integer.toString(fOldStart));

-		sb.append(',');

-		sb.append(Integer.toString(fOldLength));

-		sb.append(" +"); //$NON-NLS-1$

-		sb.append(Integer.toString(fNewStart));

-		sb.append(',');

-		sb.append(Integer.toString(fNewLength));

-		sb.append(" @@"); //$NON-NLS-1$

-		return sb.toString();

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java
deleted file mode 100644
index e238378..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java
+++ /dev/null
@@ -1,623 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.io.*;

-import java.util.*;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.dnd.*;

-import org.eclipse.swt.events.*;

-import org.eclipse.swt.layout.*;

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.jface.dialogs.*;

-import org.eclipse.jface.viewers.*;

-import org.eclipse.jface.wizard.*;

-

-import org.eclipse.ui.help.*;

-import org.eclipse.ui.model.*;

-

-import org.eclipse.core.resources.*;

-import org.eclipse.core.runtime.*;

-

-import org.eclipse.compare.internal.Utilities;

-

-

-/* package */ class InputPatchPage extends WizardPage {

-

-	// constants

-	protected static final int SIZING_TEXT_FIELD_WIDTH= 250;

-	protected static final int COMBO_HISTORY_LENGTH= 5;

-	

-	private final static int SIZING_SELECTION_WIDGET_WIDTH= 400;

-	private final static int SIZING_SELECTION_WIDGET_HEIGHT= 150;

-

-	// dialog store id constants

-	private final static String PAGE_NAME= "PatchWizardPage1"; //$NON-NLS-1$

-	private final static String STORE_PATCH_FILE_ID= PAGE_NAME + ".PATCH_FILE";	//$NON-NLS-1$

-	private final static String STORE_PATCH_FILES_ID= PAGE_NAME + ".PATCH_FILES";	//$NON-NLS-1$

-	private final static String STORE_USE_CLIPBOARD_ID= PAGE_NAME + ".USE_CLIPBOARD";	//$NON-NLS-1$

-

-	// help IDs

-	private final static String PATCH_HELP_CONTEXT_ID= "PatchWizardHelpId";	//$NON-NLS-1$

-	

-	private boolean fShowError= false;

-	

-	// SWT widgets

-	private Button fUseClipboardButton;

-	private Combo fPatchFileNameField;

-	private Button fPatchFileBrowseButton;

-	private Button fUsePatchFileButton;

-	private Group fPatchFileGroup;

-	private CheckboxTreeViewer fPatchTargets;

-	private PatchWizard fPatchWizard;

-

-

-	InputPatchPage(PatchWizard pw) {

-		super("InputPatchPage", PatchMessages.getString("InputPatchPage.title"), null); //$NON-NLS-1$ //$NON-NLS-2$

-		fPatchWizard= pw;

-		setMessage(PatchMessages.getString("InputPatchPage.message")); //$NON-NLS-1$

-	}

-	

-	/**

-	 * Get a path from the supplied text widget.

-	 * @return org.eclipse.core.runtime.IPath

-	 */

-	protected IPath getPathFromText(Text textField) {

-		return (new Path(textField.getText())).makeAbsolute();

-	}

-

-	/* package */ String getPatchName() {

-		if (getUseClipboard())

-			return PatchMessages.getString("InputPatchPage.Clipboard"); //$NON-NLS-1$

-		return getPatchFilePath();

-	}

-	

-	public void createControl(Composite parent) {

-				

-		Composite composite= new Composite(parent, SWT.NULL);

-		composite.setLayout(new GridLayout());

-		composite.setLayoutData(new GridData(/* GridData.VERTICAL_ALIGN_FILL | */ GridData.HORIZONTAL_ALIGN_FILL));

-		setControl(composite);

-		

-		Label l= new Label(composite, SWT.NONE);	// a spacer

-		l.setText(PatchMessages.getString("InputPatchPage.SelectInput")); //$NON-NLS-1$

-		buildInputGroup(composite);

-		

-		new Label(composite, SWT.NONE);	// a spacer		

-		

-		buildPatchFileGroup(composite);		

-			

-		restoreWidgetValues();

-

-		updateWidgetEnablements();

-		//updatePageCompletion();

-		

-		WorkbenchHelp.setHelp(composite, PATCH_HELP_CONTEXT_ID);

-	}

-	

-	/* (non-JavaDoc)

-	 * Method declared in IWizardPage.

-	 */

-	public IWizardPage getNextPage() {

-		if (true) {

-			

-			Patcher patcher= ((PatchWizard) getWizard()).getPatcher();

-			

-			// Create a reader for the input

-			Reader reader= null;

-			if (getUseClipboard()) {

-				Control c= getControl();

-				if (c != null) {

-					Clipboard clipboard= new Clipboard(c.getDisplay());

-					Object o= clipboard.getContents(TextTransfer.getInstance());

-					clipboard.dispose();

-					if (o instanceof String)

-						reader= new StringReader((String)o);

-				}

-			} else {

-				String patchFilePath= getPatchFilePath();

-				if (patchFilePath != null) {

-					try {

-						reader= new FileReader(patchFilePath);

-					} catch (FileNotFoundException ex) {

-						MessageDialog.openError(null,

-							PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"),	//$NON-NLS-1$

-							PatchMessages.getString("InputPatchPage.PatchFileNotFound.message")); //$NON-NLS-1$

-					}

-				}

-			}

-			

-			// parse the input

-			if (reader != null) {

-				try {

-					patcher.parse(new BufferedReader(reader));

-				} catch (IOException ex) {

-					MessageDialog.openError(null,

-						PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"), //$NON-NLS-1$ 

-						PatchMessages.getString("InputPatchPage.ParseError.message")); //$NON-NLS-1$

-				}

-				

-				try {

-					reader.close();

-				} catch (IOException x) {

-				}

-			}

-			

-			Diff[] diffs= patcher.getDiffs();

-			if (diffs == null || diffs.length == 0) {

-				String source= getUseClipboard() ? "Clipboard"	//$NON-NLS-1$

-												   : "File";	//$NON-NLS-1$

-				MessageDialog.openError(null,

-					PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"),	//$NON-NLS-1$

-					PatchMessages.getString("InputPatchPage.NoDiffsFound_"+source+".message")); //$NON-NLS-1$ //$NON-NLS-2$

-				return this;

-			}

-			

-			// guess prefix count

-			int guess= guessPrefix(diffs);

-			patcher.setStripPrefixSegments(guess);

-		}

-		return super.getNextPage();

-	}

-		

-	private int guessPrefix(Diff[] diffs) {

-		/*

-		ArrayList list= new ArrayList();

-		IResource target= fPatchWizard.getTarget();

-		if (target instanceof IFile) {

-			list.add(target.getFullPath());

-		} else if (target instanceof IContainer) {

-			addLeaf(list, (IContainer) target);

-		}

-		

-		// guess prefix count

-		for (int i= 0; i < diffs.length; i++) {

-			IPath p= diffs[i].fOldPath;

-			if (p != null) {

-				int matches= match(p, list);

-				if (matches > 0) {

-					return p.segmentCount() - matches;

-				}

-			}

-		}

-		*/

-		return 0;

-	}

-	

-	private int match(IPath path, ArrayList list) {

-		Iterator iter= list.iterator();

-		while (iter.hasNext()) {

-			IPath filePath= (IPath) iter.next();

-			int matches= matchTrailingSegments(path, filePath);

-			if (matches > 0)

-				return matches;

-		}

-		return 0;

-	}

-	

-	private int matchTrailingSegments(IPath p1, IPath p2) {

-		int matches= 0;

-		int i1= p1.segmentCount()-1;

-		int i2= p2.segmentCount()-1;

-		for (; i1 >= 0 && i2 >= 0; i1--, i2--) {

-			String s1= p1.segment(i1);

-			String s2= p2.segment(i2);

-			if (!s1.equals(s2))

-				break;

-			matches++;

-		}

-		return matches;

-	}

-	

-	private void addLeaf(ArrayList list, IContainer c) {

-		IResource[] rs= null;

-		try {

-			rs= c.members();

-		} catch(CoreException ex) {

-		}

-		if (rs != null) {

-			for (int i= 0; i < rs.length; i++) {

-				IResource r= rs[i];

-				if (r instanceof IFile)

-					list.add(r.getFullPath());

-				else if (r instanceof IContainer)

-					addLeaf(list, (IContainer) r);

-			}

-		}

-	}

-

-	/* (non-JavaDoc)

-	 * Method declared in IWizardPage.

-	 */

-	public boolean canFlipToNextPage() {

-		if (true) {

-			// we can't call getNextPage to determine if flipping is allowed since computing

-			// the next page is quite expensive. So we say yes if the page is complete.

-			return isPageComplete();

-		} else {

-			return super.canFlipToNextPage();

-		}

-	}

-	

-	private void setEnablePatchFile(boolean enable) {

-		fPatchFileNameField.setEnabled(enable);

-		fPatchFileBrowseButton.setEnabled(enable);

-	}

-

-	/**

-	 *	Create the group for selecting the patch file

-	 */

-	private void buildPatchFileGroup(Composite parent) {

-		

-		fPatchFileGroup= new Group(parent, SWT.NONE);

-		fPatchFileGroup.setText(PatchMessages.getString("InputPatchPage.SelectPatch.title")); //$NON-NLS-1$

-		GridLayout layout= new GridLayout();

-		layout.numColumns= 3;

-		fPatchFileGroup.setLayout(layout);

-		fPatchFileGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

-		

-		// 1st row

-		fUsePatchFileButton= new Button(fPatchFileGroup, SWT.RADIO);

-		fUsePatchFileButton.setText(PatchMessages.getString("InputPatchPage.FileButton.text")); //$NON-NLS-1$

-		

-		fPatchFileNameField= new Combo(fPatchFileGroup, SWT.BORDER);

-		GridData gd= new GridData(GridData.FILL_HORIZONTAL);

-		//gd.horizontalIndent= 8;

-		gd.widthHint= SIZING_TEXT_FIELD_WIDTH;

-		fPatchFileNameField.setLayoutData(gd);

-		

-		fPatchFileBrowseButton= new Button(fPatchFileGroup, SWT.PUSH);

-		fPatchFileBrowseButton.setText(PatchMessages.getString("InputPatchPage.ChooseFileButton.text")); //$NON-NLS-1$

-		fPatchFileBrowseButton.setLayoutData(new GridData());

-		

-		// 2nd row

-		fUseClipboardButton= new Button(fPatchFileGroup, SWT.RADIO);

-		fUseClipboardButton.setText(PatchMessages.getString("InputPatchPage.UseClipboardButton.text")); //$NON-NLS-1$

-		gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);

-		gd.horizontalSpan= 2;

-		fUseClipboardButton.setLayoutData(gd);

-

-

-		// Add listeners

-		fUsePatchFileButton.addSelectionListener(

-			new SelectionAdapter() {

-				public void widgetSelected(SelectionEvent e) {

-					fShowError= true;

-					setEnablePatchFile(!getUseClipboard());

-					updateWidgetEnablements();

-				}

-			}

-		);

-		fPatchFileNameField.addSelectionListener(

-			new SelectionAdapter() {

-				public void widgetSelected(SelectionEvent e) {

-					setSourceName(fPatchFileNameField.getText());

-					updateWidgetEnablements();

-				}

-			}

-		);

-		fPatchFileNameField.addModifyListener(

-			new ModifyListener() {

-				public void modifyText(ModifyEvent e) {

-					fShowError= true;

-					updateWidgetEnablements();

-				}

-			}

-		);

-		fPatchFileBrowseButton.addSelectionListener(

-			new SelectionAdapter() {

-				public void widgetSelected(SelectionEvent e) {

-					handlePatchFileBrowseButtonPressed();

-					updateWidgetEnablements();

-				}

-			}

-		);

-		

-		//fPatchFileNameField.setFocus();

-	}

-

-	private void buildInputGroup(Composite parent) {

-		

-		PatchWizard pw= (PatchWizard) getWizard();

-		IResource target= pw.getTarget();

-		IWorkspace workspace= target.getWorkspace();

-		IWorkspaceRoot root= workspace.getRoot();

-		

-		Tree tree= new Tree(parent, SWT.BORDER);

-		GridData gd= new GridData(GridData.FILL_HORIZONTAL);

-		gd.heightHint= 200;

-		tree.setLayoutData(gd);

-		

-		fPatchTargets= new CheckboxTreeViewer(tree);

-		fPatchTargets.setLabelProvider(new WorkbenchLabelProvider());

-		fPatchTargets.setContentProvider(new WorkbenchContentProvider());

-		fPatchTargets.setSorter(new WorkbenchViewerSorter());

-		fPatchTargets.setInput(root);

-		if (target != null) {

-			fPatchTargets.expandToLevel(target, 0);

-			fPatchTargets.setSelection(new StructuredSelection(target));

-		}

-		

-		// register listeners

-		fPatchTargets.addSelectionChangedListener(

-			new ISelectionChangedListener() {

-				public void selectionChanged(SelectionChangedEvent event) {

-					fPatchWizard.setTargets(PatchWizard.getResource(event.getSelection()));

-					updateWidgetEnablements();

-				}

-			}

-		);

-		//fPatchFileNameField.setFocus();

-	}

-	

-	/**

-	 * Returns a content provider for <code>IResource</code>s that returns 

-	 * only children of the given resource type.

-	 */

-	private ITreeContentProvider getResourceProvider(final int resourceType) {

-		return new WorkbenchContentProvider() {

-			public Object[] getChildren(Object o) {

-				if (o instanceof IContainer) {

-					try {

-						ArrayList results= new ArrayList();

-						IResource[] members= ((IContainer)o).members();

-						for (int i= 0; i < members.length; i++)

-							// filter out the desired resource types

-							if ((members[i].getType() & resourceType) != 0)

-								results.add(members[i]);

-						return results.toArray();

-					} catch (CoreException e) {

-					}

-				}

-				// just return an empty set of children

-				return new Object[0];

-			}

-		};

-	}

-	

-	/**

-	 * Updates the enable state of this page's controls.

-	 */

-	private void updateWidgetEnablements() {

-		

-		String error= null;

-

-		ISelection selection= fPatchTargets.getSelection();

-		boolean anySelected= selection != null && !selection.isEmpty();

-		if (!anySelected)

-			error= PatchMessages.getString("InputPatchPage.NothingSelected.message"); //$NON-NLS-1$

-

-		boolean gotPatch= false;

-		if (getUseClipboard()) {

-			Control c= getControl();

-			if (c != null) {

-				Clipboard clipboard= new Clipboard(c.getDisplay());

-				Object o= clipboard.getContents(TextTransfer.getInstance());

-				clipboard.dispose();

-				if (o instanceof String) {

-					String s= ((String) o).trim();

-					if (s.length() > 0)

-						gotPatch= true;

-					else

-						error= PatchMessages.getString("InputPatchPage.ClipboardIsEmpty.message"); //$NON-NLS-1$

-				} else

-					error= PatchMessages.getString("InputPatchPage.NoTextInClipboard.message");					 //$NON-NLS-1$

-			} else

-				error= PatchMessages.getString("InputPatchPage.CouldNotReadClipboard.message");					 //$NON-NLS-1$

-		} else {

-			String path= fPatchFileNameField.getText();

-			if (path != null && path.length() > 0) {

-				File file= new File(path);

-				gotPatch= file.exists() && file.isFile() && file.length() > 0;

-				if (!gotPatch)

-					error= PatchMessages.getString("InputPatchPage.CannotLocatePatch.message") + path; //$NON-NLS-1$

-			} else {

-				error= PatchMessages.getString("InputPatchPage.NoFileName.message"); //$NON-NLS-1$

-			}

-		}

-		

-		setPageComplete(anySelected && gotPatch);

-		if (fShowError)

-			setErrorMessage(error);

-	}

-	

-	protected void handlePatchFileBrowseButtonPressed() {

-		FileDialog dialog= new FileDialog(getShell(), SWT.NONE);

-		dialog.setText(PatchMessages.getString("InputPatchPage.SelectPatchFileDialog.title"));		 //$NON-NLS-1$

-		dialog.setFilterPath(getPatchFilePath());

-		String res= dialog.open();

-		if (res == null)

-			return;

-		

-		String patchFilePath= dialog.getFileName();

-		IPath filterPath= new Path(dialog.getFilterPath());

-		IPath path= filterPath.append(patchFilePath).makeAbsolute();	

-		patchFilePath= path.toOSString();

-		//fDialogSettings.put(IUIConstants.DIALOGSTORE_LASTEXTJAR, filterPath.toOSString());

-		

-		fPatchFileNameField.setText(patchFilePath);

-		//setSourceName(patchFilePath);

-	}

-	

-	/**

-	 * Sets the source name of the import to be the supplied path.

-	 * Adds the name of the path to the list of items in the

-	 * source combo and selects it.

-	 *

-	 * @param path the path to be added

-	 */

-	protected void setSourceName(String path) {

-	

-		if (path.length() > 0) {

-	

-			String[] currentItems= fPatchFileNameField.getItems();

-			int selectionIndex= -1;

-			for (int i= 0; i < currentItems.length; i++)

-				if (currentItems[i].equals(path))

-					selectionIndex= i;

-			

-			if (selectionIndex < 0) {	// not found in history

-				int oldLength= currentItems.length;

-				String[] newItems= new String[oldLength + 1];

-				System.arraycopy(currentItems, 0, newItems, 0, oldLength);

-				newItems[oldLength]= path;

-				fPatchFileNameField.setItems(newItems);

-				selectionIndex= oldLength;

-			}

-			fPatchFileNameField.select(selectionIndex);

-	

-			//resetSelection();

-		}

-	}

-	

-	/**

-	 *	The Finish button was pressed. Try to do the required work now and answer

-	 *	a boolean indicating success. If false is returned then the wizard will

-	 *	not close.

-	 *

-	 * @return boolean

-	 */

-	public boolean finish() {

-//		if (!ensureSourceIsValid())

-//			return false;

-	

-		saveWidgetValues();

-	

-//		Iterator resourcesEnum = getSelectedResources().iterator();

-//		List fileSystemObjects = new ArrayList();

-//		while (resourcesEnum.hasNext()) {

-//			fileSystemObjects.add(

-//				((FileSystemElement) resourcesEnum.next()).getFileSystemObject());

-//		}

-//	

-//		if (fileSystemObjects.size() > 0)

-//			return importResources(fileSystemObjects);

-//	

-//		MessageDialog

-//			.openInformation(

-//				getContainer().getShell(),

-//				DataTransferMessages.getString("DataTransfer.information"), //$NON-NLS-1$

-//				DataTransferMessages.getString("FileImport.noneSelected")); //$NON-NLS-1$

-//	

-//		return false;

-

-		return true;

-	}

-	

-	/**

-	 *	Use the dialog store to restore widget values to the values that they held

-	 *	last time this wizard was used to completion

-	 */

-	private void restoreWidgetValues() {

-		

-		boolean useClipboard= false;

-		

-		IDialogSettings settings= getDialogSettings();

-		if (settings != null) {

-			

-			useClipboard= settings.getBoolean(STORE_USE_CLIPBOARD_ID);

-

-			// set filenames history

-			String[] sourceNames= settings.getArray(STORE_PATCH_FILES_ID);

-			if (sourceNames != null)

-				for (int i= 0; i < sourceNames.length; i++)

-					if (sourceNames[i] != null && sourceNames[i].length() > 0)

-						fPatchFileNameField.add(sourceNames[i]);

-			

-			// set patch file path

-			String patchFilePath= settings.get(STORE_PATCH_FILES_ID);

-			if (patchFilePath != null)

-				setSourceName(patchFilePath);

-		}

-		

-		// set 'Use Clipboard' radio buttons

-		setUseClipboard(useClipboard);

-	}

-	

-	/**

-	 * 	Since Finish was pressed, write widget values to the dialog store so that they

-	 *	will persist into the next invocation of this wizard page

-	 */

-	void saveWidgetValues() {

-		IDialogSettings settings= getDialogSettings();

-		if (settings != null) {

-			

-			settings.put(STORE_USE_CLIPBOARD_ID, getUseClipboard());

-			settings.put(STORE_PATCH_FILES_ID, getPatchFilePath());

-			

-			// update source names history

-			String[] sourceNames= settings.getArray(STORE_PATCH_FILES_ID);

-			if (sourceNames == null)

-				sourceNames= new String[0];

-	

-			sourceNames= addToHistory(sourceNames, getPatchFilePath());

-			settings.put(STORE_PATCH_FILES_ID, sourceNames);

-		}

-	}

-	

-	// static helpers

-		

-	private void setUseClipboard(boolean useClipboard) {

-		if (useClipboard)

-			fUseClipboardButton.setSelection(true);

-		else

-			fUsePatchFileButton.setSelection(true);

-		setEnablePatchFile(!useClipboard);

-	}

-	

-	private boolean getUseClipboard() {

-		if (fUseClipboardButton != null)

-			return fUseClipboardButton.getSelection();

-		return false;

-	}

-

-	private String getPatchFilePath() {

-		if (fPatchFileNameField != null)

-			return fPatchFileNameField.getText();

-		return ""; //$NON-NLS-1$

-	} 

-

-	/**

-	 * Creates a new label with a bold font.

-	 *

-	 * @param parent the parent control

-	 * @param text the label text

-	 * @return the new label control

-	 */

-	private static Label buildPlainLabel(Composite parent, String text) {

-		Label label= new Label(parent, SWT.NONE);

-		label.setText(text);

-		GridData data= new GridData();

-		data.verticalAlignment= GridData.FILL;

-		data.horizontalAlignment= GridData.FILL;

-		label.setLayoutData(data);

-		return label;

-	}

-

-	/**

-	 * Adds an entry to a history, while taking care of duplicate history items

-	 * and excessively long histories. The assumption is made that all histories

-	 * should be of length <code>COMBO_HISTORY_LENGTH</code>.

-	 *

-	 * @param history the current history

-	 * @param newEntry the entry to add to the history

-	 */

-	protected static String[] addToHistory(String[] history, String newEntry) {

-		java.util.ArrayList l= new java.util.ArrayList(java.util.Arrays.asList(history));

-

-		l.remove(newEntry);

-		l.add(0,newEntry);

-	

-		// since only one new item was added, we can be over the limit

-		// by at most one item

-		if (l.size() > COMBO_HISTORY_LENGTH)

-			l.remove(COMBO_HISTORY_LENGTH);

-		

-		return (String[]) l.toArray(new String[l.size()]);

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java
deleted file mode 100644
index 053e3b9..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.io.*;

-import java.util.*;

-

-import org.eclipse.jface.util.Assert;

-

-/* package */ class LineReader {

-

-	private boolean fHaveChar= false;

-	private int fLastChar;

-	private boolean fSawEOF= false;

-	private BufferedReader fReader;

-	private boolean fIgnoreSingleCR= false;

-	

-	

-	/* package */ LineReader(BufferedReader reader) {

-		fReader= reader;

-		Assert.isNotNull(reader);

-	}

-

-	void ignoreSingleCR() {

-		fIgnoreSingleCR= true;

-	}

-	

-    /**

-     * Reads a line of text. A line is considered to be terminated by any one

-     * of a line feed ('\n'), a carriage return ('\r'), or a carriage return

-     * followed immediately by a linefeed.

-     * @return A string containing the contents of the line including

-     *	the line-termination characters, or <code>null</code> if the end of the

-     *	stream has been reached

-     * @exception IOException If an I/O error occurs

-     */

-	/* package */ String readLine() throws IOException {

-		StringBuffer sb= null;

-				

-		while (!fSawEOF) {

-			int c= readChar();

-			if (c == -1) {

-				fSawEOF= true;

-				break;

-			}

-			if (sb == null)

-				sb= new StringBuffer();

-			sb.append((char)c);

-			if (c == '\n')

-				break;

-			if (c == '\r') {

-				c= readChar();

-				if (c == -1) {

-					fSawEOF= true;

-					break;	// EOF

-				}

-				if (c != '\n') {

-					if (fIgnoreSingleCR) {

-						sb.append((char)c);	

-						continue;

-					} else {

-						fHaveChar= true;

-						fLastChar= c;

-					}

-				} else

-					sb.append((char)c);	

-				break;

-			}

-		}

-		

-		if (sb != null)

-			return sb.toString();

-		return null;

-	}

-	

-	/* package */ void close() {

-		try {

-			fReader.close();

-		} catch (IOException ex) {

-		}

-	}

-	

-	/* package */ List readLines() {

-		try {

-			List lines= new ArrayList();

-			String line;

-			while ((line= readLine()) != null)

-				lines.add(line);

-			return lines;

-		} catch (IOException ex) {

-			//System.out.println("error while reading file: " + fileName + "(" + ex + ")");

-		} finally {

-			close();

-		}

-		return null;

-	}

-	/**

-	 * Returns the number of characters in the given string without

-	 * counting a trailing line separator.

-	 */

-	/* package */ int lineContentLength(String line) {

-		if (line == null)

-			return 0;

-		int length= line.length();

-		for (int i= length-1; i >= 0; i--) {

-			char c= line.charAt(i);

-			if (c =='\n' || c == '\r')

-				length--;

-			else

-				break;

-		}

-		return length;

-	}

-	

-	//---- private

-	

-	private int readChar() throws IOException {

-		if (fHaveChar) {

-			fHaveChar= false;

-			return fLastChar;

-		}

-		return fReader.read();

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareInput.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareInput.java
deleted file mode 100644
index d99a4f8..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareInput.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.io.*;

-import java.io.ByteArrayInputStream;

-import java.text.MessageFormat;

-import java.lang.reflect.InvocationTargetException;

-

-import org.eclipse.swt.graphics.Image;

-import org.eclipse.swt.widgets.Composite;

-

-import org.eclipse.core.runtime.*;

-import org.eclipse.core.resources.*;

-

-import org.eclipse.jface.viewers.*;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.structuremergeviewer.*;

-import org.eclipse.compare.internal.*;

-

-

-/**

- * A PatchCompareInput uses a Patcher to 

- * patch selected workspace resources.

- */

-/* package */ class PatchCompareInput extends CompareEditorInput {

-	

-	static class Rejected extends DiffNode implements IStreamContentAccessor {

-		Diff fDiff;

-		String fName;

-		Rejected(IDiffContainer parent, String name, Diff diff) {

-			super(parent, Differencer.NO_CHANGE);

-			fName= name;

-			fDiff= diff;

-		}

-		public String getName() {

-			return fName + " *"; //$NON-NLS-1$

-		}

-		public String getType() {

-			return "txt"; //$NON-NLS-1$

-		}

-		public Image getImage() {

-			return CompareUI.getImage("file"); //$NON-NLS-1$

-		}

-		public InputStream getContents() {

-			return new ByteArrayInputStream(fDiff.fRejected.getBytes());

-		}

-	}

-		

-	private DiffNode fRoot;

-	private IResource fTarget;

-	private Patcher fPatcher;

-	

-	/**

-	 * Creates an compare editor input for the given selection.

-	 */

-	/* package */ PatchCompareInput(CompareConfiguration config, Patcher patcher, ISelection selection) {

-		super(config);

-		fPatcher= patcher;

-		IResource[] s= Utilities.getResources(selection);

-		if (s.length == 1)

-			fTarget= s[0];	

-	}

-	

-	/**

-	 * Performs a two-way or three-way diff on the current selection.

-	 */

-	public Object prepareInput(IProgressMonitor pm) throws InvocationTargetException {

-						

-		CompareConfiguration cc= (CompareConfiguration) getCompareConfiguration();

-		

-		try {				

-			Diff[] diffs= fPatcher.getDiffs();

-			

-			pm.beginTask(Utilities.getString("ResourceCompare.taskName"), diffs.length); //$NON-NLS-1$

-		

-			fRoot= new DiffNode(0);

-			IContainer rootFolder= null;

-			if (fTarget instanceof IContainer)

-				rootFolder= (IContainer) fTarget;

-				

-			for (int i= 0; i < diffs.length; i++) {

-				Diff diff= diffs[i];

-				if (diff.isEnabled()) {

-					IPath path= fPatcher.getPath(diff);

-					createPath(fRoot, rootFolder, path, diff, false);

-					

-					String rej= diff.fRejected;

-					if (rej != null) {

-						IPath pp= path.removeLastSegments(1);

-						pp= pp.append(path.lastSegment() + ".rej"); //$NON-NLS-1$

-						createPath(fRoot, rootFolder, pp, diff, true);

-					}

-				}

-				pm.worked(1);

-			}

-						

-			fTarget.refreshLocal(IResource.DEPTH_INFINITE, pm);

-			

-			String leftLabel= fTarget.getName();

-			cc.setLeftLabel(leftLabel);

-			cc.setLeftImage(CompareUIPlugin.getImage(fTarget));

-			

-			String rformat= PatchMessages.getString("PatchCompareInput.RightTitle.format");	//$NON-NLS-1$

-			String rightLabel= MessageFormat.format(rformat, new String[] { fPatcher.getName() } );

-			cc.setRightLabel(rightLabel);

-			//cc.setRightImage(CompareUIPlugin.getImage(fRightResource));

-			

-			String format= Utilities.getString("ResourceCompare.twoWay.title"); //$NON-NLS-1$

-			String title= MessageFormat.format(format, new String[] {leftLabel, rightLabel} );

-			setTitle(title);

-

-			return fRoot;

-			

-		} catch (CoreException ex) {

-			throw new InvocationTargetException(ex);

-		} finally {

-			pm.done();

-		}

-	}

-	

-	public void saveChanges(IProgressMonitor pm) throws CoreException {

-		if (fRoot instanceof DiffNode) {

-			try {

-				commit(pm, (DiffNode) fRoot);

-			} finally {	

-				setDirty(false);

-			}

-		}

-	}

-	

-	/*

-	 * Recursively walks the diff tree and commits all changes.

-	 */

-	private static void commit(IProgressMonitor pm, DiffNode node) throws CoreException {

-		

-		ITypedElement left= node.getLeft();

-		if (left instanceof BufferedResourceNode)

-			((BufferedResourceNode) left).commit(pm);

-			

-		ITypedElement right= node.getRight();

-		if (right instanceof BufferedResourceNode)

-			((BufferedResourceNode) right).commit(pm);

-

-		IDiffElement[] children= node.getChildren();

-		if (children != null) {

-			for (int i= 0; i < children.length; i++) {

-				IDiffElement element= children[i];

-				if (element instanceof DiffNode)

-					commit(pm, (DiffNode) element);

-			}

-		}

-	}

-	

-	private void createPath(DiffContainer root, IContainer folder, IPath path, Diff diff, boolean reject) {

-		if (path.segmentCount() > 1) {

-			IFolder f= folder.getFolder(path.uptoSegment(1));

-			IDiffElement child= root.findChild(path.segment(0));

-			if (child == null) {

-				ResourceNode rn= new ResourceNode(f);

-				child= new DiffNode(root, Differencer.CHANGE, null, rn, rn);

-			}

-			if (child instanceof DiffContainer)

-				createPath((DiffContainer)child, f, path.removeFirstSegments(1), diff, reject);

-		} else {

-			// a leaf

-			BufferedResourceNode rn= new BufferedResourceNode(folder.getFile(path));

-			if (reject) {

-				new Rejected(root, path.segment(0), diff);

-			} else {

-				new DiffNode(root, diff.getType(), null, rn, new PatchedResource(rn, diff, path, fPatcher));

-			}					

-		}

-	}

-}

-

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java
deleted file mode 100644
index cd4cb28..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java
+++ /dev/null
@@ -1,17 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import org.eclipse.jface.dialogs.MessageDialog;

-

-import org.eclipse.compare.internal.ListDialog;

-

-public class PatchErrorDialog {

-	

-	private PatchErrorDialog() {

-		// no instance.

-	}

-	

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java
deleted file mode 100644
index 8dce380..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2002.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.util.MissingResourceException;

-import java.util.ResourceBundle;

-

-public class PatchMessages {

-

-	private static final String RESOURCE_BUNDLE= "org.eclipse.compare.internal.patch.PatchMessages";//$NON-NLS-1$

-

-	private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE);

-

-	private PatchMessages() {

-	}

-

-	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/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties
deleted file mode 100644
index 550b9ee..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties
+++ /dev/null
@@ -1,79 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2002.

-# All Rights Reserved.

-# =====================================

-

-#

-# 'Compare with Patch' Action

-#

-PatchAction.ExceptionTitle=Saving Resources

-PatchAction.Exception=Unexpected exception. See log for details

-PatchAction.SavingDirtyEditorsTask=Saving dirty editors

-PatchAction.AlwaysSaveQuestion=&Always save all modified resources automatically prior to patching

-PatchAction.SaveAllQuestion=Save all modified resources

-PatchAction.SaveAllDescription=All modified resources must be saved before this operation.\nPress OK to confirm or Cancel otherwise

-

-#

-# PatchWizard

-#

-PatchWizard.title=Resource Patcher

-PatchWizard.unexpectedException.message= Unexpected exception while applying the patch. See log for a detailed error description.

-

-#

-# InputPatchPage

-#

-InputPatchPage.title= Patch Input Specification

-InputPatchPage.message= Define what resource to patch with which patch

-InputPatchPage.Clipboard=Clipboard

-InputPatchPage.SelectInput=Select a single file or folder to patch:

-InputPatchPage.PatchErrorDialog.title=Patch Error

-InputPatchPage.PatchErrorDialog=Patch Error

-InputPatchPage.SelectPatch.title=Select Patch

-InputPatchPage.FileButton.text=Fil&e

-InputPatchPage.ChooseFileButton.text=&Browse...

-InputPatchPage.UseClipboardButton.text=&Clipboard

-InputPatchPage.NothingSelected.message=Nothing selected to apply patch to

-InputPatchPage.ClipboardIsEmpty.message=Clipboard is empty

-InputPatchPage.NoTextInClipboard.message=Clipboard does not contain text

-InputPatchPage.CouldNotReadClipboard.message=Couldn't retrieve clipboard contents

-InputPatchPage.CannotLocatePatch.message=Can't locate patch file: 

-InputPatchPage.NoFileName.message=No file name

-InputPatchPage.SelectPatchFileDialog.title=Select Patch File

-InputPatchPage.PatchFileNotFound.message=Patch file not found.

-InputPatchPage.ParseError.message=Error while parsing patch

-InputPatchPage.NoDiffsFound_Clipboard.message=Clipboard does not contain valid patch

-InputPatchPage.NoDiffsFound_File.message=File does not contain valid patch

-

-#

-# PreviewPatchPage

-#

-PreviewPatchPage.title= Verify Patch

-PreviewPatchPage.message= The tree shows the contents of the patch.\nA checked item indicates that a patch could be applied succesfully. Uncheck an item if you want to exclude it.

-PreviewPatchPage.Left.title= Original

-PreviewPatchPage.Right.title= Result

-PreviewPatchPage.PatchOptions.title=Patch Options

-PreviewPatchPage.IgnoreSegments.text=&Ignore leading path name segments:

-PreviewPatchPage.ReversePatch.text=&Reverse patch

-PreviewPatchPage.FuzzFactor.text=&Maximum fuzz factor:

-PreviewPatchPage.FuzzFactor.tooltip=Allow context to shift this number of lines from the original place

-PreviewPatchPage.IgnoreWhitespace.text=Ignore &whitespace

-PreviewPatchPage.NoName.text=no name

-PreviewPatchPage.FileExists.error=(file already exists)

-PreviewPatchPage.FileDoesNotExist.error=(file doesn't exist)

-PreviewPatchPage.NoMatch.error=(no match)

-PreviewPatchPage.FileIsReadOnly.error=(file is read only)

-

-#

-# Patcher

-#

-Patcher.ErrorDialog.title=title

-Patcher.DeleteError.message=Error while deleting resource

-Patcher.UpdateError.message=Error while updating resource

-Patcher.RefreshError.message=Error while refreshing from local

-Patcher.Marker.message=Rejected patch

-Patcher.Task.message=Patching

-

-#

-# PatchCompareInput

-#

-PatchCompareInput.RightTitle.format= Patch: {0}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java
deleted file mode 100644
index a0e3d8d..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.lang.reflect.InvocationTargetException;

-import java.util.ArrayList;

-

-import org.eclipse.swt.graphics.Image;

-

-import org.eclipse.jface.dialogs.IDialogSettings;

-import org.eclipse.jface.viewers.*;

-import org.eclipse.jface.wizard.Wizard;

-

-import org.eclipse.core.resources.IResource;

-import org.eclipse.core.runtime.IProgressMonitor;

-import org.eclipse.core.runtime.CoreException;

-

-import org.eclipse.ui.actions.WorkspaceModifyOperation;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.internal.*;

-import org.eclipse.compare.structuremergeviewer.Differencer;

-

-

-/* package */ class PatchWizard extends Wizard {

-	

-	// dialog store id constants

-	private final static String DIALOG_SETTINGS_KEY= "PatchWizard"; //$NON-NLS-1$

-

-	private boolean fHasNewDialogSettings;

-	

-	private InputPatchPage fPatchWizardPage;

-	private PreviewPatchPage fPreviewPatchPage;

-	

-	private Patcher fPatcher;

-	private IResource fTarget;

-

-		

-	/**

-	 * Creates a wizard for applying a patch file to the workspace.

-	 */

-	/* package */ PatchWizard(ISelection selection) {

-		

-		setTargets(getResource(selection));

-

-		fPatcher= new Patcher();

-		

-		setWindowTitle(PatchMessages.getString("PatchWizard.title")); //$NON-NLS-1$

-		

-		IDialogSettings workbenchSettings= CompareUIPlugin.getDefault().getDialogSettings();

-		IDialogSettings section= workbenchSettings.getSection(DIALOG_SETTINGS_KEY); //$NON-NLS-1$

-		if (section == null)

-			fHasNewDialogSettings= true;

-		else {

-			fHasNewDialogSettings= false;

-			setDialogSettings(section);

-		}	

-	}

-	

-	static IResource[] getResource(ISelection selection) {

-		IResource[] rs= Utilities.getResources(selection);

-		ArrayList list= null;

-		for (int i= 0; i < rs.length; i++) {

-			IResource r= rs[i];

-			if (r != null && r.isAccessible()) {

-				if (list == null)

-					list= new ArrayList();

-				list.add(r);

-			}

-		}

-		if (list != null && list.size() > 0)

-			return (IResource[]) list.toArray(new IResource[list.size()]);

-		return null;

-	}

-		

-	Patcher getPatcher() {

-		return fPatcher;

-	}

-	

-	IResource getTarget() {

-		return fTarget;

-	}

-	

-	void setTargets(IResource[] targets) {

-		fTarget= targets[0];	// right now we can only deal with a single selection

-	}

-	

-	/* (non-Javadoc)

-	 * Method declared on IWizard.

-	 */

-	public void addPages() {

-		super.addPages();

-		

-		addPage(fPatchWizardPage= new InputPatchPage(this));

-		addPage(fPreviewPatchPage= new PreviewPatchPage(this));

-	}

-	

-	/* (non-Javadoc)

-	 * Method declared on IWizard.

-	 */

-	public boolean needsProgressMonitor() {

-		return true;

-	}

-

-	/* (non-Javadoc)

-	 * Method declared on IWizard.

-	 */

-	public boolean performFinish() {

-		

-		if (false) {

-			CompareConfiguration cc= new CompareConfiguration() {

-				public Image getImage(int kind) {

-					if (kind == Differencer.ADDITION)

-						kind= Differencer.DELETION;

-					else if (kind == Differencer.DELETION)

-						kind= Differencer.ADDITION;

-					return super.getImage(kind);

-				}

-				public Image getImage(Image base, int kind) {

-					if (kind == Differencer.ADDITION)

-						kind= Differencer.DELETION;

-					else if (kind == Differencer.DELETION)

-						kind= Differencer.ADDITION;

-					return super.getImage(base, kind);

-				}

-			};

-			cc.setProperty(CompareEditor.CONFIRM_SAVE_PROPERTY, new Boolean(false));

-	

-			fPatcher.setName(fPatchWizardPage.getPatchName());

-	

-			CompareUI.openCompareEditor(new PatchCompareInput(cc, fPatcher, new StructuredSelection(fTarget)));

-		} else {

-			fPatcher.setName(fPatchWizardPage.getPatchName());

-

-			try {

-				WorkspaceModifyOperation op= new WorkspaceModifyOperation() {

-					protected void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {

-						try {

-							fPatcher.applyAll(getTarget(), monitor);

-						} catch (CoreException e) {

-							throw new InvocationTargetException(e);

-						}

-					}

-				};

-				getContainer().run(true, false, op);

-

-			} catch (InvocationTargetException e) {

-				ExceptionHandler.handle(e,

-						PatchMessages.getString("PatchWizard.title"),	//$NON-NLS-1$ 

-						PatchMessages.getString("PatchWizard.unexpectedException.message"));	//$NON-NLS-1$

-			} catch (InterruptedException e) {

-				// cannot happen

-			}

-		}

-		

-		// Save the dialog settings

-		if (fHasNewDialogSettings) {

-			IDialogSettings workbenchSettings= CompareUIPlugin.getDefault().getDialogSettings();

-			IDialogSettings section= workbenchSettings.getSection(DIALOG_SETTINGS_KEY);

-			section= workbenchSettings.addNewSection(DIALOG_SETTINGS_KEY);

-			setDialogSettings(section);

-		}

-		

-		fPatchWizardPage.saveWidgetValues();

-		//fPreviewPatchPage.saveWidgetValues();

-		

-		return true;

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchedResource.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchedResource.java
deleted file mode 100644
index b4932a6..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchedResource.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.io.*;

-

-import org.eclipse.swt.graphics.Image;

-

-import org.eclipse.core.resources.ResourcesPlugin;

-import org.eclipse.core.runtime.*;

-

-import org.eclipse.compare.*;

-

-

-/* package */ class PatchedResource implements ITypedElement, IStreamContentAccessor {

-	

-	private Diff fDiff;

-	private IStreamContentAccessor fCurrent;

-	private IPath fPath;

-	private byte[] fContent;

-	private Patcher fPatcher;

-	

-	/* package */ PatchedResource(IStreamContentAccessor current, Diff diff, IPath path, Patcher patcher) {

-		fDiff= diff;

-		fCurrent= current;

-		fPath= path;

-		fPatcher= patcher;

-	}

-	

-	public InputStream getContents() throws CoreException {

-		if (fContent == null) {

-			InputStream is= null;

-			

-			try {

-				is= fCurrent.getContents();

-			} catch (CoreException ex) {

-				is= new ByteArrayInputStream(new byte[0]);

-			}

-			if (is != null) {

-				

-				try {

-					String encoding= ResourcesPlugin.getEncoding();

-					BufferedReader br= new BufferedReader(new InputStreamReader(is, encoding));

-					String s= fPatcher.patch(fDiff,br, null);

-					if (s != null)

-						fContent= s.getBytes(encoding);

-				} catch (UnsupportedEncodingException e) {

-					throw new CoreException(new Status(IStatus.ERROR, CompareUI.PLUGIN_ID, Platform.PLUGIN_ERROR, e.getMessage(), e));

-				}

-					

-				try {

-					is.close();

-				} catch (IOException ex) {

-				}

-			}

-		}

-		return new ByteArrayInputStream(fContent);

-	}

-	

-	public Image getImage() {

-		return CompareUI.getImage(getType());

-	}

-	

-	public String getName() {

-		return fPath.toOSString();

-	}

-	

-	public String getType() {

-		String type= fPath.getFileExtension();

-		if (type != null)

-			return type;

-		return ITypedElement.UNKNOWN_TYPE;

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java
deleted file mode 100644
index 9fe7f37..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java
+++ /dev/null
@@ -1,1006 +0,0 @@
-package org.eclipse.compare.internal.patch;

-

-import java.io.*;

-import java.text.*;

-import java.util.*;

-

-import org.eclipse.jface.util.Assert;

-

-import org.eclipse.core.runtime.*;

-import org.eclipse.core.resources.*;

-

-import org.eclipse.compare.structuremergeviewer.Differencer;

-import org.eclipse.compare.internal.ExceptionHandler;

-

-

-/**

- * A Patcher 

- * - knows how to parse various patch file formats into some in-memory structure,

- * - holds onto the parsed data and the options to use when applying the patches,

- * - knows how to apply the patches to files and folders.

- */

-public class Patcher {

-	

-	private static final boolean DEBUG= false;

-	

-	private static final String DEV_NULL= "/dev/null"; //$NON-NLS-1$

-	

-	private static final String REJECT_FILE_EXTENSION= ".rej"; //$NON-NLS-1$

-	

-	private static final String MARKER_TYPE= "org.eclipse.compare.rejectedPatchMarker";	//$NON-NLS-1$

-

-	// diff formats

-	private static final int CONTEXT= 0;

-	private static final int ED= 1;

-	private static final int NORMAL= 2;

-	private static final int UNIFIED= 3;

-	

-	// we recognize the following date/time formats

-	private static DateFormat[] DATE_FORMATS= new DateFormat[] {

-		new SimpleDateFormat("EEE MMM dd kk:mm:ss yyyy"), //$NON-NLS-1$

-		new SimpleDateFormat("yyyy/MM/dd kk:mm:ss"), //$NON-NLS-1$

-		new SimpleDateFormat("EEE MMM dd kk:mm:ss yyyy", Locale.US) //$NON-NLS-1$

-	};

-		

-	private String fName;

-	private Diff[] fDiffs;

-	// patch options

-	private int fStripPrefixSegments;

-	private int fFuzz;

-	private boolean fIgnoreWhitespace= false;

-	private boolean fIgnoreLineDelimiter= true;

-	private boolean fPreserveLineDelimiters= false;

-	private boolean fReverse= false;

-	

-	

-	Patcher() {

-	}

-	

-	//---- options

-	

-	void setName(String name) {

-		fName= name;

-	}

-	

-	String getName() {

-		return fName;

-	}

-	

-	/**

-	 * Returns an array of Diffs after a sucessfull call to <code>parse</code>.

-	 * If <code>parse</code> hasn't been called returns <code>null</code>.

-	 */

-	Diff[] getDiffs() {

-		return fDiffs;

-	}

-	

-	IPath getPath(Diff diff) {

-		IPath path= diff.getPath();

-		if (fStripPrefixSegments > 0 && fStripPrefixSegments < path.segmentCount())

-			path= path.removeFirstSegments(fStripPrefixSegments);

-		return path;

-	}

-

-	/**

-	 * Returns <code>true</code> if new value differs from old.

-	 */

-	boolean setStripPrefixSegments(int strip) {

-		if (strip != fStripPrefixSegments) {

-			fStripPrefixSegments= strip;

-			return true;

-		}

-		return false;

-	}

-	

-	int getStripPrefixSegments() {

-		return fStripPrefixSegments;

-	}

-	

-	/**

-	 * Returns <code>true</code> if new value differs from old.

-	 */

-	boolean setFuzz(int fuzz) {

-		if (fuzz != fFuzz) {

-			fFuzz= fuzz;

-			return true;

-		}

-		return false;

-	}

-	

-	/**

-	 * Returns <code>true</code> if new value differs from old.

-	 */

-	boolean setReversed(boolean reverse) {

-		if (fReverse != reverse) {

-			fReverse= reverse;

-			

-			for (int i= 0; i < fDiffs.length; i++)

-				fDiffs[i].reverse();

-						

-			return true;

-		}

-		return false;

-	}

-		

-	/**

-	 * Returns <code>true</code> if new value differs from old.

-	 */

-	boolean setIgnoreWhitespace(boolean ignoreWhitespace) {

-		if (ignoreWhitespace != fIgnoreWhitespace) {

-			fIgnoreWhitespace= ignoreWhitespace;

-			return true;

-		}

-		return false;

-	}

-		

-	//---- parsing patch files

-		

-	/* package */ void parse(BufferedReader reader) throws IOException {

-		List diffs= new ArrayList();

-		String line= null;

-		boolean reread= false;

-		String diffArgs= null;

-		String fileName= null;

-		

-		LineReader lr= new LineReader(reader);

-		lr.ignoreSingleCR();

-		

-		// read leading garbage

-		while (true) {

-			if (!reread)

-				line= lr.readLine();

-			reread= false;

-			if (line == null)

-				break;

-			if (line.length() < 4)

-				continue;	// too short

-								

-			// remember some infos

-			if (line.startsWith("Index: ")) { //$NON-NLS-1$

-				fileName= line.substring(7).trim();

-				continue;

-			}

-			if (line.startsWith("diff")) { //$NON-NLS-1$

-				diffArgs= line.substring(4).trim();

-				continue;

-			}

-

-			if (line.startsWith("--- ")) { //$NON-NLS-1$

-				line= readUnifiedDiff(diffs, lr, line, diffArgs, fileName);

-				diffArgs= fileName= null;

-				reread= true;

-			} else if (line.startsWith("*** ")) { //$NON-NLS-1$

-				line= readContextDiff(diffs, lr, line, diffArgs, fileName);

-				diffArgs= fileName= null;

-				reread= true;

-			}

-		}

-		

-		lr.close();

-		

-		fDiffs= (Diff[]) diffs.toArray((Diff[]) new Diff[diffs.size()]);

-	}

-

-	/**

-	 * Returns the next line that does not belong to this diff

-	 */

-	private String readUnifiedDiff(List diffs, LineReader reader, String line, String args, String fileName) throws IOException {

-								

-		String[] oldArgs= split(line.substring(4));

-

-		// read info about new file

-		line= reader.readLine();

-		if (line == null || !line.startsWith("+++ ")) //$NON-NLS-1$

-			return line;

-			

-		String[] newArgs= split(line.substring(4));

-	

-		Diff diff= new Diff(extractPath(oldArgs, 0, fileName), extractDate(oldArgs, 1),

-				   			extractPath(newArgs, 0, fileName), extractDate(newArgs, 1));

-		diffs.add(diff);

-				   

-		int[] oldRange= new int[2];

-		int[] newRange= new int[2];

-		List lines= new ArrayList();

-

-		try {

-			// read lines of hunk

-			while (true) {

-				

-				line= reader.readLine();

-				if (line == null)

-					return null;

-					

-				if (reader.lineContentLength(line) == 0) {

-					//System.out.println("Warning: found empty line in hunk; ignored");

-					//lines.add(' ' + line);

-					continue;

-				}

-				

-				char c= line.charAt(0);

-				switch (c) {

-				case '@':

-					if (line.startsWith("@@ ")) { //$NON-NLS-1$

-						// flush old hunk

-						if (lines.size() > 0) {

-							new Hunk(diff, oldRange, newRange, lines);

-							lines.clear();

-						}

-								

-						// format: @@ -oldStart,oldLength +newStart,newLength @@

-						extractPair(line, '-', oldRange);

-						extractPair(line, '+', newRange);

-						continue;

-					}

-					break;

-				case ' ':

-				case '+':

-				case '-':

-					lines.add(line);

-					continue;

-				case '\\':

-					if (line.startsWith("No newline at end of file", 2)) { //$NON-NLS-1$

-						int lastIndex= lines.size();

-						if (lastIndex > 0) {

-							line= (String) lines.get(lastIndex-1);

-							int end= line.length()-1;

-							char lc= line.charAt(end);

-							if (lc == '\n') {

-								end--;

-								if (end > 0 && line.charAt(end-1) == '\r')

-									end--;

-							} else if (lc == '\r') {

-								end--;

-							}

-							line= line.substring(0, end);

-							lines.set(lastIndex-1, line);

-						}

-						continue;

-					}

-					break;

-				default:

-					if (DEBUG) {

-						int a1= c, a2= 0;

-						if (line.length() > 1)

-							a2= line.charAt(1);

-						System.out.println("char: " + a1 + " " + a2); //$NON-NLS-1$ //$NON-NLS-2$

-					}

-					break;

-				}

-				return line;

-			}

-		} finally {

-			if (lines.size() > 0)

-				new Hunk(diff, oldRange, newRange, lines);

-			diff.finish();

-		}

-	}

-	

-	/**

-	 * Returns the next line that does not belong to this diff

-	 */

-	private String readContextDiff(List diffs, LineReader reader, String line, String args, String fileName) throws IOException {

-		

-		String[] oldArgs= split(line.substring(4));

-		

-		// read info about new file

-		line= reader.readLine();

-		if (line == null || !line.startsWith("--- ")) //$NON-NLS-1$

-			return line;

-		

-		String[] newArgs= split(line.substring(4));

-						

-		Diff diff= new Diff(extractPath(oldArgs, 0, fileName), extractDate(oldArgs, 1),

-				   			extractPath(newArgs, 0, fileName), extractDate(newArgs, 1));

-		diffs.add(diff);

-				   

-		int[] oldRange= new int[2];

-		int[] newRange= new int[2];

-		List oldLines= new ArrayList();

-		List newLines= new ArrayList();

-		List lines= oldLines;

-		

-		try {

-			// read lines of hunk

-			while (true) {

-				

-				line= reader.readLine();

-				if (line == null)

-					return line;

-				

-				int l= line.length();

-				if (l == 0)

-					continue;

-				if (l > 1) {

-					switch (line.charAt(0)) {

-					case '*':	

-						if (line.startsWith("***************")) {	// new hunk //$NON-NLS-1$

-							// flush old hunk

-							if (oldLines.size() > 0 || newLines.size() > 0) {

-								new Hunk(diff, oldRange, newRange, unifyLines(oldLines, newLines));

-								oldLines.clear();

-								newLines.clear();

-							}

-							continue;

-						}

-						if (line.startsWith("*** ")) {	// old range //$NON-NLS-1$

-							// format: *** oldStart,oldEnd ***

-							extractPair(line, ' ', oldRange);

-							oldRange[1]= oldRange[1]-oldRange[0]+1;

-							lines= oldLines;

-							continue;

-						}

-						break;

-					case ' ':	// context line

-					case '+':	// addition

-					case '!':	// change

-						if (line.charAt(1) == ' ') {

-							lines.add(line);

-							continue;

-						}

-						break;

-					case '-':

-						if (line.charAt(1) == ' ') {	// deletion

-							lines.add(line);

-							continue;

-						}

-						if (line.startsWith("--- ")) {	// new range //$NON-NLS-1$

-							// format: *** newStart,newEnd ***

-							extractPair(line, ' ', newRange);

-							newRange[1]= newRange[1]-newRange[0]+1;

-							lines= newLines;

-							continue;

-						}

-						break;

-					default:

-						break;

-					}

-				}

-				return line;

-			}

-		} finally {

-			// flush last hunk

-			if (oldLines.size() > 0 || newLines.size() > 0)

-				new Hunk(diff, oldRange, newRange, unifyLines(oldLines, newLines));

-			diff.finish();

-		}

-	}

-	

-	/**

-	 * Creates a List of lines in the unified format from

-	 * two Lists of lines in the 'classic' format.

-	 */

-	private List unifyLines(List oldLines, List newLines) {

-		List result= new ArrayList();

-

-		String[] ol= (String[]) oldLines.toArray(new String[oldLines.size()]);

-		String[] nl= (String[]) newLines.toArray(new String[newLines.size()]);

-		

-		int oi= 0, ni= 0;

-		

-		while (true) {

-			

-			char oc= 0;

-			String o= null;

-			if (oi < ol.length) {

-				o= ol[oi];

-				oc= o.charAt(0);

-			}

-			

-			char nc= 0;

-			String n= null;

-			if (ni < nl.length) {

-				n= nl[ni];

-				nc= n.charAt(0);

-			}

-			

-			// EOF

-			if (oc == 0 && nc == 0)

-				break;

-				

-			// deletion in old

-			if (oc == '-') {

-				do {

-					result.add('-' + o.substring(2));

-					oi++;

-					if (oi >= ol.length)

-						break;

-					o= ol[oi];

-				} while (o.charAt(0) == '-');

-				continue;

-			}

-			

-			// addition in new

-			if (nc == '+') {

-				do {

-					result.add('+' + n.substring(2));

-					ni++;

-					if (ni >= nl.length)

-						break;

-					n= nl[ni];

-				} while (n.charAt(0) == '+');

-				continue;

-			}

-			

-			// differing lines on both sides

-			if (oc == '!' && nc == '!') {

-				// remove old

-				do {

-					result.add('-' + o.substring(2));

-					oi++;

-					if (oi >= ol.length)

-						break;

-					o= ol[oi];

-				} while (o.charAt(0) == '!');

-				

-				// add new

-				do {

-					result.add('+' + n.substring(2));

-					ni++;

-					if (ni >= nl.length)

-						break;

-					n= nl[ni];

-				} while (n.charAt(0) == '!');

-				

-				continue;

-			}

-			

-			// context lines

-			if (oc == ' ' && nc == ' ') {

-				do {

-					Assert.isTrue(o.equals(n), "non matching context lines"); //$NON-NLS-1$

-					result.add(' ' + o.substring(2));

-					oi++;

-					ni++;

-					if (oi >= ol.length || ni >= nl.length)

-						break;

-					o= ol[oi];

-					n= nl[ni];

-				} while (o.charAt(0) == ' ' && n.charAt(0) == ' ');

-				continue;

-			}

-			

-			if (oc == ' ') {

-				do {

-					result.add(' ' + o.substring(2));

-					oi++;

-					if (oi >= ol.length)

-						break;

-					o= ol[oi];

-				} while (o.charAt(0) == ' ');

-				continue;

-			}

-

-			if (nc == ' ') {

-				do {

-					result.add(' ' + n.substring(2));

-					ni++;

-					if (ni >= nl.length)

-						break;

-					n= nl[ni];

-				} while (n.charAt(0) == ' ');

-				continue;

-			}

-			

-			Assert.isTrue(false, "unexpected char <" + oc + "> <" + nc + ">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

-		}

-		

-		return result;

-	}

-	

-	/**

-	 * Breaks the given string into tab separated substrings.

-	 * Leading and trailing whitespace is removed from each token.

-	 */ 

-	private String[] split(String line) {

-		List l= new ArrayList();

-		StringTokenizer st= new StringTokenizer(line, "\t"); //$NON-NLS-1$

-		while (st.hasMoreElements()) {

-			String token= st.nextToken().trim();

-			if (token.length() > 0)

- 				l.add(token);

-		}

-		return (String[]) l.toArray(new String[l.size()]);

-	}

-	

-	/**

-	 * @return the parsed time/date in milliseconds or -1 on error

-	 */

-	private long extractDate(String[] args, int n) {

-		if (n < args.length) {

-			String line= args[n];

-			for (int i= 0; i < DATE_FORMATS.length; i++) {

-				DATE_FORMATS[i].setLenient(true);

-				try {

-					Date date= DATE_FORMATS[i].parse(line);

-					return date.getTime();		

-				} catch (ParseException ex) {

-				}

-			}

-			// System.err.println("can't parse date: <" + line + ">");

-		}

-		return -1;

-	}

-	

-	/**

-	 * Returns null if file name is "/dev/null".

-	 */

-	private IPath extractPath(String[] args, int n, String path2) {

-		if (n < args.length) {

-			String path= args[n];

-			if (DEV_NULL.equals(path))

-				return null;

-			int pos= path.lastIndexOf(':');

-			if (pos >= 0)

-				path= path.substring(0, pos);

-			if (path2 != null && !path2.equals(path)) {

-				if (DEBUG) System.out.println("path mismatch: " + path2); //$NON-NLS-1$

-				path= path2;

-			}

-			return new Path(path);

-		}

-		return null;

-	}

-	

-	/**

-	 * Tries to extract two integers separated by a comma.

-	 * The parsing of the line starts at the position after

-	 * the first occurrence of the given character start an ends

-	 * at the first blank (or the end of the line).

-	 * If only a single number is found this is assumed to be the length of the range.

-	 * In this case the start of the range is set to 1.

-	 * If an error occurs the range -1,-1 is returned.

-	 */

-	private void extractPair(String line, char start, int[] pair) {

-		pair[0]= pair[1]= -1;

-		int startPos= line.indexOf(start);

-		if (startPos < 0) {

-			if (DEBUG) System.out.println("parsing error in extractPair: couldn't find \'" + start + "\'"); //$NON-NLS-1$ //$NON-NLS-2$

-			return;

-		}

-		line= line.substring(startPos+1);

-		int endPos= line.indexOf(' ');

-		if (endPos < 0) {

-			if (DEBUG) System.out.println("parsing error in extractPair: couldn't find end blank"); //$NON-NLS-1$

-			return;

-		}

-		line= line.substring(0, endPos);

-		int comma= line.indexOf(',');

-		if (comma >= 0) {

-			pair[0]= Integer.parseInt(line.substring(0, comma));

-			pair[1]= Integer.parseInt(line.substring(comma+1));

-		} else {

-			pair[0]= 1;

-			pair[1]= Integer.parseInt(line.substring(comma+1));

-		}

-	}

-	

-	//---- applying a patch file

-	

-	/**

-	 * Tries to patch the given lines with the specified Diff.

-	 * Any hunk that couldn't be applied is returned in the list failedHunks.

-	 */

-	/* package */ void patch(Diff diff, List lines, List failedHunks) {

-		

-		int shift= 0;

-		Iterator iter= diff.fHunks.iterator();

-		while (iter.hasNext()) {

-			Hunk hunk= (Hunk) iter.next();

-			hunk.fMatches= false;

-			shift= patch(hunk, lines, shift, failedHunks);

-		}

-	}

-

-	/**

-	 * Tries to patch the contents of the given reader with the specified Diff.

-	 * Any hunk that couldn't be applied is returned in the list failedHunks.

-	 */

-	/* package */ String patch(Diff diff, BufferedReader reader, List failedHunks) {

-		

-		List lines= new LineReader(reader).readLines();

-		if (lines == null)

-			lines= new ArrayList();

-

-		patch(diff, lines, failedHunks);

-		

-		return createString(lines);

-	}

-

-	/**

-	 * Tries to apply the specified hunk to the given lines.

-	 * If the hunk cannot be applied at the original position

-	 * the methods tries Fuzz lines before and after.

-	 * If this fails the Hunk is added to the given list of failed hunks.

-	 */

-	private int patch(Hunk hunk, List lines, int shift, List failedHunks) {

-		if (tryPatch(hunk, lines, shift)) {

-			shift+= doPatch(hunk, lines, shift);

-		} else {

-			boolean found= false;

-			int oldShift= shift;

-			

-			for (int i= shift-1; i > shift-fFuzz; i--) {

-				if (tryPatch(hunk, lines, i)) {

-					shift= i;

-					found= true;

-					break;

-				}

-			}

-			

-			if (! found) {

-				for (int i= shift+1; i < shift+fFuzz; i++) {

-					if (tryPatch(hunk, lines, i)) {

-						shift= i;

-						found= true;

-						break;

-					}

-				}

-			}

-			

-			if (found) {

-				if (DEBUG) System.out.println("patched hunk at offset: " + (shift-oldShift)); //$NON-NLS-1$

-				shift+= doPatch(hunk, lines, shift);

-			} else {

-				if (failedHunks != null) {

-					if (DEBUG) System.out.println("failed hunk"); //$NON-NLS-1$

-					failedHunks.add(hunk);

-				}

-			}

-			oldShift= oldShift;	// prevent compiler warning about unused local variable

-		}

-		return shift;

-	}

-	

-	/**

-	 * Tries to apply the given hunk on the specified lines.

-	 * The parameter shift is added to the line numbers given

-	 * in the hunk.

-	 */

-	private boolean tryPatch(Hunk hunk, List lines, int shift) {

-		int pos= hunk.fOldStart + shift;

-		int contextMatches= 0;

-		int deleteMatches= 0;

-		for (int i= 0; i < hunk.fLines.length; i++) {

-			String s= hunk.fLines[i];

-			Assert.isTrue(s.length() > 0);

-			String line= s.substring(1);

-			char controlChar= s.charAt(0);

-			if (controlChar == ' ') {	// context lines

-				while (true) {

-					if (pos < 0 || pos >= lines.size())

-						return false;

-					if (linesMatch(line, (String) lines.get(pos))) {

-						contextMatches++;

-						pos++;

-						break;

-					}

-					if (contextMatches <= 0)

-						return false;

-					pos++;

-				}

-			} else if (controlChar == '-') {

-				// deleted lines

-				while (true) {

-					if (pos < 0 || pos >= lines.size())

-						return false;

-					if (linesMatch(line, (String) lines.get(pos))) {

-						deleteMatches++;

-						pos++;

-						break;

-					}

-					if (deleteMatches <= 0)

-						return false;

-					pos++;

-				}

-			} else if (controlChar == '+') {

-				// added lines

-				// we don't have to do anything for a 'try'

-			} else

-				Assert.isTrue(false, "tryPatch: unknown control charcter: " + controlChar); //$NON-NLS-1$

-		}

-		return true;

-	}

-	

-	private int doPatch(Hunk hunk, List lines, int shift) {

-		int pos= hunk.fOldStart + shift;

-		for (int i= 0; i < hunk.fLines.length; i++) {

-			String s= hunk.fLines[i];

-			Assert.isTrue(s.length() > 0);

-			String line= s.substring(1);

-			char controlChar= s.charAt(0);

-			if (controlChar == ' ') {	// context lines

-				while (true) {

-					Assert.isTrue(pos < lines.size(), "doPatch: inconsistency in context"); //$NON-NLS-1$

-					if (linesMatch(line, (String) lines.get(pos))) {

-						pos++;

-						break;

-					}

-					pos++;

-				}

-			} else if (controlChar == '-') {

-				// deleted lines				

-				while (true) {

-					Assert.isTrue(pos < lines.size(), "doPatch: inconsistency in deleted lines"); //$NON-NLS-1$

-					if (linesMatch(line, (String) lines.get(pos))) {

-						break;

-					}

-					pos++;

-				}

-				lines.remove(pos);

-			} else if (controlChar == '+') {

-				// added lines

-				lines.add(pos,  line);

-				pos++;

-			} else

-				Assert.isTrue(false, "doPatch: unknown control character: " + controlChar); //$NON-NLS-1$

-		}

-		hunk.fMatches= true;

-		return hunk.fNewLength - hunk.fOldLength;

-	}

-

-	public void applyAll(IResource target, IProgressMonitor pm) throws CoreException {

-		

-		final int WORK_UNIT= 10;

-				

-		IFile file= null;	// file to be patched

-		IContainer container= null;

-		if (target instanceof IContainer)

-			container= (IContainer) target;

-		else if (target instanceof IFile) {

-			file= (IFile) target;

-			container= file.getParent();

-		} else {

-			Assert.isTrue(false);

-		}

-		

-		if (pm != null) {

-			String message= PatchMessages.getString("Patcher.Task.message");	//$NON-NLS-1$

-			pm.beginTask(message, fDiffs.length*WORK_UNIT);

-		}

-		

-		for (int i= 0; i < fDiffs.length; i++) {

-			

-			int workTicks= WORK_UNIT;

-			

-			Diff diff= fDiffs[i];

-			if (diff.isEnabled()) {

-				

-				IPath path= getPath(diff);

-				if (pm != null)

-					pm.subTask(path.toString());

-			

-				if (container != null)

-					file= createPath(container, path);

-				List failed= new ArrayList();

-				List result= null;

-				

-				int type= diff.getType();

-				switch (type) {

-				case Differencer.ADDITION:

-					// patch it and collect rejected hunks

-					result= apply(diff, file, true, failed);

-					store(createString(result), file, new SubProgressMonitor(pm, workTicks));

-					workTicks-= WORK_UNIT;

-					break;

-				case Differencer.DELETION:

-					file.delete(true, true, new SubProgressMonitor(pm, workTicks));

-					workTicks-= WORK_UNIT;

-					break;

-				case Differencer.CHANGE:

-					// patch it and collect rejected hunks

-					result= apply(diff, file, false, failed);

-					store(createString(result), file, new SubProgressMonitor(pm, workTicks));

-					workTicks-= WORK_UNIT;

-					break;

-				}

-

-				if (failed.size() > 0) {

-					IPath pp= null;

-					if (path.segmentCount() > 1) {

-						pp= path.removeLastSegments(1);

-						pp= pp.append(path.lastSegment() + REJECT_FILE_EXTENSION);

-					} else

-						pp= new Path(path.lastSegment() + REJECT_FILE_EXTENSION);

-					file= createPath(container, pp);

-					if (file != null) {

-						store(getRejected(failed), file, pm);

-						try {

-							IMarker marker= file.createMarker(MARKER_TYPE);

-							marker.setAttribute(marker.MESSAGE, PatchMessages.getString("Patcher.Marker.message"));	//$NON-NLS-1$

-							marker.setAttribute(marker.PRIORITY, IMarker.PRIORITY_HIGH);

-						} catch (CoreException ex) {

-						}

-					}

-				}

-			}

-			

-			if (pm != null) {

-				if (pm.isCanceled())

-					break;

-				if (workTicks > 0)

-					pm.worked(workTicks);

-			}

-		}

-	}

-	

-	/**

-	 * Reads the contents from the given file and returns them as

-	 * a List of lines.

-	 */

-	private List load(IFile file, boolean create) {

-		List lines= null;

-		if (!create && file != null) {

-			// read current contents

-			InputStream is= null;

-			try {

-				is= file.getContents();

-				

-				Reader streamReader= null;

-				try {

-					streamReader= new InputStreamReader(is, ResourcesPlugin.getEncoding());

-				} catch (UnsupportedEncodingException x) {

-					// use default encoding

-					streamReader= new InputStreamReader(is);

-				}

-				

-				BufferedReader reader= new BufferedReader(streamReader);

-				lines= new LineReader(reader).readLines();

-			} catch(CoreException ex) {

-			} finally {

-				if (is != null)

-					try {

-						is.close();

-					} catch(IOException ex) {

-					}

-			}

-		}

-		

-		if (lines == null)

-			lines= new ArrayList();

-		return lines;

-	}

-	

-	List apply(Diff diff, IFile file, boolean create, List failedHunks) {

-		

-		List lines= load(file, create);

-		patch(diff, lines, failedHunks);

-		return lines;

-	}

-	

-	/**

-	 * Converts the string into bytes and stores them in the given file.

-	 */

-	private void store(String contents, IFile file, IProgressMonitor pm) throws CoreException {

-		

-		byte[] bytes;

-		try {

-			bytes= contents.getBytes(ResourcesPlugin.getEncoding());

-		} catch (UnsupportedEncodingException x) {

-			// uses default encoding

-			bytes= contents.getBytes();

-		}

-		

-		InputStream is= new ByteArrayInputStream(bytes);

-		try {

-			if (file.exists()) {

-				file.setContents(is, false, true, pm);

-			} else {

-				file.create(is, false, pm);

-			}

-		} finally {

-			if (is != null)

-				try {

-					is.close();

-				} catch(IOException ex) {

-				}

-		}

-	}

-

-	/**

-	 * Concatenates all strings found in the given List.

-	 */

-	private String createString(List lines) {

-		StringBuffer sb= new StringBuffer();

-		Iterator iter= lines.iterator();

-		if (fPreserveLineDelimiters) {

-			while (iter.hasNext())

-				sb.append((String)iter.next());

-		} else {

-			String lineSeparator= System.getProperty("line.separator"); //$NON-NLS-1$

-			while (iter.hasNext()) {

-				String line= (String)iter.next();

-				int l= length(line);

-				if (l < line.length()) {	// line has delimiter

-					sb.append(line.substring(0, l));

-					sb.append(lineSeparator);

-				} else {

-					sb.append(line);

-				}

-			}

-		}

-		return sb.toString();

-	}

-

-	String getRejected(List failedHunks) {

-		if (failedHunks.size() <= 0)

-			return null;

-		

-		String lineSeparator= System.getProperty("line.separator"); //$NON-NLS-1$

-		StringBuffer sb= new StringBuffer();

-		Iterator iter= failedHunks.iterator();

-		while (iter.hasNext()) {

-			Hunk hunk= (Hunk) iter.next();

-			sb.append(hunk.getRejectedDescription());

-			sb.append(lineSeparator);

-			sb.append(hunk.getContent());

-		}

-		return sb.toString();

-	}

-	

-	/**

-	 * Ensures that a file with the given path exists in

-	 * the given container. Folder are created as necessary.

-	 */

-	private IFile createPath(IContainer container, IPath path) throws CoreException {

-		if (path.segmentCount() > 1) {

-			IFolder f= container.getFolder(path.uptoSegment(1));

-			if (!f.exists())

-				f.create(false, true, null);

-			return createPath(f, path.removeFirstSegments(1));

-		}

-		// a leaf

-		return container.getFile(path);

-	}

-

-	/**

-	 * Returns the given string with all whitespace characters removed.

-	 * Whitespace is defined by <code>Character.isWhitespace(...)</code>.

-	 */

-	private static String stripWhiteSpace(String s) {

-		StringBuffer sb= new StringBuffer();

-		int l= s.length();

-		for (int i= 0; i < l; i++) {

-			char c= s.charAt(i);

-			if (!Character.isWhitespace(c))

-				sb.append(c);

-		}

-		return sb.toString();

-	}

-	

-	/**

-	 * Compares two strings.

-	 * If fIgnoreWhitespace is true whitespace is ignored.

-	 */

-	private boolean linesMatch(String line1, String line2) {

-		if (fIgnoreWhitespace)

-			return stripWhiteSpace(line1).equals(stripWhiteSpace(line2));

-		if (fIgnoreLineDelimiter) {

-			int l1= length(line1);

-			int l2= length(line2);

-			if (l1 != l2)

-				return false;

-			return line1.regionMatches(0, line2, 0, l1);

-		}

-		return line1.equals(line2);

-	}

-	

-	/**

-	 * Returns the length (exluding a line delimiter CR, LF, CR/LF)

-	 * of the given string.

-	 */

-	/* package */ static int length(String s) {

-		int l= s.length();

-		if (l > 0) {

-			char c= s.charAt(l-1);

-			if (c == '\r')

-				return l-1;

-			if (c == '\n') {

-				if (l > 1 && s.charAt(l-2) == '\r')

-					return l-2;

-				return l-1;

-			}

-		}

-		return l;

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java
deleted file mode 100644
index 90c1737..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java
+++ /dev/null
@@ -1,596 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.internal.patch;

-

-import java.io.*;

-import java.util.*;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.events.*;

-import org.eclipse.swt.graphics.Image;

-import org.eclipse.swt.layout.*;

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.jface.viewers.Viewer;

-import org.eclipse.jface.wizard.WizardPage;

-import org.eclipse.jface.resource.ImageDescriptor;

-

-import org.eclipse.core.resources.*;

-import org.eclipse.core.runtime.*;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.internal.*;

-import org.eclipse.compare.structuremergeviewer.*;

-

-

-/**

- * Shows the parsed patch file and any mismatches

- * between files, hunks and the currently selected

- * resources.

- */

-/* package */ class PreviewPatchPage extends WizardPage {

-	

-	/**

-	 * Used with CompareInput

-	 */

-	static class HunkInput implements ITypedElement, IStreamContentAccessor {

-		String fContent;

-		String fType;

-		

-		HunkInput(String type, String s) {

-			fType= type;

-			fContent= s;

-		}

-		public Image getImage() {

-			return null;

-		}

-		public String getName() {

-			return PatchMessages.getString("PreviewPatchPage.NoName.text"); //$NON-NLS-1$

-		}

-		public String getType() {

-			return fType;

-		}

-		public InputStream getContents() {

-			return new ByteArrayInputStream(fContent.getBytes());

-		}

-	};

-		

-	private PatchWizard fPatchWizard;

-	

-	private Tree fTree;

-	private Combo fStripPrefixSegments;

-	private CompareViewerSwitchingPane fHunkViewer;

-	private Button fIgnoreWhitespaceButton;

-	private Button fReversePatchButton;

-	private Text fFuzzField;

-	

-	private Image fNullImage;

-	private Image fAddImage;

-	private Image fDelImage;

-	private Image fErrorImage;

-	private Image fErrorAddImage;

-	private Image fErrorDelImage;

-	

-	private CompareConfiguration fCompareConfiguration;

-	

-	

-	/* package */ PreviewPatchPage(PatchWizard pw) {

-		super("PreviewPatchPage",	//$NON-NLS-1$ 

-			PatchMessages.getString("PreviewPatchPage.title"), null); //$NON-NLS-1$

-		

-		setMessage(PatchMessages.getString("PreviewPatchPage.message"));	//$NON-NLS-1$

-		

-		fPatchWizard= pw;

-		//setPageComplete(false);

-		

-		int w= 16;

-		

-		ImageDescriptor addId= CompareUIPlugin.getImageDescriptor("ovr16/add_ov.gif");	//$NON-NLS-1$

-		ImageDescriptor delId= CompareUIPlugin.getImageDescriptor("ovr16/del_ov.gif");	//$NON-NLS-1$

-

-		ImageDescriptor errId= CompareUIPlugin.getImageDescriptor("ovr16/error_ov.gif");	//$NON-NLS-1$

-		Image errIm= errId.createImage();

-		

-		fNullImage= new DiffImage(null, null, w).createImage();

-		fAddImage= new DiffImage(null, addId, w).createImage();

-		fDelImage= new DiffImage(null, delId, w).createImage();

-

-		fErrorImage= new DiffImage(errIm, null, w).createImage();

-		fErrorAddImage= new DiffImage(errIm, addId, w).createImage();

-		fErrorDelImage= new DiffImage(errIm, delId, w).createImage();

-		

-		fCompareConfiguration= new CompareConfiguration();

-		

-		fCompareConfiguration.setLeftEditable(false);

-		fCompareConfiguration.setLeftLabel(PatchMessages.getString("PreviewPatchPage.Left.title")); //$NON-NLS-1$

-		

-		fCompareConfiguration.setRightEditable(false);

-		fCompareConfiguration.setRightLabel(PatchMessages.getString("PreviewPatchPage.Right.title")); //$NON-NLS-1$

-	}

-	

-	/* (non-Javadoc)

-	 * Method declared in WizardPage

-	 */

-	public void setVisible(boolean visible) {

-		if (visible)

-			buildTree();

-		super.setVisible(visible);

-	}

-

-	Image getImage(Diff diff) {

-		if (diff.fMatches) {

-			switch (diff.getType()) {

-			case Differencer.ADDITION:

-				return fAddImage;

-			case Differencer.DELETION:

-				return fDelImage;

-			}

-			return fNullImage;

-		}

-		switch (diff.getType()) {

-		case Differencer.ADDITION:

-			return fErrorAddImage;

-		case Differencer.DELETION:

-			return fErrorDelImage;

-		}

-		return fErrorImage;

-	}

-	

-	Image getImage(Hunk hunk) {

-		if (hunk.fMatches)

-			return fNullImage;

-		return fErrorImage;

-	}

-	

-	public void createControl(Composite parent) {

-

-		Composite composite= new Composite(parent, SWT.NULL);

-		composite.setLayout(new GridLayout());

-		composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));

-

-		setControl(composite);

-		

-		buildPatchOptionsGroup(composite);

-		

-		Splitter splitter= new Splitter(composite, SWT.VERTICAL);

-		splitter.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL

-					| GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL));

-

-		

-		// top pane showing diffs and hunks in a check box tree 

-		fTree= new Tree(splitter, SWT.CHECK | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);

-		GridData gd= new GridData();

-		gd.verticalAlignment= GridData.FILL;

-		gd.horizontalAlignment= GridData.FILL;

-		gd.grabExcessHorizontalSpace= true;

-		gd.grabExcessVerticalSpace= true;

-		fTree.setLayoutData(gd);

-				

-		// bottom pane showing hunks in compare viewer 

-		fHunkViewer= new CompareViewerSwitchingPane(splitter, SWT.BORDER | SWT.FLAT) {

-			protected Viewer getViewer(Viewer oldViewer, Object input) {

-				return CompareUI.findContentViewer(oldViewer, (ICompareInput)input, this, fCompareConfiguration);

-			}

-		};

-		gd= new GridData();

-		gd.verticalAlignment= GridData.FILL;

-		gd.horizontalAlignment= GridData.FILL;

-		gd.grabExcessHorizontalSpace= true;

-		gd.grabExcessVerticalSpace= true;

-		fHunkViewer.setLayoutData(gd);

-		

-		// register listeners

-		

-		fTree.addSelectionListener(

-			new SelectionAdapter() {

-				public void widgetSelected(SelectionEvent e) {

-					TreeItem ti= (TreeItem) e.item;

-					Object data= e.item.getData();

-					if (e.detail == SWT.CHECK) {

-						boolean checked= ti.getChecked();

-						if (data instanceof Hunk) {

-							Hunk hunk= (Hunk) data;

-							checked= checked && hunk.fMatches;

-							//hunk.setEnabled(checked);

-							ti.setChecked(checked);

-							updateGrayedState(ti);

-						} else if (data instanceof Diff) {

-							updateCheckedState(ti);

-						}

-					} else {

-						if (data instanceof Hunk)

-							PreviewPatchPage.this.fHunkViewer.setInput(createInput((Hunk)data));

-						else

-							PreviewPatchPage.this.fHunkViewer.setInput(null);

-					}

-				}

-			}

-		);

-		

-		// creating tree's content

-		buildTree();

-

-		// WorkbenchHelp.setHelp(composite, new DialogPageContextComputer(this, PATCH_HELP_CONTEXT_ID));								

-	}

-	

-	/**

-	 *	Create the group for setting various patch options

-	 */

-	private void buildPatchOptionsGroup(Composite parent) {

-				

-		final Patcher patcher= fPatchWizard.getPatcher();

-		

-		Group group= new Group(parent, SWT.NONE);

-		group.setText(PatchMessages.getString("PreviewPatchPage.PatchOptions.title")); //$NON-NLS-1$

-		GridLayout layout= new GridLayout();

-		layout.numColumns= 5;

-		group.setLayout(layout);

-		group.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));

-		//fPatchFileGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

-	

-		// 1st row

-		new Label(group, SWT.NONE).setText(PatchMessages.getString("PreviewPatchPage.IgnoreSegments.text")); //$NON-NLS-1$

-

-		fStripPrefixSegments= new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.SIMPLE);

-		int prefixCnt= patcher.getStripPrefixSegments();

-		String prefix= Integer.toString(prefixCnt);

-		fStripPrefixSegments.add(prefix);

-		fStripPrefixSegments.setText(prefix);

-		

-		addSpacer(group);

-		

-		fReversePatchButton= new Button(group, SWT.CHECK);

-		fReversePatchButton.setText(PatchMessages.getString("PreviewPatchPage.ReversePatch.text")); //$NON-NLS-1$

-		

-		addSpacer(group);

-		

-		// 2nd row

-		Label l= new Label(group, SWT.NONE);

-		l.setText(PatchMessages.getString("PreviewPatchPage.FuzzFactor.text")); //$NON-NLS-1$

-		l.setToolTipText(PatchMessages.getString("PreviewPatchPage.FuzzFactor.tooltip")); //$NON-NLS-1$

-		fFuzzField= new Text(group, SWT.BORDER);

-		fFuzzField.setText("2"); //$NON-NLS-1$

-		GridData gd2= new GridData(GridData.HORIZONTAL_ALIGN_CENTER);

-		gd2.widthHint= 30;

-		fFuzzField.setLayoutData(gd2);

-

-		addSpacer(group);

-		

-		fIgnoreWhitespaceButton= new Button(group, SWT.CHECK);

-		fIgnoreWhitespaceButton.setText(PatchMessages.getString("PreviewPatchPage.IgnoreWhitespace.text")); //$NON-NLS-1$

-		

-		addSpacer(group);

-				

-		// register listeners

-			

-		if (fStripPrefixSegments != null) 

-			fStripPrefixSegments.addSelectionListener(

-				new SelectionAdapter() {

-					public void widgetSelected(SelectionEvent e) {

-						if (patcher.setStripPrefixSegments(getStripPrefixSegments()))

-							updateTree();

-					}

-				}

-			);

-		fReversePatchButton.addSelectionListener(

-			new SelectionAdapter() {

-				public void widgetSelected(SelectionEvent e) {

-					if (patcher.setReversed(fReversePatchButton.getSelection()))

-						updateTree();

-				}

-			}

-		);

-		fIgnoreWhitespaceButton.addSelectionListener(

-			new SelectionAdapter() {

-				public void widgetSelected(SelectionEvent e) {

-					if (patcher.setIgnoreWhitespace(fIgnoreWhitespaceButton.getSelection()))

-						updateTree();

-				}

-			}

-		);

-		

-		fFuzzField.addModifyListener(

-			new ModifyListener() {

-				public void modifyText(ModifyEvent e) {

-					if (patcher.setFuzz(getFuzzFactor()))

-						updateTree();

-				}

-			}

-		);

-	}

-		

-	ICompareInput createInput(Hunk hunk) {

-		

-		String[] lines= hunk.fLines;

-		StringBuffer left= new StringBuffer();

-		StringBuffer right= new StringBuffer();

-		

-		for (int i= 0; i < lines.length; i++) {

-			String line= lines[i];

-			String rest= line.substring(1);

-			switch (line.charAt(0)) {

-			case ' ':

-				left.append(rest);

-				right.append(rest);

-				break;

-			case '-':

-				left.append(rest);

-				break;

-			case '+':

-				right.append(rest);

-				break;

-			}

-		}

-		

-		Diff diff= hunk.fParent;

-		IPath path= diff.getPath();

-		String type= path.getFileExtension();

-		

-		return new DiffNode(new HunkInput(type, left.toString()), new HunkInput(type, right.toString()));

-	}		

-	

-	/**

-	 * Builds a tree from list of Diffs.

-	 * As a side effect it calculates the maximum number of segments

-	 * in all paths.

-	 */

-	private void buildTree() {

-		setPageComplete(true);

-		if (fTree != null && !fTree.isDisposed()) {

-			fTree.removeAll();

-			fHunkViewer.setInput(null);

-			

-			int length= 99;

-			

-			Diff[] diffs= fPatchWizard.getPatcher().getDiffs();			

-			if (diffs != null) {

-				for (int i= 0; i < diffs.length; i++) {

-					Diff diff= diffs[i];

-					TreeItem d= new TreeItem(fTree, SWT.NULL);

-					d.setData(diff);

-					d.setImage(getImage(diff));

-					

-					if (diff.fOldPath != null)

-						length= Math.min(length, diff.fOldPath.segmentCount());

-					if (diff.fNewPath != null)

-						length= Math.min(length, diff.fNewPath.segmentCount());

-					

-					java.util.List hunks= diff.fHunks;

-					java.util.Iterator iter= hunks.iterator();

-					while (iter.hasNext()) {

-						Hunk hunk= (Hunk) iter.next();

-						TreeItem h= new TreeItem(d, SWT.NULL);

-						h.setData(hunk);

-						h.setText(hunk.getDescription());

-					}

-				}

-			}

-			if (fStripPrefixSegments != null && length != 99)

-				for (int i= 1; i < length; i++)

-					fStripPrefixSegments.add(Integer.toString(i));

-		}

-		

-		updateTree();

-	}

-	

-	private IFile existsInSelection(IPath path) {

-		IResource target= fPatchWizard.getTarget();

-		if (target instanceof IFile) {

-			IFile file= (IFile) target;

-			if (matches(file.getFullPath(), path))

-				return file;

-		} else if (target instanceof IContainer) {

-			IContainer c= (IContainer) target;

-			if (c.exists(path))

-				return c.getFile(path);

-		}

-		return null;

-	}

-	

-	/**

-	 * Returns true if path completely matches the end of fullpath

-	 */

-	private boolean matches(IPath fullpath, IPath path) {

-		

-		for (IPath p= fullpath; path.segmentCount() <= p.segmentCount();

-												p= p.removeFirstSegments(1)) {

-			if (p.equals(path))

-				return true;

-		}

-		return false;

-	}

-	

-	/**

-	 * Updates label and checked state of tree items.

-	 */

-	private void updateTree() {

-		if (fTree == null || fTree.isDisposed())

-			return;

-		int strip= getStripPrefixSegments();

-		TreeItem[] children= fTree.getItems();

-		for (int i= 0; i < children.length; i++) {

-			TreeItem item= children[i];

-			Diff diff= (Diff) item.getData();

-			diff.fMatches= false;

-			String error= null;

-			

-			boolean create= false;	

-			IFile file= null;

-			if (diff.getType() == Differencer.ADDITION) {

-				IPath p= diff.fNewPath;

-				if (strip > 0 && strip < p.segmentCount())

-					p= p.removeFirstSegments(strip);

-				file= existsInSelection(p);

-				if (file == null) {

-					diff.fMatches= true;

-				} else {

-					// file already exists

-					error= PatchMessages.getString("PreviewPatchPage.FileExists.error"); //$NON-NLS-1$

-				}

-				create= true;

-			} else {

-				IPath p= diff.fOldPath;

-				if (strip > 0 && strip < p.segmentCount())

-					p= p.removeFirstSegments(strip);

-				file= existsInSelection(p);

-				diff.fMatches= false;

-				if (file != null) {

-					if (file.isReadOnly()) {

-						// file is readonly

-						error= PatchMessages.getString("PreviewPatchPage.FileIsReadOnly.error"); //$NON-NLS-1$

-						file= null;

-					} else {

-						diff.fMatches= true;

-					}

-				} else {

-					// file doesn't exist

-					error= PatchMessages.getString("PreviewPatchPage.FileDoesNotExist.error"); //$NON-NLS-1$

-				}

-			}

-			

-			ArrayList failedHunks= new ArrayList();

-			fPatchWizard.getPatcher().apply(diff, file, create, failedHunks);

-

-			if (failedHunks.size() > 0)

-				diff.fRejected= fPatchWizard.getPatcher().getRejected(failedHunks);

-			

-			int checkedSubs= 0;	// counts checked hunk items

-			TreeItem[] hunkItems= item.getItems();

-			for (int h= 0; h < hunkItems.length; h++) {

-				Hunk hunk= (Hunk) hunkItems[h].getData();

-				boolean failed= failedHunks.contains(hunk);

-				String hunkError= null;

-				if (failed)

-					hunkError= PatchMessages.getString("PreviewPatchPage.NoMatch.error"); //$NON-NLS-1$

-

-				boolean check= !failed;

-				hunkItems[h].setChecked(check);

-				if (check)

-					checkedSubs++;

-

-				String hunkLabel= hunk.getDescription();

-				if (hunkError != null)

-					hunkLabel+= "   " + hunkError; //$NON-NLS-1$

-				hunkItems[h].setText(hunkLabel);

-				hunkItems[h].setImage(getImage(hunk));

-			}

-			

-			String label= diff.getDescription(strip);

-			if (error != null)

-				label+= "    " + error; //$NON-NLS-1$

-			item.setText(label);

-			item.setImage(getImage(diff));

-			item.setChecked(checkedSubs > 0);

-			boolean gray= (checkedSubs > 0 &&  checkedSubs < hunkItems.length);

-			item.setGrayed(gray);

-			item.setExpanded(gray);

-		}

-		setPageComplete(updateModel());

-	}

-	

-	/**

-	 * Updates the gray state of the given diff and the checked state of its children.

-	 */

-	private void updateCheckedState(TreeItem diffItem) {

-		boolean checked= diffItem.getChecked();

-		// check whether we can enable all hunks

-		TreeItem[] hunks= diffItem.getItems();

-		int checkedCount= 0;

-		for (int i= 0; i < hunks.length; i++) {

-			Hunk hunk= (Hunk) hunks[i].getData();

-			if (checked) {

-				if (hunk.fMatches) {

-					hunks[i].setChecked(true);

-					checkedCount++;

-				}

-			} else {

-				hunks[i].setChecked(false);

-			}

-		}

-		diffItem.setGrayed(checkedCount > 0 && checkedCount < hunks.length);

-		diffItem.setChecked(checkedCount > 0);

-		

-		setPageComplete(updateModel());

-	}

-	

-	/**

-	 * Updates the gray state of the given items parent.

-	 */

-	private void updateGrayedState(TreeItem hunk) {

-		TreeItem diff= hunk.getParentItem();

-		TreeItem[] hunks= diff.getItems();

-		int checked= 0;

-		for (int i= 0; i < hunks.length; i++)

-			if (hunks[i].getChecked())

-				checked++;

-		diff.setChecked(checked > 0);

-		diff.setGrayed(checked > 0 && checked < hunks.length);

-		

-		setPageComplete(updateModel());

-	}

-	

-	private void addSpacer(Composite parent) {

-		Label label= new Label(parent, SWT.NONE);

-		GridData gd= new GridData(GridData.FILL_HORIZONTAL);

-		gd.widthHint= 20;

-		label.setLayoutData(gd);

-	}

-	

-	private int getStripPrefixSegments() {

-		int stripPrefixSegments= 0;

-		if (fStripPrefixSegments != null) {

-			String s= fStripPrefixSegments.getText();

-			try {

-				stripPrefixSegments= Integer.parseInt(s);

-			} catch(NumberFormatException ex) {

-			}

-		}

-		return stripPrefixSegments;

-	}

-	

-	private int getFuzzFactor() {

-		int fuzzFactor= 0;

-		if (fFuzzField != null) {

-			String s= fFuzzField.getText();

-			try {

-				fuzzFactor= Integer.parseInt(s);

-			} catch(NumberFormatException ex) {

-			}

-		}

-		return fuzzFactor;

-	}

-	

-	public boolean updateModel() {

-		boolean atLeastOneIsEnabled= false;

-		if (fTree != null && !fTree.isDisposed()) {

-			TreeItem [] diffItems= fTree.getItems();

-			for (int i= 0; i < diffItems.length; i++) {

-				TreeItem diffItem= diffItems[i];

-				Object data= diffItem.getData();

-				if (data instanceof Diff) {

-					Diff diff= (Diff) data;

-					boolean b= diffItem.getChecked();

-					diff.setEnabled(b);

-					if (b) {

-						TreeItem [] hunkItems= diffItem.getItems();

-						for (int j= 0; j < hunkItems.length; j++) {

-							TreeItem hunkItem= hunkItems[j];

-							data= hunkItem.getData();

-							if (data instanceof Hunk) {

-								Hunk hunk= (Hunk) data;

-								b= hunkItem.getChecked();

-								hunk.setEnabled(b);

-								if (b) {

-									atLeastOneIsEnabled= true;

-								}

-							}

-						}

-					}

-				}

-			}

-		}

-		return atLeastOneIsEnabled;

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewAncestor.txt b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewAncestor.txt
deleted file mode 100644
index 8f84839..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewAncestor.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-a

-b

-c

-d

-e

-f

-g

-h

-i

-j
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewLeft.txt b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewLeft.txt
deleted file mode 100644
index e24e0aa..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewLeft.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-a

-x

-c

-z

-e

-f

-g

-h

-i

-j
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewRight.txt b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewRight.txt
deleted file mode 100644
index b45f220..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/previewRight.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-a

-y

-c

-z

-e

-f

-g

-h

-i

-j
\ No newline at end of file
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/package.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/package.html
deleted file mode 100644
index fb0ad62..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/package.html
+++ /dev/null
@@ -1,50 +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>

-Provides support for performing structural and textual

-compare operations on arbitrary data and displaying the results.

-<h2>

-Package Specification</h2>

-The class <tt>CompareUI</tt> 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>A compare operation must be implemented as a subclass of <tt>CompareEditorInput</tt>.

-A <tt>CompareEditorInput</tt> runs a (potentially lengthy) compare operation

-under progress monitor control, creates a UI for drilling-down into the

-compare results, tracks the dirty state of the result in case of merge,

-and saves any changes that occured during a merge.

-<p>An instance of <tt>CompareConfiguration</tt> configures various UI aspects

-of compare/merge viewers like title labels and images, or whether a side

-of a merge viewer is editable. It is passed to the <tt>CompareEditorInput</tt>

-on creation.

-<p>When implementing a compare operation clients have to provide a tree

-of <tt>IStructureComparator</tt> (see package org.eclipse.compare.structuremergeviewer)

-and <tt>IStreamContentAccessor</tt> that can be passed as the input to

-the differencing engine (org.eclipse.compare.structuremergeviewer.Differencer).

-A <tt>ResourceNode</tt> is a convenience class that implements both interfaces

-for Eclipse workbench resources (org.eclipse.core.resources.IResource).

-It can be used without modification as the input to the differencing engine.

-<p>The <tt>EditionSelectionDialog</tt> is a simple selection dialog where

-one input element can be compared against a list of historic variants (<i>editions</i>)

-of the same input element. The dialog can be used to implement functions

-like <i>"Replace with Version"</i> or

-<br><i>"Replace with Edition"</i> on workbench 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 <i>path</i>. In this

-case the dialog compares only the subsection (as specified by the path)

-with the corresponding subsection in the list of editions. This functionality

-can be used to implement <i>"Replace with Method Edition"</i> for the Java

-language.

-<p>The <tt>EditionSelectionDialog</tt> requires that the editions implement

-the <tt>IStreamContentAccessor</tt> and <tt>IModificationDate</tt> interfaces.

-The <tt>HistoryItem</tt> is a convenience class that implements these interfaces

-for <tt>IFileState</tt> objects.

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/DifferencesIterator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/DifferencesIterator.java
deleted file mode 100644
index 4fa96b7..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/DifferencesIterator.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.rangedifferencer;

-

-import java.util.ArrayList;

-import java.util.Iterator;

-import java.util.List;

-

-/**

- * A custom iterator to iterate over a List of <code>RangeDifferences</code>.

- * It is used internally by the <code>RangeDifferencer</code>.

- */

-/* package */ class DifferencesIterator {

-

-	List fRange;

-	int fIndex;

-	RangeDifference[] fArray;	

-	RangeDifference fDifference;

-	

-	/**

-	 * Creates a differences iterator on an array of <code>RangeDifference</code>s.

-	 */

-	DifferencesIterator(RangeDifference[] differenceRanges) {

-		

-		fArray= differenceRanges;

-		fIndex= 0;

-		fRange= new ArrayList();

-		if (fIndex < fArray.length)

-			fDifference= fArray[fIndex++];

-		else

-			fDifference= null;

-	}

-

-	/**

-	  * Returns the number of RangeDifferences

-	  */

-	int getCount() {

-		return fRange.size();

-	}

-

-	/**

-	 * Appends the edit to its list and moves to the next <code>RangeDifference</code>.

-	 */

-	void next() {

-		fRange.add(fDifference);

-		if (fDifference != null) {

-			if (fIndex < fArray.length)

-				fDifference= fArray[fIndex++];

-			else

-				fDifference= null;

-		}

-	}

-

-	/**

-	 * Difference iterators are used in pairs.

-	 * This method returns the other iterator.

-	 */

-	DifferencesIterator other(DifferencesIterator right, DifferencesIterator left) {

-		if (this == right)

-			return left;

-		return right;

-	}

-

-	/**

-	  * Removes all <code>RangeDifference</code>s

-	  */

-	void removeAll() {

-		fRange.clear();

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/IRangeComparator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/IRangeComparator.java
deleted file mode 100644
index ce01dc1..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/IRangeComparator.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.rangedifferencer;

-

-/**

- * For breaking an object to compare into a sequence of comparable entities.

- * <p>

- * It is used by <code>RangeDifferencer</code> to find longest sequences of

- * matching and non-matching ranges.

- * <p>

- * For example, to compare two text documents and find longest common sequences

- * of matching and non-matching lines, the implementation must break the document

- * into lines. <code>getRangeCount</code> would return the number of lines in the 

- * document, and <code>rangesEqual</code> would compare a specified line given 

- * with one in another <code>IRangeComparator</code>.

- * </p>

- * <p>

- * Clients should implement this interface; there is no standard implementation.

- * </p>

- */

-public interface IRangeComparator {

-

-	/**

-	 * Returns the number of comparable entities.

-	 *

-	 * @return the number of comparable entities 

-	 */

-	int getRangeCount();

-

-	/**

-	 * Returns whether the comparable entity given by the first index

-	 * matches an entity specified by the other <code>IRangeComparator</code> and index.

-	 *

-	 * @param thisIndex the index of the comparable entity within this <code>IRangeComparator</code>

-	 * @param other the IRangeComparator to compare this with

-	 * @param otherIndex the index of the comparable entity within the other <code>IRangeComparator</code>

-	 * @return <code>true</code> if the comparable entities are equal

-	 */

-	boolean rangesEqual(int thisIndex, IRangeComparator other, int otherIndex);

-

-	/**

-	 * Returns whether a comparison should be skipped because it would be too costly (or lengthy).

-	 * 

-	 * @param length a number on which to base the decision whether to return

-	 * 	<code>true</code> or <code>false</code>

-	 * @param maxLength another number on which to base the decision whether to return

-	 *	<code>true</code> or <code>false</code>

-	 * @param other the other <code>IRangeComparator</code> to compare with

-	 * @return <code>true</code> to avoid a too lengthy range comparison

-	 */

-	boolean skipRangeComparison(int length, int maxLength, IRangeComparator other);

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/LinkedRangeDifference.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/LinkedRangeDifference.java
deleted file mode 100644
index 9374957..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/LinkedRangeDifference.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.rangedifferencer;

-

-/* package */ class LinkedRangeDifference extends RangeDifference {

-

-	static final int INSERT= 0;

-	static final int DELETE= 1;

-	static final int CHANGE= 2;

-	static final int ERROR= 3;

-

-	LinkedRangeDifference fNext;

-

-	/**

-	 * Creates a LinkedRangeDifference an initializes it to the error state

-	 */

-	LinkedRangeDifference() {

-		super(ERROR);

-		fNext= null;

-	}

-

-	/**

-	 * Constructs and links a LinkeRangeDifference to another LinkedRangeDifference

-	 */

-	LinkedRangeDifference(LinkedRangeDifference next, int operation) {

-		super(operation);

-		fNext= next;

-	}

-

-	/**

-	 * Follows the next link

-	 */

-	LinkedRangeDifference getNext() {

-		return fNext;

-	}

-

-	boolean isDelete() {

-		return kind() == DELETE;

-	}

-

-	boolean isInsert() {

-		return kind() == INSERT;

-	}

-

-	/**

-	 * Sets the next link of this LinkedRangeDifference

-	 */

-	void setNext(LinkedRangeDifference next) {

-		fNext= next;

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifference.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifference.java
deleted file mode 100644
index 2c4d62b..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifference.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.rangedifferencer;

-

-import org.eclipse.jface.*;

-import org.eclipse.jface.util.Assert;

-

-/**

- * Description of a change between two or three ranges of comparable entities.

- * <p>

- * <code>RangeDifference</code> objects are the elements of a compare result returned from

- * the <code>RangeDifferencer</code> <code>find* </code> methods.

- * Clients use these objects as they are returned from the differencer.

- * This class is not intended to be instantiated or subclassed.

- * <p>

- * Note: A range in the <code>RangeDifference</code> object is given as a start index

- * and length in terms of comparable entities. However, these entity indices and counts

- * are not necessarily character positions. For example, if an entity represents a line

- * in a document, the start index would be a line number and the count would be in lines.

- * </p>

- *

- * @see RangeDifferencer

- */

-public class RangeDifference {

-

-	/** Two-way change constant indicating no change. */

-	public final static int NOCHANGE= 0;

-	/** Two-way change constant indicating two-way change (same as <code>RIGHT</code>) */

-	public final static int CHANGE= 2;

-

-	/** Three-way change constant indicating a change in both right and left. */

-	public final static int CONFLICT= 1;

-	/** Three-way change constant indicating a change in right. */

-	public final static int RIGHT= 2;

-	/** Three-way change constant indicating a change in left. */

-	public final static int LEFT= 3;

-	/**

-	 * Three-way change constant indicating the same change in both right and left,

-	 * that is only the ancestor is different.

-	 */

-	public final static int ANCESTOR= 4;

-	

-	/** Constant indicating an unknown change kind. */

-	public final static int ERROR= 5;

-

-	/** the kind of change: NOCHANGE, CHANGE, LEFT, RIGHT, ANCESTOR, CONFLICT, ERROR */

-	int fKind;

-

-	int fLeftStart;

-	int fLeftLength;

-	int fRightStart;

-	int fRightLength;

-	int lAncestorStart;

-	int lAncestorLength;

-	

-	/**

-	 * Creates a new range difference with the given change kind.

-	 *

-	 * @param changeKind the kind of change

-	 */

-	/* package */ RangeDifference(int changeKind) {

-		fKind= changeKind;

-	}

-

-	/**

-	 * Creates a new <code>RangeDifference</code> with the given change kind

-	 * and left and right ranges.

-	 *

-	 * @param changeKind the kind of change

-	 * @param rightStart start index of entity on right side

-	 * @param rightLength number of entities on right side

-	 * @param leftStart start index of entity on left side

-	 * @param leftLength number of entities on left side

-	 */

-	/* package */ RangeDifference(int kind, int rightStart, int rightLength, int leftStart, int leftLength) {

-		fKind= kind;

-		fRightStart= rightStart;

-		fRightLength= rightLength;

-		fLeftStart= leftStart;

-		fLeftLength= leftLength;

-	}

-

-	/**

-	 * Creates a new <code>RangeDifference</code> with the given change kind

-	 * and left, right, and ancestor ranges.

-	 *

-	 * @param changeKind the kind of change

-	 * @param rightStart start index of entity on right side

-	 * @param rightLength number of entities on right side

-	 * @param leftStart start index of entity on left side

-	 * @param leftLength number of entities on left side

-	 * @param ancestorStart start index of entity on ancestor side

-	 * @param ancestorLength number of entities on ancestor side

-	 */

-	/* package */ RangeDifference(int kind, int rightStart, int rightLength, int leftStart, int leftLength,

-									int ancestorStart, int ancestorLength) {

-		this(kind, rightStart, rightLength, leftStart, leftLength);

-		lAncestorStart= ancestorStart;

-		lAncestorLength= ancestorLength;

-	}

-

-	/**

-	 * Returns the kind of difference.

-	 *

-	 * @return the kind of difference, one of

-	 * <code>NOCHANGE</code>, <code>CHANGE</code>, <code>LEFT</code>, <code>RIGHT</code>,

-	 * <code>ANCESTOR</code>, <code>CONFLICT</code>, <code>ERROR</code>

-	 */

-	public int kind() {

-		return fKind;

-	}

-

-	/**

-	 * Returns the start index of the entity range on the ancestor side.

-	 *

-	 * @return the start index of the entity range on the ancestor side

-	 */

-	public int ancestorStart() {

-		return lAncestorStart;

-	}

-

-	/**

-	 * Returns the number of entities on the ancestor side.

-	 *

-	 * @return the number of entities on the ancestor side

-	 */

-	public int ancestorLength() {

-		return lAncestorLength;

-	}

-

-	/**

-	 * Returns the end index of the entity range on the ancestor side.

-	 *

-	 * @return the end index of the entity range on the ancestor side

-	 */

-	public int ancestorEnd() {

-		return lAncestorStart + lAncestorLength;

-	}

-

-	/**

-	 * Returns the start index of the entity range on the right side.

-	 *

-	 * @return the start index of the entity range on the right side

-	 */

-	public int rightStart() {

-		return fRightStart;

-	}

-

-	/**

-	 * Returns the number of entities on the right side.

-	 *

-	 * @return the number of entities on the right side

-	 */

-	public int rightLength() {

-		return fRightLength;

-	}

-

-	/**

-	 * Returns the end index of the entity range on the right side.

-	 *

-	 * @return the end index of the entity range on the right side

-	 */

-	public int rightEnd() {

-		return fRightStart + fRightLength;

-	}

-

-	/**

-	 * Returns the start index of the entity range on the left side.

-	 *

-	 * @return the start index of the entity range on the left side

-	 */

-	public int leftStart() {

-		return fLeftStart;

-	}

-

-	/**

-	 * Returns the number of entities on the left side.

-	 *

-	 * @return the number of entities on the left side

-	 */

-	public int leftLength() {

-		return fLeftLength;

-	}

-

-	/**

-	 * Returns the end index of the entity range on the left side.

-	 *

-	 * @return the end index of the entity range on the left side

-	 */

-	public int leftEnd() {

-		return fLeftStart + fLeftLength;

-	}

-

-	/**

-	 * Returns the maximum number of entities in the left, right, and ancestor sides of this range.

-	 *

-	 * @return the maximum number of entities in the left, right, and ancestor sides of this range

-	 */

-	public int maxLength() {

-		return Math.max(fRightLength, Math.max(fLeftLength, lAncestorLength));

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifferencer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifferencer.java
deleted file mode 100644
index 43b8808..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/RangeDifferencer.java
+++ /dev/null
@@ -1,532 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.rangedifferencer;

-

-import java.util.*;

-

-import org.eclipse.jface.util.Assert;

-

-import org.eclipse.core.runtime.IProgressMonitor;

-

-/**

- * A <code>RangeDifferencer</code> finds the differences between two or three <code>IRangeComparator</code>s.

- * <p>

- * To use the differencer, clients provide an <code>IRangeComparator</code>

- * that breaks their input data into a sequence of comparable entities. The differencer

- * returns the differences among these sequences as an array of <code>RangeDifference</code> objects

- * (<code>findDifferences</code> methods).

- * Every <code>RangeDifference</code> represents a single kind of difference

- * and the corresponding ranges of the underlying comparable entities in the

- * left, right, and optionally ancestor sides.

- * <p>

- * Alternatively, the <code>findRanges</code> methods not only return objects for

- * the differing ranges but for non-differing ranges too.

- * <p>

- * The algorithm used is an objectified version of one described in:

- * <it>A File Comparison Program,</it> by Webb Miller and Eugene W. Myers, 

- * Software Practice and Experience, Vol. 15, Nov. 1985.

- *

- * @see IRangeComparator

- * @see RangeDifference

- */

-public final class RangeDifferencer {

-	

-	private static final RangeDifference[] EMPTY_RESULT= new RangeDifference[0];

-	

-	/* (non Javadoc)

-	 * Non instantiatiable!

-	 */

-	private RangeDifferencer() { 

-	}

-	

-	/**

-	 * Finds the differences between two <code>IRangeComparator</code>s.

-	 * The differences are returned as an array of <code>RangeDifference</code>s.

-	 * If no differences are detected an empty array is returned.

-	 * 

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences, or an empty array if no differences were found

-	 */

-	public static RangeDifference[] findDifferences(IRangeComparator left, IRangeComparator right) {

-		return findDifferences((IProgressMonitor)null, left, right);

-	}

-	

-	/**

-	 * Finds the differences between two <code>IRangeComparator</code>s.

-	 * The differences are returned as an array of <code>RangeDifference</code>s.

-	 * If no differences are detected an empty array is returned.

-	 * 

-	 * @param pm if not <code>null</code> used to report progress

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences, or an empty array if no differences were found

-	 */

-	public static RangeDifference[] findDifferences(IProgressMonitor pm, IRangeComparator left, IRangeComparator right) {

-

-		// assert that both IRangeComparators are of the same class

-		Assert.isTrue(right.getClass().equals(left.getClass()));

-

-		int rightSize= right.getRangeCount();

-		int leftSize= left.getRangeCount();

-		//

-		// Differences matrix:

-		// only the last d of each diagonal is stored, i.e., lastDiagonal[k] = row of d    

-		//

-		int diagLen= 2 * Math.max(rightSize, leftSize); // bound on the size of edit script

-		int maxDiagonal= diagLen;

-		int lastDiagonal[]= new int[diagLen + 1]; // the row containing the last d

-		// on diagonal k (lastDiagonal[k] = row)

-		int origin= diagLen / 2; // origin of diagonal 0

-

-		// script corresponding to d[k] 

-		LinkedRangeDifference script[]= new LinkedRangeDifference[diagLen + 1];

-		int row, col;

-

-		// find common prefix

-		for (row= 0; row < rightSize && row < leftSize && rangesEqual(right, row, left, row) == true; ++row)

-			;

-

-		lastDiagonal[origin]= row;

-		script[origin]= null;

-		int lower= (row == rightSize) ? origin + 1 : origin - 1;

-		int upper= (row == leftSize) ? origin - 1 : origin + 1;

-

-		if (lower > upper)

-			return EMPTY_RESULT;

-			

-		//System.out.println("findDifferences: " + maxDiagonal + " " + lower + " " + upper);

-		

-		// for each value of the edit distance

-		for (int d= 1; d <= maxDiagonal; ++d) { // d is the current edit distance

-			

-			if (pm != null)

-				pm.worked(1);

-

-			if (right.skipRangeComparison(d, maxDiagonal, left))

-				return EMPTY_RESULT; // should be something we already found

-

-			// for each relevant diagonal (-d, -d+2 ..., d-2, d)

-			for (int k= lower; k <= upper; k += 2) { // k is the current diagonal

-				LinkedRangeDifference edit;

-

-				if (pm != null && pm.isCanceled())

-					return EMPTY_RESULT;

-

-				if (k == origin - d || k != origin + d && lastDiagonal[k + 1] >= lastDiagonal[k - 1]) {

-					//

-					// move down

-					//

-					row= lastDiagonal[k + 1] + 1;

-					edit= new LinkedRangeDifference(script[k + 1], LinkedRangeDifference.DELETE);

-				} else {

-					//

-					// move right

-					//

-					row= lastDiagonal[k - 1];

-					edit= new LinkedRangeDifference(script[k - 1], LinkedRangeDifference.INSERT);

-				}

-				col= row + k - origin;

-				edit.fRightStart= row;

-				edit.fLeftStart= col;

-				Assert.isTrue(k >= 0 && k <= maxDiagonal);

-				script[k]= edit;

-

-				// slide down the diagonal as far as possible 

-				while (row < rightSize && col < leftSize && rangesEqual(right, row, left, col) == true) {

-					++row;

-					++col;

-				}

-

-				Assert.isTrue(k >= 0 && k <= maxDiagonal); // Unreasonable value for diagonal index

-				lastDiagonal[k]= row;

-

-				if (row == rightSize && col == leftSize) {

-					//showScript(script[k], right, left);

-					return createDifferencesRanges(script[k]);

-				}

-				if (row == rightSize)

-					lower= k + 2;

-				if (col == leftSize)

-					upper= k - 2;

-			}

-			--lower;

-			++upper;

-		}

-		// too many differences

-		Assert.isTrue(false);

-		return null;

-	}

-

-	/**

-	 * Finds the differences among three <code>IRangeComparator</code>s.

-	 * The differences are returned as a list of <code>RangeDifference</code>s.

-	 * If no differences are detected an empty list is returned.

-	 * If the ancestor range comparator is <code>null</code>, a two-way

-	 * comparison is performed.

-	 * 

-	 * @param ancestor the ancestor range comparator or <code>null</code>

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences, or an empty array if no differences were found

-	 */

-	public static RangeDifference[] findDifferences(IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) {

-		return findDifferences(null, ancestor, left, right);

-	}

-	

-	/**

-	 * Finds the differences among three <code>IRangeComparator</code>s.

-	 * The differences are returned as a list of <code>RangeDifference</code>s.

-	 * If no differences are detected an empty list is returned.

-	 * If the ancestor range comparator is <code>null</code>, a two-way

-	 * comparison is performed.

-	 * 

-	 * @param pm if not <code>null</code> used to report progress

-	 * @param ancestor the ancestor range comparator or <code>null</code>

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences, or an empty array if no differences were found

-	 */

-	public static RangeDifference[] findDifferences(IProgressMonitor pm, IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) {

-

-		if (ancestor == null)

-			return findDifferences(pm, left, right);

-

-		RangeDifference[] leftAncestorScript= null;

-		RangeDifference[] rightAncestorScript= findDifferences(pm, ancestor, right);

-		if (rightAncestorScript != null)

-			leftAncestorScript= findDifferences(pm, ancestor, left);

-		if (rightAncestorScript == null || leftAncestorScript == null)

-			return null;

-

-		DifferencesIterator myIter= new DifferencesIterator(rightAncestorScript);

-		DifferencesIterator yourIter= new DifferencesIterator(leftAncestorScript);

-

-		List diff3= new ArrayList();

-		diff3.add(new RangeDifference(RangeDifference.ERROR)); // add a sentinel

-

-		int changeRangeStart= 0;

-		int changeRangeEnd= 0;

-		//

-		// Combine the two two-way edit scripts into one

-		//

-		while (myIter.fDifference != null || yourIter.fDifference != null) {

-

-			DifferencesIterator startThread;

-			myIter.removeAll();

-			yourIter.removeAll();

-			//

-			// take the next diff that is closer to the start

-			//

-			if (myIter.fDifference == null)

-				startThread= yourIter;

-			else if (yourIter.fDifference == null)

-				startThread= myIter;

-			else { // not at end of both scripts take the lowest range

-				if (myIter.fDifference.fLeftStart <= yourIter.fDifference.fLeftStart) // 2 -> common (Ancestor) change range

-					startThread= myIter;

-				else

-					startThread= yourIter;

-			}

-			changeRangeStart= startThread.fDifference.fLeftStart;

-			changeRangeEnd= startThread.fDifference.leftEnd();

-

-			startThread.next();

-			//

-			// check for overlapping changes with other thread

-			// merge overlapping changes with this range

-			//

-			DifferencesIterator other= startThread.other(myIter, yourIter);

-			while (other.fDifference != null && other.fDifference.fLeftStart <= changeRangeEnd) {

-				int newMax= other.fDifference.leftEnd();

-				other.next();

-				if (newMax >= changeRangeEnd) {

-					changeRangeEnd= newMax;

-					other= other.other(myIter, yourIter);

-				}

-			}

-			diff3.add(createRangeDifference3(myIter, yourIter, diff3, right, left, changeRangeStart, changeRangeEnd));

-		}

-

-		// remove sentinel

-		diff3.remove(0);

-		return (RangeDifference[]) diff3.toArray(EMPTY_RESULT);

-	}

-

-	/**

-	 * Finds the differences among two <code>IRangeComparator</code>s.

-	 * In contrast to <code>findDifferences</code>, the result

-	 * contains <code>RangeDifference</code> elements for non-differing ranges too.

-	 * 

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences

-	 */

-	public static RangeDifference[] findRanges(IRangeComparator left, IRangeComparator right) {

-		return findRanges((IProgressMonitor)null, left, right);

-	}

-	

-	/**

-	 * Finds the differences among two <code>IRangeComparator</code>s.

-	 * In contrast to <code>findDifferences</code>, the result

-	 * contains <code>RangeDifference</code> elements for non-differing ranges too.

-	 * 

-	 * @param pm if not <code>null</code> used to report progress

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences

-	 */

-	public static RangeDifference[] findRanges(IProgressMonitor pm, IRangeComparator left, IRangeComparator right) {

-		RangeDifference[] in= findDifferences(pm, left, right);

-		List out= new ArrayList();

-

-		RangeDifference rd;

-

-		int mstart= 0;

-		int ystart= 0;

-

-		for (int i= 0; i < in.length; i++) {

-			RangeDifference es= in[i];

-

-			rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, es.rightStart() - mstart, ystart, es.leftStart() - ystart);

-			if (rd.maxLength() != 0)

-				out.add(rd);

-

-			out.add(es);

-

-			mstart= es.rightEnd();

-			ystart= es.leftEnd();

-		}

-		rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, right.getRangeCount() - mstart, ystart, left.getRangeCount() - ystart);

-		if (rd.maxLength() > 0)

-			out.add(rd);

-

-		return (RangeDifference[]) out.toArray(EMPTY_RESULT);

-	}

-

-	/**

-	 * Finds the differences among three <code>IRangeComparator</code>s.

-	 * In contrast to <code>findDifferences</code>, the result

-	 * contains <code>RangeDifference</code> elements for non-differing ranges too.

-	 * If the ancestor range comparator is <code>null</code>, a two-way

-	 * comparison is performed.

-	 * 

-	 * @param pm if not <code>null</code> used to report progress

-	 * @param ancestor the ancestor range comparator or <code>null</code>

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences

-	 */

-	public static RangeDifference[] findRanges(IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) {

-		return findRanges(null, ancestor, left, right);

-	}

-	

-	/**

-	 * Finds the differences among three <code>IRangeComparator</code>s.

-	 * In contrast to <code>findDifferences</code>, the result

-	 * contains <code>RangeDifference</code> elements for non-differing ranges too.

-	 * If the ancestor range comparator is <code>null</code>, a two-way

-	 * comparison is performed.

-	 * 

-	 * @param pm if not <code>null</code> used to report progress

-	 * @param ancestor the ancestor range comparator or <code>null</code>

-	 * @param left the left range comparator

-	 * @param right the right range comparator

-	 * @return an array of range differences

-	 */

-	public static RangeDifference[] findRanges(IProgressMonitor pm, IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) {

-

-		if (ancestor == null)

-			return findRanges(pm, left, right);

-

-		RangeDifference[] in= findDifferences(pm, ancestor, left, right);

-		List out= new ArrayList();

-

-		RangeDifference rd;

-

-		int mstart= 0;

-		int ystart= 0;

-		int astart= 0;

-

-		for (int i= 0; i < in.length; i++) {

-			RangeDifference es= (RangeDifference) in[i];

-

-			rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, es.rightStart() - mstart, ystart, es.leftStart() - ystart, astart, es.ancestorStart() - astart);

-			if (rd.maxLength() > 0)

-				out.add(rd);

-

-			out.add(es);

-

-			mstart= es.rightEnd();

-			ystart= es.leftEnd();

-			astart= es.ancestorEnd();

-		}

-		rd= new RangeDifference(RangeDifference.NOCHANGE, mstart, right.getRangeCount() - mstart, ystart, left.getRangeCount() - ystart, astart, ancestor.getRangeCount() - astart);

-		if (rd.maxLength() > 0)

-			out.add(rd);

-

-		return (RangeDifference[]) out.toArray(EMPTY_RESULT);

-	}

-

-	//---- private methods

-

-	/**

-	 * Creates a Vector of DifferencesRanges out of the LinkedRangeDifference.

-	 * It coalesces adjacent changes.

-	 * In addition, indices are changed such that the ranges are 1) open, i.e,

-	 * the end of the range is not included, and 2) are zero based.

-	 */

-	private static RangeDifference[] createDifferencesRanges(LinkedRangeDifference start) {

-

-		LinkedRangeDifference ep= reverseDifferences(start);

-		ArrayList result= new ArrayList();

-		RangeDifference es= null;

-

-		while (ep != null) {

-			es= new RangeDifference(RangeDifference.CHANGE);

-

-			if (ep.isInsert()) {

-				es.fRightStart= ep.fRightStart + 1;

-				es.fLeftStart= ep.fLeftStart;

-				RangeDifference b= ep;

-				do {

-					ep= ep.getNext();

-					es.fLeftLength++;

-				} while (ep != null && ep.isInsert() && ep.fRightStart == b.fRightStart);

-			} else {

-				es.fRightStart= ep.fRightStart;

-				es.fLeftStart= ep.fLeftStart;

-

-				RangeDifference a= ep;

-				//

-				// deleted lines

-				//

-				do {

-					a= ep;

-					ep= ep.getNext();

-					es.fRightLength++;

-				} while (ep != null && ep.isDelete() && ep.fRightStart == a.fRightStart + 1);

-

-				boolean change= (ep != null && ep.isInsert() && ep.fRightStart == a.fRightStart);

-

-				if (change) {

-					RangeDifference b= ep;

-					//

-					// replacement lines

-					//

-					do {

-						ep= ep.getNext();

-						es.fLeftLength++;

-					} while (ep != null && ep.isInsert() && ep.fRightStart == b.fRightStart);

-				} else {

-					es.fLeftLength= 0;

-				}

-				es.fLeftStart++; // meaning of range changes from "insert after", to "replace with"

-

-			}

-			//

-			// the script commands are 1 based, subtract one to make them zero based

-			//

-			es.fRightStart--;

-			es.fLeftStart--;

-			result.add(es);

-		}

-		return (RangeDifference[]) result.toArray(EMPTY_RESULT);

-	}

-

-	/**

-	 * Creates a <code>RangeDifference3</code> given the

-	 * state of two DifferenceIterators.

-	 */

-	private static RangeDifference createRangeDifference3(

-		DifferencesIterator myIter, 

-		DifferencesIterator yourIter, 

-		List diff3, 

-		IRangeComparator right, 

-		IRangeComparator left, 

-		int changeRangeStart, 

-		int changeRangeEnd) {

-

-		int rightStart, rightEnd;

-		int leftStart, leftEnd;

-		int kind= RangeDifference.ERROR;

-		RangeDifference last= (RangeDifference) diff3.get(diff3.size() - 1);

-

-		Assert.isTrue((myIter.getCount() != 0 || yourIter.getCount() != 0));	// At least one range array must be non-empty

-		//

-		// find corresponding lines to fChangeRangeStart/End in right and left

-		//

-		if (myIter.getCount() == 0) { // only left changed

-			rightStart= changeRangeStart - last.ancestorEnd() + last.rightEnd();

-			rightEnd= changeRangeEnd - last.ancestorEnd() + last.rightEnd();

-			kind= RangeDifference.LEFT;

-		} else {

-			RangeDifference f= (RangeDifference) myIter.fRange.get(0);

-			RangeDifference l= (RangeDifference) myIter.fRange.get(myIter.fRange.size() - 1);

-			rightStart= changeRangeStart - f.fLeftStart + f.fRightStart;

-			rightEnd= changeRangeEnd - l.leftEnd() + l.rightEnd();

-		}

-

-		if (yourIter.getCount() == 0) { // only right changed

-			leftStart= changeRangeStart - last.ancestorEnd() + last.leftEnd();

-			leftEnd= changeRangeEnd - last.ancestorEnd() + last.leftEnd();

-			kind= RangeDifference.RIGHT;

-		} else {

-			RangeDifference f= (RangeDifference) yourIter.fRange.get(0);

-			RangeDifference l= (RangeDifference) yourIter.fRange.get(yourIter.fRange.size() - 1);

-			leftStart= changeRangeStart - f.fLeftStart + f.fRightStart;

-			leftEnd= changeRangeEnd - l.leftEnd() + l.rightEnd();

-		}

-

-		if (kind == RangeDifference.ERROR) { // overlapping change (conflict) -> compare the changed ranges

-			if (rangeSpansEqual(right, rightStart, rightEnd - rightStart, left, leftStart, leftEnd - leftStart))

-				kind= RangeDifference.ANCESTOR;

-			else

-				kind= RangeDifference.CONFLICT;

-		}

-		return new RangeDifference(kind, rightStart, rightEnd - rightStart, leftStart, leftEnd - leftStart, changeRangeStart, changeRangeEnd - changeRangeStart);

-	}

-

-	/**

-	 * Tests if two ranges are equal

-	 */

-	private static boolean rangesEqual(IRangeComparator a, int ai, IRangeComparator b, int bi) {

-		return a.rangesEqual(ai, b, bi);

-	}

-

-	/**

-	 * Tests whether <code>right</code> and <code>left</left> changed in the same way

-	 */

-	private static boolean rangeSpansEqual(IRangeComparator right, int rightStart, int rightLen, IRangeComparator left, int leftStart, int leftLen) {

-		if (rightLen == leftLen) {

-			int i= 0;

-			for (i= 0; i < rightLen; i++) {

-				if (!rangesEqual(right, rightStart + i, left, leftStart + i))

-					break;

-			}

-			if (i == rightLen)

-				return true;

-		}

-		return false;

-	}

-

-	/**

-	 * Reverses the range differences

-	 */

-	private static LinkedRangeDifference reverseDifferences(LinkedRangeDifference start) {

-		LinkedRangeDifference ep, behind, ahead;

-

-		ahead= start;

-		ep= null;

-		while (ahead != null) {

-			behind= ep;

-			ep= ahead;

-			ahead= ahead.getNext();

-			ep.setNext(behind);

-		}

-		return ep;

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/package.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/package.html
deleted file mode 100644
index 2e4ffaf..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/rangedifferencer/package.html
+++ /dev/null
@@ -1,37 +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>

-Provides support for finding the differences between

-two or three sequences of comparable entities.

-<h2>

-Package Specification</h2>

-The class <tt>Differencer</tt> finds longest sequences of matching and

-non-matching comparable entities.

-<p>Clients must supply the input to the differencer as an implementation

-of the <tt>IRangeComparator</tt> interface.

-<br>An <tt>IRangeComparator</tt> breaks the input data into a sequence

-of entities and provides a method for comparing

-<br>one entity with the entity in another <tt>IRangeComparator</tt>.

-<br>For example, to compare two text documents and find longest common

-sequences

-<br>of matching and non-matching lines, the implementation of <tt>IRangeComparator

-</tt>must break the document

-<br>into lines and provide a method for testing whether two lines are considered

-equal.

-<p>The differencer returns the differences among these sequences as an

-array of <tt>RangeDifference</tt> objects.

-<br>Every single <tt>RangeDifference</tt> describes kind of difference

-(no change, change, addition, deletion)

-<br>and the corresponding ranges of the underlying comparable entities

-in the two or three inputs.

-<p>The algorithm used is an objectified version of one described in:

-<br><i>A File Comparison Program,</i> by Webb Miller and Eugene W. Myers,

-<br>Software Practice and Experience, Vol. 15, Nov. 1985.

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java
deleted file mode 100644
index f101c35..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import java.util.Iterator;

-import java.util.ArrayList;

-import org.eclipse.swt.graphics.Image;

-

-

-/**

- * The standard implementation of a diff container element.

- * <p>

- * This class may be instantiated, or further subclassed.

- * </p>

- */

-public abstract class DiffContainer extends DiffElement implements IDiffContainer {

-

-	private static IDiffElement[] fgEmptyArray= new IDiffElement[0];

-	private ArrayList fChildren;

-	

-	/**

-	 * Creates a new container with the specified kind under the given parent. 

-	 *

-	 * @param parent under which the new container is added as a child or <code>null</code>.

-	 * @param name of the container

-	 * @param kind of difference (defined in <code>Differencer</code>).

-	 */

-	public DiffContainer(IDiffContainer parent, int kind) {

-		super(parent, kind);

-	}

-	

-	/**

-	 * Tries to find the child with the given name.

-	 * Returns <code>null</code> if no such child exists.

-	 * 

-	 * @param name of the child to find

-	 * @return the first element with a matching name

-	 */

-	public IDiffElement findChild(String name) {

-		Object[] children= getChildren();

-		for (int i= 0; i < children.length; i++) {

-			IDiffElement child= (IDiffElement) children[i];

-			if (name.equals(child.getName()))

-				return child;

-		}

-		return null;

-	}

-

-	/* (non Javadoc)

-	 * see IDiffContainer.add

-	 */

-	public void add(IDiffElement diff) {

-		if (fChildren == null)

-			fChildren= new ArrayList();

-		fChildren.add(diff);

-		diff.setParent(this);

-	}

-

-	/**

-	 * Removes the given child from this container.

-	 * If the container becomes empty it is removed from its container.

-	 */

-	/* (non Javadoc)

-	 * see IDiffContainer.removeToRoot

-	 */

-	public void removeToRoot(IDiffElement child) {

-		if (fChildren != null) {

-			fChildren.remove(child);

-			child.setParent(null);

-			if (fChildren.size() == 0) {

-				IDiffContainer p= getParent();

-				if (p != null)

-					p.removeToRoot(this);

-			}

-		}

-	}

-

-	/**

-	 * Removes the given child (non-recursively) from this container.

-	 *

-	 * @param child to remove

-	 */

-	public void remove(IDiffElement child) {

-		if (fChildren != null) {

-			fChildren.remove(child);

-			child.setParent(null);

-		}

-	}

-	

-	/* (non Javadoc)

-	 * see IDiffContainer.hasChildren

-	 */

-	public boolean hasChildren() {

-		return fChildren != null && fChildren.size() > 0;

-	}

-

-	/* (non Javadoc)

-	 * see IDiffContainer.getChildren

-	 */

-	public IDiffElement[] getChildren() {

-		if (fChildren != null)

-			return (IDiffElement[]) fChildren.toArray(fgEmptyArray);

-		return fgEmptyArray;

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffElement.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffElement.java
deleted file mode 100644
index 7174a95..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffElement.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import org.eclipse.swt.graphics.Image;

-import org.eclipse.compare.ITypedElement;

-import org.eclipse.jface.util.Assert;

-

-/**

- * An abstract base implementation of the <code>IDiffElement</code> interface.

- * <p>

- * Subclasses may add behavior and state, and may override <code>getImage</code>

- * and <code>getType</code> to suit.

- * </p>

- */

-public abstract class DiffElement implements IDiffElement {

-

-	private int fKind;

-	private IDiffContainer fParent;

-

-	/**

-	 * Creates a new <code>DiffElement</code> as a child of the given parent.

-	 * If parent is not <code>null</code> the new element is added to the parent.

-	 *

-	 * @param parent the parent of this child; if not <code>null</code> this element is automatically added as a child

-	 * @param kind the kind of change

-	 */

-	public DiffElement(IDiffContainer parent, int kind) {

-		fParent= parent;

-		fKind= kind;

-		if (parent != null)

-			parent.add(this);

-	}

-

-	/**

-	 * The <code>DiffElement</code> implementation of this <code>ITypedInput</code>

-	 * method returns <code>null</code>. Subclasses may re-implement to provide

-	 * an image for this element.

-	 */

-	public Image getImage() {

-		return null;

-	}

-

-	/**

-	 * The <code>DiffElement</code> implementation of this <code>ITypedElement</code>

-	 * method returns <code>ITypedElement.UNKNOWN_TYPE</code>. Subclasses may

-	 * re-implement to provide a type for this element.

-	 */

-	public String getType() {

-		return ITypedElement.UNKNOWN_TYPE;

-	}

-

-	/**

-	 * Sets the kind of difference for this element.

-	 *

-	 * @param kind set the kind of difference this element represents

-	 * @see Differencer

-	 */

-	public void setKind(int kind) {

-		fKind= kind;

-	}

-

-	/* (non Javadoc)

-	 * see IDiffElement.getKind

-	 */

-	public int getKind() {

-		return fKind;

-	}

-

-	/* (non Javadoc)

-	 * see IDiffElement.getParent

-	 */

-	public IDiffContainer getParent() {

-		return fParent;

-	}

-

-	/* (non Javadoc)

-	 * see IDiffElement.setParent

-	 */

-	public void setParent(IDiffContainer parent) {

-		fParent= parent;

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java
deleted file mode 100644
index a2960a2..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import java.text.MessageFormat;

-

-import org.eclipse.swt.graphics.Image;

-

-import org.eclipse.jface.util.ListenerList;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.internal.Utilities;

-

-/**

- * Diff node are used as the compare result of the differencing engine.

- * Since it implements the <code>ITypedElement</code> and <code>ICompareInput</code>

- * interfaces it can be used directly to display the

- * compare result in a <code>DiffTreeViewer</code> and as the input to any other

- * compare/merge viewer.

- * <p>

- * <code>DiffNode</code>s are typically created as the result of performing

- * a compare with the <code>Differencer</code>.

- * <p>

- * Clients typically use this class as is, but may subclass if required.

- * 

- * @see DiffTreeViewer

- * @see Differencer

- */

-public class DiffNode extends DiffContainer implements ITypedElement, ICompareInput {

-

-	private ITypedElement fAncestor;

-	private ITypedElement fLeft;

-	private ITypedElement fRight;

-	private boolean fDontExpand;

-	private ListenerList fListener;

-	private boolean fSwapSides;

-

-	

-	/**

-	 * Creates a new <code>DiffNode</code> and initializes with the given values.

-	 *

-	 * @param parent under which the new container is added as a child or <code>null</code>

-	 * @param kind of difference (defined in <code>Differencer</code>)

-	 * @param ancestor the common ancestor input to a compare

-	 * @param left the left input to a compare

-	 * @param right the right input to a compare

-	 */

-	public DiffNode(IDiffContainer parent, int kind, ITypedElement ancestor, ITypedElement left, ITypedElement right) {

-		this(parent, kind);

-		fAncestor= ancestor;

-		fLeft= left;

-		fRight= right;

-	}

-

-	/**

-	 * Creates a new <code>DiffNode</code> with diff kind <code>Differencer.CHANGE</code>

-	 * and initializes with the given values.

-	 *

-	 * @param left the left input to a compare

-	 * @param right the right input to a compare

-	 */

-	public DiffNode(ITypedElement left, ITypedElement right) {

-		this(null, Differencer.CHANGE, null, left, right);

-	}

-

-	/**

-	 * Creates a new <code>DiffNode</code> and initializes with the given values.

-	 *

-	 * @param kind of difference (defined in <code>Differencer</code>)

-	 * @param ancestor the common ancestor input to a compare

-	 * @param left the left input to a compare

-	 * @param right the right input to a compare

-	 */

-	public DiffNode(int kind, ITypedElement ancestor, ITypedElement left, ITypedElement right) {

-		this(null, kind, ancestor, left, right);

-	}

-

-	/**

-	 * Creates a new <code>DiffNode</code> with the given diff kind.

-	 *

-	 * @param kind of difference (defined in <code>Differencer</code>)

-	 */

-	public DiffNode(int kind) {

-		super(null, kind);

-	}

-

-	/**

-	 * Creates a new <code>DiffNode</code> and initializes with the given values.

-	 *

-	 * @param parent under which the new container is added as a child or <code>null</code>

-	 * @param kind of difference (defined in <code>Differencer</code>)

-	 */

-	public DiffNode(IDiffContainer parent, int kind) {

-		super(parent, kind);

-	}

-

-	/**

-	 * Registers a listener for changes of this <code>ICompareInput</code>.

-	 * Has no effect if an identical listener is already registered.

-	 *

-	 * @param listener the listener to add

-	 */

-	public void addCompareInputChangeListener(ICompareInputChangeListener listener) {

-		if (fListener == null)

-			fListener= new ListenerList();

-		fListener.add(listener);

-	}

-	

-	/**

-	 * Unregisters a <code>ICompareInput</code> listener.

-	 * Has no effect if listener is not registered.

-	 *

-	 * @param listener the listener to remove

-	 */

-	public void removeCompareInputChangeListener(ICompareInputChangeListener listener) {

-		if (fListener != null) {

-			fListener.remove(listener);

-			if (fListener.isEmpty())

-				fListener= null;

-		}

-	}

-	

-	/**

-	 * Sends out notification that a change has occured on the <code>ICompareInput</code>.

-	 */

-	protected void fireChange() {

-		if (fListener != null) {

-			Object[] listeners= fListener.getListeners();

-			for (int i= 0; i < listeners.length; i++)

-				((ICompareInputChangeListener) listeners[i]).compareInputChanged(this);

-		}

-	}

-

-	//---- getters & setters

-

-	/**

-	 * Returns <code>true</code> if this node shouldn't automatically be expanded in

-	 * a </code>DiffTreeViewer</code>.

-	 *

-	 * @return <code>true</code> if node shouldn't automatically be expanded

-	 */

-	public boolean dontExpand() {

-		return fDontExpand;

-	}

-

-	/**

-	 * Controls whether this node is not automatically expanded when displayed in

-	 * a </code>DiffTreeViewer</code>.

-	 *

-	 * @param dontExpand if <code>true</code> this node is not automatically expanded in </code>DiffTreeViewer</code>

-	 */

-	public void setDontExpand(boolean dontExpand) {

-		fDontExpand= dontExpand;

-	}

-

-	/**

-	 * Returns the first not-<code>null</code> input of this node.

-	 * Method checks the three inputs in the order: ancestor, right, left.

-	 *

-	 * @return the first not-<code>null</code> input of this node

-	 */

-	public ITypedElement getId() {

-		if (fAncestor != null)

-			return fAncestor;

-		if (fRight != null)

-			return fRight;

-		return fLeft;

-	}

-

-	/**

-	 * Returns the (non-<code>null</code>) name of the left or right side if they are identical.

-	 * Otherwise both names are concatenated (separated with a slash ('/')).

-	 * <p>

-	 * Subclasses may re-implement to provide a different name for this node.

-	 */

-	/* (non Javadoc)

-	 * see ITypedElement.getName

-	 */

-	public String getName() {

-		String right= null;

-		if (fRight != null)

-			right= fRight.getName();

-

-		String left= null;

-		if (fLeft != null)

-			left= fLeft.getName();

-

-		if (right == null && left == null) {

-			if (fAncestor != null)

-				return fAncestor.getName();

-			return Utilities.getString("DiffNode.noName"); //$NON-NLS-1$

-		}

-

-		if (right == null)

-			return left;

-		if (left == null)

-			return right;

-

-		if (right.equals(left))

-			return right;

-			

-		String s1;

-		String s2;

-		

-		if (fSwapSides) {

-			s1= left;

-			s2= right;

-		} else {

-			s1= right;

-			s2= left;

-		}

-		

-		String fmt= Utilities.getString("DiffNode.nameFormat"); //$NON-NLS-1$

-		return MessageFormat.format(fmt, new String[] { s1, s2 });

-	}

-	

-	void swapSides(boolean swap) {

-		fSwapSides= swap;

-	}

-		

-	/* (non Javadoc)

-	 * see ITypedElement.getImage

-	 */

-	public Image getImage() {

-		ITypedElement id= getId();

-		if (id != null)

-			return id.getImage();

-		return null;

-	}

-

-	/* (non Javadoc)

-	 * see ITypedElement.getType

-	 */

-	public String getType() {

-		ITypedElement id= getId();

-		if (id != null)

-			return id.getType();

-		return ITypedElement.UNKNOWN_TYPE;

-	}

-

-	/* (non Javadoc)

-	 * see ICompareInput.getAncestor

-	 */

-	public ITypedElement getAncestor() {

-		return fAncestor;

-	}

-	

-	/**

-	 * Sets the left input to the given value.

-	 *

-	 * @param left the new value for the left input

-	 */

-	public void setLeft(ITypedElement left) {

-		fLeft= left;

-	}

-	

-	/* (non Javadoc)

-	 * see ICompareInput.getLeft

-	 */

-	public ITypedElement getLeft() {

-		return fLeft;

-	}

-

-	/**

-	 * Sets the right input to the given value.

-	 *

-	 * @param right the new value for the right input

-	 */

-	public void setRight(ITypedElement right) {

-		fRight= right;

-	}

-	

-	/* (non Javadoc)

-	 * see ICompareInput.getRight

-	 */

-	public ITypedElement getRight() {

-		return fRight;

-	}

-

-	/* (non Javadoc)

-	 * see ICompareInput.copy

-	 */

-	public void copy(boolean leftToRight) {

-		//System.out.println("DiffNode.copy: " + leftToRight);

-		

-		IDiffContainer pa= getParent();

-		if (pa instanceof ICompareInput) {

-			ICompareInput parent= (ICompareInput) pa;

-			Object dstParent= leftToRight ? parent.getRight() : parent.getLeft();

-			

-			if (dstParent instanceof IEditableContent) {

-				ITypedElement dst= leftToRight ? getRight() : getLeft();

-				ITypedElement src= leftToRight ? getLeft() : getRight();

-				dst= ((IEditableContent)dstParent).replace(dst, src);

-				if (leftToRight)

-					setRight(dst);

-				else

-					setLeft(dst);

-				

-				//setKind(Differencer.NO_CHANGE);

-				

-				fireChange();

-			}

-		}

-	}

-	

-	/* (non Javadoc)

-	 * see Object.hashCode

-	 */

-	public int hashCode() {

-		String[] path= getPath(this, 0);

-		int hashCode= 1;

-		for (int i= 0; i < path.length; i++) {

-	    	String s= path[i];

-	   	 	hashCode= (31*hashCode) + (s != null ? s.hashCode() : 0);

-		}

-		return hashCode;

-	}

-	

-	/* (non Javadoc)

-	 * see Object.equals

-	 */

-	public boolean equals(Object other) {

-		if (other != null && getClass() == other.getClass()) {

-			String[] path1= getPath(this, 0);

-			String[] path2= getPath((DiffNode) other, 0);

-			if (path1.length != path2.length)

-				return false;

-			for (int i= 0; i < path1.length; i++)

-				if (! path1[i].equals(path2[i]))

-					return false;

-			return true;

-		}

-		return super.equals(other);

-	}

-	

-	private static String[] getPath(ITypedElement el, int level) {

-		String[] path= null;

-		if (el instanceof IDiffContainer) {

-			IDiffContainer parent= ((IDiffContainer)el).getParent();

-			if (parent instanceof ITypedElement)

-				path= getPath((ITypedElement)parent, level+1);

-		}

-		if (path == null)

-			path= new String[level+1];

-		path[(path.length-1)-level]= el.getName();

-		return path;

-	}

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java
deleted file mode 100644
index 918f5ef..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewer.java
+++ /dev/null
@@ -1,708 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import java.util.Iterator;

-import java.util.ResourceBundle;

-

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.events.DisposeEvent;

-import org.eclipse.swt.events.FocusListener;

-import org.eclipse.swt.graphics.Image;

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.jface.util.*;

-import org.eclipse.jface.action.*;

-import org.eclipse.jface.viewers.*;

-import org.eclipse.jface.preference.IPreferenceStore;

-

-import org.eclipse.compare.internal.*;

-import org.eclipse.compare.*;

-

-/**

- * A tree viewer that works on objects implementing

- * the <code>IDiffContainer</code> and <code>IDiffElement</code> interfaces.

- * <p>

- * This class may be instantiated; it is not intended to be subclassed outside

- * this package.

- * </p>

- *

- * @see IDiffContainer

- * @see IDiffElement

- */

-public class DiffTreeViewer extends TreeViewer {

-	

-	static class DiffViewerSorter extends ViewerSorter {

-	

-		public boolean isSorterProperty(Object element, Object property) {

-			return false;

-		}

-	

-		public int category(Object node) {

-			if (node instanceof DiffNode) {

-				Object o= ((DiffNode) node).getId();

-				if (o instanceof DocumentRangeNode)

-					return ((DocumentRangeNode) o).getTypeCode();

-			}

-			return 0;

-		}

-	}	

-

-	class DiffViewerContentProvider implements ITreeContentProvider {

-			

-		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {

-		}

-	

-		public boolean isDeleted(Object element) {

-			return false;

-		}

-			

-		public void dispose() {

-			inputChanged(DiffTreeViewer.this, getInput(), null);

-		}

-			

-		public Object getParent(Object element) {

-			if (element instanceof IDiffElement) 

-				return ((IDiffElement)element).getParent();

-			return null;

-		}

-		

-		public final boolean hasChildren(Object element) {

-			if (element instanceof IDiffContainer) 

-				return ((IDiffContainer)element).hasChildren();

-			return false;

-		}

-		

-		public final Object[] getChildren(Object element) {

-			if (element instanceof IDiffContainer)

-				return ((IDiffContainer)element).getChildren();

-			return new Object[0];

-		}

-		

-		public Object[] getElements(Object element) {

-			return getChildren(element);

-		}				

-	}

-	

-	/*

-	 * Takes care of swapping left and right if fLeftIsLocal

-	 * is true.

-	 */

-	class DiffViewerLabelProvider extends LabelProvider {

-		

-		public String getText(Object element) {

-			

-			if (element instanceof IDiffElement)

-				return ((IDiffElement)element).getName();

-						

-			return Utilities.getString(fBundle, "defaultLabel"); //$NON-NLS-1$

-		}

-	

-		public Image getImage(Object element) {

-			if (element instanceof IDiffElement) {

-				IDiffElement input= (IDiffElement) element;

-				

-				int kind= input.getKind();

-				if (fLeftIsLocal) {

-					switch (kind & Differencer.DIRECTION_MASK) {

-					case Differencer.LEFT:

-						kind= (kind &~ Differencer.LEFT) | Differencer.RIGHT;

-						break;

-					case Differencer.RIGHT:

-						kind= (kind &~ Differencer.RIGHT) | Differencer.LEFT;

-						break;

-					}

-				}

-				

-				return fCompareConfiguration.getImage(input.getImage(), kind);

-			}

-			return null;

-		}

-	}

-

-	static class FilterSame extends ViewerFilter {

-		public boolean select(Viewer viewer, Object parentElement, Object element) {

-			if (element instanceof IDiffElement)

-				return (((IDiffElement)element).getKind() & Differencer.PSEUDO_CONFLICT) == 0;

-			return true;

-		}

-		public boolean isFilterProperty(Object element, Object property) {

-			return false;

-		}

-	}

-	

-	private ResourceBundle fBundle;

-	private CompareConfiguration fCompareConfiguration;

-	/* package */ boolean fLeftIsLocal;

-	private ViewerFilter fViewerFilter;

-	private IPropertyChangeListener fPropertyChangeListener;

-	//private IPropertyChangeListener fPreferenceChangeListener;

-

-	private Action fCopyLeftToRightAction;

-	private Action fCopyRightToLeftAction;

-	private Action fNextAction;

-	private Action fPreviousAction;

-	private Action fEmptyMenuAction;

-	private Action fExpandAllAction;

-		

-	/**

-	 * Creates a new viewer for the given SWT tree control with the specified configuration.

-	 *

-	 * @param tree the tree control

-	 * @param configuration the configuration for this viewer

-	 */

-	public DiffTreeViewer(Tree tree, CompareConfiguration configuration) {

-		super(tree);

-		initialize(configuration);

-	}

-	

-	/**

-	 * Creates a new viewer under the given SWT parent and with the specified configuration.

-	 *

-	 * @param parent the SWT control under which to create the viewer

-	 * @param configuration the configuration for this viewer

-	 */

-	public DiffTreeViewer(Composite parent, CompareConfiguration configuration) {

-		super(new Tree(parent, SWT.MULTI));

-		initialize(configuration);

-	}

-	

-	private void initialize(CompareConfiguration configuration) {

-		

-		Control tree= getControl();

-		

-		INavigatable nav= new INavigatable() {

-			public boolean gotoDifference(boolean next) {

-				return internalNavigate(next);

-			}

-		};

-		tree.setData(INavigatable.NAVIGATOR_PROPERTY, nav);

-		

-		fLeftIsLocal= Utilities.getBoolean(configuration, "LEFT_IS_LOCAL", false); //$NON-NLS-1$

-

-		tree.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle());

-

-		Composite parent= tree.getParent();

-		

-		fBundle= ResourceBundle.getBundle("org.eclipse.compare.structuremergeviewer.DiffTreeViewerResources"); //$NON-NLS-1$

-		

-		// register for notification with the CompareConfiguration 

-		fCompareConfiguration= configuration;

-		if (fCompareConfiguration != null) {

-			fPropertyChangeListener= new IPropertyChangeListener() {

-				public void propertyChange(PropertyChangeEvent event) {

-					DiffTreeViewer.this.propertyChange(event);

-				}

-			};

-			fCompareConfiguration.addPropertyChangeListener(fPropertyChangeListener);

-		}	

-		

-		// register for notification with the Compare plugin's PreferenceStore 

-		/*

-		fPreferenceChangeListener= new IPropertyChangeListener() {

-			public void propertyChange(PropertyChangeEvent event) {

-				if (event.getProperty().equals(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS))

-					syncShowPseudoConflictFilter();			

-			}

-		};

-		IPreferenceStore ps= CompareUIPlugin.getDefault().getPreferenceStore();

-		if (ps != null)

-			ps.addPropertyChangeListener(fPreferenceChangeListener);

-		*/

-			

-	

-		setContentProvider(new DiffViewerContentProvider());

-		setLabelProvider(new DiffViewerLabelProvider());

-		

-		addSelectionChangedListener(

-			new ISelectionChangedListener() {

-				public void selectionChanged(SelectionChangedEvent se) {

-					updateActions();

-				}

-			}

-		);

-						

-		// syncShowPseudoConflictFilter();			

-				

-		setSorter(new DiffViewerSorter());

-		

-		ToolBarManager tbm= CompareViewerSwitchingPane.getToolBarManager(parent);

-		if (tbm != null) {

-			tbm.removeAll();

-			

-			tbm.add(new Separator("merge")); //$NON-NLS-1$

-			tbm.add(new Separator("modes")); //$NON-NLS-1$

-			tbm.add(new Separator("navigation")); //$NON-NLS-1$

-			

-			createToolItems(tbm);

-			updateActions();

-			

-			tbm.update(true);

-		}

-		

-		MenuManager mm= new MenuManager();

-		mm.setRemoveAllWhenShown(true);

-		mm.addMenuListener(

-			new IMenuListener() {

-				public void menuAboutToShow(IMenuManager mm) {

-					fillContextMenu(mm);

-					if (mm.isEmpty()) {

-						if (fEmptyMenuAction == null) {

-							fEmptyMenuAction=

-								new Action(Utilities.getString(fBundle, "emptyMenuItem")) {};	//$NON-NLS-1$

-							fEmptyMenuAction.setEnabled(false);

-						}

-						mm.add(fEmptyMenuAction);

-					}

-				}

-			}

-		);

-		tree.setMenu(mm.createContextMenu(tree));

-	}

-			

-	/**

-	 * Returns the viewer's name.

-	 *

-	 * @return the viewer's name

-	 */

-	public String getTitle() {

-		String title= Utilities.getString(fBundle, "title", null); //$NON-NLS-1$

-		if (title == null)

-			title= Utilities.getString("DiffTreeViewer.title"); //$NON-NLS-1$

-		return title;

-	}

-	

-	/**

-	 * Returns the resource bundle.

-	 *

-	 * @return the viewer's resource bundle

-	 */

-	protected ResourceBundle getBundle() {

-		return fBundle;

-	}

-

-	/**

-	 * Returns the compare configuration of this viewer.

-	 *

-	 * @return the compare configuration of this viewer

-	 */

-	public CompareConfiguration getCompareConfiguration() {

-		return fCompareConfiguration;

-	}

-			

-	/**

-	 * 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 (fPreferenceChangeListener != null) {

-			IPreferenceStore ps= CompareUIPlugin.getDefault().getPreferenceStore();

-			if (ps != null)

-				ps.removePropertyChangeListener(fPreferenceChangeListener);

-			fPreferenceChangeListener= null;

-		}

-		*/

-				

-		if (fCompareConfiguration != null) {

-			if (fPropertyChangeListener != null)

-				fCompareConfiguration.removePropertyChangeListener(fPropertyChangeListener);

-			fCompareConfiguration= null;

-		}

-		fPropertyChangeListener= null;

-		

-		super.handleDispose(event);

-	}

-	

-	/**

-	 * Tracks property changes of the configuration object.

-	 * Clients may extend to track their own property changes.

-	 */

-	protected void propertyChange(PropertyChangeEvent event) {

-	}

-	

-	protected void inputChanged(Object in, Object oldInput) {

-		super.inputChanged(in, oldInput);

-		

-		if (in != oldInput) {

-			initialSelection();

-			updateActions();

-		}

-	}

-	

-	/**

-	 * This hook method is called from within <code>inputChanged</code>

-	 * after a new input has been set but before any controls are updated.

-	 * This default implementation calls <code>navigate(true)<code>

-	 * to select and expand the first leaf node.

-	 * Clients can override this method and are free to decide whether

-	 * they want to call the inherited method.

-	 */

-	protected void initialSelection() {

-		navigate(true);

-	}

-

-	/**

-	 * Overridden to avoid expanding <code>DiffNode</code>s that shouldn't expand

-	 * (i.e. where the <code>dontExpand</code> method returns <code>true</code>).

-	 */

-	protected void internalExpandToLevel(Widget node, int level) {

-				

-		Object data= node.getData();

-		

-		if (dontExpand(data))

-			return;

-		

-		super.internalExpandToLevel(node, level);

-	}

-	

-	protected boolean dontExpand(Object o) {

-		return o instanceof DiffNode && ((DiffNode)o).dontExpand();

-	}

-	

-	//---- merge action support

-

-	/**

-	 * This factory method is called after the viewer's controls have been created.

-	 * It installs four actions in the given <code>ToolBarManager</code>. Two actions

-	 * allow for copying one side of a <code>DiffNode</code> to the other side.

-	 * Two other actions are for navigating from one node to the next (previous).

-	 * <p>

-	 * Clients can override this method and are free to decide whether they want to call

-	 * the inherited method.

-	 *

-	 * @param toolbarManager the toolbar manager for which to add the actions

-	 */

-	protected void createToolItems(ToolBarManager toolbarManager) {

-		

-//		fCopyLeftToRightAction= new Action() {

-//			public void run() {

-//				copySelected(true);

-//			}

-//		};

-//		Utilities.initAction(fCopyLeftToRightAction, fBundle, "action.TakeLeft.");

-//		toolbarManager.appendToGroup("merge", fCopyLeftToRightAction);

-

-//		fCopyRightToLeftAction= new Action() {

-//			public void run() {

-//				copySelected(false);

-//			}

-//		};

-//		Utilities.initAction(fCopyRightToLeftAction, fBundle, "action.TakeRight.");

-//		toolbarManager.appendToGroup("merge", fCopyRightToLeftAction);

-		

-//		fNextAction= new Action() {

-//			public void run() {

-//				navigate(true);

-//			}

-//		};

-//		Utilities.initAction(fNextAction, fBundle, "action.NextDiff."); //$NON-NLS-1$

-//		toolbarManager.appendToGroup("navigation", fNextAction); //$NON-NLS-1$

-

-//		fPreviousAction= new Action() {

-//			public void run() {

-//				navigate(false);

-//			}

-//		};

-//		Utilities.initAction(fPreviousAction, fBundle, "action.PrevDiff."); //$NON-NLS-1$

-//		toolbarManager.appendToGroup("navigation", fPreviousAction); //$NON-NLS-1$

-	}

-	

-	/**

-	 * This method is called to add actions to the viewer's context menu.

-	 * It installs actions for expanding tree nodes, copying one side of a <code>DiffNode</code> to the other side.

-	 * Clients can override this method and are free to decide whether they want to call

-	 * the inherited method.

-	 *

-	 * @param manager the menu manager for which to add the actions

-	 */

-	protected void fillContextMenu(IMenuManager manager) {

-		if (fExpandAllAction == null) {

-			fExpandAllAction= new Action() {

-				public void run() {

-					expandSelection();

-				}

-			};

-			Utilities.initAction(fExpandAllAction, fBundle, "action.ExpandAll."); //$NON-NLS-1$

-		}

-		ISelection selection= getSelection();

-		fExpandAllAction.setEnabled(selection != null && !selection.isEmpty());

-		manager.add(fExpandAllAction);

-		

-		if (fCopyLeftToRightAction != null)

-			manager.add(fCopyLeftToRightAction);

-		if (fCopyRightToLeftAction != null)

-			manager.add(fCopyRightToLeftAction);

-	}

-

-	/**

-	 * Expands to infinity all items in the selection.

-	 */

-	protected void expandSelection() {

-		ISelection selection= getSelection();

-		if (selection instanceof IStructuredSelection) {

-			Iterator elements= ((IStructuredSelection)selection).iterator();

-			while (elements.hasNext()) {

-				Object next= elements.next();

-				expandToLevel(next, ALL_LEVELS);

-			}

-		}

-	}

-

-	/**

-	 * Copies one side of all <code>DiffNode</code>s in the current selection to the other side.

-	 * Called from the (internal) actions for copying the sides of a <code>DiffNode</code>.

-	 * Clients may override. 

-	 * 

-	 * @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

-	 */

-	protected void copySelected(boolean leftToRight) {

-		ISelection selection= getSelection();

-		if (selection instanceof IStructuredSelection) {

-			Iterator e= ((IStructuredSelection) selection).iterator();

-			while (e.hasNext()) {

-				Object element= e.next();

-				if (element instanceof ICompareInput)

-					copyOne((ICompareInput) element, leftToRight);

-			}

-		}

-	}

-	

-	/**

-	 * Called to copy one side of the given node to the other.

-	 * This default implementation delegates the call to <code>ICompareInput.copy(...)</code>.

-	 * Clients may override. 

-	 * 

-	 * @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

-	 */

-	protected void copyOne(ICompareInput node, boolean leftToRight) {

-		

-		node.copy(leftToRight);

-		

-		// update node's image

-		update(new Object[] { node }, null);

-	}

-	

-	/**

-	 * Selects the next (or previous) node of the current selection.

-	 * If there is no current selection the first (last) node in the tree is selected.

-	 * Wraps around at end or beginning.

-	 * Clients may override. 

-	 *

-	 * @param next if <code>true</code> the next node is selected, otherwise the previous node

-	 */

-	protected void navigate(boolean next) {	

-		internalNavigate(next);

-	}

-	

-	//---- private

-	

-	/**

-	 * Selects the next (or previous) node of the current selection.

-	 * If there is no current selection the first (last) node in the tree is selected.

-	 * Wraps around at end or beginning.

-	 * Clients may override. 

-	 *

-	 * @param next if <code>true</code> the next node is selected, otherwise the previous node

-	 * @return <code>true</code> if at end (or beginning)

-	 */

-	private boolean internalNavigate(boolean next) {

-		

-		Control c= getControl();

-		if (!(c instanceof Tree))

-			return false;

-			

-		Tree tree= (Tree) c;

-		TreeItem item= null;

-		TreeItem children[]= tree.getSelection();

-		if (children != null && children.length > 0)

-			item= children[0];

-		if (item == null) {

-			children= tree.getItems();

-			if (children != null && children.length > 0) {

-				item= children[0];

-				if (item != null && item.getItemCount() <= 0) {

-					internalSetSelection(item);

-					return false;

-				}

-			}

-		}

-			

-		while (true) {

-			item= findNextPrev(item, next);

-			if (item == null)

-				break;

-			if (item.getItemCount() <= 0)

-				break;

-		}

-		

-		if (item != null) {

-			internalSetSelection(item);

-			return false;

-		}

-		return true;

-	}

-

-	private TreeItem findNextPrev(TreeItem item, boolean next) {

-		

-		if (item == null)

-			return null;

-		

-		TreeItem children[]= null;

-

-		if (!next) {

-		

-			TreeItem parent= item.getParentItem();

-			if (parent != null)

-				children= parent.getItems();

-			else

-				children= item.getParent().getItems();

-			

-			if (children != null && children.length > 0) {

-				// goto previous child

-				int index= 0;

-				for (; index < children.length; index++)

-					if (children[index] == item)

-						break;

-				

-				if (index > 0) {

-					

-					item= children[index-1];

-					

-					while (true) {

-						createChildren(item);

-						int n= item.getItemCount();

-						if (n <= 0)

-							break;

-							

-						item.setExpanded(true);

-						item= item.getItems()[n-1];

-					}

-

-					// previous

-					return item;

-				}

-			}

-			

-			// go up

-			return parent;

-					

-		} else {

-			item.setExpanded(true);

-			createChildren(item);

-			

-			if (item.getItemCount() > 0) {

-				// has children: go down

-				children= item.getItems();

-				return children[0];

-			}

-			

-			while (item != null) {

-				children= null;

-				TreeItem parent= item.getParentItem();

-				if (parent != null)

-					children= parent.getItems();

-				else

-					children= item.getParent().getItems();

-				

-				if (children != null && children.length > 0) {

-					// goto next child

-					int index= 0;

-					for (; index < children.length; index++)

-						if (children[index] == item)

-							break;

-					

-					if (index < children.length-1) {

-						// next

-						return children[index+1];

-					}

-				}

-				

-				// go up

-				item= parent;

-			}

-		}

-				

-		return item;

-	}

-	

-	private void internalSetSelection(TreeItem ti) {

-		if (ti != null) {

-			Object data= ti.getData();

-			if (data != null)

-				setSelection(new StructuredSelection(data), true);

-		}

-	}

-	

-	/*

-	private void syncShowPseudoConflictFilter() {

-		

-		IPreferenceStore ps= CompareUIPlugin.getDefault().getPreferenceStore();

-		boolean showPseudoConflicts= ps.getBoolean(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS);

-		

-		Control tree= getControl();

-		if (!tree.isDisposed()) {

-			if (showPseudoConflicts) {

-				if (fViewerFilter != null) {

-					removeFilter(fViewerFilter);

-				}

-			} else {

-				if (fViewerFilter == null)

-					fViewerFilter= new FilterSame();	

-				addFilter(fViewerFilter);

-			}

-		}

-	}

-	*/

-		

-	private final boolean isEditable(Object element, boolean left) {

-		if (element instanceof ICompareInput) {

-			ICompareInput diff= (ICompareInput) element;

-			Object side= left ? diff.getLeft() : diff.getRight();

-			if (side == null && diff instanceof IDiffElement) {

-				IDiffContainer container= ((IDiffElement)diff).getParent();

-				if (container instanceof ICompareInput) {

-					ICompareInput parent= (ICompareInput) container;

-					side= left ? parent.getLeft() : parent.getRight();

-				}

-			}

-			if (side instanceof IEditableContent)

-				return ((IEditableContent) side).isEditable();

-		}

-		return false;

-	}

-		

-	private void updateActions() {

-		int leftToRight= 0;

-		int rightToLeft= 0;

-		ISelection selection= getSelection();

-		if (selection instanceof IStructuredSelection) {

-			IStructuredSelection ss= (IStructuredSelection) selection;

-			Iterator e= ss.iterator();

-			while (e.hasNext()) {

-				Object element= e.next();

-				if (element instanceof ICompareInput) {

-					if (isEditable(element, false))

-						leftToRight++;

-					if (isEditable(element, true))

-						rightToLeft++;

-					if (leftToRight > 0 && rightToLeft > 0)

-						break;

-				}

-			}

-			if (fExpandAllAction != null)

-				fExpandAllAction.setEnabled(selection.isEmpty());

-		}

-		if (fCopyLeftToRightAction != null)

-			fCopyLeftToRightAction.setEnabled(leftToRight > 0);

-		if (fCopyRightToLeftAction != null)

-			fCopyRightToLeftAction.setEnabled(rightToLeft > 0);

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewerResources.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewerResources.properties
deleted file mode 100644
index 9fc63b6..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffTreeViewerResources.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-# =====================================

-# (c) Copyright IBM Corp. 2000, 2001.

-# All Rights Reserved.

-# =====================================

-

-# @(#)DiffTreeViewerResources.properties

-#

-# Resource strings for DiffTreeViewer.java

-

-title= Structure Compare

-defaultLabel= <no name>

-

-#####################################################

-# Dummy menu item for empty context menu

-#####################################################

-

-emptyMenuItem= <Empty Menu>

-

-#####################################################

-# Actions

-#####################################################

-

-action.Smart.label=Smart

-action.Smart.tooltip=Try to Guess Similar Elements

-action.Smart.image=smartmode_co.gif

-

-action.ExpandAll.label=Expand All

-action.ExpandAll.tooltip=Expand All Nodes

-

-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.TakeLeft.label=Copy Left to Right

-action.TakeLeft.tooltip=Copy Selected Nodes from Left to Right

-action.TakeLeft.image=copycont_r_co.gif

-

-action.TakeRight.label=Copy Right to Left

-action.TakeRight.tooltip=Copy Selected Nodes from Right to Left

-action.TakeRight.image=copycont_l_co.gif

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java
deleted file mode 100644
index e8c8ab3..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java
+++ /dev/null
@@ -1,515 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import java.io.*;

-import java.util.*;

-import java.text.MessageFormat;

-

-import org.eclipse.jface.util.Assert;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.core.runtime.IProgressMonitor;

-import org.eclipse.core.runtime.OperationCanceledException;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.internal.Utilities;

-

-

-/**

- * A generic two-way or three-way differencing engine.

- * <p>

- * The engine is used by calling one of the <code>findDifferences</code> methods and passing

- * in the objects to compare.

- * The engine calls the following methods on the input objects to perform the compare:

- * <UL>

- * <LI><code>getChildren</code>: for enumerating the children of an object (if any),

- * <LI><code>contentsEqual</code>: for comparing the content of leaf objects, that is, objects without children,

- * <LI><code>visit</code>: for every pair of compared object the compare result is passed in.

- * </UL>

- * Clients may use as is, or subclass to provide a custom implementation for the three hooks. 

- * However the default implementation already deals with the typical case:

- * <UL>

- * <LI><code>getChildren</code>: tries to apply the <code>IStructureComparator</code>

- * 	interface to enumerate the children,

- * <LI><code>contentsEqual</code>: tries to apply the <code>IStreamContentAccessor</code> interface

- *	to perform a byte-wise content comparison,

- * <LI><code>visit</code>: creates a <code>DiffNode</code> for any detected difference between the compared objects and

- *	links it under a parent node effectively creating a tree of differences.

- * </UL>

- * The different kind of changes detected by the engine are decoded as follows:

- * In the two-way case only NO_CHANGE, ADDITION, DELETION, and CHANGE are used.

- * In the three-way case these constants are bitwise ORed with one of directional constants

- * LEFT, RIGHT, and CONFLICTING.

- */

-public class Differencer {

-	

-	// The kind of differences.

-	/**

-	 * Difference constant (value 0) indicating no difference.

-	 */

-	public static final int NO_CHANGE= 0;

-	/**

-	 * Difference constant (value 1) indicating one side was added.

-	 */

-	public static final int ADDITION= 1;

-	/**

-	 * Difference constant (value 2) indicating one side was removed.

-	 */

-	public static final int DELETION= 2;

-	/**

-	 * Difference constant (value 3) indicating side changed.

-	 */

-	public static final int CHANGE= 3;

-

-	/**

-	 * Bit mask (value 3) for extracting the kind of difference.

-	 */

-	public static final int CHANGE_TYPE_MASK= 3;

-

-	// The direction of a three-way change.

-	/**

-	 * Three-way change constant (value 4) indicating a change on left side.

-	 */

-	public static final int LEFT= 4;

-	

-	/**

-	 * Three-way change constant (value 8) indicating a change on right side.

-	 */

-	public static final int RIGHT= 8;

-	

-	/**

-	 * Three-way change constant (value 12) indicating a change on left and

-	 * right sides.

-	 */

-	public static final int CONFLICTING= 12;

-

-	/**

-	 * Bit mask (value 12) for extracting the direction of a three-way change.

-	 */

-	public static final int DIRECTION_MASK= 12;

-

-	/**

-	 * Constant (value 16) indicating a change on left and 

-	 * right side (with respect to ancestor) but left and right are identical.

-	 */

-	public static final int PSEUDO_CONFLICT= 16;

-

-	

-	static class Node {

-		List fChildren;

-		int fCode;

-		Object fAncestor;

-		Object fLeft;

-		Object fRight;

-		

-		Node() {

-		}

-		Node(Node parent, Object ancestor, Object left, Object right) {

-			parent.add(this);

-			fAncestor= ancestor;

-			fLeft= left;

-			fRight= right;

-		}

-		void add(Node child) {

-			if (fChildren == null)

-				fChildren= new ArrayList();

-			fChildren.add(child);

-		}

-		Object visit(Differencer d, Object parent, int level) {

-			if (fCode == NO_CHANGE)

-				return null;

-			//dump(level);

-			Object data= d.visit(parent, fCode, fAncestor, fLeft, fRight);

-			if (fChildren != null) {

-				Iterator i= fChildren.iterator();

-				while (i.hasNext()) {

-					Node n= (Node) i.next();

-					n.visit(d, data, level+1);

-				}

-			}

-			return data;

-		}

-		private void dump(int level) {

-			String name= null;

-			if (fAncestor instanceof ITypedElement)

-				name= ((ITypedElement)fAncestor).getName();

-			if (name == null && fLeft instanceof ITypedElement)

-				name= ((ITypedElement)fLeft).getName();

-			if (name == null && fRight instanceof ITypedElement)

-				name= ((ITypedElement)fRight).getName();

-			if (name == null)

-				name= "???"; //$NON-NLS-1$

-			

-			for (int i= 0; i < level; i++)

-				System.out.print("  "); //$NON-NLS-1$

-			

-			System.out.println(getDiffType(fCode) + name);

-		}

-		private String getDiffType(int code) {

-			String dir= " "; //$NON-NLS-1$

-			switch (code & DIRECTION_MASK) {

-			case LEFT:

-				dir= ">"; //$NON-NLS-1$

-				break;

-			case RIGHT:

-				dir= "<"; //$NON-NLS-1$

-				break;

-			case CONFLICTING:

-				dir= "!"; //$NON-NLS-1$

-				break;

-			}

-			String change= "="; //$NON-NLS-1$

-			switch (code & CHANGE_TYPE_MASK) {

-			case ADDITION:

-				change= "+"; //$NON-NLS-1$

-				break;

-			case DELETION:

-				change= "-"; //$NON-NLS-1$

-				break;

-			case CHANGE:

-				change= "#"; //$NON-NLS-1$

-				break;

-			}

-			return dir + change + " "; //$NON-NLS-1$

-		}

-	} 

-	

-	/**

-	 * Creates a new differencing engine.

-	 */

-	public Differencer() {

-	}

-	

-	/**

-	 * Starts the differencing engine on the three input objects. If threeWay is <code>true</code> a 

-	 * three-way comparison is performed, otherwise a two-way compare (in the latter case the ancestor argument is ignored).

-	 * The progress monitor is passed to the method <code>updateProgress</code> which is called for every node or

-	 * leaf compare. The method returns the object that was returned from the top-most call to method <code>visit</code>.

-	 * At most two of the ancestor, left, and right parameters are allowed to be <code>null</code>.

-	 *

-	 * @param threeWay if <code>true</code> a three-way comparison is performed, otherwise a two-way compare

-	 * @param pm a progress monitor which is passed to method <code>updateProgress</code>

-	 * @param data a client data that is passed to the top-level call to <code>visit</code>

-	 * @param ancestor the ancestor object of the compare (may be <code>null</code>)

-	 * @param left the left object of the compare 

-	 * @param right the right object of the compare

-	 * @return the object returned from the top most call to method <code>visit</code>,

-	 *   possibly <code>null</code>

-	 */

-	public Object findDifferences(boolean threeWay, IProgressMonitor pm, Object data, Object ancestor, Object left, Object right) {

-		

-		Node root= new Node();

-		

-		int code= traverse(threeWay, root, pm, threeWay ? ancestor : null, left, right);

-				

-		if (code != NO_CHANGE) {

-			List l= root.fChildren;

-			if (l.size() > 0) {

-				Node first= (Node)l.get(0);

-				return first.visit(this, data, 0);

-			}

-		}

-		return null;

-	}

-	

-	/**

-	 * Traverse tree in postorder.

-	 */

-	private int traverse(boolean threeWay, Node parent, IProgressMonitor pm, Object ancestor, Object left, Object right) {

-				

-		Object[] ancestorChildren= getChildren(ancestor);

-		Object[] rightChildren= getChildren(right);

-		Object[] leftChildren= getChildren(left);

-		

-		int code= NO_CHANGE;

-		

-		Node node= new Node(parent, ancestor, left, right);

-			

-		boolean content= true;	// we reset this if we have at least one child

-		

-		if (((threeWay && ancestorChildren != null) || !threeWay)

-					 && rightChildren != null && leftChildren != null) {

-			// we only recurse down if no leg is null

-			// a node

-			

-			Set allSet= new HashSet(20);

-			Map ancestorSet= null;

-			Map rightSet= null;

-			Map leftSet= null;

-						

-			if (ancestorChildren != null) {

-				ancestorSet= new HashMap(10);

-				for (int i= 0; i < ancestorChildren.length; i++) {

-					Object ancestorChild= ancestorChildren[i];

-					ancestorSet.put(ancestorChild, ancestorChild);

-					allSet.add(ancestorChild);

-				}

-			}

-

-			if (rightChildren != null) {

-				rightSet= new HashMap(10);

-				for (int i= 0; i < rightChildren.length; i++) {

-					Object rightChild= rightChildren[i];

-					rightSet.put(rightChild, rightChild);

-					allSet.add(rightChild);

-				}

-			}

-

-			if (leftChildren != null) {

-				leftSet= new HashMap(10);

-				for (int i= 0; i < leftChildren.length; i++) {

-					Object leftChild= leftChildren[i];

-					leftSet.put(leftChild, leftChild);

-					allSet.add(leftChild);

-				}

-			}

-						

-			Iterator e= allSet.iterator();

-			while (e.hasNext()) {

-				Object keyChild= e.next();

-				

-				content= false;

-				

-				if (pm != null) {

-					

-					if (pm.isCanceled())

-						throw new OperationCanceledException();

-						

-					updateProgress(pm, keyChild);

-				}

-				

-				Object ancestorChild= ancestorSet != null ? ancestorSet.get(keyChild) : null;

-				Object leftChild= leftSet != null ? leftSet.get(keyChild) : null;

-				Object rightChild= rightSet != null ? rightSet.get(keyChild) : null;

-				

-				int c= traverse(threeWay, node, pm, ancestorChild, leftChild, rightChild);

-			

-				if ((c & CHANGE_TYPE_MASK) != NO_CHANGE) {

-					code|= CHANGE;	// deletions and additions of child result in a change of the container

-					code|= (c & DIRECTION_MASK);	// incoming & outgoing are just ored

-				}

-			}

-		}

-

-		if (content)			// a leaf

-			code= compare(threeWay, ancestor, left, right);

-								

-		node.fCode= code;

-							

-		return code;

-	}

-	

-	/**

-	 * Called for every node or leaf comparison.

-	 * The differencing engine passes in the input objects of the compare and the result of the compare.

-	 * The data object is the value returned from a call to the <code>visit</code> method on the parent input.

-	 * It can be considered the "parent" reference and is useful when building a tree.

-	 * <p>

-	 * The <code>Differencer</code> implementation returns a new

-	 * <code>DiffNode</code> which is initialized with the corresponding values.

-	 * Subclasses may override.

-	 *

-	 * @param data object returned from parent call to <code>visit</code>,

-	 *   possibly <code>null</code>

-	 * @param result the result of the compare operation performed on the three inputs

-	 * @param ancestor the compare ancestor of the left and right inputs

-	 * @param left the left input to the compare

-	 * @param right the right input to the compare

-	 * @return the result, possibly <code>null</code>

-	 */

-	protected Object visit(Object data, int result, Object ancestor, Object left, Object right) {

-		return new DiffNode((IDiffContainer) data, result, (ITypedElement)ancestor, (ITypedElement)left, (ITypedElement)right);

-	}

-	

-	/**

-	 * Performs a 2-way or 3-way compare of the given leaf elements and returns an integer

-	 * describing the kind of difference.

-	 */

-	private int compare(boolean threeway, Object ancestor, Object left, Object right) {

-		

-		int description= NO_CHANGE;

-		

-		if (threeway) {

-			if (ancestor == null) {

-				if (left == null) {

-					if (right == null) {

-						Assert.isTrue(false);

-						// shouldn't happen

-					} else {

-						description= RIGHT | ADDITION;

-					}

-				} else {

-					if (right == null) {

-						description= LEFT | ADDITION;

-					} else {

-						description= CONFLICTING | ADDITION;

-						if (contentsEqual(left, right))

-							description|= PSEUDO_CONFLICT;

-					}

-				}

-			} else {

-				if (left == null) {

-					if (right == null) {

-						description= CONFLICTING | DELETION | PSEUDO_CONFLICT;

-					} else {

-						if (contentsEqual(ancestor, right))		

-							description= LEFT | DELETION;

-						else

-							description= CONFLICTING | CHANGE;	

-					}

-				} else {

-					if (right == null) {

-						if (contentsEqual(ancestor, left))	

-							description= RIGHT | DELETION;

-						else

-							description= CONFLICTING | CHANGE;	

-					} else {

-						boolean ay= contentsEqual(ancestor, left);

-						boolean am= contentsEqual(ancestor, right);

-						

-						if (ay && am)

-							;

-						else if (ay && !am) {

-							description= RIGHT | CHANGE;

-						} else if (!ay && am) {

-							description= LEFT | CHANGE;

-						} else {

-							description= CONFLICTING | CHANGE;

-							if (contentsEqual(left, right))

-								description|= PSEUDO_CONFLICT;

-						}

-					}

-				}

-			}

-		} else {	// two way compare ignores ancestor

-			if (left == null) {

-				if (right == null) {

-					Assert.isTrue(false);

-					// shouldn't happen

-				} else {

-					description= ADDITION;

-				}

-			} else {

-				if (right == null) {

-					description= DELETION;

-				} else {

-					if (! contentsEqual(left, right))

-						description= CHANGE;

-				}

-			}

-		}

-							

-		return description;

-	}

-		

-	/**

-	 * Performs a content compare on the two given inputs.

-	 * <p>

-	 * The <code>Differencer</code> implementation

-	 * returns <code>true</code> if both inputs implement <code>IStreamContentAccessor</code>

-	 * and their byte contents is identical. Subclasses may override to implement 

-	 * a different content compare on the given inputs.

-	 * </p>

-	 *

-	 * @param input1 first input to contents compare

-	 * @param input2 second input to contents compare

-	 * @return <code>true</code> if content is equal

-	 */

-	protected boolean contentsEqual(Object input1, Object input2) {

-		

-		if (input1 == input2)

-			return true;

-			

-		InputStream is1= getStream(input1);

-		InputStream is2= getStream(input2);

-		

-		if (is1 == null && is2 == null)	// no byte contents

-			return true;

-		

-		try {

-			if (is1 == null || is2 == null)	// only one has contents

-				return false;

-			

-			while (true) {

-				int c1= is1.read();

-				int c2= is2.read();

-				if (c1 == -1 && c2 == -1)

-					return true;

-				if (c1 != c2)

-					break;

-				

-			}

-		} catch (IOException ex) {

-		} finally {

-			if (is1 != null) {

-				try {

-					is1.close();

-				} catch(IOException ex) {

-				}

-			}

-			if (is2 != null) {

-				try {

-					is2.close();

-				} catch(IOException ex) {

-				}

-			}

-		}

-		return false;

-	}

-	

-	/**

-	 * Tries to return an InputStream for the given object.

-	 * Returns <code>null</code> if the object not an IStreamContentAccessor

-	 * or an error occured.

-	 */

-	private InputStream getStream(Object o) {

-		if (o instanceof IStreamContentAccessor) {

-			try {

-				return ((IStreamContentAccessor)o).getContents();

-			} catch(CoreException ex) {

-			}

-		}

-		return null;

-	}

-	

-	/**

-	 * Returns the children of the given input or <code>null</code> if there are no children.

-	 * <p>

-	 * The <code>Differencer</code> implementation checks whether the input 

-	 * implements the <code>IStructureComparator</code> interface. If yes it is used

-	 * to return an array containing all children. Otherwise <code>null</code> is returned.

-	 * Subclasses may override to implement a different strategy to enumerate children.

-	 * </p>

-	 *

-	 * @param input the object for which to return children

-	 */

-	protected Object[] getChildren(Object input) {

-		if (input instanceof IStructureComparator)

-			return ((IStructureComparator)input).getChildren();

-		return null;

-	}

-	

-	/**

-	 * Called for every leaf or node compare to update progress information.

-	 * <p>

-	 * The <code>Differencer</code> implementation shows the name of the input object

-	 * as a subtask. Subclasses may override.

-	 * </p>

-	 *

-	 * @param progressMonitor the progress monitor for reporting progress

-	 * @name input a non-<code>null</code> input object

-	 */

-	protected void updateProgress(IProgressMonitor progressMonitor, Object node) {

-		if (node instanceof ITypedElement) {

-			String name= ((ITypedElement)node).getName();

-			String fmt= Utilities.getString("Differencer.progressFormat"); //$NON-NLS-1$

-			String msg= MessageFormat.format(fmt, new String[] { name });

-			progressMonitor.subTask(msg);

-			//progressMonitor.worked(1);

-		}

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java
deleted file mode 100644
index 5707300..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import java.io.ByteArrayInputStream;

-import java.io.InputStream;

-import java.util.ArrayList;

-import java.util.Iterator;

-

-import org.eclipse.jface.text.*;

-

-import org.eclipse.core.runtime.CoreException;

-import org.eclipse.compare.*;

-import org.eclipse.compare.internal.Utilities;

-import org.eclipse.compare.contentmergeviewer.*;

-import org.eclipse.compare.contentmergeviewer.IDocumentRange;

-import org.eclipse.compare.contentmergeviewer.TextMergeViewer;

-

-

-/**

- * A document range node represents a structural element

- * when performing a structure compare of documents.

- * <code>DocumentRangeNodes</code> are created while parsing the document and represent

- * a semantic entity (e.g. a Java class or method).

- * As a consequence of the parsing a <code>DocumentRangeNode</code> maps to a range

- * of characters in the document.

- * <p>

- * Since a <code>DocumentRangeNode</code> implements the <code>IStructureComparator</code>

- * and <code>IStreamContentAccessor</code> interfaces it can be used as input to the

- * differencing engine. This makes it possible to perform

- * a structural diff on a document and have the nodes and leaves of the compare easily map

- * to character ranges within the document.

- * <p>

- * Subclasses may add additional state collected while parsing the document.

- * </p> 

- * @see Differencer

- */

-public class DocumentRangeNode

-		implements IDocumentRange, IStructureComparator, IEditableContent, IStreamContentAccessor {

-

-	private static final boolean POS_UPDATE= true;

-		

-	private IDocument fBaseDocument;

-	private Position fRange; // the range in the base document

-	private int fTypeCode;

-	private String fID;

-	private Position fAppendPosition; // a position where to insert a child textually

-	private ArrayList fChildren;

-

-	/**

-	 * Creates a new <code>DocumentRangeNode</code> for the given range within the specified

-	 * document. The <code>typeCode</code> is uninterpreted client data. The ID is used when comparing

-	 * two nodes with each other: i.e. the differencing engine performs a content compare 

-	 * on two nodes if their IDs are equal.

-	 *

-	 * @param typeCode a type code for this node

-	 * @param id an identifier for this node

-	 * @param document document on which this node is based on

-	 * @param start start position of range within document

-	 * @param length length of range

-	 */

-	public DocumentRangeNode(int typeCode, String id, IDocument document, int start, int length) {

-		

-		fTypeCode= typeCode;

-		fID= id;

-		

-		fBaseDocument= document;

-		fBaseDocument.addPositionCategory(RANGE_CATEGORY);

-		fRange= new Position(start, length);

-		

-		if (POS_UPDATE) {

-			try {

-				document.addPosition(RANGE_CATEGORY, fRange);

-			} catch (BadPositionCategoryException ex) {

-			} catch (BadLocationException ex) {

-			}

-		}

-	}

-

-	/* (non Javadoc)

-	 * see IDocumentRange.getDocument

-	 */

-	public IDocument getDocument() {

-		return fBaseDocument;

-	}

-	

-	/* (non Javadoc)

-	 * see IDocumentRange.getRange

-	 */

-	public Position getRange() {

-		return fRange;

-	}

-	

-	/**

-	 * Returns the type code of this node.

-	 * The type code is uninterpreted client data which can be set in the constructor.

-	 *

-	 * @return the type code of this node

-	 */

-	public int getTypeCode() {

-		return fTypeCode;

-	}

-	

-	/**

-	 * Returns this node's id.

-	 * It is used in <code>equals</code> and <code>hashcode</code>.

-	 *

-	 * @return the node's id

-	 */

-	public String getId() {

-		return fID;

-	}

-

-	/**

-	 * Sets this node's id.

-	 * It is used in <code>equals</code> and <code>hashcode</code>.

-	 *

-	 * @param id the new id for this node

-	 */

-	public void setId(String id) {

-		fID= id;

-	}

-

-	/**

-	 * Adds the given node as a child.

-	 *

-	 * @param node the node to add as a child

-	 */

-	public void addChild(DocumentRangeNode node) {

-		if (fChildren == null)

-			fChildren= new ArrayList();

-		fChildren.add(node);

-	}

-

-	/* (non Javadoc)

-	 * see IStructureComparator.getChildren

-	 */

-	public Object[] getChildren() {

-		if (fChildren != null)

-			return fChildren.toArray(); 

-		return new Object[0];

-	}

-

-	/**

-	 * Sets the length of the range of this node.

-	 *

-	 * @param length the length of the range

-	 */

-	public void setLength(int length) {

-		getRange().setLength(length);

-	}

-

-	/**

-	 * Sets a position within the document range that can be used to (legally) insert

-	 * text without breaking the syntax of the document.

-	 * <p>

-	 * E.g. when parsing a Java document the "append position" of a <code>DocumentRangeNode</code>

-	 * representating a Java class could be the character position just before the closing bracket.

-	 * Inserting the text of a new method there would not disturb the syntax of the class.

-	 *

-	 * @param pos the character position within the underlying document where text can be legally inserted

-	 */

-	public void setAppendPosition(int pos) {

-		if (POS_UPDATE) {

-			fBaseDocument.removePosition(fAppendPosition);

-			try {

-				Position p= new Position(pos);

-				fBaseDocument.addPosition(RANGE_CATEGORY, p);

-				fAppendPosition= p;

-			} catch (BadPositionCategoryException ex) {

-			} catch (BadLocationException ex) {

-				// ignore

-			}

-		} else {

-			fAppendPosition= new Position(pos);

-		}

-	}

-

-	/**

-	 * Returns the position that has been set with <code>setAppendPosition</code>.

-	 * If <code>setAppendPosition</code> hasn't been called, the position after the last character

-	 * of this range is returned.

-	 *

-	 * @return a position where text can be legally inserted

-	 */

-	public Position getAppendPosition() {

-		if (fAppendPosition == null) {

-			if (POS_UPDATE) {

-				try {

-					Position p= new Position(fBaseDocument.getLength());

-					fBaseDocument.addPosition(RANGE_CATEGORY, p);

-					fAppendPosition= p;

-				} catch (BadPositionCategoryException ex) {

-				} catch (BadLocationException ex) {

-					// ignore

-				}

-			} else {

-				fAppendPosition= new Position(fBaseDocument.getLength());

-			}

-		}

-		return fAppendPosition;

-	}

-

-	/**

-	 * Implementation based on <code>getID</code>.

-	 */

-	public boolean equals(Object other) {

-		if (other != null && other.getClass() == getClass()) {

-			DocumentRangeNode tn= (DocumentRangeNode) other;

-			return fTypeCode == tn.fTypeCode && fID.equals(tn.fID);

-		}

-		return super.equals(other);

-	}

-

-	/**

-	 * Implementation based on <code>getID</code>.

-	 */

-	public int hashCode() {

-		return fID.hashCode();

-	}

-

-	/**

-	 * Find corresponding position

-	 */

-	private Position findCorrespondingPosition(DocumentRangeNode otherParent, DocumentRangeNode child) {

-

-		// we try to find a predecessor of left Node which exists on the right side

-

-		if (child != null && fChildren != null) {

-			int ix= otherParent.fChildren.indexOf(child);

-			if (ix >= 0) {

-

-				for (int i= ix - 1; i >= 0; i--) {

-					DocumentRangeNode c1= (DocumentRangeNode) otherParent.fChildren.get(i);

-					int i2= fChildren.indexOf(c1);

-					if (i2 >= 0) {

-						DocumentRangeNode c= (DocumentRangeNode) fChildren.get(i2);

-						//System.out.println("  found corresponding: " + i2 + " " + c);

-						Position p= c.fRange;

-

-						//try {

-						Position po= new Position(p.getOffset() + p.getLength() + 1, 0);

-						//c.fBaseDocument.addPosition(RANGE_CATEGORY, po);

-						return po;

-						//} catch (BadLocationException ex) {

-						//}

-						//break;

-					}

-				}

-

-				for (int i= ix; i < otherParent.fChildren.size(); i++) {

-					DocumentRangeNode c1= (DocumentRangeNode) otherParent.fChildren.get(i);

-					int i2= fChildren.indexOf(c1);

-					if (i2 >= 0) {

-						DocumentRangeNode c= (DocumentRangeNode) fChildren.get(i2);

-						//System.out.println("  found corresponding: " + i2 + " " + c);

-						Position p= c.fRange;

-						//try {

-						Position po= new Position(p.getOffset(), 0);

-						//c.fBaseDocument.addPosition(RANGE_CATEGORY, po);

-						return po;

-						//} catch (BadLocationException ex) {

-						//}

-						//break;

-					}

-				}

-

-			}

-		}

-		return getAppendPosition();

-	}

-

-	private void add(String s, DocumentRangeNode parent, DocumentRangeNode child) {

-

-		Position p= findCorrespondingPosition(parent, child);

-		if (p != null) {

-			try {

-				fBaseDocument.replace(p.getOffset(), p.getLength(), s);

-			} catch (BadLocationException ex) {

-				// ignore

-			}

-		}

-	}

-	

-	/* (non Javadoc)

-	 * see IStreamContentAccessor.getContents

-	 */

-	public InputStream getContents() {

-		String s;

-		try {

-			s= fBaseDocument.get(fRange.getOffset(), fRange.getLength());

-		} catch (BadLocationException ex) {

-			s= ""; //$NON-NLS-1$

-		}

-		return new ByteArrayInputStream(s.getBytes());

-	}

-

-	/* (non Javadoc)

-	 * see IEditableContent.isEditable

-	 */

-	public boolean isEditable() {

-		return true;

-	}

-		

-	/* (non Javadoc)

-	 * see IEditableContent.replace

-	 */

-	public ITypedElement replace(ITypedElement child, ITypedElement other) {

-

-		DocumentRangeNode src= null;

-		String srcContents= ""; //$NON-NLS-1$

-		

-		if (other != null) {

-			src= (DocumentRangeNode) child;

-			

-			if (other instanceof IStreamContentAccessor) {

-				try {

-					InputStream is= ((IStreamContentAccessor)other).getContents();

-					byte[] bytes= Utilities.readBytes(is);

-					srcContents= new String(bytes);

-				} catch(CoreException ex) {

-				}

-			}

-		}

-

-		if (child != null) { // there is a destination

-			

-//			if (child instanceof DocumentRangeNode) {

-//				DocumentRangeNode drn= (DocumentRangeNode) child;

-//

-//				IDocument doc= drn.getDocument();

-//				Position range= drn.getRange();

-//				try {

-//					doc.replace(range.getOffset(), range.getLength(), srcContents);

-//				} catch (BadLocationException ex) {

-//				}

-//			}

-		} else {

-			// no destination: we have to add the contents into the parent

-			add(srcContents, null /*srcParentNode*/, src);

-		}

-		return child;

-	}

-	

-	/* (non Javadoc)

-	 * see IEditableContent.setContent

-	 */

-	public void setContent(byte[] content) {

-//		fBaseDocument.set(new String(content));

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java
deleted file mode 100644
index badc216..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import org.eclipse.compare.ITypedElement;

-import org.eclipse.swt.graphics.Image;

-

-/**

- * Interface for objects used as input to a two-way or three-way compare viewer.

- * It defines API for accessing the three sides for the compare,

- * and a name and image which is used when displaying the three way input

- * in the UI, for example, in a title bar.

- * <p>

- * Note: at most two sides of an <code>ICompareInput</code> can be <code>null</code>,

- * (as it is normal for additions or deletions) but not all three.

- * <p>

- * <code>ICompareInput</code> provides methods for registering

- * <code>ICompareInputChangeListener</code>s

- * that get informed if one (or more)

- * of the three sides of an <code>ICompareInput</code> object changes its value.

- * <p>

- * For example when accepting an incoming addition

- * the (non-<code>null</code>) left side of an <code>ICompareInput</code>

- * is copied to the right side by means of method <code>copy</code>.

- * This should trigger a call to <code>compareInputChanged</code> of registered

- * <code>ICompareInputChangeListener</code>s. 

- * <p>

- * Clients can implement this interface, or use the convenience implementation 

- * <code>DiffNode</code>.

- * </p>

- * 

- * @see StructureDiffViewer

- * @see org.eclipse.compare.contentmergeviewer.ContentMergeViewer

- * @see DiffNode

- */

-public interface ICompareInput {

-

-	/**

-	 * Returns name of input.

-	 * This name is displayed when this input is shown in a viewer.

-	 * In many cases this name is the name of one of the non-<code>null</code> sides or a combination

-	 * thereof.

-	 *

-	 * @return name of input

-	 */

-	String getName();

-	

-	/**

-	 * Returns an image representing this input.

-	 * This image is typically displayed when this input is shown in a viewer.

-	 * In many cases this image is the image of one of the non-<code>null</code> sides.

-	 *

-	 * @return image representing this input, or <code>null</code> if no icon should be shown

-	 */

-	Image getImage();

-

-	/**

-	 * Returns the kind of difference between the

-	 * three sides ancestor, left and right.

-	 * This field is only meaningful if the <code>ICompareInput</code>

-	 * is the result of another compare. In this case it is used

-	 * together with <code>getImage</code> to compose a icon

-	 * which reflects the kind of difference between the two or three elements.

-	 *

-	 * @return kind of difference (see <code>Differencer</code>)

-	 */

-	int getKind();

-	

-	/**

-	 * Returns the ancestor side of this input.

-	 * Returns <code>null</code> if this input has no ancestor

-	 * or in the two-way compare case.

-	 *

-	 * @return the ancestor of this input, or <code>null</code>

-	 */

-	ITypedElement getAncestor();

-	

-	/**

-	 * Returns the left side of this input.

-	 * Returns <code>null</code> if there is no left side (deletion or addition).

-	 *

-	 * @return the left side of this input, or <code>null</code>

-	 */

-	ITypedElement getLeft();

-	

-	/**

-	 * Returns the right side of this input.

-	 * Returns <code>null</code> if there is no right side (deletion or addition).

-	 *

-	 * @return the right side of this input, or <code>null</code>

-	 */

-	ITypedElement getRight();

-	

-	/**

-	 * Registers the given listener for notification.

-	 * If the identical listener is already registered the method has no effect.

-	 *

-	 * @param listener the listener to register for changes of this input

-	 */

-	void addCompareInputChangeListener(ICompareInputChangeListener listener);

-	

-	/**

-	 * Unregisters the given listener.

-	 * If the identical listener is not registered the method has no effect.

-	 *

-	 * @param listener the listener to unregister

-	 */

-	void removeCompareInputChangeListener(ICompareInputChangeListener listener);

-	

-	/**

-	 * Copy one side (source) to the other side (destination) depending on the 

-	 * value of <code>leftToRight</code>. This method is called from

-	 * a merge viewer if a corresponding action ("take left" or "take right")

-	 * has been pressed.

-	 * <p>

-	 * The implementation should handle the following cases:

-	 * <UL>

-	 * <LI>

-	 * if the source side is <code>null</code> the destination must be deleted,

-	 * <LI>

-	 * if the destination is <code>null</code> the destination must be created

-	 * and filled with the contents from the source,

-	 * <LI>

-	 * if both sides are non-<code>null</code> the contents of source must be copied to destination.

-	 * </UL>

-	 * In addition the implementation should send out notification to the registered

-	 * <code>ICompareInputChangeListener</code>.

-	 * 

-	 * @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

-	 */

-	void copy(boolean leftToRight);

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java
deleted file mode 100644
index ba8d967..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-/**

- * Listener that gets informed if one (or more)

- * of the three sides of an <code>ICompareInput</code> object changes its value.

- * <p>

- * For example when accepting an incoming addition

- * the (non-null) left side of an <code>ICompareInput</code>

- * is copied to the right side (which was <code>null</code>).

- * This triggers a call to <code>compareInputChanged</code> of registered

- * <code>ICompareInputChangeListener</code>. 

- * <p>

- * Note however, that listener are not informed if the content of one of the sides changes.

- * <p>

- * Clients may implement this interface. It is also implemented by viewers that take 

- * an <code>ICompareInput</code> as input.

- * </p>

- */

-public interface ICompareInputChangeListener {

-	

-	/**

-	 * Called whenever the value (not the content) of one or more of the three sides 

- 	 * of a <code>ICompareInput</code> has changed.

-	 *

-	 * @param source the <code>ICompareInput</code> that has changed

-	 */

-	void compareInputChanged(ICompareInput source);

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java
deleted file mode 100644
index c87f30c..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import java.util.Iterator;

-

-/**

- * <code>IDiffContainer</code> is a <code>IDiffElement</code> with children.

- * <p>

- * <code>IDiffContainer</code> are the inner nodes displayed

- * by the <code>DiffTreeViewer</code>.

- * <code>IDiffContainer</code> are typically created as the result of performing

- * a compare with the <code>Differencer</code>.

- * <p>

- * Clients may implement this interface, or use one of the standard implementations,

- * <code>DiffContainer</code> or <code>DiffNode</code>.

- *

- * @see Differencer

- * @see DiffTreeViewer

- */

-public interface IDiffContainer extends IDiffElement {

-

-	/**

-	 * Returns whether this container has at least one child.

-	 * In some cases this methods avoids having to call the

-	 * potential more costly <code>getChildren</code> method.

-	 * 

-	 * @return <code>true</code> if this container has at least one child 

-	 */

-	boolean hasChildren();

-

-	/**

-	 * Returns the children of this container.

-	 * If this container has no children an empty array is returned (not <code>null</code>).

-	 * 

-	 * @return the children of this container as an array

-	 */

-	IDiffElement[] getChildren();

-

-	/**

-	 * Adds the given child to this container.

-	 * If the child is already contained in this container, this method has no effect.

-	 *

-	 * @param child the child to be added to this container

-	 */

-	void add(IDiffElement child);

-	

-	/**

-	 * Removes the given child from this container.

-	 * If the container becomes empty it is removed from its container.

-	 * If the child is not contained in this container, this method has no effect.

-	 *

-	 * @param child the child to be removed from this container

-	 */

-	void removeToRoot(IDiffElement child);

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java
deleted file mode 100644
index 32e858a..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import org.eclipse.compare.ITypedElement;

-

-/**

- * An <code>IDiffElement</code> is used in the <code>DiffTreeViewer</code>

- * to display the kind of change detected as the result of a two-way or three-way compare.

- * <p>

- * The base interface <code>ITypedElement</code> provides a name, a type, and an image.

- * <code>IDiffElement</code> adds API for maintaining a parent relationship.

- * <p>

- * <code>DiffTreeViewer</code> works on a tree of <code>IDiffElements</code>.

- * Leaf elements must implement the

- * <code>IDiffElement</code> interface, inner nodes the <code>IDiffContainer</code> interface.

- * <p>

- * <code>IDiffElement</code>s are typically created as the result of performing

- * a compare with the <code>Differencer</code>.

- * <p>

- * Clients may implement this interface, or use one of the standard implementations,

- * <code>DiffElement</code>, <code>DiffContainer</code>, or <code>DiffNode</code>.

- *

- * @see DiffTreeViewer

- * @see DiffElement

- * @see DiffContainer

- * @see DiffNode

- */

-public interface IDiffElement extends ITypedElement {

-	

-	/**

-	 * Returns the kind of difference as defined in <code>Differencer</code>.

-	 *

-	 * @return the kind of difference as defined in <code>Differencer</code>

-	 */

-	int getKind();

-

-	/**

-	 * Returns the parent of this element.

-	 * If the object is the root of a hierarchy <code>null</code> is returned.

-	 *

-	 * @return the parent of this element, or <code>null</code> if the element has no parent

-	 */

-	IDiffContainer getParent();

-

-	/**

-	 * Sets the parent of this element.

-	 *

-	 * @param parent the new parent of this element, or <code>null</code> if this

-	 *   element is to have no parent

-	 */

-	void setParent(IDiffContainer parent);

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java
deleted file mode 100644
index 6862653..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import java.util.Iterator;

-

-import org.eclipse.compare.ITypedElement;

-

-/**

- * Interface used to compare hierarchical structures.

- * It is used by the differencing engine.

- * <p>

- * Clients typically implement this interface in an adaptor class which 

- * wrappers the objects to be compared.

- *

- * @see org.eclipse.compare.ResourceNode

- * @see Differencer

- */

-public interface IStructureComparator {

-

-	/**

-	 * Returns an iterator for all children of this object or <code>null</code>

-	 * if there are no children.

-	 *

-	 * @return an array with all children of this object, or an empty array if there are no children

-	 */

-	Object[] getChildren();

-

-	/**

-	 * Returns whether some other object is "equal to" this one

-	 * with respect to a structural comparison. For example, when comparing

-	 * Java class methods, <code>equals</code> would return <code>true</code>

-	 * if two methods have the same signature (the argument names and the 

-	 * method body might differ).

-	 *

-	 * @param other the reference object with which to compare

-	 * @return <code>true</code> if this object is the same as the other argument; <code>false</code> otherwise

-	 * @see java.lang.Object#equals

-	 */

-	boolean equals(Object other);

-}

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator.java
deleted file mode 100644
index d3e9f3c..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import org.eclipse.compare.ITypedElement;

-import org.eclipse.jface.text.IDocument;

-

-/**

- * For creating a hierarchical structure of <code>IStructureComparators</code> for a

- * given input object.

- * In addition, it provides methods for locating a path in the hierarchical structure

- * and to map a node of this structure back to the corresponding input object.

- * <p>

- * Structure creators are used in the following contexts:

- * <ul>

- * <li>

- * the <code>StructureDiffViewer</code> uses an <code>IStructureCreator</code> to

- * build two (or three) tree structures of its input elements (method <code>getStructure</code>).

- * These trees are then compared with each other by means of the differencing engine and displayed

- * with the <code>DiffTreeViewer</code>,

- * </li>

- * <li>

- * the <code>ReplaceWithEditionDialog</code> uses an <code>IStructureCreator</code>

- * to map a path back to a range of characters in the textual representation.

- * </li>

- * </ul>

- * A <code>IStructureCreator</code> provides methods for rewriting the tree produced by the differencing

- * engine to support "smart" structural differencing. E.g. certain patterns of pairs of "addition"

- * and "deletion" nodes can be detected as renames and merged into a single node.

- * </p>

- * <p>

- * Clients may implement this interface; there is no standard implementation.

- * </p>

- *

- * @see StructureDiffViewer

- * @see org.eclipse.compare.EditionSelectionDialog

- * @see Differencer

- */

-public interface IStructureCreator {

-

-	/**

-	 * Returns a descriptive name which can be used in the UI of the <code>StructureDiffViewer</code>.

-	 *

-	 * @return a descriptive name for this <code>IStructureCreator</code>

-	 */

-	String getName();

-

-	/**

-	 * Creates a tree structure consisting of <code>IStructureComparator</code>s

-	 * from the given object and returns its root object.

-	 * Implementing this method typically involves parsing the input object.

-	 * In case of an error (e.g. a parsing error) the value <code>null</code> is returned.

-	 *

-	 * @param input the object from which to create the tree of <code>IStructureComparator</code>

-	 * @return the root node of the structure or <code>null</code> in case of error

-	 */

-	IStructureComparator getStructure(Object input);

-

-	/**

-	 * Creates the single node specified by path from the given input object.

-	 * In case of an error (e.g. a parsing error) the value <code>null</code> is returned.

-	 * This method is similar to <code>getStructure</code> but in

-	 * contrast to <code>getStructure</code> only a single node without any children must be returned.

-	 * This method is used in the <code>ReplaceWithEditionDialog</code> to locate a sub element

-	 * (e.g. a method) within an input object (e.g. a file containing source code).

-	 * <p>

-	 * One (not optimized) approach to implement this method is calling <code>getStructure(input)</code>

-	 * to build the full tree, and then finding that node within the tree that is specified

-	 * by <code>path</code>.

-	 * <p>

-	 * The syntax of <code>path</code> is not specified, because it is treated by the compare subsystem

-	 * as an opaque entity and is not further interpreted. Clients using this functionality

-	 * will pass a value of <code>path</code> to the <code>selectEdition</code>

-	 * method of <code>ReplaceWithEditionDialog</code> and will receive this value unchanged

-	 * as an argument to <code>locate</code>.

-	 *

-	 * @param path specifies a sub object within the input object

-	 * @param input the object from which to create the <code>IStructureComparator</code>

-	 * @return the single node specified by <code>path</code> or <code>null</code>

-	 *

-	 * @see org.eclipse.compare.EditionSelectionDialog#selectEdition

-	 */

-	IStructureComparator locate(Object path, Object input);

-

-	/**

-	 * Returns the contents of the given node as a string for the purpose

-	 * of performing a content comparison only (that is the string will not be visible in the UI).

-	 * If <code>ignoreWhitespace</code> is <code>true</code> all character sequences considered

-	 * whitespace should be removed from the returned string.

-	 *

-	 * @param node the node for which to return a string representation

-	 * @param ignoreWhitespace if <code>true</code> the returned string should not contain whitespace

-	 * @return the string contents of the given node

-	 */

-	String getContents(Object node, boolean ignoreWhitespace);

-

-	/**

-	 * FIXME: need better name?

-	 * Called whenever a copy operation has been performed on a tree node.

-	 *

-	 * @param node the node for which to save the new content

-	 * @param input the object from which the structure tree was created in <code>getStructure</code>

-	 */

-	void save(IStructureComparator node, Object input);

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
deleted file mode 100644
index 7a76674..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/*

- * (c) Copyright IBM Corp. 2000, 2001.

- * All Rights Reserved.

- */

-package org.eclipse.compare.structuremergeviewer;

-

-import org.eclipse.swt.events.DisposeEvent;

-import org.eclipse.swt.widgets.*;

-

-import org.eclipse.jface.util.PropertyChangeEvent;

-

-import org.eclipse.compare.*;

-import org.eclipse.compare.internal.*;

-

-

-/**

- * A diff tree viewer that can be configured with a <code>IStructureCreator</code>

- * to retrieve a hierarchical structure from the input object (an <code>ICompareInput</code>)

- * and perform a two-way or three-way compare on it.

- * <p>

- * This <code>DiffTreeViewer</code> supports the so called "smart" mode of the structure creator

- * by installing a button in the viewer's pane title bar.

- * <p>

- * This class may be instantiated; it is not intended to be subclassed outside

- * this package.

- * </p>

- *

- * @see IStructureCreator

- * @see ICompareInput

- */

-public class StructureDiffViewer extends DiffTreeViewer {

-		

-	private Differencer fDifferencer;

-	private boolean fThreeWay= false;

-	

-	private ITypedElement fAncestorInput;

-	private ITypedElement fLeftInput;

-	private ITypedElement fRightInput;

-	

-	private IStructureComparator fAncestorStructure;

-	private IStructureComparator fLeftStructure;

-	private IStructureComparator fRightStructure;

-	

-	private IStructureCreator fStructureCreator;

-	private IDiffContainer fRoot;

-	private IContentChangeListener fContentChangedListener;

-	private ICompareInputChangeListener fThreeWayInputChangedListener;

-	private CompareViewerSwitchingPane fParent;

-		

-	/**

-	 * Creates a new viewer for the given SWT tree control with the specified configuration.

-	 *

-	 * @param tree the tree control

-	 * @param configuration the configuration for this viewer

-	 */

-	public StructureDiffViewer(Tree tree, CompareConfiguration configuration) {

-		super(tree, configuration);

-		Composite c= tree.getParent();

-		if (c instanceof CompareViewerSwitchingPane)

-			fParent= (CompareViewerSwitchingPane) c;

-		initialize();

-	}

-	

-	/**

-	 * Creates a new viewer under the given SWT parent with the specified configuration.

-	 *

-	 * @param parent the SWT control under which to create the viewer

-	 * @param configuration the configuration for this viewer

-	 */

-	public StructureDiffViewer(Composite parent, CompareConfiguration configuration) {

-		super(parent, configuration);

-		if (parent instanceof CompareViewerSwitchingPane)

-			fParent= (CompareViewerSwitchingPane) parent;

-		initialize();

-	}

-	

-	private void initialize() {

-		

-		setAutoExpandLevel(3);

-		

-		fContentChangedListener= new IContentChangeListener() {

-			public void contentChanged(IContentChangeNotifier changed) {

-				StructureDiffViewer.this.contentChanged(changed);

-			}

-		};

-		fThreeWayInputChangedListener= new ICompareInputChangeListener() {

-			public void compareInputChanged(ICompareInput input) {

-				StructureDiffViewer.this.compareInputChanged(input);

-			}

-		};

-	}

-	

-	/**

-	 * Configures the <code>StructureDiffViewer</code> with a structure creator.

-	 * The structure creator is used to create a hierarchical structure

-	 * for each side of the viewer's input element of type <code>ICompareInput</code>.

-	 * <p>

-	 * If the structure creator's <code>canRewriteTree</code> returns <code>true</code>

-	 * the "smart" button in the viewer's pane control bar is enabled.

-	 *

-	 * @param structureCreator the new structure creator

-	 */

-	public void setStructureCreator(IStructureCreator structureCreator) {

-		if (fStructureCreator != structureCreator) {

-			fStructureCreator= structureCreator;

-			Control tree= getControl();

-			if (tree != null && !tree.isDisposed())

-				tree.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle());

-		}

-	}

-	

-	/**

-	 * Returns the structure creator or <code>null</code> if no

-	 * structure creator has been set with <code>setStructureCreator</code>.

-	 *

-	 * @return the structure creator or <code>null</code>

-	 */

-	public IStructureCreator getStructureCreator() {

-		return fStructureCreator;

-	}

-	

-	/**

-	 * Reimplemented to get the descriptive title for this viewer from the <code>IStructureCreator</code>.

-	 */

-	public String getTitle() {

-		if (fStructureCreator != null)

-			return fStructureCreator.getName();

-		return super.getTitle();

-	}

-	

-	/**

-	 * Overridden because the input of this viewer is not identical to the root of the tree.

-	 * The tree's root is a IDiffContainer that was returned from the method <code>diff</code>.

-	 * 

-	 * @return the root of the diff tree produced by method <code>diff</code>

-	 */

-	protected Object getRoot() {

-		return fRoot;

-	}

-	

-	/**

-	 * Overridden to create the comparable structures from the input object

-	 * and to feed them through the differencing engine. Note: for this viewer

-	 * the value from <code>getInput</code> is not identical to <code>getRoot</code>.

-	 */

-	protected void inputChanged(Object input, Object oldInput) {

-		if (input instanceof ICompareInput) {

-			compareInputChanged((ICompareInput) input);

-			if (input != oldInput)

-				initialSelection();

-		}

-	}

-	

-	protected void initialSelection() {

-		expandToLevel(2);

-	}

-

-	/* (non Javadoc)

-	 * Overridden to unregister all listeners.

-	 */

-	protected void handleDispose(DisposeEvent event) {

-		

-		compareInputChanged(null);

-		

-		fContentChangedListener= null;

-		fThreeWayInputChangedListener= null;

-				

-		super.handleDispose(event);

-	}

-	

-	/**

-	 * Recreates the comparable structures for the input sides.

-	 */

-	protected void compareInputChanged(ICompareInput input) {

-		ITypedElement t= null;

-		boolean changed= false;

-		

-		if (input != null)

-			t= input.getAncestor();

-			

-		fThreeWay= (t != null);

-		

-		if (t != fAncestorInput) {

-			if (fAncestorInput instanceof IContentChangeNotifier)

-				((IContentChangeNotifier)fAncestorInput).removeContentChangeListener(fContentChangedListener);

-			fAncestorInput= t;

-			if (fAncestorInput != null) {

-				fAncestorStructure= fStructureCreator.getStructure(fAncestorInput);

-				changed= true;

-			} else

-				fAncestorStructure= null;

-			if (fAncestorInput instanceof IContentChangeNotifier)

-				((IContentChangeNotifier)fAncestorInput).addContentChangeListener(fContentChangedListener);

-		}

-		

-		if (input != null)

-			t= input.getLeft();

-		if (t != fLeftInput) {

-			if (fLeftInput instanceof IContentChangeNotifier)

-				((IContentChangeNotifier)fLeftInput).removeContentChangeListener(fContentChangedListener);

-			fLeftInput= t;

-			if (fLeftInput != null) {

-				fLeftStructure= fStructureCreator.getStructure(fLeftInput);

-				changed= true;

-			} else

-				fLeftStructure= null;

-			if (fLeftInput instanceof IContentChangeNotifier)

-				((IContentChangeNotifier)fLeftInput).addContentChangeListener(fContentChangedListener);

-		}

-		

-		if (input != null)

-			t= input.getRight();

-		if (t != fRightInput) {

-			if (fRightInput instanceof IContentChangeNotifier)

-				((IContentChangeNotifier)fRightInput).removeContentChangeListener(fContentChangedListener);

-			fRightInput= t;

-			if (fRightInput != null) {

-				fRightStructure= fStructureCreator.getStructure(fRightInput);

-				changed= true;

-			} else

-				fRightStructure= null;

-			if (fRightInput instanceof IContentChangeNotifier)

-				((IContentChangeNotifier)fRightInput).addContentChangeListener(fContentChangedListener);

-		}

-		

-		if (changed)

-			diff();

-	}

-	

-	/**

-	 * Calls <code>diff</code> whenever the byte contents changes.

-	 */

-	protected void contentChanged(IContentChangeNotifier changed) {

-		

-		if (fStructureCreator == null)

-			return;

-			

-		if (changed != null) {

-			if (changed == fAncestorInput) {

-				fAncestorStructure= fStructureCreator.getStructure(fAncestorInput);

-			} else if (changed == fLeftInput) {

-				fLeftStructure= fStructureCreator.getStructure(fLeftInput);

-			} else if (changed == fRightInput) {

-				fRightStructure= fStructureCreator.getStructure(fRightInput);

-			} else

-				return;

-		} else {

-			fAncestorStructure= fStructureCreator.getStructure(fAncestorInput);

-			fLeftStructure= fStructureCreator.getStructure(fLeftInput);

-			fRightStructure= fStructureCreator.getStructure(fRightInput);

-		}

-		

-		diff();

-	}

-

-	protected void preDiffHook(IStructureComparator ancestor, IStructureComparator left, IStructureComparator right) {

-		// we do nothing here

-	}

-	

-	/**

-	 * Runs the difference engine and refreshes the tree.

-	 */

-	protected void diff() {

-		

-		preDiffHook(fAncestorStructure, fLeftStructure, fRightStructure);

-							

-		String message= null;

-		

-		if ((fThreeWay && fAncestorStructure == null) || fLeftStructure == null || fRightStructure == null) {

-			// could not get structure of one (or more) of the legs

-			fRoot= null;

-			message= CompareMessages.getString("StructureDiffViewer.StructureError");	//$NON-NLS-1$

-			

-		} else {	// calculate difference of the two (or three) structures

-

-			if (fDifferencer == null)

-				fDifferencer= new Differencer() {

-					protected boolean contentsEqual(Object o1, Object o2) {

-						return StructureDiffViewer.this.contentsEqual(o1, o2);

-					}

-					protected Object visit(Object data, int result, Object ancestor, Object left, Object right) {

-						Object o= super.visit(data, result, ancestor, left, right);

-						if (fLeftIsLocal && o instanceof DiffNode)

-							((DiffNode)o).swapSides(fLeftIsLocal);

-						return o;

-					}

-				};

-			

-			fRoot= (IDiffContainer) fDifferencer.findDifferences(fThreeWay, null, null,

-					fAncestorStructure, fLeftStructure, fRightStructure);

-					

-			if (fRoot == null || fRoot.getChildren().length == 0) {

-				message= CompareMessages.getString("StructureDiffViewer.NoStructuralDifferences");	//$NON-NLS-1$

-			} else {

-				postDiffHook(fDifferencer, fRoot);

-			}

-		}

-		if (fParent != null)

-			fParent.setTitleArgument(message);

-			

-		refresh(getRoot());

-	}

-	

-	protected void postDiffHook(Differencer differencer, IDiffContainer root) {

-		// we do nothing here

-	}

-	

-	/**

-	 * Performs a byte compare on the given objects.

-	 * Called from the difference engine.

-	 * Returns <code>null</code> if no structure creator has been set.

-	 */

-	private boolean contentsEqual(Object o1, Object o2) {

-		if (fStructureCreator != null) {

-			boolean ignoreWhiteSpace= Utilities.getBoolean(getCompareConfiguration(), CompareConfiguration.IGNORE_WHITESPACE, false);		

-			String s1= fStructureCreator.getContents(o1, ignoreWhiteSpace);

-			String s2= fStructureCreator.getContents(o2, ignoreWhiteSpace);

-			if (s1 == null || s2 == null)

-				return false;

-			return s1.equals(s2);

-		}

-		return false;

-	}

-	

-	/**

-	 * Tracks property changes of the configuration object.

-	 * Clients may override to track their own property changes.

-	 * In this case they must call the inherited method.

-	 */

-	protected void propertyChange(PropertyChangeEvent event) {

-		String key= event.getProperty();

-		if (key.equals(CompareConfiguration.IGNORE_WHITESPACE))

-			diff();

-		else

-			super.propertyChange(event);

-	}

-		

-	/**

-	 * Overridden to call the <code>save</code> method on the structure creator after

-	 * nodes have been copied from one side to the other side of an 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

-	 */

-	protected void copySelected(boolean leftToRight) {

-		super.copySelected(leftToRight);

-		

-		if (fStructureCreator != null)

-			fStructureCreator.save(

-							leftToRight ? fRightStructure : fLeftStructure,

-							leftToRight ? fRightInput : fLeftInput);

-	}

-}

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/package.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/package.html
deleted file mode 100644
index b0cc1b3..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/package.html
+++ /dev/null
@@ -1,50 +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>

-Provides support for finding and displaying the differences

-between hierarchically structured data.

-<h2>

-Package Specification</h2>

-The class <tt>Differencer</tt> is a differencing engine for hierarchically

-structured data. It takes two or three inputs and performs a two-way or

-three-way compare on them.

-<p>If the input elements to the differencing engine implement the <tt>IStructureComparator</tt>

-interface the engine recursively applies itself&nbsp; to the children of

-the input element. Leaf elements must implement the <tt>IStreamContentAccessor</tt>

-interface (see package <tt>org.eclipse.compare</tt>) so that the

-differencer can perform a bytewise comparison on them.

-<p>By default the differencing engine returns the result of the compare

-as a tree of <tt>DiffNode</tt> objects. Every <tt>DiffNode</tt> describes

-the changes among the two or three inputs.

-<p>A tree of <tt>DiffNodes</tt> can be displayed in a <tt>DiffTreeViewer</tt>.

-The <tt>DiffTreeViewer</tt> requires that inner nodes of the tree implement

-the <tt>IDiffContainer</tt> interface and leafs the <tt>IDiffElement</tt>

-interface.

-<p>The typical steps to compare hierarchically structured data and to display

-the differences would be to:

-<ul>

-<li>

-map the input data into a tree of <tt>IStructureComparator</tt> and <tt>IStreamContentAccessor</tt>s,</li>

-

-<li>

-perform the compare operation by means of the <tt>Differencer</tt>, and</li>

-

-<li>

-feed the differencing result into the <tt>DiffTreeViewer</tt>.</li>

-

-</ul>

-The <tt>StructureDiffViewer</tt> is a specialized <tt>DiffTreeViewer</tt>

-that automates the three steps from above. It takes a single input object

-of type <tt>ICompareInput</tt> from which it retrieves the two or three

-input elements to compare. Then it uses a <tt>IStructureCreator</tt> to

-extract a tree of <tt>IStructureComparator</tt> and <tt>IStreamContentAccessor</tt>

-from them. These trees are then compared with the differencing engine and

-the result is displayed in the tree viewer.

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/hglegal.htm b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/hglegal.htm
deleted file mode 100644
index b071dbd..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/hglegal.htm
+++ /dev/null
@@ -1,14 +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.73 [en] (Win98; U) [Netscape]">

-   <title>Legal Notices</title>

-</head>

-<body>

-

-<h3>

-<a NAME="Notices"></a>Notices</h3>

-(c) Copyright IBM Corp. 2000, 2001. All Rights Reserved.

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/ngibmcpy.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/ngibmcpy.gif
deleted file mode 100644
index 360f8e9..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/ngibmcpy.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare.html
deleted file mode 100644
index c0e152c..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare.html
+++ /dev/null
@@ -1,43 +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]">

-   <title>Compare Infrastructure Extension Points</title>

-</head>

-<body link="#0000FF" vlink="#800080">

-

-<center>

-<h1>

-IBM Eclipse Platform Compare</h1></center>

-This document lists all of the extension points that the compare plug-in

-makes available to tool developers.

-<p>All XML sub-elements defined in the individual extension point documents

-may appear more than once inside an extension element. For example, an

-<tt>org.eclipse.compare.contentMergeViewers</tt> extension may contain

-several instances of <tt>viewer</tt> elements. Although making one extension

-per sub-element is not technically incorrect, we recommend grouping for

-consistent style. It can also improve platform startup time because there

-will be fewer extensions to process.

-<br>

-<hr WIDTH="100%">

-<h1>

-Extension Points</h1>

-The following extension points can be used to extend the capabilities of

-the compare infrastructure:

-<ul>

-<li>

-<a href="org_eclipse_compare_contentMergeViewers.html">org.eclipse.compare.contentMergeViewers</a></li>

-

-<li>

-<a href="org_eclipse_compare_contentViewers.html">org.eclipse.compare.contentViewers</a></li>

-

-<li>

-<a href="org_eclipse_compare_structureMergeViewers.html">org.eclipse.compare.structureMergeViewers</a></li>

-

-<li>

-<a href="org_eclipse_compare_structureCreators.html">org.eclipse.compare.structureCreators</a></li>

-</ul>

-<a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corp. 2000, 2001.  All Rights Reserved." BORDER=0 height=12 width=195></a>

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_contentMergeViewers.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_contentMergeViewers.html
deleted file mode 100644
index aebc43e..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_contentMergeViewers.html
+++ /dev/null
@@ -1,55 +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]">

-   <title>Compare Extension Points: contentMergeViewers</title>

-</head>

-<body link="#0000FF" vlink="#800080">

-

-<center>

-<h1>

-ContentMergeViewers</h1></center>

-<b><i>Identifier: </i></b>org.eclipse.compare.contentMergeViewers

-<p><b><i>Description: </i></b>This extension point allows to plug in a

-compare/merge viewer for specific content types. The viewer must extend

-<tt>org.eclipse.jface.viewers.Viewer</tt>.

-<br>However since viewers don't have a default constructor the extension

-point must implement a factory object for viewers: the interface <tt>org.eclipse.compare.IViewerCreator</tt>.

-<p><b><i>Configuration Markup:</i></b>

-<p><tt>&nbsp;&nbsp; &lt;!ELEMENT viewer EMPTY></tt>

-<br><tt>&nbsp;&nbsp; &lt;!ATTLIST viewer</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp; ></tt>

-<ul>

-<li>

-<b>id</b> - a unique identifier that can be used to reference the viewer</li>

-

-<li>

-<b>class</b> - name of a class that implements a factory for the content

-merge viewer and implements <tt>org.eclipse.compare.IViewerCreator</tt></li>

-

-<li>

-<b>extensions </b>- a comma separated list of file extensions e.g . "java,

-gif"</li>

-</ul>

-<b><i>Examples:</i></b>

-<br>The following is an example of compare/merge viewer for text files

-(extension "txt"):

-<p>&lt;extension point = "org.eclipse.compare.contentMergeViewers">

-<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;viewer

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id="org.eclipse.compare.contentmergeviewer.TextMergeViewer"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.eclipse.compare.internal.TextMergeViewerCreator"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions="txt"

-<br>&nbsp;&nbsp;&nbsp; />

-<br>&lt;/extension>

-<p><b><i>Supplied Implementation:</i></b>

-<br>The Compare UI plugin defines content viewers for text, binary contents,

-and images.

-<p><a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corp. 2000, 2001.  All Rights Reserved." BORDER=0 height=12 width=195></a>

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_contentViewers.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_contentViewers.html
deleted file mode 100644
index 1a877ed..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_contentViewers.html
+++ /dev/null
@@ -1,56 +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]">

-   <title>Compare Extension Points: contentViewers</title>

-</head>

-<body link="#0000FF" vlink="#800080">

-

-<center>

-<h1>

-ContentViewers</h1></center>

-<b><i>Identifier: </i></b>org.eclipse.compare.contentViewers

-<p><b><i>Description: </i></b>This extension point allows to plug in a

-viewer for specific content types. These viewers are used in the EditionSelectionDialog

-when presenting an edition of a resource or a subsection thereof. The viewer

-must extend

-<tt>org.eclipse.jface.viewers.Viewer</tt> and must accept a

-viewer input of type <tt>IStreamContentAccessor</tt>.

-<br>However since viewers don't have a default constructor the extension

-point must implement a factory object for viewers: the interface <tt>org.eclipse.compare.IViewerCreator</tt>.

-<p><b><i>Configuration Markup:</i></b>

-<p><tt>&nbsp;&nbsp; &lt;!ELEMENT viewer EMPTY></tt>

-<br><tt>&nbsp;&nbsp; &lt;!ATTLIST viewer</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp; ></tt>

-<ul>

-<li>

-<b>id</b> - a unique identifier that can be used to reference the viewer</li>

-

-<li>

-<b>class</b> - name of a class that implements a factory for the content

-merge viewer and implements <tt>org.eclipse.compare.IViewerCreator</tt></li>

-

-<li>

-<b>extensions </b>- a comma separated list of file extensions e.g . "java,

-gif"</li>

-</ul>

-<b><i>Examples:</i></b>

-<br>The following is an example of a viewer for text files (extension "txt"):

-<p>&lt;extension point = "org.eclipse.compare.contentViewers">

-<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;viewer

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id="org.eclipse.compare.internal.TextViewer"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.eclipse.compare.internal.TextViewerCreator"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions="txt"

-<br>&nbsp;&nbsp;&nbsp; />

-<br>&lt;/extension>

-<p><b><i>Supplied Implementation:</i></b>

-<br>The Compare UI plugin defines content viewers for text and images.

-<p><a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corp. 2000, 2001.  All Rights Reserved." BORDER=0 height=12 width=195></a>

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_structureCreators.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_structureCreators.html
deleted file mode 100644
index d48dd73..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_structureCreators.html
+++ /dev/null
@@ -1,53 +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]">

-   <title>Compare Extension Points: structureCreators</title>

-</head>

-<body link="#0000FF" vlink="#800080">

-

-<center>

-<h1>

-StructureCreators</h1></center>

-<b><i>Identifier: </i></b>org.eclipse.compare.structureCreators

-<p><b><i>Description: </i></b>This extension point allows to plug in an

-object that produces a tree structure of <tt>IStructureComparator</tt>

-for a given content.

-<p><b><i>Configuration Markup:</i></b>

-<p><tt>&nbsp;&nbsp; &lt;!ELEMENT structureCreator EMPTY></tt>

-<br><tt>&nbsp;&nbsp; &lt;!ATTLIST structureCreator</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp; ></tt>

-<ul>

-<li>

-<b>id</b> - a unique identifier that can be used to reference the structure

-creator</li>

-

-<li>

-<b>class</b> - name of a class that implements the strcuture creator and

-implements <tt>org.eclipse.compare.structuremergeviewer.IStructureComparator</tt></li>

-

-<li>

-<b>extensions </b>- a comma separated list of file extensions e.g . "java,

-properties"</li>

-</ul>

-<b><i>Examples:</i></b>

-<br>The following is an example of a structure creator for java files (extension

-"java"):

-<p>&lt;extension point = "org.eclipse.compare.structureCreators">

-<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;structureCreator

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id="org.eclipse.compare.JavaStructureCreator"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.eclipse.compare.JavaStructureCreator"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions="java"

-<br>&nbsp;&nbsp;&nbsp; />

-<br>&lt;/extension>

-<p><b><i>Supplied Implementation:</i></b>

-<br>The Compare UI plugin defines a structure creator for zip archives.

-<p><a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corp. 2000, 2001.  All Rights Reserved." BORDER=0 height=12 width=195></a>

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_structureMergeViewers.html b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_structureMergeViewers.html
deleted file mode 100644
index 187fc44..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/doc/org_eclipse_compare_structureMergeViewers.html
+++ /dev/null
@@ -1,53 +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]">

-   <title>Compare Extension Points: structureMergeViewers</title>

-</head>

-<body link="#0000FF" vlink="#800080">

-

-<center>

-<h1>

-StructureMergeViewers</h1></center>

-<b><i>Identifier: </i></b>org.eclipse.compare.structureMergeViewers

-<p><b><i>Description: </i></b>This extension point allows to plug in a

-compare/merge viewer for structured content. The viewer must extend <tt>org.eclipse.jface.viewers.Viewer</tt>.

-However since viewers don't have a default constructor the extension point

-must implement a factory object for viewers: the interface <tt>org.eclipse.compare.IViewerCreator</tt>.

-<p><b><i>Configuration Markup:</i></b>

-<p><tt>&nbsp;&nbsp; &lt;!ELEMENT viewer EMPTY></tt>

-<br><tt>&nbsp;&nbsp; &lt;!ATTLIST viewer</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

-CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions CDATA #REQUIRED</tt>

-<br><tt>&nbsp;&nbsp; ></tt>

-<ul>

-<li>

-<b>id</b> - a unique identifier that can be used to reference the viewer</li>

-

-<li>

-<b>class</b> - name of a class that implements a factory for the strcuture

-merge viewer and implements <tt>org.eclipse.compare.IViewerCreator</tt></li>

-

-<li>

-<b>extensions </b>- a comma separated list of file extensions e.g . "zip,

-jar"</li>

-</ul>

-<b><i>Examples:</i></b>

-<br>The following is an example of compare/merge viewer for zip files (extension

-"zip"):

-<p>&lt;extension point = "org.eclipse.compare.structureMergeViewers">

-<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;viewer

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id="org.eclipse.compare.ZipCompareViewer"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.eclipse.compare.ZipCompareViewerCreator"

-<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extensions="zip"

-<br>&nbsp;&nbsp;&nbsp; />

-<br>&lt;/extension>

-<p><b><i>Supplied Implementation:</i></b>

-<br>The Compare UI plugin defines a structure compare viewer for zip archives.

-<p><a href="hglegal.htm"><img SRC="ngibmcpy.gif" ALT="Copyright IBM Corp. 2000, 2001.  All Rights Reserved." BORDER=0 height=12 width=195></a>

-</body>

-</html>

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/ancestorpane_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/ancestorpane_co.gif
deleted file mode 100644
index 0088c97..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/ancestorpane_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif
deleted file mode 100644
index 6c83c45..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copy_l_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif
deleted file mode 100644
index a3a444a..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copy_r_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif
deleted file mode 100644
index 706dc02..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copycont_l_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif
deleted file mode 100644
index b95e26a..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/copycont_r_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/next_nav.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/next_nav.gif
deleted file mode 100644
index 8392f33..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/next_nav.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/prev_nav.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/prev_nav.gif
deleted file mode 100644
index 9b278e6..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/prev_nav.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif
deleted file mode 100644
index c2a47b6..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/smartmode_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif
deleted file mode 100644
index 3aabbce..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/syncpane_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif
deleted file mode 100644
index 2045dae..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/clcl16/twowaycompare_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif
deleted file mode 100644
index ecde52e..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ctool16/conflict_edit.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif
deleted file mode 100644
index 097ecdd..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ctool16/ignorews_edit.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/cview16/compare_view.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/cview16/compare_view.gif
deleted file mode 100644
index 41800a0..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/cview16/compare_view.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif
deleted file mode 100644
index 6e00dee..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/ancestorpane_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif
deleted file mode 100644
index cb11ac9..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copy_l_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif
deleted file mode 100644
index 202b041..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copy_r_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif
deleted file mode 100644
index 4e9a3eb..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copycont_l_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif
deleted file mode 100644
index e84103f..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/copycont_r_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/next_nav.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/next_nav.gif
deleted file mode 100644
index 6cbeced..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/next_nav.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif
deleted file mode 100644
index a3441a0..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/prev_nav.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif
deleted file mode 100644
index 6f55d90..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/smartmode_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif
deleted file mode 100644
index 2a8541c..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/syncpane_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif
deleted file mode 100644
index ecab864..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dlcl16/twowaycompare_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif
deleted file mode 100644
index c76fcc7..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dtool16/conflict_edit.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif
deleted file mode 100644
index 55147cc..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/dtool16/ignorews_edit.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif
deleted file mode 100644
index 3ce77c8..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/ancestorpane_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif
deleted file mode 100644
index d9f5900..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copy_l_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif
deleted file mode 100644
index 61289f1..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copy_r_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif
deleted file mode 100644
index 4fdde61..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copycont_l_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif
deleted file mode 100644
index feb14bf..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/copycont_r_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/next_nav.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/next_nav.gif
deleted file mode 100644
index 03b7af3..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/next_nav.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/prev_nav.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/prev_nav.gif
deleted file mode 100644
index dd65c52..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/prev_nav.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif
deleted file mode 100644
index e0a262e..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/smartmode_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif
deleted file mode 100644
index 3e45390..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/syncpane_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif
deleted file mode 100644
index 4c25322..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/elcl16/twowaycompare_co.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/etool16/conflict_edit.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/etool16/conflict_edit.gif
deleted file mode 100644
index b4451ec..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/etool16/conflict_edit.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif
deleted file mode 100644
index f816c9e..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/etool16/ignorews_edit.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/eview16/compare_view.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/eview16/compare_view.gif
deleted file mode 100644
index 1030b6e..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/eview16/compare_view.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/obj16/day_obj.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/obj16/day_obj.gif
deleted file mode 100644
index 96aae05..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/obj16/day_obj.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/obj16/resource_obj.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/obj16/resource_obj.gif
deleted file mode 100644
index d1e679e..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/obj16/resource_obj.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/add_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/add_ov.gif
deleted file mode 100644
index 2a81156..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/add_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/chg_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/chg_ov.gif
deleted file mode 100644
index 67b25c4..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/chg_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif
deleted file mode 100644
index e049755..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confadd_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif
deleted file mode 100644
index 020fc54..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confchg_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif
deleted file mode 100644
index 39ed511..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/confdel_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/del_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/del_ov.gif
deleted file mode 100644
index 675c20f..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/del_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/error_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/error_ov.gif
deleted file mode 100644
index 95e4db6..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/error_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif
deleted file mode 100644
index 0dc3ea8..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/inadd_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif
deleted file mode 100644
index f719405..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/inchg_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/indel_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/indel_ov.gif
deleted file mode 100644
index 3e107d2..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/indel_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif
deleted file mode 100644
index 780da98..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outadd_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif
deleted file mode 100644
index 4f6a316..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outchg_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif
deleted file mode 100644
index ab48981..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/outdel_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif
deleted file mode 100644
index 14ba011..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_inadd_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif
deleted file mode 100644
index 0aca3c4..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_inchg_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif
deleted file mode 100644
index c377537..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_indel_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif
deleted file mode 100644
index 11c2d5d..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outadd_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif
deleted file mode 100644
index 704d706..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outchg_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif
deleted file mode 100644
index 95ec301..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/icons/full/ovr16/r_outdel_ov.gif
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.properties
deleted file mode 100644
index 18971a0..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.properties
+++ /dev/null
@@ -1,130 +0,0 @@
-#########################################

-# (c) Copyright IBM Corp. 2000, 2001.

-# All Rights Reserved.

-#########################################

-#

-# Resource strings for Compare Plug-in

-#

-pluginName= Compare Support

-providerName=Eclipse.org

-

-#

-# Extension point names

-#

-structureCreators= Structure Creator

-structureMergeViewers= Structure Merge Viewer

-contentMergeViewers= Content Merge Viewer

-contentViewers= Content Viewer

-

-#

-# CompareUIPlugin

-#

-CompareUIPlugin.dialogTitle=Compare

-CompareUIPlugin.noActiveWorkbenchPage=Can't find active workbench page

-CompareUIPlugin.compareFailed=Compare Failed

-CompareUIPlugin.openEditorError=Problems Opening Editor

-CompareUIPlugin.noDifferences=There are no differences between the selected inputs.

-

-#

-# Compare Editor

-#

-defaultCompareEditor.name= Default Compare Editor

-CompareEditor.saveError.title= Save Error

-CompareEditor.cantSaveError= Can''t save contents ({0})

-CompareEditor.invalidInput=Invalid Input: Must be CompareEditorInput

-

-#

-# Context menu & actions

-#

-CompareWithMenu.label= Comp&are With

-

-CompareWithEachOtherAction.label= &Each Other

-CompareWithEachOtherAction.tooltip= Compare the Selected Resources

-

-CompareWithPatchAction.label= P&atch...

-CompareWithPatchAction.tooltip= Compare the Selected Resource with a Patch

-

-CompareWithHistoryAction.label= &Local History...

-CompareWithHistoryAction.tooltip= Compare the Selected Resource with Local History

-

-ReplaceWithMenu.label= Rep&lace With

-

-ReplaceFromHistoryAction.label= &Local History...

-ReplaceFromHistoryAction.tooltip= Replace the Selected Resource with Local History

-

-ReplaceWithPreviousFromHistoryAction.label= &Previous From Local History

-ReplaceWithPreviousFromHistoryAction.tooltip= Replace the Selected Resource with the Previous from Local History

-

-addFromHistoryAction.label= Restore From Local Histor&y...

-addFromHistoryAction.tooltip= Restore Deleted Files From Local History

-

-#

-# Preference Page

-#

-ComparePreferencePage.name= Compare

-ComparePreferencePage.initiallyShowAncestorPane.label= Initially show a&ncestor pane

-ComparePreferencePage.showPseudoConflicts.label= Show &pseudo conflicts

-ComparePreferencePage.synchronizeScrolling.label= Synchronize &scrolling between panes in compare viewers

-ComparePreferencePage.textFont.label= Text &font

-ComparePreferencePage.showMoreInfo.label= Show additional compare &information in the status line

-ComparePreferencePage.preview.label= Preview:

-ComparePreferencePage.ancestor.label= Common Ancestor

-ComparePreferencePage.left.label= Local

-ComparePreferencePage.right.label= Remote

-ComparePreferencePage.structureCompare.label= &Open structure compare automatically

-ComparePreferencePage.generalTab.label= &General

-ComparePreferencePage.textCompareTab.label= &Text Compare

-ComparePreferencePage.backgroundColor1.label= Bac&kground Color:

-ComparePreferencePage.backgroundColor2.label= S&ystem Default

-ComparePreferencePage.backgroundColor3.label= C&ustom

-ComparePreferencePage.ignoreWhitespace.label= Ignore &Whitespace

-#

-# Toolbar actions

-#

-action.IgnoreWhiteSpace.label=Ignore White Space

-action.IgnoreWhiteSpace.tooltip=Ignore White Space Where Applicable

-action.IgnoreWhiteSpace.image=etool16/ignorews_edit.gif

-

-action.Next.label=Next Difference

-action.Next.tooltip=Go to Next Difference

-action.Next.image=elcl16/next_nav.gif

-

-action.Previous.label=Previous Difference

-action.Previous.tooltip=Go to Previous Difference

-action.Previous.image=elcl16/prev_nav.gif

-

-#

-# Built in Structure Creators

-#

-ZipStructureCreator.name=Zip Archive Compare

-

-#

-# Compare Dialog

-#

-CompareDialog.commit.label=Commit

-CompareDialog.saveErrorTitle=Save Error 

-CompareDialog.saveErrorMessage=Can't save

-

-#

-# Compare With Each Other

-#

-ResourceCompare.taskName=Operation in Progress...

-ResourceCompare.twoWay.title=Compare ({0}-{1})

-ResourceCompare.threeWay.title=Compare ({0}-{1}-{2})

-

-#

-# DiffTreeViewer & DiffNodes

-#

-DiffTreeViewer.title= Structure Compare

-DiffNode.noName= <no name>

-DiffNode.nameFormat= {0} / {1}

-

-#

-# Differencing engine

-#

-Differencer.progressFormat= Comparing {0}

-

-#

-# Patch: rejected patch markers

-#

-rejectedPatchMarker.name= Rejected Patch

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.xml b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.xml
deleted file mode 100644
index 3d67a73..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/plugin.xml
+++ /dev/null
@@ -1,195 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-

-<!-- ======================================================================= -->

-<!-- Compare UI Plugin                                                       -->

-<!-- ======================================================================= -->

-

-<plugin

-	name="%pluginName"

-	id="org.eclipse.compare"

-	version="2.0.0"

-	provider-name="%providerName"

-	class="org.eclipse.compare.internal.CompareUIPlugin">

-

-	<requires>

-      <import plugin="org.eclipse.ui"/>

-      <import plugin="org.eclipse.core.resources"/>

-	</requires>

-

-	<runtime>

-		<library name="compare.jar" >

-			<export name="*"/>

-		</library>

-	</runtime>

-		   

-<!-- Compare extension point definitions -->

-

-	<extension-point

-		name="%structureCreators"

-		id="structureCreators"/>

-		

-	<extension-point

-		name="%structureMergeViewers"

-		id="structureMergeViewers"/>

-		

-	<extension-point

-		name="%contentMergeViewers"

-		id="contentMergeViewers"/>

-

-	<extension-point

-		name="%contentViewers"

-		id="contentViewers"/>

-

-<!-- Extensions -->

-

-	<extension point="org.eclipse.core.resources.markers"

-		id="rejectedPatchMarker" name="%rejectedPatchMarker.name">

-		<super type="org.eclipse.core.resources.taskmarker"/>

-		<persistent value="true"/>

-	</extension>

-

-	<extension point="org.eclipse.ui.editors">

-    	<editor id="org.eclipse.compare.CompareEditor"

-      		name="%defaultCompareEditor.name"

- 			icon="icons/full/cview16/compare_view.gif"     	  

-      		class="org.eclipse.compare.internal.CompareEditor"

-			contributorClass="org.eclipse.compare.internal.CompareEditorContributor">

-    	</editor>

-	</extension>

-

-	<extension

-		point="org.eclipse.ui.preferencePages">

-		<page name="%ComparePreferencePage.name"

-			id="org.eclipse.compare.internal.ComparePreferencePage"

-			class="org.eclipse.compare.internal.ComparePreferencePage"

-			category= "org.eclipse.ui.preferencePages.Workbench">

-		</page>	

-	</extension>

-

-	<extension point="org.eclipse.ui.popupMenus">

-	

-		<objectContribution

-			id="org.eclipse.compare.CompareAction"

-			objectClass="org.eclipse.core.resources.IResource" adaptable="true">

-			<menu

-				id="replaceWithMenu"

-				path="additions"

-				label="%ReplaceWithMenu.label">

-				<separator name="replaceWithGroup"/>

-			</menu>

-			<menu

-				id="compareWithMenu"

-				path="additions"

-				label="%CompareWithMenu.label">

-				<separator name="compareWithGroup"/>

-			</menu>

-			<action

-				id="compareWithEachOther"

-				label="%CompareWithEachOtherAction.label"

-				tooltip="%CompareWithEachOtherAction.tooltip"

-				menubarPath="compareWithMenu/compareWithGroup"

-				enablesFor="2+"

-				class="org.eclipse.compare.internal.CompareAction">

-			</action>

-			<action

-				id="compareWithPatch"

-				label="%CompareWithPatchAction.label"

-				tooltip="%CompareWithPatchAction.tooltip"

-				menubarPath="compareWithMenu/compareWithGroup"

-				enablesFor="1"

-				class="org.eclipse.compare.internal.patch.CompareWithPatchAction">

-			</action>

-		</objectContribution>

-		

-		<objectContribution

-			id="org.eclipse.compare.ReplaceWithEditionAction"

-			objectClass="org.eclipse.core.resources.IFile" adaptable="true">

-			<menu

-				id="replaceWithMenu"

-				path="additions"

-				label="%ReplaceWithMenu.label">

-				<separator name="replaceWithGroup"/>

-			</menu>

-			<action

-				id="replaceFromHistory"

-				label="%ReplaceFromHistoryAction.label"

-				tooltip="%ReplaceFromHistoryAction.tooltip"

-				menubarPath="replaceWithMenu/replaceWithGroup"

-				enablesFor="1"

-				class="org.eclipse.compare.internal.ReplaceWithEditionAction">

-			</action>

-			<action

-				id="replaceWithPreviousFromHistory"

-				label="%ReplaceWithPreviousFromHistoryAction.label"

-				tooltip="%ReplaceWithPreviousFromHistoryAction.tooltip"

-				menubarPath="replaceWithMenu/replaceWithGroup"

-				enablesFor="1"

-				class="org.eclipse.compare.internal.ReplaceWithPreviousEditionAction">

-			</action>

-		</objectContribution>

-		

-		<objectContribution

-			id="org.eclipse.compare.CompareWithEditionAction"

-			objectClass="org.eclipse.core.resources.IFile" adaptable="true">

-			<menu

-				id="compareWithMenu"

-				path="additions"

-				label="%CompareWithMenu.label">

-				<separator name="compareWithGroup"/>

-			</menu>

-			<action

-				id="compareWithHistory"

-				label="%CompareWithHistoryAction.label"

-				tooltip="%CompareWithHistoryAction.tooltip"

-				menubarPath="compareWithMenu/compareWithGroup"

-				enablesFor="1"

-				class="org.eclipse.compare.internal.CompareWithEditionAction">

-			</action>

-		</objectContribution>

-			

-		<objectContribution

-			id="org.eclipse.compare.AddFromHistoryAction"

-			objectClass="org.eclipse.core.resources.IContainer" adaptable="true">

-			<action

-				id="addFromHistoryAction"

-				label="%addFromHistoryAction.label"

-				tooltip="%addFromHistoryAction.tooltip"

-				menubarPath="replaceWithMenu"

-				enablesFor="1"

-				class="org.eclipse.compare.internal.AddFromHistoryAction">

-			</action>

-		</objectContribution>

-

-	</extension>

-

-	<extension point="org.eclipse.compare.structureCreators">

-		<structureCreator

-			extensions="zip"

-			class="org.eclipse.compare.ZipFileStructureCreator">

-		</structureCreator>

-	</extension>

-	

-	<extension point="org.eclipse.compare.contentMergeViewers">

-		<viewer

-			extensions="class,exe,dll,binary,zip,jar"

-			class="org.eclipse.compare.internal.BinaryCompareViewerCreator">

-		</viewer>

-		<viewer

-			extensions="txt"

-			class="org.eclipse.compare.internal.TextMergeViewerCreator">

-		</viewer>

-		<viewer

-			extensions="gif,jpg"

-			class="org.eclipse.compare.internal.ImageMergeViewerCreator">

-		</viewer>

-	</extension>

-	

-	<extension point="org.eclipse.compare.contentViewers">

-		<viewer

-			extensions="txt"

-			class="org.eclipse.compare.internal.TextViewerCreator">

-		</viewer>

-	</extension>

-

-</plugin>

-

diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/scripts/exportplugin.xml b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/scripts/exportplugin.xml
deleted file mode 100644
index 6abc6ab..0000000
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/scripts/exportplugin.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<project name="org.eclipse.compare" default="export" basedir="..">

-	<target name="init">

-		<tstamp/>

-		<property name="destdir" value="../../plugin-export" />

-		<property name="plugin"  value="org.eclipse.compare" />

-		<property name="version"  value="_2.0.0" />

-		<property name="dest"  value="${destdir}/${plugin}${version}" />

-	</target>

-

-	<target name="build" depends="init">

-    	<eclipse.incrementalBuild project="${plugin}" kind="incr"/>

-	</target>

-

-	<target name="export" depends="build">

-		<mkdir dir="${destdir}" />

-		<delete dir="${dest}" />

-		<mkdir dir="${dest}" />

-		<jar 

-			jarfile="${dest}/compare.jar"

-			basedir="bin"

-		/>

-		<copy file="plugin.xml" todir="${dest}"/>

-		<copy file="plugin.properties" todir="${dest}"/>

-		<copy todir="${dest}/icons">

-			<fileset dir="icons" />

-		</copy>

-		<zip zipfile="${dest}/comparesrc.zip">

-		    <fileset dir="compare" />

-  		</zip>				

-	</target>

-</project>

diff --git a/bundles/org.eclipse.compare/scripts/exportplugin.xml b/bundles/org.eclipse.compare/scripts/exportplugin.xml
deleted file mode 100644
index 6abc6ab..0000000
--- a/bundles/org.eclipse.compare/scripts/exportplugin.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<project name="org.eclipse.compare" default="export" basedir="..">

-	<target name="init">

-		<tstamp/>

-		<property name="destdir" value="../../plugin-export" />

-		<property name="plugin"  value="org.eclipse.compare" />

-		<property name="version"  value="_2.0.0" />

-		<property name="dest"  value="${destdir}/${plugin}${version}" />

-	</target>

-

-	<target name="build" depends="init">

-    	<eclipse.incrementalBuild project="${plugin}" kind="incr"/>

-	</target>

-

-	<target name="export" depends="build">

-		<mkdir dir="${destdir}" />

-		<delete dir="${dest}" />

-		<mkdir dir="${dest}" />

-		<jar 

-			jarfile="${dest}/compare.jar"

-			basedir="bin"

-		/>

-		<copy file="plugin.xml" todir="${dest}"/>

-		<copy file="plugin.properties" todir="${dest}"/>

-		<copy todir="${dest}/icons">

-			<fileset dir="icons" />

-		</copy>

-		<zip zipfile="${dest}/comparesrc.zip">

-		    <fileset dir="compare" />

-  		</zip>				

-	</target>

-</project>

diff --git a/bundles/org.eclipse.team.cvs.core/plugin.xml b/bundles/org.eclipse.team.cvs.core/plugin.xml
index 28dd981..5a4aaf4 100644
--- a/bundles/org.eclipse.team.cvs.core/plugin.xml
+++ b/bundles/org.eclipse.team.cvs.core/plugin.xml
@@ -22,7 +22,7 @@
 	<extension-point name="Authenticator" id="authenticator"/>
 	<extension-point name="ConnectionMethods" id="connectionmethods"/>
 
-	<!-- *************** Conection Methods **************** -->
+	<!-- *************** Connection Methods **************** -->
 	<extension id="pserver" point="org.eclipse.team.cvs.core.connectionmethods">
 		<adapter>
 			<run class="org.eclipse.team.internal.ccvs.core.connection.PServerConnectionMethod">
@@ -39,6 +39,15 @@
 		</adapter>
 	</extension>
 
+	<!-- *************** Repository Provider **************** -->
+	<extension
+         point="org.eclipse.team.core.repository">
+      <repository
+            class="org.eclipse.team.internal.ccvs.core.CVSTeamProvider"
+            id="org.eclipse.team.cvs.core.cvsnature">
+      </repository>
+	</extension>
+   
 	<!-- *************** Project Nature **************** -->
 	<extension point="org.eclipse.core.resources.natures" id="cvsnature" name="%cvsNature">
 		<runtime>
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProvider.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProvider.java
index 749ec67..546a10c 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProvider.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProvider.java
@@ -178,10 +178,7 @@
 			for (int i = 0; i < projects.length; i++) {
 				IProject project = projects[i];
 				// Register the project with Team
-				// (unless the project already has the proper nature from the project meta-information)
-				if (!project.getDescription().hasNature(CVSProviderPlugin.getTypeId())) {
-					Team.addNatureToProject(project, CVSProviderPlugin.getTypeId(), Policy.subMonitorFor(monitor, 100));
-				}
+				RepositoryProvider.map(project, CVSProviderPlugin.getTypeId());
 			}
 			
 		} finally {
@@ -481,15 +478,8 @@
 						
 			folder.setFolderSyncInfo(new FolderSyncInfo(moduleName, location.getLocation(), null, false));
 
-			// Register the project with Team
-			// (unless the project already has the proper nature from the project meta-information)
-			try {
-				if (!project.getDescription().hasNature(CVSProviderPlugin.getTypeId())) {
-					Team.addNatureToProject(project, CVSProviderPlugin.getTypeId(), Policy.subMonitorFor(monitor, 1));
-				}
-			} catch (CoreException e) {
-				throw wrapException(e);
-			} 
+			//Register it with Team.  If it already is, no harm done.
+			RepositoryProvider.map(project, CVSProviderPlugin.getTypeId());
 		} catch (TeamException e) {
 			// The checkout may have triggered password caching
 			// Therefore, if this is a newly created location, we want to clear its cache
@@ -547,13 +537,7 @@
 		}
 		
 		// Register the project with Team
-		// (unless the project already has the proper nature from the project meta-information)
-		try {
-			if (!project.getDescription().hasNature(CVSProviderPlugin.getTypeId()))
-				Team.addNatureToProject(project, CVSProviderPlugin.getTypeId(), monitor);
-		} catch (CoreException e) {
-			throw wrapException(e);
-		}
+		RepositoryProvider.map(project, CVSProviderPlugin.getTypeId());
 	}
 	
 	private CVSException wrapException(CoreException e) {
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTeamProvider.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTeamProvider.java
index 31f9b80..7a1607b 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTeamProvider.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTeamProvider.java
@@ -497,7 +497,7 @@
 		} catch (CVSException e) {
 			// If we can't get the remote location, we should disconnect since nothing can be done with the provider
 			try {
-				Team.removeNatureFromProject(project, CVSProviderPlugin.getTypeId(), Policy.monitorFor(null));
+				RepositoryProvider.unmap(project);
 			} catch (TeamException ex) {
 				CVSProviderPlugin.log(ex);
 			}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/CVSWorkspaceRoot.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/CVSWorkspaceRoot.java
index 2ae43b4..5425b54 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/CVSWorkspaceRoot.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/CVSWorkspaceRoot.java
@@ -14,6 +14,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.team.core.RepositoryProvider;
 import org.eclipse.team.core.Team;
 import org.eclipse.team.core.TeamException;
 import org.eclipse.team.core.sync.IRemoteSyncElement;
@@ -148,13 +149,9 @@
 			RemoteFolderTree remote = RemoteFolderTreeBuilder.buildRemoteTree((CVSRepositoryLocation)folder.getRepository(), folder, folder.getTag(), Policy.subMonitorFor(progress, 80));
 			CVSRemoteSyncElement tree = new CVSRemoteSyncElement(true /*three way*/, project, null, remote);
 			tree.makeFoldersInSync(Policy.subMonitorFor(progress, 10));
-			try {
-				if (!project.getDescription().hasNature(CVSProviderPlugin.getTypeId())) {
-					Team.addNatureToProject(project, CVSProviderPlugin.getTypeId(), Policy.subMonitorFor(progress, 10));
-				}
-			} catch (CoreException e) {
-				throw CVSException.wrapException(e);
-			}
+
+			RepositoryProvider.map(project, CVSProviderPlugin.getTypeId());
+
 			progress.done();
 			return tree;
 		}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/AddDeleteMoveListener.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/AddDeleteMoveListener.java
index 595bf2d..bbb5bfa 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/AddDeleteMoveListener.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/AddDeleteMoveListener.java
@@ -212,7 +212,7 @@
 					ICVSFolder folder = CVSWorkspaceRoot.getCVSFolderFor(resource.getProject());
 					try {
 						if (! folder.isCVSFolder()) {
-							Team.removeNatureFromProject(resource.getProject(), CVSProviderPlugin.getTypeId(), null);
+							RepositoryProvider.unmap(resource.getProject());
 						}
 					} catch (TeamException e) {
 						CVSProviderPlugin.log(e.getStatus());
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ProjectDescriptionManager.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ProjectDescriptionManager.java
index 032a960..c9b134a 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ProjectDescriptionManager.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ProjectDescriptionManager.java
@@ -168,25 +168,11 @@
 					// Other natures are still set
 					Util.logError(Policy.bind("ProjectDescriptionManager.unableToSetDescription"), ex); //$NON-NLS-1$
 				}
-				// Make sure we have the cvs nature (the above read may have removed it)
-				if (!project.getDescription().hasNature(CVSProviderPlugin.getTypeId())) {
-					try {
-						// TeamPlugin.addNatureToProject(project, CVSProviderPlugin.getTypeId(), progress);
-						
-						// Set the nature manually in order to override any .project file
-						IProjectDescription description = project.getDescription();
-						String[] prevNatures= description.getNatureIds();
-						String[] newNatures= new String[prevNatures.length + 1];
-						System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length);
-						newNatures[prevNatures.length]= CVSProviderPlugin.getTypeId();
-						description.setNatureIds(newNatures);
-						project.setDescription(description, IResource.FORCE | IResource.KEEP_HISTORY, progress);
-					}  catch (CoreException ex) {
-						// Failing to set the provider is probably due to a missing nature.
-						// Other natures are still set
-						Util.logError(Policy.bind("ProjectDescriptionManager.unableToSetDescription"), ex); //$NON-NLS-1$
-					}
-				}
+
+				// Make sure we are still marked as a CVS project
+				if(RepositoryProvider.getProvider(project, CVSProviderPlugin.getTypeId()) == null)
+					RepositoryProvider.map(project, CVSProviderPlugin.getTypeId());
+
 				// Mark the .vcm_meta file with a problem marker
 				if (project.getFile(CORE_PROJECT_DESCRIPTION_PATH).exists()) {
 					createVCMMetaMarker(descResource);
diff --git a/bundles/org.eclipse.team.cvs.ui/plugin.properties b/bundles/org.eclipse.team.cvs.ui/plugin.properties
index 905c558..ebeb3eb 100644
--- a/bundles/org.eclipse.team.cvs.ui/plugin.properties
+++ b/bundles/org.eclipse.team.cvs.ui/plugin.properties
@@ -41,6 +41,9 @@
 ContentAction.label=Compare File Contents
 ContentAction.tooltip=Use File Contents Instead of Timestamps When Comparing
 
+ConvertNature.label=Convert Provider from Nature
+ConvertNature.tooltip=Converts a project from using natures for providers to not doing so
+
 CopyRepositoryNameAction.label=&Copy to Clipboard
 CopyRepositoryNameAction.tooltip=Copy Repository Names to Clipboard
 
diff --git a/bundles/org.eclipse.team.cvs.ui/plugin.xml b/bundles/org.eclipse.team.cvs.ui/plugin.xml
index 37de63a..b88cc2d 100644
--- a/bundles/org.eclipse.team.cvs.ui/plugin.xml
+++ b/bundles/org.eclipse.team.cvs.ui/plugin.xml
@@ -55,8 +55,8 @@
             class="org.eclipse.team.internal.ccvs.ui.CVSFilePropertiesPage"
             id="org.eclipse.team.ccvs.ui.propertyPages.CVSFilePropertiesPage">
          <filter
-               name="projectNature"
-               value="org.eclipse.team.cvs.core.cvsnature">
+               name="projectPersistentProperty"
+               value="org.eclipse.team.core.repository=org.eclipse.team.cvs.core.cvsnature">
          </filter>
       </page>
       <page
@@ -66,8 +66,8 @@
             class="org.eclipse.team.internal.ccvs.ui.CVSFolderPropertiesPage"
             id="org.eclipse.team.ccvs.ui.propertyPages.CVSFolderPropertiesPage">
          <filter
-               name="projectNature"
-               value="org.eclipse.team.cvs.core.cvsnature">
+               name="projectPersistentProperty"
+               value="org.eclipse.team.core.repository=org.eclipse.team.cvs.core.cvsnature">
          </filter>
       </page>
       <page
@@ -77,8 +77,8 @@
             class="org.eclipse.team.internal.ccvs.ui.CVSProjectPropertiesPage"
             id="org.eclipse.team.ccvs.ui.propertyPages.CVSProjectPropertiesPage">
          <filter
-               name="projectNature"
-               value="org.eclipse.team.cvs.core.cvsnature">
+               name="projectPersistentProperty"
+               value="org.eclipse.team.core.repository=org.eclipse.team.cvs.core.cvsnature">
          </filter>
       </page>
       <page
@@ -96,8 +96,8 @@
             adaptable="true"
             id="org.eclipse.team.ccvs.ui.IFileContributions">
          <filter
-               name="projectNature"
-               value="org.eclipse.team.cvs.core.cvsnature">
+               name="projectPersistentProperty"
+               value="org.eclipse.team.core.repository=org.eclipse.team.cvs.core.cvsnature">
          </filter>
          <action
                label="%IgnoreAction.label"
@@ -140,8 +140,8 @@
             adaptable="true"
             id="org.eclipse.team.ccvs.ui.ResourceContributions">
          <filter
-               name="projectNature"
-               value="org.eclipse.team.cvs.core.cvsnature">
+               name="projectPersistentProperty"
+               value="org.eclipse.team.core.repository=org.eclipse.team.cvs.core.cvsnature">
          </filter>
          <action
                label="%SetKeywordSubstitutionAction.label"
@@ -236,6 +236,10 @@
                id="org.eclipse.team.ccvs.ui.sync">
          </action>
       </objectContribution>
+
+      <!-- ************** Project Menu *************** -->
+
+      
       <objectContribution
             objectClass="org.eclipse.core.resources.IProject"
             adaptable="true"
@@ -245,6 +249,23 @@
                value="org.eclipse.team.cvs.core.cvsnature">
          </filter>
          <action
+               label="%ConvertNature.label"
+               tooltip="%ConvertNature.tooltip"
+               class="org.eclipse.team.internal.ui.NatureToPropertyAction"
+               menubarPath="team.main/projectGroup"
+               id="org.eclipse.team.ccvs.ui.convertNature">
+         </action>
+      </objectContribution>
+
+      <objectContribution
+            objectClass="org.eclipse.core.resources.IProject"
+            adaptable="true"
+            id="org.eclipse.team.ccvs.ui.IProjectContributions">
+         <filter
+               name="projectPersistentProperty"
+               value="org.eclipse.team.core.repository=org.eclipse.team.cvs.core.cvsnature">
+         </filter>
+         <action
                label="%UnmanageFolder.label"
                tooltip="%UnmanageFolder.tooltip"
                class="org.eclipse.team.internal.ccvs.ui.actions.UnmanageAction"
@@ -257,8 +278,8 @@
             adaptable="true"
             id="org.eclipse.team.ccvs.ui.IFolderContributions">
          <filter
-               name="projectNature"
-               value="org.eclipse.team.cvs.core.cvsnature">
+               name="projectPersistentProperty"
+               value="org.eclipse.team.core.repository=org.eclipse.team.cvs.core.cvsnature">
          </filter>
          <action
                label="%IgnoreAction.label"
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/UnmanageAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/UnmanageAction.java
index c834e67..32e8add 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/UnmanageAction.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/UnmanageAction.java
@@ -162,7 +162,7 @@
 								}
 							} finally {
 								// We want to remove the nature even if the unmanage operation fails
-								Team.removeNatureFromProject((IProject)resource, CVSProviderPlugin.getTypeId(), Policy.subMonitorFor(subMonitor, 10));							
+								RepositoryProvider.unmap((IProject)resource);							
 							}
 						}											
 					}