This commit was manufactured by cvs2svn to create branch 'FTP_branch'.
Sprout from master 2002-05-16 14:45:18 UTC Michael Valenta <mvalenta> '*** empty log message ***'
Cherrypick from master 2002-05-15 21:31:25 UTC Michael Valenta <mvalenta> '*** empty log message ***':
tests/org.eclipse.team.tests.core/.classpath
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.jar
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/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/NavigationAction.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/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.jar
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/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/NavigationAction.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/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
bundles/org.eclipse.team.core/.classpath
bundles/org.eclipse.team.core/.cvsignore
bundles/org.eclipse.team.core/.options
bundles/org.eclipse.team.core/.project
bundles/org.eclipse.team.core/README
bundles/org.eclipse.team.core/about.html
bundles/org.eclipse.team.core/build.properties
bundles/org.eclipse.team.core/buildnotes_team.html
bundles/org.eclipse.team.core/doc/hglegal.htm
bundles/org.eclipse.team.core/doc/ngibmcpy.gif
bundles/org.eclipse.team.core/doc/org_eclipse_team_core.html
bundles/org.eclipse.team.core/doc/org_eclipse_team_core_fileTypes.html
bundles/org.eclipse.team.core/doc/org_eclipse_team_core_ignore.html
bundles/org.eclipse.team.core/doc/org_eclipse_team_core_projectSets.html
bundles/org.eclipse.team.core/plugin.properties
bundles/org.eclipse.team.core/plugin.xml
bundles/org.eclipse.team.core/src/org/eclipse/team/core/IFileTypeInfo.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/IIgnoreInfo.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/IProjectSetSerializer.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/Team.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/TeamException.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/sync/ILocalSyncElement.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/sync/IRemoteResource.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/sync/IRemoteSyncElement.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/sync/LocalSyncElement.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/sync/RemoteSyncElement.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/target/IRemoteTargetResource.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/target/ISiteFactory.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/target/ISiteListener.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/target/Site.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/target/TargetManager.java
bundles/org.eclipse.team.core/src/org/eclipse/team/core/target/TargetProvider.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/Assert.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/DefaultFileModificationValidator.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/DefaultMoveDeleteHook.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/FileModificationValidatorManager.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/MoveDeleteManager.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/Policy.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/StringMatcher.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/TeamPlugin.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/messages.properties
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/simpleAccess/SimpleAccessOperations.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/streams/CRLFtoLFInputStream.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/streams/LFtoCRLFInputStream.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/streams/PollingInputStream.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/streams/PollingOutputStream.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/streams/ProgressMonitorInputStream.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/streams/SizeConstrainedInputStream.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/streams/TimeoutInputStream.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/streams/TimeoutOutputStream.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/BaseIdentifierNotInitializedException.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/ITeamStatusConstants.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/LocationMapping.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/ResourceState.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/StreamUtil.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/Symmetria.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/SynchronizedTargetProvider.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/UrlUtil.java
bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/messages.properties
bundles/org.eclipse.team.cvs.core/.classpath
bundles/org.eclipse.team.cvs.core/.cvsignore
bundles/org.eclipse.team.cvs.core/.options
bundles/org.eclipse.team.cvs.core/.project
bundles/org.eclipse.team.cvs.core/about.html
bundles/org.eclipse.team.cvs.core/build.properties
bundles/org.eclipse.team.cvs.core/buildnotes_cvs.html
bundles/org.eclipse.team.cvs.core/doc/hglegal.htm
bundles/org.eclipse.team.cvs.core/doc/ngibmcpy.gif
bundles/org.eclipse.team.cvs.core/doc/org_eclipse_team_cvs_core.html
bundles/org.eclipse.team.cvs.core/plugin.properties
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/CVSProviderPlugin.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSStatus.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTag.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/DateUtil.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSFile.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSFolder.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSListener.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSProvider.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSRemoteFile.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSRemoteFolder.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSRemoteResource.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSRepositoryLocation.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSResource.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSResourceVisitor.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ICVSRunnable.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/IConnectionMethod.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/ILogEntry.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/IResourceStateChangeListener.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/IServerConnection.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/IUserAuthenticator.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/IUserInfo.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/Policy.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/AbstractMessageCommand.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/AbstractStructureVisitor.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Add.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/AddStructureVisitor.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Admin.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/CheckedInHandler.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Checkout.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Command.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Commit.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/CopyHandler.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Diff.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/DiffStructureVisitor.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ExpandModules.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/FileStructureVisitor.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Import.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ImportStructureVisitor.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Log.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/MTHandler.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ModTimeHandler.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ModifiedFileSender.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ModuleExpansionHandler.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/NewEntryHandler.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/PruneFolderVisitor.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/RTag.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/RemoteCommand.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Remove.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/RemoveEntryHandler.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/RemovedHandler.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Request.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ResponseHandler.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Session.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/StaticHandler.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Status.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/StickyHandler.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Tag.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/TagFileSender.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Update.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/UpdatedHandler.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ValidRequests.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/ValidRequestsHandler.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Version.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/AdminKSubstListener.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/DiffListener.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/ICommandOutputListener.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/IConsoleListener.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/IStatusListener.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/IUpdateMessageListener.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/LogEntry.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/LogListener.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/ModuleDefinitionsListener.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/ModuleExpansion.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/StatusListener.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/TagListener.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/listeners/UpdateListener.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/connection/CVSAuthenticationException.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/connection/CVSCommunicationException.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/connection/CVSFileException.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/connection/CVSRepositoryLocation.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/connection/CVSServerException.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/connection/Connection.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/connection/ExtConnection.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/connection/ExtConnectionMethod.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/connection/PServerConnection.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/connection/PServerConnectionMethod.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/connection/UserInfo.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/CVSEntryLineTag.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/CVSLocalSyncElement.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/CVSRemoteSyncElement.java
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/EclipseFolder.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipsePhantomSynchronizer.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/EclipseSynchronizer.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFile.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFolder.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFolderTree.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/RemoteFolderTreeBuilder.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/resources/RemoteResource.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/FolderSyncInfo.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/MutableResourceSyncInfo.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/ReentrantLock.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/syncinfo/ResourceSyncInfo.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/Assert.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/AssertionFailedException.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/CVSDateFormatter.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/EmptyTokenizer.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/FileNameMatcher.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/InfiniteSubProgressMonitor.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/MoveDeleteHook.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/ProjectDescriptionContentHandler.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/ProjectDescriptionWriter.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ReplaceWithBaseVisitor.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/StringMatcher.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/SyncFileChangeListener.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/SyncFileWriter.java
bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/Util.java
bundles/org.eclipse.team.cvs.ssh/.classpath
bundles/org.eclipse.team.cvs.ssh/.cvsignore
bundles/org.eclipse.team.cvs.ssh/.project
bundles/org.eclipse.team.cvs.ssh/about.html
bundles/org.eclipse.team.cvs.ssh/build.properties
bundles/org.eclipse.team.cvs.ssh/plugin.properties
bundles/org.eclipse.team.cvs.ssh/plugin.xml
bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Blowfish.java
bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Cipher.java
bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Client.java
bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/ClientPacket.java
bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Misc.java
bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Packet.java
bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/Policy.java
bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHMethod.java
bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHPlugin.java
bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/SSHServerConnection.java
bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/ServerPacket.java
bundles/org.eclipse.team.cvs.ssh/src/org/eclipse/team/internal/ccvs/ssh/messages.properties
bundles/org.eclipse.team.cvs.ui/.classpath
bundles/org.eclipse.team.cvs.ui/.cvsignore
bundles/org.eclipse.team.cvs.ui/.project
bundles/org.eclipse.team.cvs.ui/about.html
bundles/org.eclipse.team.cvs.ui/build.properties
bundles/org.eclipse.team.cvs.ui/help_contexts.xml
bundles/org.eclipse.team.cvs.ui/icons/basic/clcl16/clear_co.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/clcl16/newstream_wiz.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/clcl16/refresh.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/ctool16/checkout.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/cview16/console_view.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/cview16/history_view.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/cview16/repo_rep.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/glyphs/glyph1.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/glyphs/glyph2.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/glyphs/glyph3.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/glyphs/glyph4.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/glyphs/glyph5.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/glyphs/glyph6.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/glyphs/glyph7.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/glyphs/glyph8.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/obj16/branches_rep.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/obj16/module_rep.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/obj16/prjversions_rep.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/obj16/repository_rep.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/obj16/tag.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/obj16/versions_rep.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/ovr16/confauto_ov.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/ovr16/merged_ov.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/wizards/newconnect_wiz.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/wizards/newlocation_wiz.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/wizban/mergestream_wizban.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/wizban/newconnect_wizban.gif
bundles/org.eclipse.team.cvs.ui/icons/basic/wizban/newstream_wizban.gif
bundles/org.eclipse.team.cvs.ui/icons/full/clcl16/clear_co.gif
bundles/org.eclipse.team.cvs.ui/icons/full/clcl16/filter_history.gif
bundles/org.eclipse.team.cvs.ui/icons/full/clcl16/newstream_wiz.gif
bundles/org.eclipse.team.cvs.ui/icons/full/clcl16/refresh.gif
bundles/org.eclipse.team.cvs.ui/icons/full/ctool16/checkout.gif
bundles/org.eclipse.team.cvs.ui/icons/full/ctool16/contents.gif
bundles/org.eclipse.team.cvs.ui/icons/full/cview16/console_view.gif
bundles/org.eclipse.team.cvs.ui/icons/full/cview16/cvs_persp.gif
bundles/org.eclipse.team.cvs.ui/icons/full/cview16/history_view.gif
bundles/org.eclipse.team.cvs.ui/icons/full/cview16/repo_rep.gif
bundles/org.eclipse.team.cvs.ui/icons/full/glyphs/glyph1.gif
bundles/org.eclipse.team.cvs.ui/icons/full/glyphs/glyph2.gif
bundles/org.eclipse.team.cvs.ui/icons/full/glyphs/glyph3.gif
bundles/org.eclipse.team.cvs.ui/icons/full/glyphs/glyph4.gif
bundles/org.eclipse.team.cvs.ui/icons/full/glyphs/glyph5.gif
bundles/org.eclipse.team.cvs.ui/icons/full/glyphs/glyph6.gif
bundles/org.eclipse.team.cvs.ui/icons/full/glyphs/glyph7.gif
bundles/org.eclipse.team.cvs.ui/icons/full/glyphs/glyph8.gif
bundles/org.eclipse.team.cvs.ui/icons/full/obj16/branches_rep.gif
bundles/org.eclipse.team.cvs.ui/icons/full/obj16/module_rep.gif
bundles/org.eclipse.team.cvs.ui/icons/full/obj16/prjversions_rep.gif
bundles/org.eclipse.team.cvs.ui/icons/full/obj16/repository_rep.gif
bundles/org.eclipse.team.cvs.ui/icons/full/obj16/tag.gif
bundles/org.eclipse.team.cvs.ui/icons/full/obj16/versions_rep.gif
bundles/org.eclipse.team.cvs.ui/icons/full/ovr16/confauto_ov.gif
bundles/org.eclipse.team.cvs.ui/icons/full/ovr16/merged_ov.gif
bundles/org.eclipse.team.cvs.ui/icons/full/wizards/newconnect_wiz.gif
bundles/org.eclipse.team.cvs.ui/icons/full/wizards/newlocation_wiz.gif
bundles/org.eclipse.team.cvs.ui/icons/full/wizban/mergestream_wizban.gif
bundles/org.eclipse.team.cvs.ui/icons/full/wizban/newconnect_wizban.gif
bundles/org.eclipse.team.cvs.ui/icons/full/wizban/newstream_wizban.gif
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/AlternateUserValidationDialog.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/AvoidableMessageDialog.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/BranchPromptDialog.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSAbstractResolutionGenerator.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSAddResolutionGenerator.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSCompareEditorInput.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSCompareRevisionsInput.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSDecoration.java
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/CVSDecorator.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSDecoratorConfiguration.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSDecoratorPreferencesPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSFilePropertiesPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSFolderPropertiesPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSLocalCompareEditorInput.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSPerspective.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSPreferencesPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSProjectPropertiesPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSProjectSetSerializer.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSRemoveResolutionGenerator.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/CVSUIPlugin.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/Console.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/ConsoleDocument.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/ConsolePreferencesPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/DetailsDialog.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/ExtMethodPreferencePage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/HistoryDropAdapter.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/HistoryFilterDialog.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/HistorySorter.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/HistoryView.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/ICVSUIConstants.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/IDecorationNotifier.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/IHelpContextIds.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/IPromptCondition.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/IRepositoryListener.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/IgnoreResourcesDialog.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/OverlayIcon.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/OverlayIconCache.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/Policy.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/PromptingDialog.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/ReleaseCommentDialog.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/RemoteFileEditorInput.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/RemoteFileStorage.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/RepositoryManager.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/RepositorySorter.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/ResizableWizardDialog.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/ResourceEditionNode.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/ResourcePropertiesPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/SimpleContentProvider.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/TagAsVersionDialog.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/TagConfigurationDialog.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/TagSelectionDialog.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/TextViewerAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/TimeoutProgressMonitorDialog.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/UserValidationDialog.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/WorkbenchUserAuthenticator.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/AddAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/AddToWorkspaceAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/BranchAction.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/CheckoutAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CheckoutAsAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CommitAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CompareRemoteResourcesAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CompareWithRemoteAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CompareWithRevisionAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CompareWithTagAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ConfigureTagsFromRepoView.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ConfigureTagsFromRepoViewOnFolder.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ContentAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CopyRepositoryNameAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/DefineBranchAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/DefineVersionAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/GenerateDiffFileAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/IgnoreAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/MergeAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/MoveRemoteTagAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/NewCVSAnonEclipseConnection.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/NewCVSRepositoryAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/NewRepositoryAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/OpenLogEntryAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/OpenRemoteFileAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/RemoveBranchTagAction.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/ReplaceWithRemoteAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ReplaceWithTagAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/SetKeywordSubstitutionAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ShowCVSPerspectiveAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ShowHistoryAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/ShowResourceInHistoryAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/SyncAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/SyncOutgoingAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/TagAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/TagInRepositoryAction.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/actions/UpdateAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/merge/MergeEditorInput.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/merge/MergeWizard.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/merge/MergeWizardEndPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/merge/MergeWizardStartPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/merge/OverrideUpdateMergeAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/merge/ProjectElement.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/merge/TagElement.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/merge/TagRootElement.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/merge/UpdateMergeAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/merge/UpdateWithForcedJoinAction.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/model/AllRootsElement.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/BranchCategory.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/BranchTag.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSAdapterFactory.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSFileElement.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSFolderElement.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSModelElement.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSRemoteFilePropertySource.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSRemoteFolderPropertySource.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSRepositoryLocationPropertySource.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSRepositoryRootElement.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSResourceElement.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSRootFolderElement.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/GroupedByVersionCategory.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteContentProvider.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteFileElement.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteFolderElement.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteModule.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteResourceElement.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteVersionModule.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/VersionCategory.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/AddSyncAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/CVSCatchupReleaseViewer.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/CVSSyncCompareInput.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/CVSSyncCompareUnsharedInput.java
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/CommitSyncAction.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/sync/ForceUpdateSyncAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/IgnoreAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/MergeAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/ToolTipMessageDialog.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/sync/UpdateSyncAction.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CVSWizardPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/ConfigurationWizardAutoconnectPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/ConfigurationWizardMainPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/GenerateDiffFileOperation.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/GenerateDiffFileWizard.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/KSubstWizard.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/KSubstWizardDirtyFilesPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/KSubstWizardSelectionPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/KSubstWizardSharedFilesPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/KSubstWizardSummaryPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/ModuleSelectionPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/NewLocationWizard.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/RepositorySelectionPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/SharingWizard.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/SharingWizardFinishPage.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/UpdateWizard.java
bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/UpdateWizardPage.java
bundles/org.eclipse.team.ui/.classpath
bundles/org.eclipse.team.ui/.cvsignore
bundles/org.eclipse.team.ui/.project
bundles/org.eclipse.team.ui/README
bundles/org.eclipse.team.ui/about.html
bundles/org.eclipse.team.ui/build.properties
bundles/org.eclipse.team.ui/doc/hglegal.htm
bundles/org.eclipse.team.ui/doc/ngibmcpy.gif
bundles/org.eclipse.team.ui/doc/org_eclipse_team_ui.html
bundles/org.eclipse.team.ui/doc/org_eclipse_team_ui_configurationWizards.html
bundles/org.eclipse.team.ui/help_contexts.xml
bundles/org.eclipse.team.ui/icons/basic/clcl16/catchup_rls.gif
bundles/org.eclipse.team.ui/icons/basic/clcl16/catchuprelease_rls.gif
bundles/org.eclipse.team.ui/icons/basic/clcl16/conflict_synch.gif
bundles/org.eclipse.team.ui/icons/basic/clcl16/contents.gif
bundles/org.eclipse.team.ui/icons/basic/clcl16/ignorews_edit.gif
bundles/org.eclipse.team.ui/icons/basic/clcl16/incom_synch.gif
bundles/org.eclipse.team.ui/icons/basic/clcl16/outgo_synch.gif
bundles/org.eclipse.team.ui/icons/basic/clcl16/projectset.gif
bundles/org.eclipse.team.ui/icons/basic/clcl16/refresh.gif
bundles/org.eclipse.team.ui/icons/basic/clcl16/release_rls.gif
bundles/org.eclipse.team.ui/icons/basic/cview16/synch_synch.gif
bundles/org.eclipse.team.ui/icons/basic/wizban/newconnect_wizban.gif
bundles/org.eclipse.team.ui/icons/full/clcl16/catchup_rls.gif
bundles/org.eclipse.team.ui/icons/full/clcl16/catchuprelease_rls.gif
bundles/org.eclipse.team.ui/icons/full/clcl16/conflict_synch.gif
bundles/org.eclipse.team.ui/icons/full/clcl16/contents.gif
bundles/org.eclipse.team.ui/icons/full/clcl16/ignorews_edit.gif
bundles/org.eclipse.team.ui/icons/full/clcl16/incom_synch.gif
bundles/org.eclipse.team.ui/icons/full/clcl16/outgo_synch.gif
bundles/org.eclipse.team.ui/icons/full/clcl16/projectset.gif
bundles/org.eclipse.team.ui/icons/full/clcl16/refresh.gif
bundles/org.eclipse.team.ui/icons/full/clcl16/release_rls.gif
bundles/org.eclipse.team.ui/icons/full/cview16/synch_synch.gif
bundles/org.eclipse.team.ui/icons/full/ovr/checkedin_ov.gif
bundles/org.eclipse.team.ui/icons/full/ovr/checkedout_ov.gif
bundles/org.eclipse.team.ui/icons/full/ovr/dirty_ov.gif
bundles/org.eclipse.team.ui/icons/full/wizban/newconnect_wizban.gif
bundles/org.eclipse.team.ui/plugin.properties
bundles/org.eclipse.team.ui/plugin.xml
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigurationWizardElement.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigurationWizardNode.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigureProjectWizard.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ConfigureProjectWizardMainPage.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ExportProjectSetMainPage.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/IHelpContextIds.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/IgnorePreferencePage.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ImportProjectSetMainPage.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/Policy.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetContentHandler.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetExportWizard.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ProjectSetImportWizard.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamPreferencePage.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamWizardPage.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TextPreferencePage.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/UIConstants.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/ConfigureProjectAction.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/DeconfigureProjectAction.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/CatchupReleaseViewer.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/ChangedTeamContainer.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/ITeamNode.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/MergeResource.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/SyncCompareInput.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/SyncSet.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/SyncView.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/TeamFile.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/TypedBufferedContent.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/UnchangedTeamContainer.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/ConfigureTargetWizard.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/GetAction.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/MappingSelectionPage.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/PutAction.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/RemoteResourceElement.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteElement.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteExplorerView.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteLazyContentProvider.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteRootsElement.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteSelectionPage.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/SiteViewSorter.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetProjectAction.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetWizardPage.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/IConfigurationWizard.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/ISharedImages.java
bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/TeamImages.java
tests/org.eclipse.team.tests.cvs.core/.classpath
tests/org.eclipse.team.tests.cvs.core/.cvsignore
tests/org.eclipse.team.tests.cvs.core/.project
tests/org.eclipse.team.tests.cvs.core/about.html
tests/org.eclipse.team.tests.cvs.core/benchmark/readme.txt
tests/org.eclipse.team.tests.cvs.core/benchmark/team2.0/2002_02_26.integration.all.xml
tests/org.eclipse.team.tests.cvs.core/benchmark/team2.0/2002_03_19.integration.all.xml
tests/org.eclipse.team.tests.cvs.core/benchmark/team2.0/2002_04_24.milestone5.all.xml
tests/org.eclipse.team.tests.cvs.core/benchmark/team2.0/2002_04_25.integration.commandline.xml
tests/org.eclipse.team.tests.cvs.core/benchmark/teamui_benchmark.bat
tests/org.eclipse.team.tests.cvs.core/benchmark/vcm1.0/2002_02_26.integration.all.xml
tests/org.eclipse.team.tests.cvs.core/benchmark/vcmui_benchmark.bat
tests/org.eclipse.team.tests.cvs.core/build.properties
tests/org.eclipse.team.tests.cvs.core/plugin.xml
tests/org.eclipse.team.tests.cvs.core/readme.txt
tests/org.eclipse.team.tests.cvs.core/repository.properties
tests/org.eclipse.team.tests.cvs.core/resources/BenchmarkTest/benchmarkBig.zip
tests/org.eclipse.team.tests.cvs.core/resources/BenchmarkTest/benchmarkSmall.zip
tests/org.eclipse.team.tests.cvs.core/resources/BenchmarkTest/benchmarkTiny.zip
tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/CVSROOT/modules
tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/common/docs/readme.html
tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/common/macros/macro1
tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project1/f1/file-in-p1.txt
tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project2/file-p2.txt
tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project3/src/file.c
tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project3/src/file.h
tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project3/sub/file-sub.txt
tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project7/common/common.txt
tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project7/linux/linux.txt
tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project7/pc/pc.txt
tests/org.eclipse.team.tests.cvs.core/resources/CommandTest/project8/file-p8.txt
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/AllTeamAndCVSTests.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/AllTests.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CVSClientException.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CVSTestSetup.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/CommandLineCVSClient.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/EclipseCVSClient.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/EclipseTest.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/ICVSClient.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/JUnitTestCase.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/AllTestsCompatibility.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/BasicTest.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/CompatibleTestSetup.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/ConflictTest.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/ModuleTest.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/compatible/SameResultEnv.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/AllTestsCVSResources.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/BatchedTestSetup.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/EclipseFolderTest.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/EclipseSynchronizerTest.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/cvsresources/ResourceSyncInfoTest.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/AllTestsProvider.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/CVSProviderTest.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ImportTest.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ModuleTest.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/RemoteResourceTest.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/ResourceDeltaTest.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/core/provider/SyncElementTest.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/CVSUITestCase.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/DummyPromptCondition.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/EclipseUITestHarnessApplication.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/EmptyPerspective.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/FakeSelectionProvider.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/ICriteria.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestCase.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestResult.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/LoggingTestRunner.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/PerformanceTimer.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/SequenceGenerator.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/Util.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/Waiter.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/AllTests.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/BenchmarkTestSetup.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/CommandTests.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/SyncTests.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/benchmark/WorkflowTests.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/ArgumentParser.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/CaseEntry.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/DelimitedValuesWriter.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/GroupEntry.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/ILogEntryVisitor.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogEntry.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogEntryContainer.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/LogFormatterUIMain.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/MergeRunsVisitor.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintCSVDiffVisitor.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintCSVSummaryVisitor.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintDiffMain.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintDiffVisitor.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintSummaryMain.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintTextDiffVisitor.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/PrintTextSummaryVisitor.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/Result.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/RootEntry.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/TaskEntry.java
tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/logformatter/Util.java
tests/org.eclipse.team.tests.cvs.core/test.xml
diff --git a/bundles/org.eclipse.compare/.classpath b/bundles/org.eclipse.compare/.classpath
deleted file mode 100644
index d8b8ad0..0000000
--- a/bundles/org.eclipse.compare/.classpath
+++ /dev/null
@@ -1,12 +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 exported="true" kind="lib" path="compare.jar"/>
- <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 "Content". 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> "CPL". For purposes of the CPL, "Program" 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 "Other License", any modifications, enhancements and/or
-other code and/or documentation "Modifications" 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 c32a501..0000000
--- a/bundles/org.eclipse.compare/build.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-source.compare.jar = compare/
-bin.includes = icons/,\
- plugin.xml,\
- *.jar,\
- plugin.properties,\
- notice.html,\
- 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 a3c7fb7..0000000
--- a/bundles/org.eclipse.compare/buildnotes_compare.html
+++ /dev/null
@@ -1,812 +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 May 17th 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>
-
-<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.jar b/bundles/org.eclipse.compare/compare.jar
deleted file mode 100644
index 83bc3a2..0000000
--- a/bundles/org.eclipse.compare/compare.jar
+++ /dev/null
Binary files differ
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 666f99e..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareConfiguration.java
+++ /dev/null
@@ -1,422 +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));
- }
- }
-
- /**
- * 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 f9d371e..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
+++ /dev/null
@@ -1,744 +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))
- setDirty(e.getSource(), Utilities.getValue(e, false));
- }
- };
-
- 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.addSelectionChangedListener(
- new ISelectionChangedListener() {
- public void selectionChanged(SelectionChangedEvent e) {
- feed1(e.getSelection());
- }
- }
- );
-
- if (!structureCompareOnSingleClick()) {
- fStructureInputPane.addDoubleClickListener(
- new IDoubleClickListener() {
- public void doubleClick(DoubleClickEvent e) {
- feedDefault1(e.getSelection());
- }
- }
- );
- }
-
- // setup the wiring for second pane
- fStructurePane1.addSelectionChangedListener(
- new ISelectionChangedListener() {
- public void selectionChanged(SelectionChangedEvent e) {
- feed2(e.getSelection());
- }
- }
- );
-
- // setup the wiring for third pane
- fStructurePane2.addSelectionChangedListener(
- new ISelectionChangedListener() {
- public void selectionChanged(SelectionChangedEvent e) {
- feed3(e.getSelection());
- }
- }
- );
-
- // now deal with activation
- Listener activationListener= new Listener() {
- public void handleEvent(Event event) {
- if (event.widget instanceof CompareViewerSwitchingPane) {
- fFocusPane= (CompareViewerSwitchingPane) event.widget;
- }
- }
- };
- fStructureInputPane.addListener(SWT.Activate, activationListener);
- fStructurePane1.addListener(SWT.Activate, activationListener);
- fStructurePane2.addListener(SWT.Activate, activationListener);
- fContentInputPane.addListener(SWT.Activate, activationListener);
-
- if (fInput instanceof ICompareInput) {
- ICompareInput input2= (ICompareInput) fInput;
- fStructureInputPane.setInput(input2);
- feed1(fStructureInputPane.getSelection());
- }
-
- 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);
-
- 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);
- 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 5a39d9d..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java
+++ /dev/null
@@ -1,197 +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 {
-
- /** 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 91c0435..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
+++ /dev/null
@@ -1,283 +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 fOpenListeners= new ListenerList();
- private boolean fControlVisibility= false;
- private String fTitle;
- private String fTitleArgument;
-
-
- /**
- * 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));
-
- CompareNavigator.hookNavigation(this);
-
- addDisposeListener(
- new DisposeListener() {
- public void widgetDisposed(DisposeEvent e) {
- if (fViewer instanceof ISelectionProvider)
- ((ISelectionProvider) fViewer).removeSelectionChangedListener(CompareViewerSwitchingPane.this);
- if (fViewer instanceof StructuredViewer)
- ((StructuredViewer) fViewer).removeDoubleClickListener(CompareViewerSwitchingPane.this);
- 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)fViewer).removeDoubleClickListener(this);
-
- 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)fViewer).addDoubleClickListener(this);
-
- 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) {
- fOpenListeners.add(l);
- }
-
- public void removeDoubleClickListener(IDoubleClickListener l) {
- fOpenListeners.remove(l);
- }
-
- public void doubleClick(DoubleClickEvent event) {
- Object[] listeners= fOpenListeners.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 b6d9d96..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/EditionSelectionDialog.java
+++ /dev/null
@@ -1,1040 +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.dialogs.Dialog;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.jface.util.Assert;
-import org.eclipse.jface.dialogs.IDialogConstants;
-
-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 Dialog {
-
- /**
- * 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 ResourceBundle fBundle;
- 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);
- setShellStyle(SWT.CLOSE | SWT.APPLICATION_MODAL | SWT.RESIZE);
-
- fBundle= 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.
- *
- * @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 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 (! 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)
- * Returns the size initialized with the constructor.
- */
- protected Point getInitialSize() {
- Point size= new Point(Utilities.getInteger(fBundle, "width", 0), //$NON-NLS-1$
- Utilities.getInteger(fBundle, "height", 0)); //$NON-NLS-1$
-
- Shell shell= getParentShell();
- if (shell != null) {
- Point parentSize= shell.getSize();
- if (size.x <= 0)
- size.x= parentSize.x-300;
- if (size.y <= 0)
- size.y= parentSize.y-200;
- }
- if (size.x < 700)
- size.x= 700;
- if (size.y < 500)
- size.y= 500;
- return size;
- }
-
- /* (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/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 6d9b1b0..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
+++ /dev/null
@@ -1,3483 +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.text.MessageFormat;
-import java.lang.InterruptedException;
-
-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.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.ui.texteditor.AbstractTextEditor;
-
-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;
- /** if DEAD_STEP is true navigation with the next/previous buttons needs an extra step
- when wrapping around the beginning or end */
- private static final boolean DEAD_STEP= 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 to use
-
- private boolean fUseSystemBackground;
-
- private RGB fBackground;
- private RGB fForeground;
-
- 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 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);
-
- fUseSystemBackground= fPreferenceStore.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT);
-
- 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) {
- RGB fg= display.getSystemColor(SWT.COLOR_LIST_FOREGROUND).getRGB();
- if (fForeground == null || !fg.equals(fForeground)) {
- fForeground= fg;
- updateColors(fPreferenceStore, display);
- }
- }
-
- private void updateColors(IPreferenceStore ps, Display display) {
-
- fBackground= null;
- if (! fUseSystemBackground && ps != null)
- fBackground= createColor(ps, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND);
-
- if (fBackground == null)
- fBackground= display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).getRGB();
-
- Color color= null;
- if (! fUseSystemBackground)
- color= getColor(display, fBackground);
-
- if (fAncestor != null)
- fAncestor.setBackgroundColor(color);
- if (fLeft != null)
- fLeft.setBackgroundColor(color);
- if (fRight != null)
- fRight.setBackgroundColor(color);
-
-
- SELECTED_INCOMING= new RGB(0, 0, 255);
- INCOMING= interpolate(SELECTED_INCOMING, fBackground, 0.6);
- INCOMING_FILL= interpolate(SELECTED_INCOMING, fBackground, 0.97);
-
- SELECTED_CONFLICT= new RGB(255, 0, 0);
- CONFLICT= interpolate(SELECTED_CONFLICT, fBackground, 0.6);
- CONFLICT_FILL= interpolate(SELECTED_CONFLICT, fBackground, 0.97);
-
- SELECTED_OUTGOING= fForeground;
- OUTGOING= interpolate(SELECTED_OUTGOING, fBackground, 0.6);
- OUTGOING_FILL= interpolate(SELECTED_OUTGOING, fBackground, 0.97);
-
- // invalidate color cache
- fColors= null;
-
- updateAllDiffBackgrounds(display);
- }
-
- public void invalidateTextPresentation() {
- if (fAncestor != null)
- fAncestor.invalidateTextPresentation();
- if (fLeft != null)
- fLeft.invalidateTextPresentation();
- if (fRight != null)
- fRight.invalidateTextPresentation();
- }
-
- /**
- * Creates a color from the information stored in the given preference store.
- * Returns <code>null</code> if there is no such information available.
- */
- private static RGB createColor(IPreferenceStore store, String key) {
- if (!store.contains(key))
- return null;
- if (store.isDefault(key))
- return PreferenceConverter.getDefaultColor(store, key);
- return PreferenceConverter.getColor(store, key);
- }
-
- /**
- * 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) {
- 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);
- }
- };
- CompareNavigator.hookNavigation(canvas);
- 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);
- CompareNavigator.handleNavigationKeys(e);
- }
- }
- );
- 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 (! fUseSystemBackground)
- 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 (i == 7)
- i= 7;
- 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;
-
- 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;
- }
-
- private int findInsertionPosition(char type) {
- Object in= getInput();
- if (in instanceof ICompareInput) {
-
- ITypedElement other= null;
- ICompareInput input= (ICompareInput) in;
- 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) {
- ITypedElement parent= getParent(type);
- if (parent instanceof IDocumentRange) {
- newDoc= ((IDocumentRange)parent).getDocument();
- newDoc.addPositionCategory(IDocumentRange.RANGE_CATEGORY);
- Object input= getInput();
- range= getNewRange(type, input);
- if (range == null) {
- range= new Position(findInsertionPosition(type), 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)
- return contents.getBytes();
- }
- }
- 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);
- 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 if (key.equals(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND)) {
-
- if (DEBUG) System.out.println("prop: PREFERENCE_COLOR_BACKGROUND");
- updateColors(fPreferenceStore, fComposite.getDisplay());
-
- } else if (key.equals(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT)) {
-
- fUseSystemBackground= fPreferenceStore.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT);
- if (DEBUG) System.out.println("prop: PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT: " + fUseSystemBackground);
- updateColors(fPreferenceStore, fComposite.getDisplay());
-
- } 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.isControlOkToUse())
- fAncestor.getTextWidget().redraw();
- }
-
- if (Utilities.okToUse(fLeftCanvas))
- fLeftCanvas.redraw();
-
- if (fLeft.isControlOkToUse())
- fLeft.getTextWidget().redraw();
-
- if (Utilities.okToUse(getCenter()))
- getCenter().redraw();
-
- if (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= fBackground;
-
- 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
-
- 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) {
- if (wrap) {
- Control c= getControl();
- if (Utilities.okToUse(c))
- c.getDisplay().beep();
- if (DEAD_STEP)
- return true;
- if (fChangeDiffs != null && fChangeDiffs.size() > 0) {
- if (down)
- diff= (Diff) fChangeDiffs.get(0);
- else
- diff= (Diff) fChangeDiffs.get(fChangeDiffs.size()-1);
- }
- } else
- return true;
- }
-
- setCurrentDiff(diff, true);
-
- if (diff != null && diff.fDirection == RangeDifference.ANCESTOR
- && !getAncestorEnabled())
- continue;
-
- break;
- }
-
- 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;
-
- 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 7e8e9f1..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
+++ /dev/null
@@ -1,125 +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)) {
- IFile file= dialog.getSelectedFile();
- IFileState fileState= dialog.getSelectedFileState();
- if (file != null && fileState != null) {
- try {
- updateWorkspace(bundle, parentShell, file, fileState);
-
- } 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 IFile file, final IFileState fileState)
- 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);
-
- createContainers(file);
- file.create(fileState.getContents(), false, pm);
-
- } 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 21a2bb1..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-# =====================================
-# (c) Copyright IBM Corp. 2000, 2001.
-# All Rights Reserved.
-# =====================================
-
-# @(#)AddFromHistoryAction.properties
-#
-# Resources for AddFromHistoryAction.java
-
-title= Add 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
-
-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= Add
-
-noLocalHistoryError= No local history available for selected resource.
-replaceError=Can''t replace resource (reason: {0}).
-
-taskName=Adding
\ 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 8239b27..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java
+++ /dev/null
@@ -1,333 +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.GridData;
-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 org.eclipse.jface.dialogs.Dialog {
-
- 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();
- }
- }
-
- private CompareConfiguration fCompareConfiguration;
- private ResourceBundle fBundle;
- private HistoryInput fSelectedItem;
-
- // 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);
- setShellStyle(SWT.CLOSE | SWT.APPLICATION_MODAL | SWT.RESIZE);
-
- fBundle= 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[] files) {
-
- 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);
-
- 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(file);
- }
- }
-
- open();
-
- return (getReturnCode() == OK) && (fSelectedItem != null);
- }
-
- IFile getSelectedFile() {
- if (fSelectedItem != null)
- return fSelectedItem.fFile;
- return null;
- }
-
- IFileState getSelectedFileState() {
- if (fSelectedItem != null)
- return fSelectedItem.fFileState;
- return null;
- }
-
- 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);
-
- fMemberPane= new CompareViewerPane(hsplitter, SWT.BORDER | SWT.FLAT);
- 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);
-
- 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 IFile) {
- IFile file= (IFile) data;
- IFileState[] states= null;
- try {
- states= file.getHistory(new NullProgressMonitor());
- } catch (CoreException ex) {
- }
-
- 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.removeAll();
- for (int i= 0; i < states.length; i++) {
- addEdition(new HistoryInput(file, states[i]));
- }
- }
- }
- }
-
- /**
- * Adds the given Pair to the edition tree.
- * It takes care of creating tree nodes for different dates.
- */
- private void addEdition(HistoryInput input) {
- 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];
-
- boolean first= lastDay == null;
-
- 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 (first) {
- 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;
- }
-
- private void feedContent(Widget w) {
- if (fContentPane != null && !fContentPane.isDisposed()) {
- Object o= w.getData();
- if (o instanceof HistoryInput) {
- fSelectedItem= (HistoryInput) o;
- fContentPane.setInput(fSelectedItem);
- fContentPane.setText(getEditionLabel(fSelectedItem));
- fContentPane.setImage(fTimeImage);
- } else {
- fSelectedItem= null;
- fContentPane.setInput(null);
- }
- }
- if (fCommitButton != null)
- fCommitButton.setEnabled(fSelectedItem != 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)
- * Returns the size initialized with the constructor.
- */
- protected Point getInitialSize() {
- Point size= new Point(Utilities.getInteger(fBundle, "width", 0), //$NON-NLS-1$
- Utilities.getInteger(fBundle, "height", 0)); //$NON-NLS-1$
-
- Shell shell= getParentShell();
- if (shell != null) {
- Point parentSize= shell.getSize();
- if (size.x <= 0)
- size.x= parentSize.x-300;
- if (size.y <= 0)
- size.y= parentSize.y-200;
- }
- if (size.x < 700)
- size.x= 700;
- if (size.y < 500)
- size.y= 500;
- return size;
- }
-
- /* (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);
- }
-}
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 390adc1..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
+++ /dev/null
@@ -1,121 +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$
- CompareNavigator.hookNavigation(fControl);
-
- 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 84e19c6..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java
+++ /dev/null
@@ -1,132 +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.Point;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.layout.*;
-
-import org.eclipse.jface.dialogs.*;
-import org.eclipse.jface.util.Assert;
-import org.eclipse.jface.util.PropertyChangeEvent;
-
-import org.eclipse.ui.actions.WorkspaceModifyOperation;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.OperationCanceledException;
-
-import org.eclipse.compare.CompareEditorInput;
-import org.eclipse.jface.util.IPropertyChangeListener;
-
-
-public class CompareDialog extends Dialog implements IPropertyChangeListener {
-
- private CompareEditorInput fCompareEditorInput;
- private Button fCommitButton;
-
-
- CompareDialog(Shell shell, CompareEditorInput input) {
- super(shell);
- setShellStyle(SWT.CLOSE | SWT.APPLICATION_MODAL | SWT.RESIZE);
-
- 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.
- */
- protected Point getInitialSize() {
- Point size= new Point(0, 0);
- Shell shell= getParentShell();
- if (shell != null) {
- Point parentSize= shell.getSize();
- size.x= parentSize.x-100;
- size.y= parentSize.y-100;
- }
- if (size.x < 800)
- size.x= 800;
- if (size.y < 600)
- size.y= 600;
- return size;
- }
-
- /* (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 3fe72b1..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
+++ /dev/null
@@ -1,66 +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;
-
- public CompareEditorContributor() {
- ResourceBundle bundle= CompareUIPlugin.getResourceBundle();
- fIgnoreWhitespace= new IgnoreWhiteSpaceAction(bundle, null);
- fNext= new NavigationAction(bundle, true);
- fPrevious= new NavigationAction(bundle, false);
- }
-
- /*
- * @see EditorActionBarContributor#contributeToToolBar(IToolBarManager)
- */
- public void contributeToToolBar(IToolBarManager tbm) {
- tbm.add(new Separator());
- tbm.add(fIgnoreWhitespace);
- tbm.add(fNext);
- tbm.add(fPrevious);
- }
-
- 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) {
- CompareEditor editor= (CompareEditor) targetEditor;
- editor.setActionBars(getActionBars());
-
- 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 7302d5e..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties
+++ /dev/null
@@ -1,40 +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}
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 16df01c..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java
+++ /dev/null
@@ -1,130 +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.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();
- }
- }
- }
-
- 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;
- }
-
- public static void hookNavigation(final Control c) {
- c.addKeyListener(
- new KeyAdapter() {
- public void keyPressed(KeyEvent e) {
- handleNavigationKeys(e);
- }
- }
- );
- }
-
- public static void handleNavigationKeys(KeyEvent e) {
- if (e.character == ('E'-0x40)) {
- if (e.widget instanceof Control) {
- CompareNavigator nav= findNavigator((Control)e.widget);
- if (nav != null)
- nav.selectChange((e.stateMask & SWT.SHIFT) == 0);
- }
- }
- }
-
- 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 69fe23d..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
+++ /dev/null
@@ -1,412 +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$
-
- private WorkbenchChainedTextFontFieldEditor fFontEditor;
- private TextMergeViewer fPreviewViewer;
- private IPropertyChangeListener fPreferenceChangeListener;
- private CompareConfiguration fCompareConfiguration;
- private OverlayPreferenceStore fOverlayStore;
- private Map fCheckBoxes= new HashMap();
- private SelectionListener fCheckBoxListener;
- private Button fBackgroundDefaultRadioButton;
- private Button fBackgroundCustomRadioButton;
- private Button fBackgroundColorButton;
- private ColorEditor fBackgroundColorEditor;
-
-
- 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.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);
-
- 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();
-
- //fPreviewViewer.invalidateTextPresentation();
- }
-
- /*
- * @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$
-
- return composite;
- }
-
- private Control createTextComparePage(Composite parent) {
-
- Composite composite= new Composite(parent, SWT.NULL);
- GridLayout layout= new GridLayout();
- layout.numColumns= 1;
- composite.setLayout(layout);
-
- // background color
- Composite backgroundComposite= new Composite(composite, SWT.NULL);
- layout= new GridLayout();
- layout.marginHeight= 0;
- layout.marginWidth= 0;
- layout.numColumns= 2;
- backgroundComposite.setLayout(new RowLayout());
-
- Label label= new Label(backgroundComposite, SWT.NULL);
- label.setText(Utilities.getString("ComparePreferencePage.backgroundColor1.label")); //$NON-NLS-1$
-
- SelectionListener backgroundSelectionListener= new SelectionListener() {
- public void widgetSelected(SelectionEvent e) {
- boolean custom= fBackgroundCustomRadioButton.getSelection();
- fBackgroundColorButton.setEnabled(custom);
- fOverlayStore.setValue(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT, !custom);
- }
- public void widgetDefaultSelected(SelectionEvent e) {}
- };
-
- fBackgroundDefaultRadioButton= new Button(backgroundComposite, SWT.RADIO | SWT.LEFT);
- fBackgroundDefaultRadioButton.setText(Utilities.getString("ComparePreferencePage.backgroundColor2.label")); //$NON-NLS-1$
- fBackgroundDefaultRadioButton.addSelectionListener(backgroundSelectionListener);
-
- fBackgroundCustomRadioButton= new Button(backgroundComposite, SWT.RADIO | SWT.LEFT);
- fBackgroundCustomRadioButton.setText(Utilities.getString("ComparePreferencePage.backgroundColor3.label")); //$NON-NLS-1$
- fBackgroundCustomRadioButton.addSelectionListener(backgroundSelectionListener);
-
- fBackgroundColorEditor= new ColorEditor(backgroundComposite);
-
- fBackgroundColorButton= fBackgroundColorEditor.getButton();
- fBackgroundColorButton.addSelectionListener(
- new SelectionListener() {
- public void widgetDefaultSelected(SelectionEvent e) {
- // do nothing
- }
- public void widgetSelected(SelectionEvent e) {
- PreferenceConverter.setValue(fOverlayStore, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND, fBackgroundColorEditor.getColorValue());
- }
- }
- );
-
-
- // background color end
-
-
- 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));
- }
-
- RGB rgb= PreferenceConverter.getColor(fOverlayStore, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND);
- fBackgroundColorEditor.setColorValue(rgb);
- boolean default_= fOverlayStore.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT);
- fBackgroundDefaultRadioButton.setSelection(default_);
- fBackgroundCustomRadioButton.setSelection(!default_);
- fBackgroundColorButton.setEnabled(!default_);
- }
-
- // 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 e2a9876..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java
+++ /dev/null
@@ -1,859 +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(7);
- ArrayList result= new ArrayList(0);
- IWorkbench workbench= CompareUIPlugin.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];
- if (!result.contains(ep))
- 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 3f04535..0000000
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java
+++ /dev/null
@@ -1,241 +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.lang.reflect.InvocationTargetException;
-import java.util.ResourceBundle;
-
-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 void selectionChanged(IAction a, ISelection s) {
- fSelection= s;
- }
-
- public void run(IAction action) {
-
- Object[] s= Utilities.toArray(fSelection);
-
- for (int i= 0; i < s.length; i++) {
- Object o= s[i];
- if (o instanceof IFile) {
- doFromHistory((IFile)o);
- continue;
- }
- if (o instanceof IAdaptable) {
- IAdaptable a= (IAdaptable) o;
- Object adapter= a.getAdapter(IResource.class);
- if (adapter instanceof IFile) {
- doFromHistory((IFile)adapter);
- }
- continue;
- }
- }
- }
-
- 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;
- }
-}
-
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..00